# File lib/sequel/adapters/jdbc/h2.rb, line 137 def primary_key_index_re PRIMARY_KEY_INDEX_RE end
module Sequel::JDBC::H2::DatabaseMethods
Constants
- DATABASE_ERROR_REGEXPS
- PRIMARY_KEY_INDEX_RE
Public Instance Methods
Commit an existing prepared transaction with the given transaction identifier string.
# File lib/sequel/adapters/jdbc/h2.rb, line 22 def commit_prepared_transaction(transaction_id, opts=OPTS) run("COMMIT TRANSACTION #{transaction_id}", opts) end
H2 uses the :h2 database type.
# File lib/sequel/adapters/jdbc/h2.rb, line 27 def database_type :h2 end
Rollback an existing prepared transaction with the given transaction identifier string.
# File lib/sequel/adapters/jdbc/h2.rb, line 33 def rollback_prepared_transaction(transaction_id, opts=OPTS) run("ROLLBACK TRANSACTION #{transaction_id}", opts) end
H2 uses an IDENTITY type
# File lib/sequel/adapters/jdbc/h2.rb, line 38 def serial_primary_key_options {:primary_key => true, :type => :identity, :identity=>true} end
H2 supports CREATE TABLE IF NOT EXISTS syntax.
# File lib/sequel/adapters/jdbc/h2.rb, line 43 def supports_create_table_if_not_exists? true end
H2 supports prepared transactions
# File lib/sequel/adapters/jdbc/h2.rb, line 48 def supports_prepared_transactions? true end
H2 supports savepoints
# File lib/sequel/adapters/jdbc/h2.rb, line 53 def supports_savepoints? true end
Private Instance Methods
H2 needs to add a primary key column as a constraint
# File lib/sequel/adapters/jdbc/h2.rb, line 70 def alter_table_sql(table, op) case op[:op] when :add_column if (pk = op.delete(:primary_key)) || (ref = op.delete(:table)) sqls = [super(table, op)] sqls << "ALTER TABLE #{quote_schema_table(table)} ADD PRIMARY KEY (#{quote_identifier(op[:name])})" if pk && op[:type] != :identity if ref op[:table] = ref sqls << "ALTER TABLE #{quote_schema_table(table)} ADD FOREIGN KEY (#{quote_identifier(op[:name])}) #{column_references_sql(op)}" end sqls else super(table, op) end when :rename_column "ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{quote_identifier(op[:name])} RENAME TO #{quote_identifier(op[:new_name])}" when :set_column_null "ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{quote_identifier(op[:name])} SET#{' NOT' unless op[:null]} NULL" when :set_column_type if sch = schema(table) if cs = sch.each{|k, v| break v if k == op[:name]; nil} cs = cs.dup cs[:default] = cs[:ruby_default] op = cs.merge!(op) end end sql = "ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{quote_identifier(op[:name])} #{type_literal(op)}" column_definition_order.each{|m| send(:"column_definition_#{m}_sql", sql, op)} sql when :drop_constraint if op[:type] == :primary_key "ALTER TABLE #{quote_schema_table(table)} DROP PRIMARY KEY" else super(table, op) end else super(table, op) end end
If the :prepare option is given and we aren't in a savepoint, prepare the transaction for a two-phase commit.
# File lib/sequel/adapters/jdbc/h2.rb, line 61 def commit_transaction(conn, opts=OPTS) if (s = opts[:prepare]) && savepoint_level(conn) <= 1 log_connection_execute(conn, "PREPARE COMMIT #{s}") else super end end
Default to a single connection for a memory database.
# File lib/sequel/adapters/jdbc/h2.rb, line 111 def connection_pool_default_options o = super uri == 'jdbc:h2:mem:' ? o.merge(:max_connections=>1) : o end
# File lib/sequel/adapters/jdbc/h2.rb, line 123 def database_error_regexps DATABASE_ERROR_REGEXPS end
Use IDENTITY() to get the last inserted id.
# File lib/sequel/adapters/jdbc/h2.rb, line 128 def last_insert_id(conn, opts=OPTS) statement(conn) do |stmt| sql = 'SELECT IDENTITY();' rs = log_yield(sql){stmt.executeQuery(sql)} rs.next rs.getInt(1) end end
H2 does not support named column constraints.
# File lib/sequel/adapters/jdbc/h2.rb, line 142 def supports_named_column_constraints? false end
Use BIGINT IDENTITY for identity columns that use bigint, fixes the case where primary_key :column, :type=>Bignum is used.
# File lib/sequel/adapters/jdbc/h2.rb, line 148 def type_literal_generic_bignum(column) column[:identity] ? 'BIGINT IDENTITY' : super end