include/drivers/mysql/mysql_columns.rb in baza-0.0.14 vs include/drivers/mysql/mysql_columns.rb in baza-0.0.15

- old
+ new

@@ -10,153 +10,30 @@ def data_sql(data) data.each do |key, val| raise "Invalid key: '#{key}' (#{key.class.name})." if !DATA_SQL_ALLOWED_KEYS.include?(key) end - raise "No type given." if !data[:type] + raise "No type given." unless data[:type] type = data[:type].to_sym - data[:maxlength] = 255 if type == :varchar and !data.key?(:maxlength) + data[:maxlength] = 255 if type == :varchar && !data.key?(:maxlength) sql = "`#{data[:name]}` #{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 + elsif data.key?(:default) && data[:default] != false sql << " DEFAULT '#{@args[:db].escape(data[:default])}'" end sql << " COMMENT '#{@args[:db].escape(data[:comment])}'" if data.key?(:comment) - sql << " AFTER `#{@args[:db].esc_col(data[:after])}`" if data[:after] and !data[:first] + sql << " AFTER `#{@args[:db].esc_col(data[:after])}`" if data[:after] && !data[:first] sql << " FIRST" if data[:first] sql << " STORAGE #{data[:storage].to_s.upcase}" if data[:storage] return sql - end -end - -#This class handels every MySQL-column, that can be returned from a table-object. -class Baza::Driver::Mysql::Columns::Column - attr_reader :args, :name - - #Constructor. Should not be called manually. - def initialize(args) - @args = args - @name = @args[:data][:Field].to_sym - @db = @args[:db] - end - - #Used to validate in Knj::Wrap_map. - def __object_unique_id__ - return @name - end - - #Returns the table-object that this column belongs to. - def table - return @args[:db].tables[@args[:table_name]] - end - - #Returns all data of the column in the knjdb-format. - def data - return { - type: type, - name: name, - null: null?, - maxlength: maxlength, - default: default, - primarykey: primarykey?, - autoincr: autoincr? - } - end - - #Returns the type of the column (integer, varchar etc.). - def type - if !@type - if match = @args[:data][:Type].match(/^([A-z]+)$/) - @maxlength = false - @type = match[0].to_sym - 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].to_i - @type = match[1].to_sym - end - - raise "Still not type from: '#{@args[:data][:Type]}'." if @type.to_s.strip.empty? - end - - return @type - end - - #Return true if the columns allows null. Otherwise false. - def null? - return false if @args[:data][:Null] == "NO" - return true - end - - #Returns the maxlength. - def maxlength - self.type if !@maxlength - return @maxlength if @maxlength - return false - end - - #Returns the default value for the column. - def default - return false if (self.type == :datetime or self.type == :date) and @args[:data][:Default].to_s.strip.length <= 0 - return false if (self.type == :int or self.type == :bigint) and @args[:data][:Default].to_s.strip.length <= 0 - return false if !@args[:data][:Default] - return @args[:data][:Default] - end - - #Returns true if the column is the primary key. Otherwise false. - def primarykey? - return true if @args[:data][:Key] == "PRI" - return false - end - - #Returns true if the column is auto-increasing. Otherwise false. - def autoincr? - return true if @args[:data][:Extra].include?("auto_increment") - return false - end - - #Returns the comment for the column. - def comment - return @args[:data][:Comment] - end - - #Drops the column from the table. - def drop - @args[:db].query("ALTER TABLE `#{@db.esc_table(@args[:table_name])}` DROP COLUMN `#{@db.esc_col(self.name)}`") - table = self.table.remove_column_from_list(self) - return nil - end - - #Changes the column properties by the given hash. - def change(data) - col_escaped = "`#{@args[:db].esc_col(self.name)}`" - table_escape = "`#{@args[:db].esc_table(self.table.name)}`" - 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) and self.default - newdata.delete(:primarykey) if newdata.key?(:primarykey) - - drop_add = true if self.name.to_s != newdata[:name].to_s - - self.table.__send__(:remove_column_from_list, self) if drop_add - @args[:db].query("ALTER TABLE #{table_escape} CHANGE #{col_escaped} #{@args[:db].cols.data_sql(newdata)}") - self.table.__send__(:add_column_to_list, self) if drop_add end end