Class: Baza::Driver::Mysql::Column

Inherits:
Column
  • Object
show all
Defined in:
lib/baza/driver/mysql/column.rb

Overview

This class handels every MySQL-column, that can be returned from a table-object.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Column

#after, #data, #inspect, #table, #to_param, #to_s

Methods included from Baza::DatabaseModelFunctionality

#model_name, #to_model

Constructor Details

#initialize(args) ⇒ Column

Constructor. Should not be called manually.



6
7
8
9
10
11
# File 'lib/baza/driver/mysql/column.rb', line 6

def initialize(args)
  @args = args
  @data = @args.delete(:data)
  @name = @data.fetch(:Field)
  @db = @args.fetch(:db)
end

Instance Attribute Details

#argsObject (readonly)

Returns the value of attribute args.



3
4
5
# File 'lib/baza/driver/mysql/column.rb', line 3

def args
  @args
end

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/baza/driver/mysql/column.rb', line 3

def name
  @name
end

Instance Method Details

#__object_unique_id__Object

Used to validate in Wref::Map.



14
15
16
# File 'lib/baza/driver/mysql/column.rb', line 14

def __object_unique_id__
  @name
end

#autoincr?Boolean

Returns true if the column is auto-increasing. Otherwise false.

Returns:

  • (Boolean)


78
79
80
# File 'lib/baza/driver/mysql/column.rb', line 78

def autoincr?
  @data.fetch(:Extra).include?("auto_increment")
end

#change(data) ⇒ Object

Changes the column properties by the given hash.



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/baza/driver/mysql/column.rb', line 95

def change(data)
  col_escaped = "#{@db.sep_col}#{@db.escape_column(name)}#{@db.sep_col}"
  table_escape = "#{@db.sep_table}#{@db.escape_table(table_name)}#{@db.sep_table}"
  newdata = data.clone

  newdata[:name] = name unless newdata.key?(:name)
  newdata[:type] = type unless newdata.key?(:type)
  newdata[:maxlength] = maxlength if !newdata.key?(:maxlength) && maxlength
  newdata[:null] = null? unless newdata.key?(:null)
  newdata[:default] = default if !newdata.key?(:default) && default
  newdata.delete(:primarykey) if newdata.key?(:primarykey)

  drop_add = true if name.to_s != newdata[:name].to_s

  table.__send__(:remove_column_from_list, self) if drop_add
  @db.query("ALTER TABLE #{table_escape} CHANGE #{col_escaped} #{@db.columns.data_sql(newdata)}")
  @name = newdata[:name].to_s
  reload
  table.__send__(:add_column_to_list, self) if drop_add
end

#commentObject

Returns the comment for the column.



83
84
85
# File 'lib/baza/driver/mysql/column.rb', line 83

def comment
  @data.fetch(:Comment)
end

#defaultObject

Returns the default value for the column.



65
66
67
68
69
70
# File 'lib/baza/driver/mysql/column.rb', line 65

def default
  return nil if (type == :datetime || type == :date) && @data[:Default].to_s.strip.empty?
  return nil if (type == :int || type == :bigint) && @data[:Default].to_s.strip.empty?
  return nil unless @data[:Default]
  @data.fetch(:Default)
end

#dropObject

Drops the column from the table.



88
89
90
91
92
# File 'lib/baza/driver/mysql/column.rb', line 88

def drop
  @db.query("ALTER TABLE `#{@db.escape_table(table_name)}` DROP COLUMN `#{@db.escape_column(name)}`")
  table.__send__(:remove_column_from_list, self)
  nil
end

#maxlengthObject

Returns the maxlength.



58
59
60
61
62
# File 'lib/baza/driver/mysql/column.rb', line 58

def maxlength
  type unless @maxlength
  return @maxlength if @maxlength
  false
end

#null?Boolean

Return true if the columns allows null. Otherwise false.

Returns:

  • (Boolean)


53
54
55
# File 'lib/baza/driver/mysql/column.rb', line 53

def null?
  @data[:Null] != "NO"
end

#primarykey?Boolean

Returns true if the column is the primary key. Otherwise false.

Returns:

  • (Boolean)


73
74
75
# File 'lib/baza/driver/mysql/column.rb', line 73

def primarykey?
  @data.fetch(:Key) == "PRI"
end

#reloadObject



22
23
24
25
26
27
# File 'lib/baza/driver/mysql/column.rb', line 22

def reload
  data = @db.query("SHOW FULL COLUMNS FROM `#{@db.escape_table(table_name)}` WHERE `Field` = '#{@db.esc(name)}'").fetch
  raise Baza::Errors::ColumnNotFound unless data
  @data = data
  @type = nil
end

#table_nameObject



18
19
20
# File 'lib/baza/driver/mysql/column.rb', line 18

def table_name
  @args.fetch(:table_name)
end

#typeObject

Returns the type of the column (integer, varchar etc.).



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/baza/driver/mysql/column.rb', line 30

def type
  unless @type
    if (match = @data.fetch(:Type).match(/^([A-z]+)$/))
      @maxlength = false
      @type = match[0].to_sym
    elsif (match = @data.fetch(:Type).match(/^decimal\((\d+),(\d+)\)$/))
      @maxlength = "#{match[1]},#{match[2]}"
      @type = :decimal
    elsif (match = @data.fetch(:Type).match(/^enum\((.+)\)$/))
      @maxlength = match[1]
      @type = :enum
    elsif (match = @data.fetch(:Type).match(/^(.+)\((\d+)\)/))
      @maxlength = match[2].to_i
      @type = match[1].to_sym
    end

    raise "Still no type from: '#{@data.fetch(:Type)}'" if @type.to_s.strip.empty?
  end

  @type
end