Sha256: 5207acc469b4023eed0457571e264eb178b52065578c064fe09ae7c2a0c69d5b

Contents?: true

Size: 1.57 KB

Versions: 15

Compression:

Stored size: 1.57 KB

Contents

# This class handels the SQLite3-specific behaviour for columns.
class Baza::Driver::Sqlite3::Columns
  attr_reader :db

  # Constructor. This should not be called manually.
  def initialize(args)
    @db = args.fetch(:db)
  end

  DATA_SQL_ALLOWED_KEYS = [:name, :type, :maxlength, :autoincr, :primarykey, :null, :default, :default_func, :renames, :after, :renames].freeze
  # Returns SQL for a knjdb-compatible hash.
  def data_sql(data)
    data.each_key do |key|
      raise "Invalid key: '#{key}' (#{key.class.name})." unless DATA_SQL_ALLOWED_KEYS.include?(key)
    end

    raise "No type given." unless data[:type]
    type = data[:type].to_sym

    if type == :enum
      type = :varchar
      data.delete(:maxlength)
    end

    data[:maxlength] = 255 if type == :varchar && !data.key?(:maxlength)
    data[:maxlength] = 11 if type == :int && !data.key?(:maxlength) && !data[:autoincr] && !data[:primarykey]
    type = :integer if @db.int_types.index(type) && (data[:autoincr] || data[:primarykey])

    sql = "`#{data.fetch(:name)}` #{type}"
    sql << "(#{data.fetch(:maxlength)})" if data[:maxlength] && !data[:autoincr]
    sql << " PRIMARY KEY" if data[:primarykey]
    sql << " AUTOINCREMENT" if data[:autoincr]

    if !data[:null] && data.key?(:null)
      sql << " NOT NULL"
      data[:default] = 0 if !data.key?(:default) || !data[:default] && type == :int
    end

    if data.key?(:default_func)
      sql << " DEFAULT #{data[:default_func]}"
    elsif data.key?(:default) && data[:default] != false
      sql << " DEFAULT #{@db.sqlval(data.fetch(:default))}"
    end

    sql
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
baza-0.0.35 lib/baza/driver/sqlite3/columns.rb
baza-0.0.34 lib/baza/driver/sqlite3/columns.rb
baza-0.0.33 lib/baza/driver/sqlite3/columns.rb
baza-0.0.32 lib/baza/driver/sqlite3/columns.rb
baza-0.0.31 lib/baza/driver/sqlite3/columns.rb
baza-0.0.30 lib/baza/driver/sqlite3/columns.rb
baza-0.0.29 lib/baza/driver/sqlite3/columns.rb
baza-0.0.28 lib/baza/driver/sqlite3/columns.rb
baza-0.0.27 lib/baza/driver/sqlite3/columns.rb
baza-0.0.26 lib/baza/driver/sqlite3/columns.rb
baza-0.0.25 lib/baza/driver/sqlite3/columns.rb
baza-0.0.24 lib/baza/driver/sqlite3/columns.rb
baza-0.0.23 lib/baza/driver/sqlite3/columns.rb
baza-0.0.22 lib/baza/driver/sqlite3/columns.rb
baza-0.0.21 lib/baza/driver/sqlite3/columns.rb