knjrbfw 0.0.45 → 0.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.45
1
+ 0.0.46
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.45"
8
+ s.version = "0.0.46"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
@@ -130,8 +130,14 @@ class KnjDB_mysql::Tables::Table
130
130
  end
131
131
 
132
132
  def drop
133
- sql = "DROP TABLE `#{self.name}`"
134
- @db.query(sql)
133
+ raise "Cant drop native table: '#{self.name}'." if self.native?
134
+ @db.query("DROP TABLE `#{self.name}`")
135
+ end
136
+
137
+ #Returns true if the table is safe to drop.
138
+ def native?
139
+ return true if @db.q("SELECT DATABASE() AS db").fetch[:db] == "mysql"
140
+ return false
135
141
  end
136
142
 
137
143
  def optimize
@@ -85,6 +85,9 @@ class KnjDB_sqlite3::Columns::Column
85
85
  elsif match = @args[:data][:type].match(/^(.+)\((\d+)\)$/)
86
86
  @maxlength = match[2]
87
87
  type = match[1].to_sym
88
+ elsif @args[:data].key?(:type) and @args[:data][:type].to_s == ""
89
+ #A type can actually be empty in SQLite... Wtf?
90
+ return @args[:data][:type]
88
91
  end
89
92
 
90
93
  if type == :integer
@@ -93,7 +96,7 @@ class KnjDB_sqlite3::Columns::Column
93
96
  @type = type
94
97
  end
95
98
 
96
- raise "Still not type?" if @type.to_s.strip.length <= 0
99
+ raise "Still not type? (#{@args[:data]})" if @type.to_s.strip.length <= 0
97
100
  end
98
101
 
99
102
  return @type
@@ -113,15 +113,27 @@ class KnjDB_sqlite3::Tables::Table
113
113
  return @data[:maxlength]
114
114
  end
115
115
 
116
+ #Drops the table from the database.
116
117
  def drop
117
- sql = "DROP TABLE `#{self.name}`"
118
- @db.query(sql)
118
+ raise "Cant drop native table: '#{self.name}'." if self.native?
119
+ @db.query("DROP TABLE `#{self.name}`")
120
+ end
121
+
122
+ #Returns true if the table is safe to drop.
123
+ def native?
124
+ return true if self.name.to_s == "sqlite_sequence"
125
+ return false
119
126
  end
120
127
 
121
128
  def optimize
122
129
  raise "stub!"
123
130
  end
124
131
 
132
+ def rename(newname)
133
+ self.clone(newname)
134
+ self.drop
135
+ end
136
+
125
137
  def truncate
126
138
  @db.query("DELETE FROM `#{self.name}` WHERE 1=1")
127
139
  return nil
@@ -40,6 +40,7 @@ class Knj::Db::Dump
40
40
 
41
41
  tables.each do |table_obj|
42
42
  table_obj = @args[:db].tables[table_obj] if table_obj.is_a?(String) or table_obj.is_a?(Symbol)
43
+ next if table_obj.native?
43
44
 
44
45
  #Figure out keys.
45
46
  @keys = []
@@ -127,7 +127,7 @@ class Knj::Process
127
127
  @on_rec.call(result_obj)
128
128
  rescue SystemExit, Interrupt => e
129
129
  raise e
130
- rescue => e
130
+ rescue Exception => e
131
131
  #Error was raised - try to forward it to the server.
132
132
  result_obj.answer("type" => "process_error", "class" => e.class.name, "msg" => e.message, "backtrace" => e.backtrace)
133
133
  end
@@ -111,7 +111,7 @@ describe "Db" do
111
111
 
112
112
  #Remove everything in the db.
113
113
  db.tables.list do |table|
114
- table.drop
114
+ table.drop unless table.native?
115
115
  end
116
116
 
117
117
 
@@ -127,6 +127,35 @@ describe "Db" do
127
127
  raise "Not same amount of tables: #{tables_count}, #{db.tables.list.length}" if tables_count != db.tables.list.length
128
128
 
129
129
 
130
+
131
+ #Test revision table renaming.
132
+ Knj::Db::Revision.new.init_db("db" => db, "schema" => {
133
+ "tables" => {
134
+ "new_test_table" => {
135
+ "renames" => ["test_table"]
136
+ }
137
+ }
138
+ })
139
+ tables = db.tables.list
140
+ raise "Didnt expect table 'test_table' to exist but it did." if tables.key?("test_table")
141
+ raise "Expected 'new_test_table' to exist but it didnt." if !tables.key?("new_test_table")
142
+
143
+
144
+ #Test revision for column renaming.
145
+ Knj::Db::Revision.new.init_db("db" => db, "schema" => {
146
+ "tables" => {
147
+ "new_test_table" => {
148
+ "columns" => [
149
+ {"name" => "new_name", "type" => "varchar", "renames" => ["name"]}
150
+ ]
151
+ }
152
+ }
153
+ })
154
+ columns = db.tables["new_test_table"].columns
155
+ raise "Didnt expect 'name' to exist but it did." if columns.key?("name")
156
+ raise "Expected 'new_name'-column to exist but it didnt." if !columns.key?("new_name")
157
+
158
+
130
159
  #Delete test-database if everything went well.
131
160
  File.unlink(db_path) if File.exists?(db_path)
132
161
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.45
5
+ version: 0.0.46
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -379,7 +379,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
379
379
  requirements:
380
380
  - - ">="
381
381
  - !ruby/object:Gem::Version
382
- hash: -508709231810571655
382
+ hash: -3622671606985967169
383
383
  segments:
384
384
  - 0
385
385
  version: "0"