Class Index [+]

Quicksearch

Sequel::Firebird::DatabaseMethods

Constants

AUTO_INCREMENT
TEMPORARY

Public Instance Methods

clear_primary_key(*tables) click to toggle source
   # File lib/sequel/adapters/shared/firebird.rb, line 7
7:       def clear_primary_key(*tables)
8:         tables.each{|t| @primary_keys.delete(dataset.send(:input_identifier, t))}
9:       end
create_trigger(*args) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 11
11:       def create_trigger(*args)
12:         self << create_trigger_sql(*args)
13:       end
database_type() click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 15
15:       def database_type
16:         :firebird
17:       end
drop_sequence(name) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 19
19:       def drop_sequence(name)
20:         self << drop_sequence_sql(name)
21:       end
primary_key(table) click to toggle source

Return primary key for the given table.

    # File lib/sequel/adapters/shared/firebird.rb, line 24
24:       def primary_key(table)
25:         t = dataset.send(:input_identifier, table)
26:         @primary_keys.fetch(t) do
27:           pk = fetch("SELECT RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS NATURAL JOIN RDB$RELATION_CONSTRAINTS WHERE RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND RDB$RELATION_NAME = ?", t).single_value
28:           @primary_keys[t] = dataset.send(:output_identifier, pk.rstrip) if pk
29:         end
30:       end
restart_sequence(*args) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 32
32:       def restart_sequence(*args)
33:         self << restart_sequence_sql(*args)
34:       end
sequences(opts={}) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 36
36:       def sequences(opts={})
37:         ds = self[:"rdb$generators"].server(opts[:server]).filter(:"rdb$system_flag" => 0).select(:"rdb$generator_name")
38:         block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r[:"rdb$generator_name"])}
39:       end
tables(opts={}) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 41
41:       def tables(opts={})
42:         tables_or_views(0, opts)
43:       end
views(opts={}) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 45
45:       def views(opts={})
46:         tables_or_views(1, opts)
47:       end

Private Instance Methods

alter_table_sql(table, op) click to toggle source

Use Firebird specific syntax for add column

    # File lib/sequel/adapters/shared/firebird.rb, line 52
52:       def alter_table_sql(table, op)
53:         case op[:op]
54:         when :add_column
55:           "ALTER TABLE #{quote_schema_table(table)} ADD #{column_definition_sql(op)}"
56:         when :drop_column
57:           "ALTER TABLE #{quote_schema_table(table)} DROP #{column_definition_sql(op)}"
58:         when :rename_column
59:           "ALTER TABLE #{quote_schema_table(table)} ALTER #{quote_identifier(op[:name])} TO #{quote_identifier(op[:new_name])}"
60:         when :set_column_type
61:           "ALTER TABLE #{quote_schema_table(table)} ALTER #{quote_identifier(op[:name])} TYPE #{type_literal(op)}"
62:         else
63:           super(table, op)
64:         end
65:       end
auto_increment_sql() click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 67
67:       def auto_increment_sql()
68:         AUTO_INCREMENT
69:       end
create_sequence_sql(name, opts={}) click to toggle source
    # File lib/sequel/adapters/shared/firebird.rb, line 71
71:       def create_sequence_sql(name, opts={})
72:         "CREATE SEQUENCE #{quote_identifier(name)}"
73:       end
create_table_from_generator(name, generator, options) click to toggle source

Firebird gets an override because of the mess of creating a sequence and trigger for auto-incrementing primary keys.

    # File lib/sequel/adapters/shared/firebird.rb, line 77
77:       def create_table_from_generator(name, generator, options)
78:         drop_statement, create_statements = create_table_sql_list(name, generator, options)
79:         (execute_ddl(drop_statement) rescue nil) if drop_statement
80:         create_statements.each{|sql| execute_ddl(sql)}
81:       end
create_table_sql_list(name, generator, options={}) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 83
 83:       def create_table_sql_list(name, generator, options={})
 84:         statements = [create_table_sql(name, generator, options)]
 85:         drop_seq_statement = nil
 86:         generator.columns.each do |c|
 87:           if c[:auto_increment]
 88:             c[:sequence_name] ||= "seq_#{name}_#{c[:name]}"
 89:             unless c[:create_sequence] == false
 90:               drop_seq_statement = drop_sequence_sql(c[:sequence_name])
 91:               statements << create_sequence_sql(c[:sequence_name])
 92:               statements << restart_sequence_sql(c[:sequence_name], {:restart_position => c[:sequence_start_position]}) if c[:sequence_start_position]
 93:             end
 94:             unless c[:create_trigger] == false
 95:               c[:trigger_name] ||= "BI_#{name}_#{c[:name]}"
 96:               c[:quoted_name] = quote_identifier(c[:name])
 97:               trigger_definition =               begin                if ((new.#{c[:quoted_name]} is null) or (new.#{c[:quoted_name]} = 0)) then                begin                  new.#{c[:quoted_name]} = next value for #{c[:sequence_name]};                end              end
 98:               statements << create_trigger_sql(name, c[:trigger_name], trigger_definition, {:events => [:insert]})
 99:             end
100:           end
101:         end
102:         [drop_seq_statement, statements]
103:       end
create_trigger_sql(table, name, definition, opts={}) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 112
112:       def create_trigger_sql(table, name, definition, opts={})
113:         events = opts[:events] ? Array(opts[:events]) : [:insert, :update, :delete]
114:         whence = opts[:after] ? 'AFTER' : 'BEFORE'
115:         inactive = opts[:inactive] ? 'INACTIVE' : 'ACTIVE'
116:         position = opts.fetch(:position, 0)
117:         sql =           CREATE TRIGGER #{quote_identifier(name)} for #{quote_identifier(table)}          #{inactive} #{whence} #{events.map{|e| e.to_s.upcase}.join(' OR ')} position #{position}          as #{definition}
118:         sql
119:       end
drop_sequence_sql(name) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 125
125:       def drop_sequence_sql(name)
126:         "DROP SEQUENCE #{quote_identifier(name)}"
127:       end
remove_cached_schema(table) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 129
129:       def remove_cached_schema(table)
130:         clear_primary_key(table)
131:         super
132:       end
restart_sequence_sql(name, opts={}) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 134
134:       def restart_sequence_sql(name, opts={})
135:         seq_name = quote_identifier(name)
136:         "ALTER SEQUENCE #{seq_name} RESTART WITH #{opts[:restart_position]}"
137:       end
tables_or_views(type, opts) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 139
139:       def tables_or_views(type, opts)
140:         ds = self[:"rdb$relations"].server(opts[:server]).filter(:"rdb$relation_type" => type, Sequel::SQL::Function.new(:COALESCE, :"rdb$system_flag", 0) => 0).select(:"rdb$relation_name")
141:         ds.map{|r| ds.send(:output_identifier, r[:"rdb$relation_name"].rstrip)}
142:       end
type_literal_generic_string(column) click to toggle source
     # File lib/sequel/adapters/shared/firebird.rb, line 144
144:       def type_literal_generic_string(column)
145:         column[:text] ? :"BLOB SUB_TYPE TEXT" : super
146:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.