Class | Sequel::Firebird::Database |
In: |
lib/sequel/adapters/firebird.rb
|
Parent: | Sequel::Database |
AUTO_INCREMENT | = | ''.freeze |
TEMPORARY | = | 'GLOBAL TEMPORARY '.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 16 16: def initialize(*args) 17: super 18: @primary_keys = {} 19: @primary_key_sequences = {} 20: end
# File lib/sequel/adapters/firebird.rb, line 22 22: def connect(server) 23: opts = server_opts(server) 24: 25: db = Fb::Database.new( 26: :database => "#{opts[:host]}:#{opts[:database]}", 27: :username => opts[:user], 28: :password => opts[:password]) 29: conn = db.connect 30: conn.downcase_names = true 31: conn 32: 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 46 46: def create_table(name, options={}, &block) 47: options = {:generator=>options} if options.is_a?(Schema::Generator) 48: generator = options[:generator] || Schema::Generator.new(self, &block) 49: drop_statement, create_statements = create_table_sql_list(name, generator, options) 50: (execute_ddl(drop_statement) rescue nil) if drop_statement 51: (create_statements + index_sql_list(name, generator.indexes)).each{|sql| execute_ddl(sql)} 52: end
# File lib/sequel/adapters/firebird.rb, line 54 54: def create_trigger(*args) 55: self << create_trigger_sql(*args) 56: end
# File lib/sequel/adapters/firebird.rb, line 58 58: def dataset(opts = nil) 59: Firebird::Dataset.new(self, opts) 60: end
# File lib/sequel/adapters/firebird.rb, line 62 62: def drop_sequence(name) 63: self << drop_sequence_sql(name) 64: end
# File lib/sequel/adapters/firebird.rb, line 66 66: def execute(sql, opts={}) 67: log_info(sql) 68: begin 69: synchronize(opts[:server]) do |conn| 70: r = conn.execute(sql) 71: yield(r) if block_given? 72: r 73: end 74: rescue => e 75: log_info(e.message) 76: raise_error(e, :classes=>[Fb::Error]) 77: end 78: end
Return primary key for the given table.
# File lib/sequel/adapters/firebird.rb, line 81 81: def primary_key(table, server=nil) 82: synchronize(server){|conn| primary_key_for_table(conn, table)} 83: 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 88 88: def primary_key_for_table(conn, table) 89: @primary_keys[quote_identifier(table)] ||= conn.table_primary_key(quote_identifier(table)) 90: end
# File lib/sequel/adapters/firebird.rb, line 92 92: def restart_sequence(*args) 93: self << restart_sequence_sql(*args) 94: end
# File lib/sequel/adapters/firebird.rb, line 96 96: def sequences(opts={}) 97: ds = self["rdb$generators""rdb$generators"].server(opts[:server]).filter("rdb$system_flag""rdb$system_flag" => 0).select("rdb$generator_name""rdb$generator_name") 98: block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r["rdb$generator_name""rdb$generator_name"])} 99: end
# File lib/sequel/adapters/firebird.rb, line 101 101: def tables(opts={}) 102: 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") 103: block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r["rdb$relation_name""rdb$relation_name"])} 104: end
# File lib/sequel/adapters/firebird.rb, line 106 106: def transaction(opts={}) 107: synchronize(opts[:server]) do |conn| 108: return yield(conn) if @transactions.include?(Thread.current) 109: log_info("Transaction.begin") 110: conn.transaction 111: begin 112: @transactions << Thread.current 113: yield(conn) 114: rescue ::Exception => e 115: log_info("Transaction.rollback") 116: conn.rollback 117: transaction_error(e, Fb::Error) 118: ensure 119: unless e 120: log_info("Transaction.commit") 121: conn.commit 122: end 123: @transactions.delete(Thread.current) 124: end 125: end 126: end