module Sequel::JDBC::H2::DatabaseMethods

Instance methods for H2 Database objects accessed via JDBC.

Constants

DATABASE_ERROR_REGEXPS
PRIMARY_KEY_INDEX_RE

Public Instance Methods

commit_prepared_transaction(transaction_id, opts=OPTS) click to toggle source

Commit an existing prepared transaction with the given transaction identifier string.

# File lib/sequel/adapters/jdbc/h2.rb, line 23
def commit_prepared_transaction(transaction_id, opts=OPTS)
  run("COMMIT TRANSACTION #{transaction_id}", opts)
end
database_type() click to toggle source

H2 uses the :h2 database type.

# File lib/sequel/adapters/jdbc/h2.rb, line 28
def database_type
  :h2
end
rollback_prepared_transaction(transaction_id, opts=OPTS) click to toggle source

Rollback an existing prepared transaction with the given transaction identifier string.

# File lib/sequel/adapters/jdbc/h2.rb, line 34
def rollback_prepared_transaction(transaction_id, opts=OPTS)
  run("ROLLBACK TRANSACTION #{transaction_id}", opts)
end
serial_primary_key_options() click to toggle source

H2 uses an IDENTITY type

# File lib/sequel/adapters/jdbc/h2.rb, line 39
def serial_primary_key_options
  {:primary_key => true, :type => :identity, :identity=>true}
end
supports_create_table_if_not_exists?() click to toggle source

H2 supports CREATE TABLE IF NOT EXISTS syntax.

# File lib/sequel/adapters/jdbc/h2.rb, line 44
def supports_create_table_if_not_exists?
  true
end
supports_prepared_transactions?() click to toggle source

H2 supports prepared transactions

# File lib/sequel/adapters/jdbc/h2.rb, line 49
def supports_prepared_transactions?
  true
end
supports_savepoints?() click to toggle source

H2 supports savepoints

# File lib/sequel/adapters/jdbc/h2.rb, line 54
def supports_savepoints?
  true
end

Private Instance Methods

alter_table_sql(table, op) click to toggle source

H2 needs to add a primary key column as a constraint

Calls superclass method
# File lib/sequel/adapters/jdbc/h2.rb, line 76
def alter_table_sql(table, op)
  case op[:op]
  when :add_column
    if (pk = op.delete(:primary_key)) || (ref = op.delete(:table))
      if pk
        op[:null] = false
      end

      sqls = [super(table, op)]

      if pk && op[:type] != :identity
        sqls << "ALTER TABLE #{quote_schema_table(table)} ADD PRIMARY KEY (#{quote_identifier(op[:name])})"
      end

      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)}".dup
    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
can_add_primary_key_constraint_on_nullable_columns?() click to toggle source

H2 does not allow adding primary key constraints to NULLable columns.

# File lib/sequel/adapters/jdbc/h2.rb, line 61
def can_add_primary_key_constraint_on_nullable_columns?
  false
end
commit_transaction(conn, opts=OPTS) click to toggle source

If the :prepare option is given and we aren't in a savepoint, prepare the transaction for a two-phase commit.

Calls superclass method
# File lib/sequel/adapters/jdbc/h2.rb, line 67
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
connection_pool_default_options() click to toggle source

Default to a single connection for a memory database.

Calls superclass method
# File lib/sequel/adapters/jdbc/h2.rb, line 126
def connection_pool_default_options
  o = super
  uri == 'jdbc:h2:mem:' ? o.merge(:max_connections=>1) : o
end
database_error_regexps() click to toggle source
# File lib/sequel/adapters/jdbc/h2.rb, line 138
def database_error_regexps
  DATABASE_ERROR_REGEXPS
end
last_insert_id(conn, opts=OPTS) click to toggle source

Use IDENTITY() to get the last inserted id.

# File lib/sequel/adapters/jdbc/h2.rb, line 143
def last_insert_id(conn, opts=OPTS)
  statement(conn) do |stmt|
    sql = 'SELECT IDENTITY();'
    rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
    rs.next
    rs.getLong(1)
  end
end
primary_key_index_re() click to toggle source
# File lib/sequel/adapters/jdbc/h2.rb, line 152
def primary_key_index_re
  PRIMARY_KEY_INDEX_RE
end
supports_named_column_constraints?() click to toggle source

H2 does not support named column constraints.

# File lib/sequel/adapters/jdbc/h2.rb, line 157
def supports_named_column_constraints?
  false
end
type_literal_generic_bignum_symbol(column) click to toggle source

Use BIGINT IDENTITY for identity columns that use bigint, fixes the case where primary_key :column, :type=>:Bignum is used.

Calls superclass method
# File lib/sequel/adapters/jdbc/h2.rb, line 163
def type_literal_generic_bignum_symbol(column)
  column[:identity] ? 'BIGINT IDENTITY' : super
end