lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb in knjrbfw-0.0.8 vs lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb in knjrbfw-0.0.9

- old
+ new

@@ -1,130 +1,132 @@ class KnjDB_mysql::Columns - attr_reader :db, :driver - - def initialize(args) - @args = args - @db = @args[:db] - @driver = @args[:driver] - end - - def data_sql(data) - raise "No type given." if !data["type"] - - data["maxlength"] = 255 if data["type"] == "varchar" and !data.key?("maxlength") - - sql = "`#{data["name"]}` #{data["type"]}" - sql += "(#{data["maxlength"]})" if data["maxlength"] - sql += " PRIMARY KEY" if data["primarykey"] - sql += " AUTO_INCREMENT" if data["autoincr"] - sql += " NOT NULL" if !data["null"] - - if data.key?("default_func") - sql += " DEFAULT #{data["default_func"]}" - elsif data.key?("default") and data["default"] != false - sql += " DEFAULT '#{@db.escape(data["default"])}'" - end - - sql += " COMMENT '#{@db.escape(data["comment"])}'" if data.key?("comment") - sql += " AFTER `#{@db.esc_col(data["after"])}`" if data["after"] and !data["first"] - sql += " FIRST" if data["first"] - - return sql - end + attr_reader :db, :driver + + def initialize(args) + @args = args + @db = @args[:db] + @driver = @args[:driver] + end + + def data_sql(data) + raise "No type given." if !data["type"] + + data["maxlength"] = 255 if data["type"] == "varchar" and !data.key?("maxlength") + + sql = "`#{data["name"]}` #{data["type"]}" + sql << "(#{data["maxlength"]})" if data["maxlength"] + sql << " PRIMARY KEY" if data["primarykey"] + sql << " AUTO_INCREMENT" if data["autoincr"] + sql << " NOT NULL" if !data["null"] + + if data.key?("default_func") + sql << " DEFAULT #{data["default_func"]}" + elsif data.key?("default") and data["default"] != false + sql << " DEFAULT '#{@db.escape(data["default"])}'" + end + + sql << " COMMENT '#{@db.escape(data["comment"])}'" if data.key?("comment") + sql << " AFTER `#{@db.esc_col(data["after"])}`" if data["after"] and !data["first"] + sql << " FIRST" if data["first"] + + return sql + end end class KnjDB_mysql::Columns::Column - attr_reader :args - - def initialize(args) - @args = args - @db = @args[:db] - end - - def name - return @args[:data][:Field] - end - - 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 - - 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 - end - - return @type - end - - def null? - return false if @args[:data][:Null] == "NO" - return true - end - - def maxlength - self.type - return @maxlength if @maxlength - return false - end - - def default - return false if !@args[:data][:Default] - return @args[:data][:Default] - end - - def primarykey? - return false if @args[:data][:pk].to_i == 0 - return true - end - - def autoincr? - return true if @args[:data][:Extra].index("auto_increment") != nil - return false - end - - def comment - return @args[:data][:Comment] - end - - def drop - @args[:db].query("ALTER TABLE `#{@args[:table].name}` DROP COLUMN `#{self.name}`") - end - - def change(data) - esc_col = @args[:driver].escape_col - col_escaped = "#{esc_col}#{@db.esc_col(self.name)}#{esc_col}" - table_escape = "#{@args[:driver].escape_table}#{@args[:driver].esc_table(@args[:table].name)}#{@args[:driver].escape_table}" - 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_s = newdata["type"].to_s - @db.query("ALTER TABLE #{table_escape} CHANGE #{col_escaped} #{@db.cols.data_sql(newdata)}") - @args[:table].list = nil if data.key?("name") and data["name"] != self.name - end + attr_reader :args + + def initialize(args) + @args = args + end + + def name + return @args[:data][:Field] + end + + def table + return @args[:db].tables[@args[:table_name]] + end + + 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 + + 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 + end + + return @type + end + + def null? + return false if @args[:data][:Null] == "NO" + return true + end + + def maxlength + self.type + return @maxlength if @maxlength + return false + end + + def default + return false if !@args[:data][:Default] + return @args[:data][:Default] + end + + def primarykey? + return false if @args[:data][:pk].to_i == 0 + return true + end + + def autoincr? + return true if @args[:data][:Extra].index("auto_increment") != nil + return false + end + + def comment + return @args[:data][:Comment] + end + + def drop + @args[:db].query("ALTER TABLE `#{@args[:table].name}` DROP COLUMN `#{self.name}`") + end + + def change(data) + esc_col = @args[:driver].escape_col + col_escaped = "#{esc_col}#{@args[:db].esc_col(self.name)}#{esc_col}" + table_escape = "#{@args[:driver].escape_table}#{@args[:driver].esc_table(self.table.name)}#{@args[:driver].escape_table}" + 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_s = newdata["type"].to_s + @args[:db].query("ALTER TABLE #{table_escape} CHANGE #{col_escaped} #{@args[:db].cols.data_sql(newdata)}") + end end \ No newline at end of file