Sha256: fafedf297ed909f3cfdce282a930d98ba0f93d491a7f91505df37cc6a7ee4871

Contents?: true

Size: 1.38 KB

Versions: 7

Compression:

Stored size: 1.38 KB

Contents

class Baza::Driver::Pg::Columns
  def initialize(args)
    @db = args.fetch(:db)
  end

  DATA_SQL_ALLOWED_KEYS = [:type, :maxlength, :name, :primarykey, :autoincr, :default, :comment, :after, :first, :storage, :null, :renames].freeze
  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
    type = :serial if type == :int && data[:autoincr]
    type = :timestamp if type == :datetime

    data[:maxlength] = 255 if type == :varchar && !data.key?(:maxlength)

    sql = "#{@db.sep_col}#{@db.escape_column(data.fetch(:name))}#{@db.sep_col} #{type}"
    sql << "(#{data[:maxlength]})" if data[:maxlength]
    sql << " PRIMARY KEY" if data[:primarykey]
    sql << " NOT NULL" if data.key?(:null) && !data[:null]

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

    sql << " COMMENT '#{@db.escape(data.fetch(:comment))}'" if data.key?(:comment)
    sql << " AFTER #{@db.sep_col}#{@db.escape_column(data.fetch(:after))}#{@db.sep_col}" if data[:after] && !data[:first]
    sql << " FIRST" if data[:first]
    sql << " STORAGE #{data[:storage].to_s.upcase}" if data[:storage]

    sql
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
baza-0.0.27 lib/baza/driver/pg/columns.rb
baza-0.0.26 lib/baza/driver/pg/columns.rb
baza-0.0.25 lib/baza/driver/pg/columns.rb
baza-0.0.24 lib/baza/driver/pg/columns.rb
baza-0.0.23 lib/baza/driver/pg/columns.rb
baza-0.0.22 lib/baza/driver/pg/columns.rb
baza-0.0.21 lib/baza/driver/pg/columns.rb