Class Sequel::Firebird::Database
In: lib/sequel/adapters/firebird.rb
Parent: Sequel::Database

Methods

Constants

AUTO_INCREMENT = ''.freeze

Public Class methods

Add the primary_keys and primary_key_sequences instance variables, so we can get the correct return values for inserted rows.

[Source]

    # File lib/sequel/adapters/firebird.rb, line 15
15:       def initialize(*args)
16:         super
17:         @primary_keys = {}
18:         @primary_key_sequences = {}
19:       end

Public Instance methods

[Source]

    # 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.

[Source]

    # 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

[Source]

    # File lib/sequel/adapters/firebird.rb, line 56
56:       def create_trigger(*args)
57:         self << create_trigger_sql(*args)
58:       end

[Source]

    # File lib/sequel/adapters/firebird.rb, line 60
60:       def dataset(opts = nil)
61:         Firebird::Dataset.new(self, opts)
62:       end

[Source]

    # File lib/sequel/adapters/firebird.rb, line 64
64:       def drop_sequence(name)
65:         self << drop_sequence_sql(name)
66:       end

[Source]

    # 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.

[Source]

    # 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.

[Source]

    # 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

[Source]

    # File lib/sequel/adapters/firebird.rb, line 94
94:       def restart_sequence(*args)
95:         self << restart_sequence_sql(*args)
96:       end

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Validate]