Class: ActiveRecord::ConnectionAdapters::SQLite3Adapter

Inherits:
Object
  • Object
show all
Defined in:
lib/enum_column/sqlite3_adapter.rb

Instance Method Summary collapse

Instance Method Details

#__native_database_types_enumObject



4
# File 'lib/enum_column/sqlite3_adapter.rb', line 4

alias __native_database_types_enum native_database_types

#add_column_options!(sql, options) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/enum_column/sqlite3_adapter.rb', line 30

def add_column_options!(sql, options)
  unless sql =~ /\(32\)\('[^']+'/
    super(sql, options)
  else
    sql.gsub!(/("[^"]+")([^3]+32\))(.+)/, '\1\2 CHECK(\1 in \3)')
    super(sql, options)
  end
end

#columns(table_name, name = nil) ⇒ Object

:nodoc:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/enum_column/sqlite3_adapter.rb', line 12

def columns(table_name, name = nil)#:nodoc:
  constraints = { }
  @connection.execute "SELECT sql FROM sqlite_master WHERE name = '#{table_name}'" do |row|
    sql = row[0]
    sql.scan(/, \"(\w+)\" varchar\(32\) CHECK\(\"\w+\" in \(([^\)]+)\)/i) do |column, constraint|
      constraints[column] = constraint
    end
  end
  table_structure(table_name).map do |field|
    name = field['name']
    type = field['type']
    if (const = constraints[name])
      type = "enum(#{const.strip})"
    end
    SQLite3ColumnWithEnum.new(name, field['dflt_value'], type, field['notnull'] == "0")
  end
end

#native_database_typesObject

:nodoc



6
7
8
9
10
# File 'lib/enum_column/sqlite3_adapter.rb', line 6

def native_database_types #:nodoc
  types = __native_database_types_enum
  types[:enum] = { :name => "varchar(32)" }
  types
end