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 22
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 27
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 33
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 38
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 43
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 48
def supports_prepared_transactions?
  true
end
supports_savepoints?() click to toggle source

H2 supports savepoints

# File lib/sequel/adapters/jdbc/h2.rb, line 53
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 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
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 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
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 111
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 123
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 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
primary_key_index_re() click to toggle source
# File lib/sequel/adapters/jdbc/h2.rb, line 137
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 142
def supports_named_column_constraints?
  false
end
type_literal_generic_bignum(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 148
def type_literal_generic_bignum(column)
  column[:identity] ? 'BIGINT IDENTITY' : super
end