Class: KnjDB_sqlite3::Columns::Column

Inherits:
Object
  • Object
show all
Defined in:
lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Column

Returns a new instance of Column.



41
42
43
44
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 41

def initialize(args)
  @args = args
  @db = @args[:db]
end

Instance Attribute Details

#argsObject (readonly)

Returns the value of attribute args.



39
40
41
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 39

def args
  @args
end

Instance Method Details

#autoincr?Boolean

Returns:

  • (Boolean)


123
124
125
126
127
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 123

def autoincr?
  return true if @args[:data][:name] == "id"
  return true if @args[:data][:pk].to_i >= 1
  return false
end

#change(data) ⇒ Object



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 135

def change(data)
  newdata = data.clone
  
  newdata["name"] = self.name if !newdata.key?("name")
  newdata["type"] = self.type if !newdata.key?("type")
  newdata["maxlength"] = self.maxlength if !newdata.key?("maxlength") and self.maxlength
  newdata["null"] = self.null? if !newdata.key?("null")
  newdata["default"] = self.default if !newdata.key?("default")
  newdata.delete("primarykey") if newdata.key?("primarykey")
  
  @type = nil
  @maxlength = nil
  
  new_table = self.table.copy(
    "alter_columns" => {
      self.name.to_s => newdata
    }
  )
end

#dataObject



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 54

def data
  return {
    "type" => self.type,
    "name" => self.name,
    "null" => self.null?,
    "maxlength" => self.maxlength,
    "default" => self.default,
    "primarykey" => self.primarykey?,
    "autoincr" => self.autoincr?
  }
end

#defaultObject



103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 103

def default
  def_val = @args[:data][:dflt_value]
  if def_val.to_s.slice(0..0) == "'"
    def_val = def_val.to_s.slice(0)
  end
  
  if def_val.to_s.slice(-1..-1) == "'"
    def_val = def_val.to_s.slice(0, def_val.length - 1)
  end
  
  return false if @args[:data][:dflt_value].to_s.length == 0
  return def_val
end

#dropObject



129
130
131
132
133
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 129

def drop
  @args[:table].copy(
    "drops" => self.name
  )
end

#maxlengthObject



97
98
99
100
101
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 97

def maxlength
  self.type
  return @maxlength if @maxlength
  return false
end

#nameObject



46
47
48
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 46

def name
  return @args[:data][:name]
end

#null?Boolean

Returns:

  • (Boolean)


92
93
94
95
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 92

def null?
  return false if @args[:data][:notnull].to_i == 1
  return true
end

#primarykey?Boolean

Returns:

  • (Boolean)


117
118
119
120
121
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 117

def primarykey?
  return true if @args[:data][:name] == "id"
  return false if @args[:data][:pk].to_i == 0
  return true
end

#tableObject



50
51
52
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 50

def table
  return @args[:table]
end

#typeObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb', line 66

def type
  if !@type
    if match = @args[:data][:type].match(/^([A-z]+)$/)
      @maxlength = false
      type = match[0]
    elsif match = @args[:data][:type].match(/^decimal\((\d+),(\d+)\)$/)
      @maxlength = "#{match[1]},#{match[2]}"
      type = "decimal"
    elsif match = @args[:data][:type].match(/^enum\((.+)\)$/)
      @maxlength = match[1]
      type = "enum"
    elsif match = @args[:data][:type].match(/^(.+)\((\d+)\)$/)
      @maxlength = match[2]
      type = match[1]
    end
    
    if type == "integer"
      @type = "int"
    else
      @type = type
    end
  end
  
  return @type
end