Sha256: 60f5737efdc61dcb108d1c9eb99f01f90027e019234c4d67570deb1b35480153

Contents?: true

Size: 1.68 KB

Versions: 11

Compression:

Stored size: 1.68 KB

Contents

module ActiveRecord
  module ConnectionAdapters
    class SQLite3Adapter
      alias __native_database_types_enum native_database_types
      
      def native_database_types #:nodoc
        types = __native_database_types_enum
        types[:enum] = { :name => "varchar(32)" }
        types
      end

      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

      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
    end
    
    class SQLite3ColumnWithEnum < SQLiteColumn
      include ActiveRecordEnumerations::Column
      
      def initialize(name, default, sql_type = nil, null = true)
        if sql_type =~ /^enum/i
          values = sql_type.sub(/^enum\('([^)]+)'\)/i, '\1').split("','").map { |v| v.intern }
          default = default.intern if default and !default.empty?
        end
        super(name, default, sql_type, null, values)
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 3 rubygems

Version Path
smukherjee-openbill-0.1.5 vendor/plugins/enum-column/lib/enum/sqlite3_adapter.rb
smukherjee-openbill-0.1.6 vendor/plugins/enum-column/lib/enum/sqlite3_adapter.rb
smukherjee-openbill-0.1.7 vendor/plugins/enum-column/lib/enum/sqlite3_adapter.rb
enum_column-0.1.6 lib/enum_column/sqlite3_adapter.rb
enum_column-0.1.5 lib/enum_column/sqlite3_adapter.rb
enum_column-0.1.4 lib/enum_column/sqlite3_adapter.rb
enum_column-0.1.2 lib/enum_column/sqlite3_adapter.rb
enum_column-0.1.1 lib/enum/sqlite3_adapter.rb
enum_column-0.1.0 lib/enum/sqlite3_adapter.rb
openbill-0.1.5 vendor/plugins/enum-column/lib/enum/sqlite3_adapter.rb
openbill-0.1.6 vendor/plugins/enum-column/lib/enum/sqlite3_adapter.rb