lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb in knjrbfw-0.0.52 vs lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb in knjrbfw-0.0.53
- old
+ new
@@ -37,13 +37,11 @@
#Yields the tables of the current database.
def list(args = {})
ret = {} unless block_given?
sql = "SHOW TABLE STATUS"
- if args[:name]
- sql << " WHERE `Name` = '#{@db.esc(args[:name])}'"
- end
+ sql << " WHERE `Name` = '#{@db.esc(args[:name])}'" if args[:name]
@list_mutex.synchronize do
@db.q(sql) do |d_tables|
obj = @list.get!(d_tables[:Name])
@@ -152,77 +150,79 @@
end
def column(name)
name = name.to_s
- begin
+ if col = @list.get!(name)
return @list[name]
- rescue Wref::Recycled
- #ignore.
end
- self.columns do |col|
+ self.columns(:name => name) do |col|
return col if col.name == name
end
raise Knj::Errors::NotFound.new("Column not found: '#{name}'.")
end
- def columns
+ def columns(args = nil)
@db.cols
ret = {}
sql = "SHOW FULL COLUMNS FROM `#{self.name}`"
+ sql << " WHERE `Field` = '#{@db.esc(args[:name])}'" if args and args.key?(:name)
@db.q(sql) do |d_cols|
- obj = @list.get!(d_cols[:Field])
+ obj = @list.get!(d_cols[:Field].to_s)
if !obj
obj = KnjDB_mysql::Columns::Column.new(
:table_name => self.name,
:db => @db,
:data => d_cols
)
- @list[d_cols[:Field]] = obj
+ @list[d_cols[:Field].to_s] = obj
end
if block_given?
yield(obj)
else
- ret[d_cols[:Field]] = obj
+ ret[d_cols[:Field].to_s] = obj
end
end
if block_given?
return nil
else
return ret
end
end
- def indexes
+ def indexes(args = nil)
@db.indexes
ret = {}
- @db.q("SHOW INDEX FROM `#{self.name}`") do |d_indexes|
+ sql = "SHOW INDEX FROM `#{self.name}`"
+ sql << " WHERE `Key_name` = '#{@db.esc(args[:name])}'" if args and args.key?(:name)
+
+ @db.q(sql) do |d_indexes|
next if d_indexes[:Key_name] == "PRIMARY"
- obj = @indexes_list.get!(d_indexes[:Key_name])
+ obj = @indexes_list.get!(d_indexes[:Key_name].to_s)
if !obj
obj = KnjDB_mysql::Indexes::Index.new(
:table_name => self.name,
:db => @db,
:data => d_indexes
)
obj.columns << d_indexes[:Column_name]
- @indexes_list[d_indexes[:Key_name]] = obj
+ @indexes_list[d_indexes[:Key_name].to_s] = obj
end
if block_given?
yield(obj)
else
- ret[d_indexes[:Key_name]] = obj
+ ret[d_indexes[:Key_name].to_s] = obj
end
end
if block_given?
return nil
@@ -232,17 +232,15 @@
end
def index(name)
name = name.to_s
- begin
- return @indexes_list[name]
- rescue Wref::Recycled
- #ignore.
+ if index = @indexes_list.get!(name)
+ return index
end
- self.indexes do |index|
- return index if index.name == name
+ self.indexes(:name => name) do |index|
+ return index if index.name.to_s == name
end
raise Knj::Errors::NotFound.new("Index not found: #{name}.")
end
\ No newline at end of file