Class: KnjDB_mysql::Tables::Table

Inherits:
Object
  • Object
show all
Defined in:
lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Table

Returns a new instance of Table.



98
99
100
101
102
103
104
105
106
107
108
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 98

def initialize(args)
  @args = args
  @db = args[:db]
  @driver = args[:driver]
  @data = args[:data]
  @subtype = @db.opts[:subtype]
  @list = Knj::Wref_map.new
  @indexes_list = Knj::Wref_map.new
  
  raise "Could not figure out name from: '#{@data}'." if !@data[:Name]
end

Instance Attribute Details

#listObject

Returns the value of attribute list.



96
97
98
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 96

def list
  @list
end

Instance Method Details

#column(name) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 124

def column(name)
  name = name.to_s
  
  begin
    return @list[name]
  rescue WeakRef::RefError
    #ignore.
  end
  
  self.columns do |col|
    return col if col.name == name
  end
  
  raise Knj::Errors::NotFound.new("Column not found: '#{name}'.")
end

#columnsObject



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 140

def columns
  @db.cols
  ret = {}
  sql = "SHOW FULL COLUMNS FROM `#{self.name}`"
  
  @db.q(sql) do |d_cols|
    obj = @list.get!(d_cols[:Field])
    
    if !obj
      obj = KnjDB_mysql::Columns::Column.new(
        :table_name => self.name,
        :db => @db,
        :driver => @driver,
        :data => d_cols
      )
      @list[d_cols[:Field]] = obj
    end
    
    if block_given?
      yield(obj)
    else
      ret[d_cols[:Field]] = obj
    end
  end
  
  return ret
end

#create_columns(col_arr) ⇒ Object



214
215
216
217
218
219
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 214

def create_columns(col_arr)
  col_arr.each do |col_data|
    sql = "ALTER TABLE `#{self.name}` ADD COLUMN #{@db.cols.data_sql(col_data)};"
    @db.query(sql)
  end
end

#create_indexes(index_arr) ⇒ Object



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 221

def create_indexes(index_arr)
  index_arr.each do |index_data|
    if index_data.is_a?(String)
      index_data = {"name" => index_data, "columns" => [index_data]}
    end
    
    raise "No name was given." if !index_data.key?("name") or index_data["name"].strip.length <= 0
    raise "No columns was given on index: '#{index_data["name"]}'." if !index_data["columns"] or index_data["columns"].empty?
    
    sql = "CREATE"
    sql << " UNIQUE" if index_data["unique"]
    sql << " INDEX #{@db.escape_col}#{@db.esc_col(index_data["name"])}#{@db.escape_col} ON #{@db.escape_table}#{@db.esc_table(self.name)}#{@db.escape_table} ("
    
    first = true
    index_data["columns"].each do |col_name|
      sql << ", " if !first
      first = false if first
      
      sql << "#{@db.escape_col}#{@db.esc_col(col_name)}#{@db.escape_col}"
    end
    
    sql << ")"
    
    @db.query(sql)
  end
end

#dataObject



261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 261

def data
  ret = {
    "name" => name,
    "columns" => [],
    "indexes" => []
  }
  
  columns.each do |name, column|
    ret["columns"] << column.data
  end
  
  indexes.each do |name, index|
    ret["indexes"] << index.data if name != "PRIMARY"
  end
  
  return ret
end

#dropObject



114
115
116
117
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 114

def drop
  sql = "DROP TABLE `#{self.name}`"
  @db.query(sql)
end

#index(name) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 198

def index(name)
  name = name.to_s
  
  begin
    return @indexes_list[name]
  rescue WeakRef::RefError
    #ignore.
  end
  
  self.indexes do |index|
    return index if index.name == name
  end
  
  raise Knj::Errors::NotFound.new("Index not found: #{name}.")
end

#indexesObject



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 168

def indexes
  @db.indexes
  ret = {}
  
  @db.q("SHOW INDEX FROM `#{self.name}`") do |d_indexes|
    next if d_indexes[:Key_name] == "PRIMARY"
    
    obj = @indexes_list.get!(d_indexes[:Key_name])
    
    if !obj
      obj = KnjDB_mysql::Indexes::Index.new(
        :table_name => self.name,
        :db => @db,
        :driver => @driver,
        :data => d_indexes
      )
      obj.columns << d_indexes[:Column_name]
      @indexes_list[d_indexes[:Key_name]] = obj
    end
    
    if block_given?
      yield(obj)
    else
      ret[d_indexes[:Key_name]] = obj
    end
  end
  
  return ret
end

#insert(data) ⇒ Object



279
280
281
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 279

def insert(data)
  @db.insert(self.name, data)
end

#nameObject



110
111
112
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 110

def name
  return @data[:Name]
end

#optimizeObject



119
120
121
122
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 119

def optimize
  @db.query("OPTIMIZE TABLE `#{self.name}`")
  return self
end

#rename(newname) ⇒ Object



248
249
250
251
252
253
254
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 248

def rename(newname)
  oldname = self.name
  @db.query("ALTER TABLE `#{oldname}` RENAME TO `#{newname}`")
  @args[:tables].list[newname] = self
  @args[:tables].list.delete(oldname)
  @data[:Name] = newname
end

#truncateObject



256
257
258
259
# File 'lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb', line 256

def truncate
  @db.query("TRUNCATE `#{self.name}`")
  return self
end