class Sequel::Bigquery::Database
Public Class Methods
new(*args, **kawrgs)
click to toggle source
Calls superclass method
# File lib/sequel-bigquery.rb, line 19 def initialize(*args, **kawrgs) puts '.new' @orig_opts = kawrgs.fetch(:orig_opts) @sql_buffer = [] @sql_buffering = false super end
Public Instance Methods
connect(*_args)
click to toggle source
# File lib/sequel-bigquery.rb, line 27 def connect(*_args) puts '#connect' # self.input_identifier_meth = nil # self.identifier_output_method = nil config = @orig_opts.dup config.delete(:adapter) config.delete(:logger) bq_dataset_name = config.delete(:dataset) || config.delete(:database) @bigquery = Google::Cloud::Bigquery.new(config) # ObjectSpace.each_object(HTTPClient).each { |c| c.debug_dev = STDOUT } @bigquery.dataset(bq_dataset_name) || begin @loggers[0].debug('BigQuery dataset %s does not exist; creating it' % bq_dataset_name) @bigquery.create_dataset(bq_dataset_name) end .tap { puts '#connect end' } end
disconnect_connection(c)
click to toggle source
# File lib/sequel-bigquery.rb, line 45 def disconnect_connection(c) puts '#disconnect_connection' # c.disconnect end
execute(sql, opts=OPTS) { |results| ... }
click to toggle source
# File lib/sequel-bigquery.rb, line 50 def execute(sql, opts=OPTS) puts '#execute' log_query(sql) # require 'pry'; binding.pry if sql =~ /CREATE TABLE IF NOT EXISTS/i sql = sql.gsub(/\sdefault \S+/i) do warn_default_removal(sql) '' end if sql =~ /^update/i && sql !~ / where /i warn("Warning: Appended 'where 1 = 1' to query since BigQuery requires UPDATE statements to include a WHERE clause") sql = sql + ' where 1 = 1' end if sql =~ /^begin/i warn_transaction @sql_buffering = true end if @sql_buffering @sql_buffer << sql if sql =~ /^commit/i warn("Warning: Will now execute entire buffered transaction:\n" + @sql_buffer.join("\n")) else return [] end end synchronize(opts[:server]) do |conn| begin results = log_connection_yield(sql, conn) do sql_to_execute = @sql_buffer.any? ? @sql_buffer.join("\n") : sql conn.query(sql_to_execute) # raw_result = conn.query(sql_to_execute) # BQResult.new(raw_result) end require 'amazing_print' ap results if block_given? yield results else results end # TODO # rescue ::ODBC::Error, ArgumentError => e rescue Google::Cloud::InvalidArgumentError, ArgumentError => e raise_error(e) end end .tap do @sql_buffer = [] @sql_buffering = false end end
supports_create_table_if_not_exists?()
click to toggle source
# File lib/sequel-bigquery.rb, line 107 def supports_create_table_if_not_exists? true end
type_literal_generic_string(column)
click to toggle source
# File lib/sequel-bigquery.rb, line 111 def type_literal_generic_string(column) if column[:size] "string(#{column[:size]})" else :string end end
Private Instance Methods
adapter_initialize()
click to toggle source
def execute_dui(sql, opts=OPTS)
# require 'pry'; binding.pry synchronize(opts[:server]) do |conn| begin log_connection_yield(sql, conn){conn.do(sql)} # TODO: # rescue ::ODBC::Error, ArgumentError => e rescue ArgumentError => e raise_error(e) end end
end
# File lib/sequel-bigquery.rb, line 141 def adapter_initialize puts '#adapter_initialize' self.extension(:identifier_mangling) self.identifier_input_method = nil self.quote_identifiers = false end
connection_execute_method()
click to toggle source
# File lib/sequel-bigquery.rb, line 148 def connection_execute_method :query end
database_error_classes()
click to toggle source
# File lib/sequel-bigquery.rb, line 152 def database_error_classes # [::ODBC::Error] # TODO end
dataset_class_default()
click to toggle source
# File lib/sequel-bigquery.rb, line 157 def dataset_class_default Dataset end
disconnect_error?(e, opts)
click to toggle source
Calls superclass method
# File lib/sequel-bigquery.rb, line 172 def disconnect_error?(e, opts) # super || (e.is_a?(::ODBC::Error) && /\A08S01/.match(e.message)) super end
log_query(sql)
click to toggle source
Padded to horizontally align with post-execution log message which includes the execution time
# File lib/sequel-bigquery.rb, line 178 def log_query(sql) pad = ' ' puts Paint[pad + sql, :cyan, :bold] # @loggers[0]&.debug(' ' + sql) end
schema_parse_table(table_name, opts)
click to toggle source
# File lib/sequel-bigquery.rb, line 161 def schema_parse_table(table_name, opts) logger.debug(Paint['schema_parse_table', :red, :bold]) # require 'pry'; binding.pry @bigquery.datasets.map do |dataset| [ dataset.dataset_id, {} ] end end
warn(msg)
click to toggle source
# File lib/sequel-bigquery.rb, line 184 def warn(msg) @loggers[0].warn(Paint[msg, '#FFA500', :bold]) end
warn_default_removal(sql)
click to toggle source
# File lib/sequel-bigquery.rb, line 188 def warn_default_removal(sql) warn("Warning: Default removed from below query as it's not supported on BigQuery:\n%s" % sql) end
warn_transaction()
click to toggle source
# File lib/sequel-bigquery.rb, line 192 def warn_transaction warn('Warning: Transaction detected. This only supported on BigQuery in a script or session. Commencing buffering to run the whole transaction at once as a script upon commit. Note that no result data is returned while the transaction is open.') end