Class | Sequel::Firebird::Database |
In: |
lib/sequel/adapters/firebird.rb
|
Parent: | Sequel::Database |
AUTO_INCREMENT | = | ''.freeze |
Add the primary_keys and primary_key_sequences instance variables, so we can get the correct return values for inserted rows.
# File lib/sequel/adapters/firebird.rb, line 15 15: def initialize(*args) 16: super 17: @primary_keys = {} 18: @primary_key_sequences = {} 19: end
# File lib/sequel/adapters/firebird.rb, line 21 21: def connect(server) 22: opts = server_opts(server) 23: 24: db = Fb::Database.new( 25: :database => "#{opts[:host]}:#{opts[:database]}", 26: :username => opts[:user], 27: :password => opts[:password]) 28: conn = db.connect 29: conn.downcase_names = true 30: conn 31: end
Creates a table with the columns given in the provided block:
DB.create_table :posts do primary_key :id, :serial column :title, :text column :content, :text index :title end
See Schema::Generator. Firebird gets an override because of the mess of creating a generator for auto-incrementing primary keys.
# File lib/sequel/adapters/firebird.rb, line 45 45: def create_table(name, options={}, &block) 46: options = {:generator=>options} if options.is_a?(Schema::Generator) 47: statements = create_table_sql_list(name, *((options[:generator] ||= Schema::Generator.new(self, &block)).create_info << options)) 48: begin 49: execute_ddl(statements[1]) 50: rescue 51: nil 52: end if statements[1] 53: statements[0].flatten.each {|sql| execute_ddl(sql)} 54: end
# File lib/sequel/adapters/firebird.rb, line 56 56: def create_trigger(*args) 57: self << create_trigger_sql(*args) 58: end
# File lib/sequel/adapters/firebird.rb, line 60 60: def dataset(opts = nil) 61: Firebird::Dataset.new(self, opts) 62: end
# File lib/sequel/adapters/firebird.rb, line 64 64: def drop_sequence(name) 65: self << drop_sequence_sql(name) 66: end
# File lib/sequel/adapters/firebird.rb, line 68 68: def execute(sql, opts={}) 69: log_info(sql) 70: begin 71: synchronize(opts[:server]) do |conn| 72: r = conn.execute(sql) 73: yield(r) if block_given? 74: r 75: end 76: rescue => e 77: log_info(e.message) 78: raise_error(e, :classes=>[Fb::Error]) 79: end 80: end
Return primary key for the given table.
# File lib/sequel/adapters/firebird.rb, line 83 83: def primary_key(table, server=nil) 84: synchronize(server){|conn| primary_key_for_table(conn, table)} 85: end
Returns primary key for the given table. This information is cached, and if the primary key for a table is changed, the @primary_keys instance variable should be reset manually.
# File lib/sequel/adapters/firebird.rb, line 90 90: def primary_key_for_table(conn, table) 91: @primary_keys[quote_identifier(table)] ||= conn.table_primary_key(quote_identifier(table)) 92: end
# File lib/sequel/adapters/firebird.rb, line 94 94: def restart_sequence(*args) 95: self << restart_sequence_sql(*args) 96: end
# File lib/sequel/adapters/firebird.rb, line 98 98: def sequences(opts={}) 99: ds = self["rdb$generators""rdb$generators"].server(opts[:server]).filter("rdb$system_flag""rdb$system_flag" => 0).select("rdb$generator_name""rdb$generator_name") 100: block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r["rdb$generator_name""rdb$generator_name"])} 101: end
# File lib/sequel/adapters/firebird.rb, line 103 103: def tables(opts={}) 104: ds = self["rdb$relations""rdb$relations"].server(opts[:server]).filter("rdb$view_blr""rdb$view_blr" => nil, Sequel::SQL::Function.new(:COALESCE, "rdb$system_flag""rdb$system_flag", 0) => 0).select("rdb$relation_name""rdb$relation_name") 105: block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r["rdb$relation_name""rdb$relation_name"])} 106: end
# File lib/sequel/adapters/firebird.rb, line 108 108: def transaction(opts={}) 109: unless opts.is_a?(Hash) 110: Deprecation.deprecate('Passing an argument other than a Hash to Database#transaction', "Use DB.transaction(:server=>#{opts.inspect})") 111: opts = {:server=>opts} 112: end 113: synchronize(opts[:server]) do |conn| 114: return yield(conn) if @transactions.include?(Thread.current) 115: log_info("Transaction.begin") 116: conn.transaction 117: begin 118: @transactions << Thread.current 119: yield(conn) 120: rescue ::Exception => e 121: log_info("Transaction.rollback") 122: conn.rollback 123: transaction_error(e, Fb::Error) 124: ensure 125: unless e 126: log_info("Transaction.commit") 127: conn.commit 128: end 129: @transactions.delete(Thread.current) 130: end 131: end 132: end