lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb in knjrbfw-0.0.8 vs lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb in knjrbfw-0.0.9

- old
+ new

@@ -1,154 +1,154 @@ class KnjDB_sqlite3::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"] - type = data["type"] - - if type == "enum" + 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"] + type = data["type"] + + if type == "enum" type = "varchar" data.delete("maxlength") end - - data["maxlength"] = 255 if type == "varchar" and !data.key?("maxlength") - type = "integer" if @db.int_types.index(type) and (data["autoincr"] or data["primarykey"]) - - sql = "`#{data["name"]}` #{type}" - sql += "(#{data["maxlength"]})" if data["maxlength"] and !data["autoincr"] - sql += "(11)" if !data.key?("maxlength") and !data["autoincr"] - sql += " PRIMARY KEY" if data["primarykey"] - sql += " NOT NULL" if !data["null"] and data.key?("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 - - return sql - end + + data["maxlength"] = 255 if type == "varchar" and !data.key?("maxlength") + type = "integer" if @db.int_types.index(type) and (data["autoincr"] or data["primarykey"]) + + sql = "`#{data["name"]}` #{type}" + sql << "(#{data["maxlength"]})" if data["maxlength"] and !data["autoincr"] + sql << "(11)" if !data.key?("maxlength") and !data["autoincr"] + sql << " PRIMARY KEY" if data["primarykey"] + sql << " NOT NULL" if !data["null"] and data.key?("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 + + return sql + end end class KnjDB_sqlite3::Columns::Column - attr_reader :args - - def initialize(args) - @args = args - @db = @args[:db] - end - - def name - return @args[:data][:name] - end - - def table - return @args[:table] - 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 - - if type == "integer" - @type = "int" - else - @type = type - end - end - - return @type - end - - def null? - return false if @args[:data][:notnull].to_i == 1 - return true - end - - def maxlength - self.type - return @maxlength if @maxlength - return false - end - - 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 - - def primarykey? - return true if @args[:data][:name] == "id" - return false if @args[:data][:pk].to_i == 0 - return true - end - - def autoincr? - return true if @args[:data][:name] == "id" - return true if @args[:data][:pk].to_i >= 1 - return false - end - - def drop - @args[:table].copy( - "drops" => self.name - ) - end - - 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 + attr_reader :args + + def initialize(args) + @args = args + @db = @args[:db] + end + + def name + return @args[:data][:name] + end + + def table + return @args[:table] + 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 + + if type == "integer" + @type = "int" + else + @type = type + end + end + + return @type + end + + def null? + return false if @args[:data][:notnull].to_i == 1 + return true + end + + def maxlength + self.type + return @maxlength if @maxlength + return false + end + + 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 + + def primarykey? + return true if @args[:data][:name] == "id" + return false if @args[:data][:pk].to_i == 0 + return true + end + + def autoincr? + return true if @args[:data][:name] == "id" + return true if @args[:data][:pk].to_i >= 1 + return false + end + + def drop + @args[:table].copy( + "drops" => self.name + ) + end + + 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 end \ No newline at end of file