sequel 0.4.4 → 0.4.4.1

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/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.4.4.1 (2007-12-19)
2
+
3
+ * Fixed schema generation code to use fied quoting and support adapter-specific literalization of default values (#108).
4
+
1
5
  === 0.4.4 (2007-12-17)
2
6
 
3
7
  * Implemented Database#rename_table (#104).
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
6
6
  include FileUtils
7
7
 
8
8
  NAME = "sequel"
9
- VERS = "0.4.4"
9
+ VERS = "0.4.4.1"
10
10
  CLEAN.include ['**/.*.sw?', 'pkg/*', '.config', 'doc/*', 'coverage/*']
11
11
  RDOC_OPTS = ['--quiet', '--title', "Sequel: Concise ORM for Ruby",
12
12
  "--opname", "index.html",
@@ -146,9 +146,9 @@ module Sequel
146
146
  def alter_table_sql(table, op)
147
147
  case op[:op]
148
148
  when :rename_column
149
- "ALTER TABLE #{table} CHANGE COLUMN #{op[:name]} #{op[:new_name]} #{op[:type]}"
149
+ "ALTER TABLE #{table} CHANGE COLUMN #{literal(op[:name])} #{literal(op[:new_name])} #{op[:type]}"
150
150
  when :set_column_type
151
- "ALTER TABLE #{table} CHANGE COLUMN #{op[:name]} #{op[:name]} #{op[:type]}"
151
+ "ALTER TABLE #{table} CHANGE COLUMN #{literal(op[:name])} #{literal(op[:name])} #{op[:type]}"
152
152
  when :drop_index
153
153
  "DROP INDEX #{default_index_name(table, op[:columns])} ON #{table}"
154
154
  else
@@ -156,7 +156,7 @@ module Sequel
156
156
  true
157
157
  end
158
158
 
159
- include Dataset::SQL
159
+ # include Dataset::SQL
160
160
  include Schema::SQL
161
161
 
162
162
  # default serial primary key definition. this should be overriden for each adapter.
@@ -173,8 +173,8 @@ module Sequel
173
173
  # index :title
174
174
  # end
175
175
  def create_table(name, &block)
176
- g = Schema::Generator.new(self, name, &block)
177
- create_table_sql_list(*g.create_info).each {|sql| execute(sql)}
176
+ g = Schema::Generator.new(self, &block)
177
+ create_table_sql_list(name, *g.create_info).each {|sql| execute(sql)}
178
178
  end
179
179
 
180
180
  # Forcibly creates a table. If the table already exists it is dropped.
@@ -193,7 +193,7 @@ module Sequel
193
193
  end
194
194
 
195
195
  def alter_table(name, &block)
196
- g = Schema::AlterTableGenerator.new(self, name, &block)
196
+ g = Schema::AlterTableGenerator.new(self, &block)
197
197
  alter_table_sql_list(name, g.operations).each {|sql| execute(sql)}
198
198
  end
199
199
 
@@ -6,7 +6,7 @@ module Sequel
6
6
  # methods.
7
7
  def self.set_schema(name = nil, &block)
8
8
  name ? set_dataset(db[name]) : name = table_name
9
- @schema = Schema::Generator.new(db, name, &block)
9
+ @schema = Schema::Generator.new(db, &block)
10
10
  if @schema.primary_key_name
11
11
  set_primary_key @schema.primary_key_name
12
12
  end
@@ -29,7 +29,7 @@ module Sequel
29
29
 
30
30
  # Creates table.
31
31
  def self.create_table
32
- db.create_table_sql_list(*schema.create_info).each {|s| db << s}
32
+ db.create_table_sql_list(table_name, *schema.create_info).each {|s| db << s}
33
33
  end
34
34
 
35
35
  # Drops table.
@@ -1,9 +1,8 @@
1
1
  module Sequel
2
2
  module Schema
3
3
  class Generator
4
- def initialize(db, table_name, &block)
4
+ def initialize(db, &block)
5
5
  @db = db
6
- @table_name = table_name
7
6
  @columns = []
8
7
  @indexes = []
9
8
  @primary_key = nil
@@ -59,16 +58,15 @@ module Sequel
59
58
  if @primary_key && !has_column?(@primary_key[:name])
60
59
  @columns.unshift(@primary_key)
61
60
  end
62
- [@table_name, @columns, @indexes]
61
+ [@columns, @indexes]
63
62
  end
64
63
  end
65
64
 
66
65
  class AlterTableGenerator
67
66
  attr_reader :operations
68
67
 
69
- def initialize(db, table_name, &block)
68
+ def initialize(db, &block)
70
69
  @db = db
71
- @table_name = table_name
72
70
  @operations = []
73
71
  instance_eval(&block) if block
74
72
  end
@@ -30,9 +30,17 @@ module Sequel
30
30
 
31
31
  TYPES = Hash.new {|h, k| k}
32
32
  TYPES[:double] = 'double precision'
33
+
34
+ def schema_utility_dataset
35
+ @schema_utility_dataset ||= dataset
36
+ end
37
+
38
+ def literal(v)
39
+ schema_utility_dataset.literal(v)
40
+ end
33
41
 
34
42
  def column_definition_sql(column)
35
- sql = "#{column[:name]} #{TYPES[column[:type]]}"
43
+ sql = "#{literal(column[:name].to_sym)} #{TYPES[column[:type]]}"
36
44
  column[:size] ||= 255 if column[:type] == :varchar
37
45
  elements = column[:size] || column[:elements]
38
46
  sql << "(#{literal(elements)})" if elements
@@ -60,12 +68,11 @@ module Sequel
60
68
  end
61
69
 
62
70
  def index_definition_sql(table_name, index)
63
- columns = index[:columns].join(COMMA_SEPARATOR)
64
71
  index_name = index[:name] || default_index_name(table_name, index[:columns])
65
72
  if index[:unique]
66
- "CREATE UNIQUE INDEX #{index_name} ON #{table_name} (#{columns})"
73
+ "CREATE UNIQUE INDEX #{index_name} ON #{table_name} (#{literal(index[:columns])})"
67
74
  else
68
- "CREATE INDEX #{index_name} ON #{table_name} (#{columns})"
75
+ "CREATE INDEX #{index_name} ON #{table_name} (#{literal(index[:columns])})"
69
76
  end
70
77
  end
71
78
 
@@ -98,11 +105,11 @@ module Sequel
98
105
  when :add_column
99
106
  "ALTER TABLE #{table} ADD COLUMN #{column_definition_sql(op)}"
100
107
  when :drop_column
101
- "ALTER TABLE #{table} DROP COLUMN #{op[:name]}"
108
+ "ALTER TABLE #{table} DROP COLUMN #{literal(op[:name])}"
102
109
  when :rename_column
103
- "ALTER TABLE #{table} RENAME COLUMN #{op[:name]} TO #{op[:new_name]}"
110
+ "ALTER TABLE #{table} RENAME COLUMN #{literal(op[:name])} TO #{literal(op[:new_name])}"
104
111
  when :set_column_type
105
- "ALTER TABLE #{table} ALTER COLUMN #{op[:name]} TYPE #{op[:type]}"
112
+ "ALTER TABLE #{table} ALTER COLUMN #{literal(op[:name])} TYPE #{op[:type]}"
106
113
  when :add_index
107
114
  index_definition_sql(table, op)
108
115
  when :drop_index
@@ -311,3 +311,20 @@ context "A MySQL database" do
311
311
  @db.drop_index :test2, :value
312
312
  end
313
313
  end
314
+
315
+ context "A MySQL database" do
316
+ setup do
317
+ @db = MYSQL_DB
318
+ end
319
+
320
+ specify "should support defaults for boolean columns" do
321
+ g = Sequel::Schema::Generator.new(@db) do
322
+ boolean :active1, :default => true
323
+ boolean :active2, :default => false
324
+ end
325
+ statements = @db.create_table_sql_list(:items, *g.create_info)
326
+ statements.should == [
327
+ "CREATE TABLE items (`active1` boolean DEFAULT 1, `active2` boolean DEFAULT 0)"
328
+ ]
329
+ end
330
+ end
@@ -2,7 +2,7 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
2
2
 
3
3
  describe Sequel::Schema::Generator do
4
4
  before :all do
5
- @generator = Sequel::Schema::Generator.new(SchemaDummyDatabase.new, :items) do
5
+ @generator = Sequel::Schema::Generator.new(SchemaDummyDatabase.new) do
6
6
  string :title
7
7
  column :body, :text
8
8
  foreign_key :parent_id
@@ -10,7 +10,7 @@ describe Sequel::Schema::Generator do
10
10
  index :title
11
11
  index [:title, :body]
12
12
  end
13
- @table_name, @columns, @indexes = @generator.create_info
13
+ @columns, @indexes = @generator.create_info
14
14
  end
15
15
 
16
16
  {:name => :id, :primary_key => true}.each do |column, expected|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2007-12-17 00:00:00 +02:00
12
+ date: 2007-12-19 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency