Module: DataMapper::Adapters::Sqlite3Adapter::Migration::SQL

Included in:
DataMapper::Adapters::Sqlite3Adapter::Migration
Defined in:
lib/dm-core/adapters/sqlite3_adapter.rb

Instance Method Summary collapse

Instance Method Details

#create_table_statement(repository, model) ⇒ Object

TODO: move to dm-more/dm-migrations



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/dm-core/adapters/sqlite3_adapter.rb', line 52

def create_table_statement(repository, model)
  statement = <<-EOS.compress_lines
    CREATE TABLE #{quote_table_name(model.storage_name(repository.name))}
    (#{model.properties_with_subclasses(repository.name).map { |p| property_schema_statement(property_schema_hash(repository, p)) } * ', '}
  EOS

  # skip adding the primary key if one of the columns is serial.  In
  # SQLite the serial column must be the primary key, so it has already
  # been defined
  unless model.properties(repository.name).any? { |p| p.serial? }
    if (key = model.properties(repository.name).key).any?
      statement << ", PRIMARY KEY(#{key.map { |p| quote_column_name(p.field(repository.name)) } * ', '})"
    end
  end

  statement << ')'
  statement
end

#property_schema_statement(schema) ⇒ Object

TODO: move to dm-more/dm-migrations



72
73
74
75
76
# File 'lib/dm-core/adapters/sqlite3_adapter.rb', line 72

def property_schema_statement(schema)
  statement = super
  statement << ' PRIMARY KEY AUTOINCREMENT' if supports_serial? && schema[:serial?]
  statement
end

#sqlite_versionObject

TODO: move to dm-more/dm-migrations



79
80
81
# File 'lib/dm-core/adapters/sqlite3_adapter.rb', line 79

def sqlite_version
  @sqlite_version ||= query('SELECT sqlite_version(*)').first
end

#supports_serial?Boolean

TODO: move to dm-more/dm-migrations

Returns:

  • (Boolean)


47
48
49
# File 'lib/dm-core/adapters/sqlite3_adapter.rb', line 47

def supports_serial?
  sqlite_version >= '3.1.0'
end