module Sequel::JDBC::SQLite::DatabaseMethods

Instance methods for SQLite Database objects accessed via JDBC.

Constants

DATABASE_ERROR_REGEXPS
FOREIGN_KEY_ERROR_RE
LAST_INSERT_ROWID

Public Instance Methods

foreign_key_list(table, opts=OPTS) click to toggle source

Swallow pointless exceptions when the foreign key list pragma doesn't return any rows.

# File lib/sequel/adapters/jdbc/sqlite.rb, line 26
def foreign_key_list(table, opts=OPTS)
  super
rescue Sequel::DatabaseError => e
  raise unless e.message =~ FOREIGN_KEY_ERROR_RE
  []
end
indexes(table, opts=OPTS) click to toggle source

Swallow pointless exceptions when the index list pragma doesn't return any rows.

Calls superclass method Sequel::SQLite::DatabaseMethods#indexes
# File lib/sequel/adapters/jdbc/sqlite.rb, line 35
def indexes(table, opts=OPTS)
  super
rescue Sequel::DatabaseError => e
  raise unless e.message =~ FOREIGN_KEY_ERROR_RE
  {}
end

Private Instance Methods

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/sqlite.rb, line 59
def connection_pool_default_options
  o = super
  uri == 'jdbc:sqlite::memory:' ? o.merge(:max_connections=>1) : o
end
database_error_regexps() click to toggle source
# File lib/sequel/adapters/jdbc/sqlite.rb, line 45
def database_error_regexps
  DATABASE_ERROR_REGEXPS
end
last_insert_id(conn, opts=OPTS) click to toggle source

Use last_insert_rowid() to get the last inserted id.

# File lib/sequel/adapters/jdbc/sqlite.rb, line 50
def last_insert_id(conn, opts=OPTS)
  statement(conn) do |stmt|
    rs = stmt.executeQuery(LAST_INSERT_ROWID)
    rs.next
    rs.getInt(1)
  end
end
setup_connection(conn) click to toggle source

Execute the connection pragmas on the connection.

Calls superclass method
# File lib/sequel/adapters/jdbc/sqlite.rb, line 65
def setup_connection(conn)
  conn = super(conn)
  statement(conn) do |stmt|
    connection_pragmas.each{|s| log_yield(s){stmt.execute(s)}}
  end
  conn
end
setup_type_convertor_map() click to toggle source

Use getLong instead of getInt for converting integers on SQLite, since SQLite does not enforce a limit of 2**32. Work around regressions in jdbc-sqlite 3.8.7 for date and blob types.

Calls superclass method
# File lib/sequel/adapters/jdbc/sqlite.rb, line 75
def setup_type_convertor_map
  super
  @type_convertor_map[Java::JavaSQL::Types::INTEGER] = @type_convertor_map[Java::JavaSQL::Types::BIGINT]
  @basic_type_convertor_map[Java::JavaSQL::Types::INTEGER] = @basic_type_convertor_map[Java::JavaSQL::Types::BIGINT]
  @type_convertor_map[Java::JavaSQL::Types::DATE] = lambda do |r, i|
    if v = r.getString(i)
      Sequel.string_to_date(v)
    end
  end
  @type_convertor_map[Java::JavaSQL::Types::BLOB] = lambda do |r, i|
    if v = r.getBytes(i)
      Sequel::SQL::Blob.new(String.from_java_bytes(v))
    elsif !r.wasNull
      Sequel::SQL::Blob.new('')
    end
  end
end