lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb in knjrbfw-0.0.8 vs lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb in knjrbfw-0.0.9
- old
+ new
@@ -1,236 +1,236 @@
class KnjDB_sqlite3::Tables
- attr_reader :db, :driver
-
- def initialize(args)
- @args = args
- @db = @args[:db]
- @driver = @args[:driver]
- end
-
- def [](table_name)
- list = self.list
- return list[table_name.to_s] if list[table_name.to_s]
- raise Knj::Errors::NotFound.new("Table was not found: #{table_name}.")
- end
-
- def list
- list = {}
- q_tables = @db.select("sqlite_master", {"type" => "table"}, {"orderby" => "name"})
- while d_tables = q_tables.fetch
- list[d_tables[:name]] = KnjDB_sqlite3::Tables::Table.new(
- :db => @db,
- :driver => @driver,
- :data => d_tables
- )
- end
-
- return list
- end
-
- def create(name, data)
- sql = "CREATE TABLE `#{name}` ("
-
- first = true
- data["columns"].each do |col_data|
- sql += ", " if !first
- first = false if first
- sql += @db.cols.data_sql(col_data)
- end
-
- sql += ")"
-
- @db.query(sql)
- @list = nil
-
- if data["indexes"]
- table_obj = self[name]
- table_obj.create_indexes(data["indexes"])
- end
- end
+ attr_reader :db, :driver
+
+ def initialize(args)
+ @args = args
+ @db = @args[:db]
+ @driver = @args[:driver]
+ end
+
+ def [](table_name)
+ list = self.list
+ return list[table_name.to_s] if list[table_name.to_s]
+ raise Knj::Errors::NotFound.new("Table was not found: #{table_name}.")
+ end
+
+ def list
+ list = {}
+ q_tables = @db.select("sqlite_master", {"type" => "table"}, {"orderby" => "name"})
+ while d_tables = q_tables.fetch
+ list[d_tables[:name]] = KnjDB_sqlite3::Tables::Table.new(
+ :db => @db,
+ :driver => @driver,
+ :data => d_tables
+ )
+ end
+
+ return list
+ end
+
+ def create(name, data)
+ sql = "CREATE TABLE `#{name}` ("
+
+ first = true
+ data["columns"].each do |col_data|
+ sql << ", " if !first
+ first = false if first
+ sql << @db.cols.data_sql(col_data)
+ end
+
+ sql << ")"
+
+ @db.query(sql)
+ @list = nil
+
+ if data["indexes"]
+ table_obj = self[name]
+ table_obj.create_indexes(data["indexes"])
+ end
+ end
end
class KnjDB_sqlite3::Tables::Table
- def initialize(args)
- @db = args[:db]
- @driver = args[:driver]
- @data = args[:data]
- end
-
- def name
- return @data[:name]
- end
-
- def drop
- sql = "DROP TABLE `#{self.name}`"
- @db.query(sql)
- end
-
- def optimize
- raise "stub!"
- end
-
- def column(name)
- list = self.columns
- return list[name] if list[name]
- raise Knj::Errors::NotFound.new("Column not found: #{name}.")
- end
-
- def columns
- if !@list
- @db.cols
- @list = {}
-
- q_cols = @db.query("PRAGMA table_info(`#{@driver.esc_table(self.name)}`)")
- while d_cols = q_cols.fetch
- @list[d_cols[:name]] = KnjDB_sqlite3::Columns::Column.new(
- :table => self,
- :db => @db,
- :driver => @driver,
- :data => d_cols
- )
- end
- end
-
- return @list
- end
-
- def create_columns(col_arr)
- col_arr.each do |col_data|
- #if col_data.key?("after")
- # self.create_column_programmatic(col_data)
- #else
- @db.query("ALTER TABLE `#{self.name}` ADD COLUMN #{@db.cols.data_sql(col_data)};")
- #end
- end
- end
-
- def create_column_programmatic(col_data)
- temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
- cloned_tabled = self.clone(temp_name)
- cols_cur = self.columns
- @db.query("DROP TABLE `#{self.name}`")
-
- sql = "CREATE TABLE `#{self.name}` ("
- first = true
- cols_cur.each do |name, col|
- sql += ", " if !first
- first = false if first
- sql += @db.cols.data_sql(col.data)
-
- if col_data["after"] and col_data["after"] == name
- sql += ", #{@db.cols.data_sql(col_data)}"
- end
- end
- sql += ");"
- @db.query(sql)
-
- sql = "INSERT INTO `#{self.name}` SELECT "
- first = true
- cols_cur.each do |name, col|
- sql += ", " if !first
- first = false if first
-
- sql += "`#{name}`"
-
- if col_data["after"] and col_data["after"] == name
- sql += ", ''"
- end
- end
- sql += " FROM `#{temp_name}`"
- @db.query(sql)
- @db.query("DROP TABLE `#{temp_name}`")
- end
-
- def clone(newname)
- raise "Invalid name." if newname.to_s.strip.length <= 0
- cols_cur = self.columns
-
- sql = "CREATE TABLE `#{newname}` ("
- first = true
- cols_cur.each do |name, col|
- sql += ", " if !first
- first = false if first
- sql += @db.cols.data_sql(col.data)
- end
-
- sql += ");"
- @db.query(sql)
-
- sql = "INSERT INTO `#{newname}` SELECT * FROM `#{self.name}`"
- @db.query(sql)
- return @db.tables[newname]
- end
-
- def copy(args = {})
- temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
- cloned_tabled = self.clone(temp_name)
- cols_cur = self.columns
- @db.query("DROP TABLE `#{self.name}`")
-
- sql = "CREATE TABLE `#{self.name}` ("
- first = true
- cols_cur.each do |name, col|
- next if args["drops"] and args["drops"].index(name) != nil
-
- sql += ", " if !first
- first = false if first
-
- if args.key?("alter_columns") and args["alter_columns"][name.to_s]
- sql += @db.cols.data_sql(args["alter_columns"][name.to_s])
- else
- sql += @db.cols.data_sql(col.data)
- end
-
- if args["new"]
- args["new"].each do |col_data|
- if col_data["after"] and col_data["after"] == name
- sql += ", #{@db.cols.data_sql(col_data)}"
- end
- end
- end
- end
- sql += ");"
- @db.query(sql)
-
- sql = "INSERT INTO `#{self.name}` SELECT "
- first = true
- cols_cur.each do |name, col|
- next if args["drops"] and args["drops"].index(name) != nil
-
- sql += ", " if !first
- first = false if first
-
- sql += "`#{name}`"
-
- if args["news"]
- args["news"].each do |col_data|
- if col_data["after"] and col_data["after"] == name
- sql += ", ''"
- end
- end
- end
- end
-
- sql += " FROM `#{temp_name}`"
- @db.query(sql)
- @db.query("DROP TABLE `#{temp_name}`")
- end
-
- def index(name)
- list = self.indexes
- return list[name] if list[name]
- raise Knj::Errors::NotFound.new("Index not found: #{name}.")
- end
-
- def indexes
- if !@indexes_list
- @db.indexes
- @indexes_list = {}
-
- q_indexes = @db.query("PRAGMA index_list(`#{@driver.esc_table(self.name)}`)")
- while d_indexes = q_indexes.fetch
+ def initialize(args)
+ @db = args[:db]
+ @driver = args[:driver]
+ @data = args[:data]
+ end
+
+ def name
+ return @data[:name]
+ end
+
+ def drop
+ sql = "DROP TABLE `#{self.name}`"
+ @db.query(sql)
+ end
+
+ def optimize
+ raise "stub!"
+ end
+
+ def column(name)
+ list = self.columns
+ return list[name] if list[name]
+ raise Knj::Errors::NotFound.new("Column not found: #{name}.")
+ end
+
+ def columns
+ if !@list
+ @db.cols
+ @list = {}
+
+ q_cols = @db.query("PRAGMA table_info(`#{@driver.esc_table(self.name)}`)")
+ while d_cols = q_cols.fetch
+ @list[d_cols[:name]] = KnjDB_sqlite3::Columns::Column.new(
+ :table => self,
+ :db => @db,
+ :driver => @driver,
+ :data => d_cols
+ )
+ end
+ end
+
+ return @list
+ end
+
+ def create_columns(col_arr)
+ col_arr.each do |col_data|
+ #if col_data.key?("after")
+ # self.create_column_programmatic(col_data)
+ #else
+ @db.query("ALTER TABLE `#{self.name}` ADD COLUMN #{@db.cols.data_sql(col_data)};")
+ #end
+ end
+ end
+
+ def create_column_programmatic(col_data)
+ temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
+ cloned_tabled = self.clone(temp_name)
+ cols_cur = self.columns
+ @db.query("DROP TABLE `#{self.name}`")
+
+ sql = "CREATE TABLE `#{self.name}` ("
+ first = true
+ cols_cur.each do |name, col|
+ sql << ", " if !first
+ first = false if first
+ sql << @db.cols.data_sql(col.data)
+
+ if col_data["after"] and col_data["after"] == name
+ sql << ", #{@db.cols.data_sql(col_data)}"
+ end
+ end
+ sql << ");"
+ @db.query(sql)
+
+ sql = "INSERT INTO `#{self.name}` SELECT "
+ first = true
+ cols_cur.each do |name, col|
+ sql << ", " if !first
+ first = false if first
+
+ sql << "`#{name}`"
+
+ if col_data["after"] and col_data["after"] == name
+ sql << ", ''"
+ end
+ end
+ sql << " FROM `#{temp_name}`"
+ @db.query(sql)
+ @db.query("DROP TABLE `#{temp_name}`")
+ end
+
+ def clone(newname)
+ raise "Invalid name." if newname.to_s.strip.length <= 0
+ cols_cur = self.columns
+
+ sql = "CREATE TABLE `#{newname}` ("
+ first = true
+ cols_cur.each do |name, col|
+ sql << ", " if !first
+ first = false if first
+ sql << @db.cols.data_sql(col.data)
+ end
+
+ sql << ");"
+ @db.query(sql)
+
+ sql = "INSERT INTO `#{newname}` SELECT * FROM `#{self.name}`"
+ @db.query(sql)
+ return @db.tables[newname]
+ end
+
+ def copy(args = {})
+ temp_name = "temptable_#{Knj::Php.md5(Knj::Datet.new.time.to_f)}"
+ cloned_tabled = self.clone(temp_name)
+ cols_cur = self.columns
+ @db.query("DROP TABLE `#{self.name}`")
+
+ sql = "CREATE TABLE `#{self.name}` ("
+ first = true
+ cols_cur.each do |name, col|
+ next if args["drops"] and args["drops"].index(name) != nil
+
+ sql << ", " if !first
+ first = false if first
+
+ if args.key?("alter_columns") and args["alter_columns"][name.to_s]
+ sql << @db.cols.data_sql(args["alter_columns"][name.to_s])
+ else
+ sql << @db.cols.data_sql(col.data)
+ end
+
+ if args["new"]
+ args["new"].each do |col_data|
+ if col_data["after"] and col_data["after"] == name
+ sql << ", #{@db.cols.data_sql(col_data)}"
+ end
+ end
+ end
+ end
+ sql << ");"
+ @db.query(sql)
+
+ sql = "INSERT INTO `#{self.name}` SELECT "
+ first = true
+ cols_cur.each do |name, col|
+ next if args["drops"] and args["drops"].index(name) != nil
+
+ sql << ", " if !first
+ first = false if first
+
+ sql << "`#{name}`"
+
+ if args["news"]
+ args["news"].each do |col_data|
+ if col_data["after"] and col_data["after"] == name
+ sql << ", ''"
+ end
+ end
+ end
+ end
+
+ sql << " FROM `#{temp_name}`"
+ @db.query(sql)
+ @db.query("DROP TABLE `#{temp_name}`")
+ end
+
+ def index(name)
+ list = self.indexes
+ return list[name] if list[name]
+ raise Knj::Errors::NotFound.new("Index not found: #{name}.")
+ end
+
+ def indexes
+ if !@indexes_list
+ @db.indexes
+ @indexes_list = {}
+
+ q_indexes = @db.query("PRAGMA index_list(`#{@driver.esc_table(self.name)}`)")
+ while d_indexes = q_indexes.fetch
if @db.opts[:index_append_table_name]
match_name = d_indexes[:name].match(/__(.+)$/)
if match_name
name = match_name[1]
@@ -239,62 +239,62 @@
end
else
name = d_indexes[:name]
end
- @indexes_list[name] = KnjDB_sqlite3::Indexes::Index.new(
- :table => self,
- :db => @db,
- :driver => @driver,
- :data => d_indexes
- )
-
- @indexes_list[name].columns << name
- end
- end
-
- return @indexes_list
- end
-
- def create_indexes(index_arr)
- index_arr.each do |index_data|
- 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"].empty?
-
- name = index_data["name"]
- name = "#{self.name}__#{name}" if @db.opts[:index_append_table_name]
-
- sql = "CREATE INDEX #{@db.escape_col}#{@db.esc_col(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)
- @indexes_list = nil
- end
- end
-
- 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
+ @indexes_list[name] = KnjDB_sqlite3::Indexes::Index.new(
+ :table => self,
+ :db => @db,
+ :driver => @driver,
+ :data => d_indexes
+ )
+
+ @indexes_list[name].columns << name
+ end
+ end
+
+ return @indexes_list
+ end
+
+ def create_indexes(index_arr)
+ index_arr.each do |index_data|
+ 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"].empty?
+
+ name = index_data["name"]
+ name = "#{self.name}__#{name}" if @db.opts[:index_append_table_name]
+
+ sql = "CREATE INDEX #{@db.escape_col}#{@db.esc_col(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)
+ @indexes_list = nil
+ end
+ end
+
+ 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
end
\ No newline at end of file