Sha256: 1afe85ef849f0c480d93ecea54d1467936f993198d6f3f2ee9d25289ca99a165

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

module DataMapper
  module Is::Reflective
    module SqliteAdapter
      include DataMapper

      def storages
        sql = <<-SQL
          SELECT name
          FROM sqlite_master
          WHERE type = 'table' AND NOT name = 'sqlite_sequence'
        SQL

        select(Ext::String.compress_lines(sql))
      end

      private
      def reflective_query_storage storage
        select('PRAGMA table_info(?)', storage)
      end

      def reflective_field_name field
        field.name
      end

      def reflective_primitive field
        field.type.gsub(/\(\d+\)/, '')
      end

      def reflective_attributes field, attrs = {}
        if field.pk != 0
          attrs[:key] = true
          attrs[:serial] = true if supports_serial?
        end
        attrs[:required] = field.notnull == 1
        attrs[:default] = field.dflt_value[1..-2] if field.dflt_value

        if field.type.upcase == 'TEXT'
          attrs[:length] = Property::Text.length
        else
          ergo = field.type.match(/\((\d+)\)/)
          size = ergo && ergo[1].to_i
          attrs[:length] = size if size
        end

        attrs
      end

      def reflective_lookup_primitive primitive
        p = primitive.upcase

        return Integer  if p == 'INTEGER'
        return Float    if p == 'REAL' || p == 'NUMERIC'
        return Property::Text if p == 'TEXT'

        super(primitive)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dm-is-reflective-1.0.0 lib/dm-is-reflective/is/adapters/sqlite_adapter.rb