class Baza::Driver::ActiveRecord
Attributes
cols[RW]
conn[R]
db[R]
driver_type[R]
indexes[RW]
sep_col[R]
sep_table[R]
sep_val[R]
symbolize[R]
tables[RW]
Public Class Methods
from_object(args)
click to toggle source
# File lib/baza/driver/active_record.rb, line 7 def self.from_object(args) if args[:object].class.name.include?("ActiveRecord::ConnectionAdapters") if args[:object].class.name.include?("ConnectionPool") object_to_use = args[:object].connection else object_to_use = args[:object] end return { type: :success, args: { type: :active_record, conn: object_to_use } } end nil end
new(db)
click to toggle source
# File lib/baza/driver/active_record.rb, line 27 def initialize(db) @db = db @conn = @db.opts.fetch(:conn) raise "No conn given" unless @conn conn_name = @conn.class.name.to_s.downcase if conn_name.include?("mysql2") require_relative "mysql2" require_relative "mysql2/result" @sep_database = "`" @sep_table = "`" @sep_col = "`" @sep_val = "'" @sep_index = "`" @driver_type = :mysql2 @result_constant = Baza::Driver::Mysql2::Result elsif conn_name.include?("mysql") unless RUBY_PLATFORM == "java" require_relative "mysql" require_relative "mysql/result" @result_constant = Baza::Driver::Mysql::Result end @sep_database = "`" @sep_table = "`" @sep_col = "`" @sep_val = "'" @sep_index = "`" @driver_type = :mysql elsif conn_name.include?("sqlite") @sep_database = "`" @sep_table = "`" @sep_col = "`" @sep_val = "'" @sep_index = "`" @driver_type = :sqlite3 elsif conn_name.include?("postgresqladapter") @sep_database = '"' @sep_table = '"' @sep_col = '"' @sep_index = '"' @sep_val = "'" @driver_type = :pg @result_constant = Baza::Driver::Pg::Result else raise "Unknown type: '#{conn_name}'" end @result_constant ||= Baza::Driver::ActiveRecord::Result if conn_name.include?("mysql") @db.opts[:db] ||= query("SELECT DATABASE()").fetch.fetch(:"DATABASE()") elsif @driver_type == :pg @conn.reconnect! unless postgres_connection_active? @db.opts[:db] ||= query("SELECT current_database()").fetch.values.first end end
Public Instance Methods
close()
click to toggle source
# File lib/baza/driver/active_record.rb, line 116 def close @conn.close end
escape(str)
click to toggle source
# File lib/baza/driver/active_record.rb, line 100 def escape(str) @conn.quote_string(str.to_s) end
escape_column(string)
click to toggle source
# File lib/baza/driver/active_record.rb, line 104 def escape_column(string) string = string.to_s raise "Invalid column-string: #{string}" if string.include?(@sep_col) string end
escape_table(string)
click to toggle source
# File lib/baza/driver/active_record.rb, line 110 def escape_table(string) string = string.to_s raise "Invalid column-string: #{string}" if string.include?(@sep_col) string end
postgres_connection_active?()
click to toggle source
# File lib/baza/driver/active_record.rb, line 88 def postgres_connection_active? @conn.active? rescue PG::ConnectionBad true end
query(sql)
click to toggle source
# File lib/baza/driver/active_record.rb, line 94 def query(sql) @result_constant.new(self, @conn.execute(sql)) end
Also aliased as: query_ubuf
save_model!(model, args = {})
click to toggle source
# File lib/baza/driver/active_record.rb, line 142 def save_model!(model, args = {}) raise ActiveRecord::InvalidRecord, model if (!args.key?(:validate) || args[:validate]) && !model.valid? attributes = {} model.changes.each do |column_name, value_array| attributes[column_name.to_s] = value_array.last end attributes = attributes.delete_if { |_key, value| value.nil? } if model.new_record? table_name = model.class.table_name if model.new_record? if args[:update_on_duplicate_key] id = @db.upsert_duplicate_key(table_name, attributes, {}, return_id: true) else id = @db.insert(table_name, attributes, return_id: true) end if id && id.to_i > 0 model.id = id else raise "Invalid ID: #{id}" unless id.to_i > 0 end else @db.update(table_name, attributes, id: model.id) end model.reload end
supports_multiple_databases?()
click to toggle source
# File lib/baza/driver/active_record.rb, line 138 def supports_multiple_databases? conn_name.include?("mysql") || @driver_type == :pg end
transaction() { |db| ... }
click to toggle source
# File lib/baza/driver/active_record.rb, line 120 def transaction if @driver_type == :mysql || @driver_type == :mysql2 || @driver_type == :pg query("START TRANSACTION") elsif @driver_type == :sqlite3 query("BEGIN TRANSACTION") else raise "Don't know how to start transaction" end begin yield @db query("COMMIT") rescue query("ROLLBACK") raise end end