sequel_core 2.2.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. metadata +30 -101
  2. data/CHANGELOG +0 -1519
  3. data/COPYING +0 -19
  4. data/README +0 -313
  5. data/Rakefile +0 -158
  6. data/bin/sequel +0 -117
  7. data/doc/cheat_sheet.rdoc +0 -225
  8. data/doc/dataset_filtering.rdoc +0 -182
  9. data/lib/sequel_core.rb +0 -136
  10. data/lib/sequel_core/adapters/adapter_skeleton.rb +0 -68
  11. data/lib/sequel_core/adapters/ado.rb +0 -90
  12. data/lib/sequel_core/adapters/db2.rb +0 -160
  13. data/lib/sequel_core/adapters/dbi.rb +0 -127
  14. data/lib/sequel_core/adapters/informix.rb +0 -89
  15. data/lib/sequel_core/adapters/jdbc.rb +0 -110
  16. data/lib/sequel_core/adapters/mysql.rb +0 -486
  17. data/lib/sequel_core/adapters/odbc.rb +0 -167
  18. data/lib/sequel_core/adapters/odbc_mssql.rb +0 -106
  19. data/lib/sequel_core/adapters/openbase.rb +0 -76
  20. data/lib/sequel_core/adapters/oracle.rb +0 -182
  21. data/lib/sequel_core/adapters/postgres.rb +0 -560
  22. data/lib/sequel_core/adapters/sqlite.rb +0 -270
  23. data/lib/sequel_core/connection_pool.rb +0 -194
  24. data/lib/sequel_core/core_ext.rb +0 -197
  25. data/lib/sequel_core/core_sql.rb +0 -184
  26. data/lib/sequel_core/database.rb +0 -462
  27. data/lib/sequel_core/database/schema.rb +0 -156
  28. data/lib/sequel_core/dataset.rb +0 -457
  29. data/lib/sequel_core/dataset/callback.rb +0 -13
  30. data/lib/sequel_core/dataset/convenience.rb +0 -245
  31. data/lib/sequel_core/dataset/pagination.rb +0 -96
  32. data/lib/sequel_core/dataset/query.rb +0 -41
  33. data/lib/sequel_core/dataset/schema.rb +0 -15
  34. data/lib/sequel_core/dataset/sql.rb +0 -889
  35. data/lib/sequel_core/deprecated.rb +0 -26
  36. data/lib/sequel_core/exceptions.rb +0 -42
  37. data/lib/sequel_core/migration.rb +0 -187
  38. data/lib/sequel_core/object_graph.rb +0 -216
  39. data/lib/sequel_core/pretty_table.rb +0 -71
  40. data/lib/sequel_core/schema.rb +0 -2
  41. data/lib/sequel_core/schema/generator.rb +0 -239
  42. data/lib/sequel_core/schema/sql.rb +0 -326
  43. data/lib/sequel_core/sql.rb +0 -812
  44. data/lib/sequel_core/worker.rb +0 -68
  45. data/spec/adapters/informix_spec.rb +0 -96
  46. data/spec/adapters/mysql_spec.rb +0 -765
  47. data/spec/adapters/oracle_spec.rb +0 -222
  48. data/spec/adapters/postgres_spec.rb +0 -441
  49. data/spec/adapters/sqlite_spec.rb +0 -413
  50. data/spec/connection_pool_spec.rb +0 -363
  51. data/spec/core_ext_spec.rb +0 -156
  52. data/spec/core_sql_spec.rb +0 -427
  53. data/spec/database_spec.rb +0 -963
  54. data/spec/dataset_spec.rb +0 -2933
  55. data/spec/expression_filters_spec.rb +0 -316
  56. data/spec/migration_spec.rb +0 -261
  57. data/spec/object_graph_spec.rb +0 -230
  58. data/spec/pretty_table_spec.rb +0 -58
  59. data/spec/rcov.opts +0 -6
  60. data/spec/schema_generator_spec.rb +0 -122
  61. data/spec/schema_spec.rb +0 -422
  62. data/spec/spec.opts +0 -0
  63. data/spec/spec_config.rb +0 -7
  64. data/spec/spec_config.rb.example +0 -8
  65. data/spec/spec_helper.rb +0 -55
  66. data/spec/worker_spec.rb +0 -96
@@ -1,230 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- describe Sequel::Dataset, " graphing" do
4
- before do
5
- dbc = Class.new
6
- @db = dbc.new
7
- @ds1 = Sequel::Dataset.new(@db).from(:points)
8
- @ds2 = Sequel::Dataset.new(@db).from(:lines)
9
- @ds3 = Sequel::Dataset.new(@db).from(:graphs)
10
- dss = {:points=>@ds1, :lines=>@ds2, :graphs=>@ds3}
11
- dbc.send(:define_method, :[]){|ds| dss[ds]}
12
- def @ds1.columns; [:id, :x, :y] end
13
- def @ds2.columns; [:id, :x, :y, :graph_id] end
14
- def @ds3.columns; [:id, :name, :x, :y, :lines_x] end
15
- end
16
-
17
- it "#graph should not modify the current dataset's opts" do
18
- o1 = @ds1.opts
19
- o2 = o1.dup
20
- ds1 = @ds1.graph(@ds2, :x=>:id)
21
- @ds1.opts.should == o1
22
- @ds1.opts.should == o2
23
- ds1.opts.should_not == o1
24
- end
25
-
26
- it "#graph should accept a dataset as the dataset" do
27
- ds = @ds1.graph(@ds2, :x=>:id)
28
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
29
- end
30
-
31
- it "#graph should accept a symbol table name as the dataset" do
32
- ds = @ds1.graph(:lines, :x=>:id)
33
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
34
- end
35
-
36
- it "#graph should accept an object that responds to dataset as the dataset" do
37
- oc = Class.new
38
- o = oc.new
39
- ds = @ds2
40
- oc.send(:define_method, :dataset){ds}
41
- ds = @ds1.graph(o, :x=>:id)
42
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
43
- ds = :lines
44
- oc.send(:define_method, :dataset){ds}
45
- ds = @ds1.graph(o, :x=>:id)
46
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
47
- end
48
-
49
- it "#graph should accept a :table_alias option" do
50
- ds = @ds1.graph(:lines, {:x=>:id}, :table_alias=>:planes)
51
- ds.sql.should == 'SELECT points.id, points.x, points.y, planes.id AS planes_id, planes.x AS planes_x, planes.y AS planes_y, planes.graph_id FROM points LEFT OUTER JOIN lines AS planes ON (planes.x = points.id)'
52
- end
53
-
54
- it "#graph should accept a :join_type option" do
55
- ds = @ds1.graph(:lines, {:x=>:id}, :join_type=>:inner)
56
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points INNER JOIN lines ON (lines.x = points.id)'
57
- end
58
-
59
- it "#graph should not select any columns from the graphed table if :select option is false" do
60
- ds = @ds1.graph(:lines, {:x=>:id}, :select=>false).graph(:graphs, :id=>:graph_id)
61
- ds.sql.should == 'SELECT points.id, points.x, points.y, graphs.id AS graphs_id, graphs.name, graphs.x AS graphs_x, graphs.y AS graphs_y, graphs.lines_x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id) LEFT OUTER JOIN graphs ON (graphs.id = lines.graph_id)'
62
- end
63
-
64
- it "#graph should use the given columns if :select option is used" do
65
- ds = @ds1.graph(:lines, {:x=>:id}, :select=>[:x, :graph_id]).graph(:graphs, :id=>:graph_id)
66
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.x AS lines_x, lines.graph_id, graphs.id AS graphs_id, graphs.name, graphs.x AS graphs_x, graphs.y AS graphs_y, graphs.lines_x AS graphs_lines_x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id) LEFT OUTER JOIN graphs ON (graphs.id = lines.graph_id)'
67
- end
68
-
69
- it "#graph should pass all join_conditions to join_table" do
70
- ds = @ds1.graph(@ds2, [[:x, :id], [:y, :id]])
71
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON ((lines.x = points.id) AND (lines.y = points.id))'
72
- end
73
-
74
- it "#graph should accept a block instead of conditions and pass it to join_table" do
75
- ds = @ds1.graph(@ds2){|ja, lja, js| [[:x.qualify(ja), :id.qualify(lja)], [:y.qualify(ja), :id.qualify(lja)]]}
76
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON ((lines.x = points.id) AND (lines.y = points.id))'
77
- end
78
-
79
- it "#graph should not add columns if graph is called after set_graph_aliases" do
80
- ds = @ds1.set_graph_aliases([[:x,[:points, :x]], [:y,[:lines, :y]]])
81
- ds.sql.should == 'SELECT points.x, lines.y FROM points'
82
- ds = ds.graph(:lines, :x=>:id)
83
- ds.sql.should == 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
84
- end
85
-
86
- it "#graph should allow graphing of multiple datasets" do
87
- ds = @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id)
88
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id, graphs.id AS graphs_id, graphs.name, graphs.x AS graphs_x, graphs.y AS graphs_y, graphs.lines_x AS graphs_lines_x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id) LEFT OUTER JOIN graphs ON (graphs.id = lines.graph_id)'
89
- end
90
-
91
- it "#graph should allow graphing of the same dataset multiple times" do
92
- ds = @ds1.graph(@ds2, :x=>:id).graph(@ds2, {:y=>:points__id}, :table_alias=>:graph)
93
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id, graph.id AS graph_id_0, graph.x AS graph_x, graph.y AS graph_y, graph.graph_id AS graph_graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id) LEFT OUTER JOIN lines AS graph ON (graph.y = points.id)'
94
- end
95
-
96
- it "#graph should raise an error if the table/table alias has already been used" do
97
- proc{@ds1.graph(@ds1, :x=>:id)}.should raise_error(Sequel::Error)
98
- proc{@ds1.graph(@ds2, :x=>:id)}.should_not raise_error
99
- proc{@ds1.graph(@ds2, :x=>:id).graph(@ds2, :x=>:id)}.should raise_error(Sequel::Error)
100
- proc{@ds1.graph(@ds2, :x=>:id).graph(@ds2, {:x=>:id}, :table_alias=>:blah)}.should_not raise_error
101
- end
102
-
103
- it "#set_graph_aliases should not modify the current dataset's opts" do
104
- o1 = @ds1.opts
105
- o2 = o1.dup
106
- ds1 = @ds1.set_graph_aliases(:x=>[:graphs,:id])
107
- @ds1.opts.should == o1
108
- @ds1.opts.should == o2
109
- ds1.opts.should_not == o1
110
- end
111
-
112
- it "#set_graph_aliases should specify the graph mapping" do
113
- ds = @ds1.graph(:lines, :x=>:id)
114
- ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
115
- ds = ds.set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y])
116
- ['SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
117
- 'SELECT lines.y, points.x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
118
- ].should(include(ds.sql))
119
- end
120
-
121
- it "#set_graph_aliases should only alias columns if necessary" do
122
- ds = @ds1.set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y])
123
- ['SELECT points.x, lines.y FROM points',
124
- 'SELECT lines.y, points.x FROM points'
125
- ].should(include(ds.sql))
126
-
127
- ds = @ds1.set_graph_aliases(:x1=>[:points, :x], :y=>[:lines, :y])
128
- ['SELECT points.x AS x1, lines.y FROM points',
129
- 'SELECT lines.y, points.x AS x1 FROM points'
130
- ].should(include(ds.sql))
131
- end
132
-
133
- it "#graph_each should split the result set into component tables" do
134
- ds = @ds1.graph(@ds2, :x=>:id)
135
- def ds.fetch_rows(sql, &block)
136
- yield({:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7})
137
- end
138
- results = ds.all
139
- results.length.should == 1
140
- results.first.should == {:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}}
141
-
142
- ds = @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id)
143
- def ds.fetch_rows(sql, &block)
144
- yield({:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12})
145
- end
146
- results = ds.all
147
- results.length.should == 1
148
- results.first.should == {:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12}}
149
-
150
- ds = @ds1.graph(@ds2, :x=>:id).graph(@ds2, {:y=>:points__id}, :table_alias=>:graph)
151
- def ds.fetch_rows(sql, &block)
152
- yield({:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graph_id_0=>8, :graph_x=>9, :graph_y=>10, :graph_graph_id=>11})
153
- end
154
- results = ds.all
155
- results.length.should == 1
156
- results.first.should == {:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graph=>{:id=>8, :x=>9, :y=>10, :graph_id=>11}}
157
- end
158
-
159
- it "#graph_each should give a nil value instead of a hash when all values for a table are nil" do
160
- ds = @ds1.graph(@ds2, :x=>:id)
161
- def ds.fetch_rows(sql, &block)
162
- yield({:id=>1,:x=>2,:y=>3,:lines_id=>nil,:lines_x=>nil,:lines_y=>nil,:graph_id=>nil})
163
- end
164
- results = ds.all
165
- results.length.should == 1
166
- results.first.should == {:points=>{:id=>1, :x=>2, :y=>3}, :lines=>nil}
167
-
168
- ds = @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id)
169
- def ds.fetch_rows(sql, &block)
170
- yield({:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>nil, :name=>nil, :graphs_x=>nil, :graphs_y=>nil, :graphs_lines_x=>nil})
171
- yield({:id=>2,:x=>4,:y=>5,:lines_id=>nil,:lines_x=>nil,:lines_y=>nil,:graph_id=>nil, :graphs_id=>nil, :name=>nil, :graphs_x=>nil, :graphs_y=>nil, :graphs_lines_x=>nil})
172
- yield({:id=>3,:x=>5,:y=>6,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>7, :name=>8, :graphs_x=>9, :graphs_y=>10, :graphs_lines_x=>11})
173
- yield({:id=>3,:x=>5,:y=>6,:lines_id=>7,:lines_x=>5,:lines_y=>8,:graph_id=>9, :graphs_id=>9, :name=>10, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12})
174
- end
175
- results = ds.all
176
- results.length.should == 4
177
- results[0].should == {:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>nil}
178
- results[1].should == {:points=>{:id=>2, :x=>4, :y=>5}, :lines=>nil, :graphs=>nil}
179
- results[2].should == {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>7, :name=>8, :x=>9, :y=>10, :lines_x=>11}}
180
- results[3].should == {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>7, :x=>5, :y=>8, :graph_id=>9}, :graphs=>{:id=>9, :name=>10, :x=>10, :y=>11, :lines_x=>12}}
181
- end
182
-
183
- it "#graph_each should not included tables graphed with the :select => false option in the result set" do
184
- ds = @ds1.graph(:lines, {:x=>:id}, :select=>false).graph(:graphs, :id=>:graph_id)
185
- def ds.fetch_rows(sql, &block)
186
- yield({:id=>1,:x=>2,:y=>3,:graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :lines_x=>12})
187
- end
188
- results = ds.all
189
- results.length.should == 1
190
- results.first.should == {:points=>{:id=>1, :x=>2, :y=>3}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12}}
191
- end
192
-
193
- it "#graph_each should only include the columns selected with #set_graph_aliases, if called" do
194
- ds = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y])
195
- def ds.fetch_rows(sql, &block)
196
- yield({:x=>2,:y=>3})
197
- end
198
- results = ds.all
199
- results.length.should == 1
200
- results.first.should == {:points=>{:x=>2}, :lines=>{:y=>3}}
201
-
202
- ds = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x])
203
- def ds.fetch_rows(sql, &block)
204
- yield({:x=>2})
205
- end
206
- results = ds.all
207
- results.length.should == 1
208
- results.first.should == {:points=>{:x=>2}, :lines=>nil}
209
- end
210
-
211
- it "#graph_each should run the row_proc and transform for graphed datasets" do
212
- @ds1.row_proc = proc{|h| h.keys.each{|k| h[k] *= 2}; h}
213
- @ds2.row_proc = proc{|h| h.keys.each{|k| h[k] *= 3}; h}
214
- @ds1.transform(:x=>[
215
- proc{|v| 123},
216
- proc{|v| 123}
217
- ])
218
- @ds2.transform(:x=>[
219
- proc{|v| 321},
220
- proc{|v| 321}
221
- ])
222
- ds = @ds1.graph(@ds2, :x=>:id)
223
- def ds.fetch_rows(sql, &block)
224
- yield({:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7})
225
- end
226
- results = ds.all
227
- results.length.should == 1
228
- results.first.should == {:points=>{:id=>2, :x=>246, :y=>6}, :lines=>{:id=>12, :x=>963, :y=>18, :graph_id=>21}}
229
- end
230
- end
@@ -1,58 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- require 'stringio'
4
-
5
- context "PrettyTable" do
6
- setup do
7
- @data1 = [
8
- {:x => 3, :y => 4}
9
- ]
10
-
11
- @data2 = [
12
- {:a => 23, :b => 45},
13
- {:a => 45, :b => 2377}
14
- ]
15
-
16
- @data3 = [
17
- {:aaa => 1},
18
- {:bb => 2},
19
- {:c => 3}
20
- ]
21
-
22
- @output = StringIO.new
23
- @orig_stdout = $stdout
24
- $stdout = @output
25
- end
26
-
27
- teardown do
28
- $stdout = @orig_stdout
29
- end
30
-
31
- specify "should infer the columns if not given" do
32
- Sequel::PrettyTable.print(@data1)
33
- @output.rewind
34
- @output.read.should =~ \
35
- /\n(\|x\|y\|)|(\|y\|x\|)\n/
36
- end
37
-
38
- specify "should calculate the maximum width of each column correctly" do
39
- Sequel::PrettyTable.print(@data2, [:a, :b])
40
- @output.rewind
41
- @output.read.should == \
42
- "+--+----+\n|a |b |\n+--+----+\n|23| 45|\n|45|2377|\n+--+----+\n"
43
- end
44
-
45
- specify "should also take header width into account" do
46
- Sequel::PrettyTable.print(@data3, [:aaa, :bb, :c])
47
- @output.rewind
48
- @output.read.should == \
49
- "+---+--+-+\n|aaa|bb|c|\n+---+--+-+\n| 1| | |\n| | 2| |\n| | |3|\n+---+--+-+\n"
50
- end
51
-
52
- specify "should print only the specified columns" do
53
- Sequel::PrettyTable.print(@data2, [:a])
54
- @output.rewind
55
- @output.read.should == \
56
- "+--+\n|a |\n+--+\n|23|\n|45|\n+--+\n"
57
- end
58
- end
@@ -1,6 +0,0 @@
1
- --exclude
2
- gems
3
- --exclude
4
- spec
5
- --exclude
6
- 00*
@@ -1,122 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- describe Sequel::Schema::Generator do
4
- before do
5
- @generator = Sequel::Schema::Generator.new(SchemaDummyDatabase.new) do
6
- string :title
7
- column :body, :text
8
- foreign_key :parent_id
9
- primary_key :id
10
- check 'price > 100'
11
- constraint(:xxx) {:yyy == :zzz}
12
- index :title
13
- index [:title, :body]
14
- foreign_key :node_id, :nodes
15
- end
16
- @columns, @indexes = @generator.create_info
17
- end
18
-
19
- {:name => :id, :primary_key => true}.each do |column, expected|
20
- it "uses default primary key #{column}" do
21
- @columns.first[column].should == expected
22
- end
23
- end
24
-
25
- it "counts primary key, column and constraint definitions as columns" do
26
- @columns.size.should == 7
27
- end
28
-
29
- it "places primary key first" do
30
- @columns[0][:primary_key].should be_true
31
- @columns[1][:primary_key].should_not be_true
32
- @columns[2][:primary_key].should_not be_true
33
- end
34
-
35
- it "retrieves primary key name" do
36
- @generator.primary_key_name.should == :id
37
- end
38
-
39
- it "keeps columns in order" do
40
- @columns[1][:name].should == :title
41
- @columns[1][:type].should == :string
42
- @columns[2][:name].should == :body
43
- @columns[2][:type].should == :text
44
- end
45
-
46
- it "creates foreign key column" do
47
- @columns[3][:name].should == :parent_id
48
- @columns[3][:type].should == :integer
49
- @columns[6][:name].should == :node_id
50
- @columns[6][:type].should == :integer
51
- end
52
-
53
- it "uses table for foreign key columns, if specified" do
54
- @columns[6][:table].should == :nodes
55
- @columns[3][:table].should == nil
56
- end
57
-
58
- it "finds columns" do
59
- [:title, :body, :parent_id, :id].each do |col|
60
- @generator.has_column?(col).should be_true
61
- end
62
- @generator.has_column?(:foo).should_not be_true
63
- end
64
-
65
- it "creates constraints" do
66
- @columns[4][:name].should == nil
67
- @columns[4][:type].should == :check
68
- @columns[4][:check].should == ['price > 100']
69
-
70
- @columns[5][:name].should == :xxx
71
- @columns[5][:type].should == :check
72
- @columns[5][:check].should be_a_kind_of(Proc)
73
- end
74
-
75
- it "creates indexes" do
76
- @indexes[0][:columns].should include(:title)
77
- @indexes[1][:columns].should include(:title)
78
- @indexes[1][:columns].should include(:body)
79
- end
80
- end
81
-
82
- describe Sequel::Schema::AlterTableGenerator do
83
- before do
84
- @generator = Sequel::Schema::AlterTableGenerator.new(SchemaDummyDatabase.new) do
85
- add_column :aaa, :text
86
- drop_column :bbb
87
- rename_column :ccc, :ho
88
- set_column_type :ddd, :float
89
- set_column_default :eee, 1
90
- add_index [:fff, :ggg]
91
- drop_index :hhh
92
- add_full_text_index :blah
93
- add_spatial_index :geom
94
- add_index :blah, :type => :hash
95
- add_index :blah, :where => {:something => true}
96
- add_constraint :con1, ':fred > 100'
97
- drop_constraint :con2
98
- add_primary_key :id
99
- add_foreign_key :node_id, :nodes
100
- end
101
- end
102
-
103
- specify "should generate operation records" do
104
- @generator.operations.should == [
105
- {:op => :add_column, :name => :aaa, :type => :text},
106
- {:op => :drop_column, :name => :bbb},
107
- {:op => :rename_column, :name => :ccc, :new_name => :ho},
108
- {:op => :set_column_type, :name => :ddd, :type => :float},
109
- {:op => :set_column_default, :name => :eee, :default => 1},
110
- {:op => :add_index, :columns => [:fff, :ggg]},
111
- {:op => :drop_index, :columns => [:hhh]},
112
- {:op => :add_index, :columns => [:blah], :type => :full_text},
113
- {:op => :add_index, :columns => [:geom], :type => :spatial},
114
- {:op => :add_index, :columns => [:blah], :type => :hash},
115
- {:op => :add_index, :columns => [:blah], :where => {:something => true}},
116
- {:op => :add_constraint, :type => :check, :name => :con1, :check => [':fred > 100']},
117
- {:op => :drop_constraint, :name => :con2},
118
- {:op => :add_column, :name => :id, :type => :integer, :primary_key=>true, :auto_increment=>true},
119
- {:op => :add_column, :name => :node_id, :type => :integer, :table=>:nodes}
120
- ]
121
- end
122
- end
@@ -1,422 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- context "DB#create_table" do
4
- setup do
5
- @db = SchemaDummyDatabase.new
6
- end
7
-
8
- specify "should accept the table name" do
9
- @db.create_table(:cats) {}
10
- @db.sqls.should == ['CREATE TABLE cats ()']
11
- end
12
-
13
- specify "should accept multiple columns" do
14
- @db.create_table(:cats) do
15
- column :id, :integer
16
- column :name, :text
17
- end
18
- @db.sqls.should == ['CREATE TABLE cats (id integer, name text)']
19
- end
20
-
21
- specify "should accept method calls as data types" do
22
- @db.create_table(:cats) do
23
- integer :id
24
- text :name
25
- end
26
- @db.sqls.should == ['CREATE TABLE cats (id integer, name text)']
27
- end
28
-
29
- specify "should accept primary key definition" do
30
- @db.create_table(:cats) do
31
- primary_key :id
32
- end
33
- @db.sqls.should == ['CREATE TABLE cats (id integer PRIMARY KEY AUTOINCREMENT)']
34
-
35
- @db.sqls.clear
36
- @db.create_table(:cats) do
37
- primary_key :id, :serial, :auto_increment => false
38
- end
39
- @db.sqls.should == ['CREATE TABLE cats (id serial PRIMARY KEY)']
40
-
41
- @db.sqls.clear
42
- @db.create_table(:cats) do
43
- primary_key :id, :type => :serial, :auto_increment => false
44
- end
45
- @db.sqls.should == ['CREATE TABLE cats (id serial PRIMARY KEY)']
46
- end
47
-
48
- specify "should accept and literalize default values" do
49
- @db.create_table(:cats) do
50
- integer :id, :default => 123
51
- text :name, :default => "abc'def"
52
- end
53
- @db.sqls.should == ["CREATE TABLE cats (id integer DEFAULT 123, name text DEFAULT 'abc''def')"]
54
- end
55
-
56
- specify "should accept not null definition" do
57
- @db.create_table(:cats) do
58
- integer :id
59
- text :name, :null => false
60
- end
61
- @db.sqls.should == ["CREATE TABLE cats (id integer, name text NOT NULL)"]
62
- end
63
-
64
- specify "should accept null definition" do
65
- @db.create_table(:cats) do
66
- integer :id
67
- text :name, :null => true
68
- end
69
- @db.sqls.should == ["CREATE TABLE cats (id integer, name text NULL)"]
70
- end
71
-
72
- specify "should accept unique definition" do
73
- @db.create_table(:cats) do
74
- integer :id
75
- text :name, :unique => true
76
- end
77
- @db.sqls.should == ["CREATE TABLE cats (id integer, name text UNIQUE)"]
78
- end
79
-
80
- specify "should accept unsigned definition" do
81
- @db.create_table(:cats) do
82
- integer :value, :unsigned => true
83
- end
84
- @db.sqls.should == ["CREATE TABLE cats (value integer UNSIGNED)"]
85
- end
86
-
87
- specify "should accept [SET|ENUM](...) types" do
88
- @db.create_table(:cats) do
89
- set :color, :elements => ['black', 'tricolor', 'grey']
90
- end
91
- @db.sqls.should == ["CREATE TABLE cats (color set('black', 'tricolor', 'grey'))"]
92
- end
93
-
94
- specify "should accept varchar size" do
95
- @db.create_table(:cats) do
96
- varchar :name
97
- end
98
- @db.sqls.should == ["CREATE TABLE cats (name varchar(255))"]
99
- @db.sqls.clear
100
- @db.create_table(:cats) do
101
- varchar :name, :size => 51
102
- end
103
- @db.sqls.should == ["CREATE TABLE cats (name varchar(51))"]
104
- end
105
-
106
- specify "should accept varchar size as sql function" do
107
- @db.create_table(:cats) do
108
- column :name, :varchar[102]
109
- end
110
- @db.sqls.should == ["CREATE TABLE cats (name varchar(102))"]
111
- end
112
-
113
- specify "should accept foreign keys without options" do
114
- @db.create_table(:cats) do
115
- foreign_key :project_id
116
- end
117
- @db.sqls.should == ["CREATE TABLE cats (project_id integer)"]
118
- end
119
-
120
- specify "should accept foreign keys with options" do
121
- @db.create_table(:cats) do
122
- foreign_key :project_id, :table => :projects
123
- end
124
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects)"]
125
- end
126
-
127
- specify "should accept foreign keys with separate table argument" do
128
- @db.create_table(:cats) do
129
- foreign_key :project_id, :projects, :default=>3
130
- end
131
- @db.sqls.should == ["CREATE TABLE cats (project_id integer DEFAULT 3 REFERENCES projects)"]
132
- end
133
-
134
- specify "should accept foreign keys with arbitrary keys" do
135
- @db.create_table(:cats) do
136
- foreign_key :project_id, :table => :projects, :key => :id
137
- end
138
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects(id))"]
139
-
140
- @db.sqls.clear
141
- @db.create_table(:cats) do
142
- foreign_key :project_id, :table => :projects, :key => :zzz
143
- end
144
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects(zzz))"]
145
- end
146
-
147
- specify "should accept foreign keys with ON DELETE clause" do
148
- @db.create_table(:cats) do
149
- foreign_key :project_id, :table => :projects, :on_delete => :restrict
150
- end
151
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE RESTRICT)"]
152
-
153
- @db.sqls.clear
154
- @db.create_table(:cats) do
155
- foreign_key :project_id, :table => :projects, :on_delete => :cascade
156
- end
157
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE CASCADE)"]
158
-
159
- @db.sqls.clear
160
- @db.create_table(:cats) do
161
- foreign_key :project_id, :table => :projects, :on_delete => :no_action
162
- end
163
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE NO ACTION)"]
164
- @db.sqls.clear
165
-
166
- @db.sqls.clear
167
- @db.create_table(:cats) do
168
- foreign_key :project_id, :table => :projects, :on_delete => :set_null
169
- end
170
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE SET NULL)"]
171
- @db.sqls.clear
172
-
173
- @db.sqls.clear
174
- @db.create_table(:cats) do
175
- foreign_key :project_id, :table => :projects, :on_delete => :set_default
176
- end
177
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE SET DEFAULT)"]
178
- @db.sqls.clear
179
- end
180
-
181
- specify "should accept inline index definition" do
182
- @db.create_table(:cats) do
183
- integer :id, :index => true
184
- end
185
- @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE INDEX cats_id_index ON cats (id)"]
186
- end
187
-
188
- specify "should accept inline index definition for foreign keys" do
189
- @db.create_table(:cats) do
190
- foreign_key :project_id, :table => :projects, :on_delete => :cascade, :index => true
191
- end
192
- @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE CASCADE)",
193
- "CREATE INDEX cats_project_id_index ON cats (project_id)"]
194
- end
195
-
196
- specify "should accept index definitions" do
197
- @db.create_table(:cats) do
198
- integer :id
199
- index :id
200
- end
201
- @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE INDEX cats_id_index ON cats (id)"]
202
- end
203
-
204
- specify "should accept unique index definitions" do
205
- @db.create_table(:cats) do
206
- text :name
207
- unique :name
208
- end
209
- @db.sqls.should == ["CREATE TABLE cats (name text)", "CREATE UNIQUE INDEX cats_name_index ON cats (name)"]
210
- end
211
-
212
- specify "should raise on full-text index definitions" do
213
- proc {
214
- @db.create_table(:cats) do
215
- text :name
216
- full_text_index :name
217
- end
218
- }.should raise_error(Sequel::Error)
219
- end
220
-
221
- specify "should raise on spatial index definitions" do
222
- proc {
223
- @db.create_table(:cats) do
224
- point :geom
225
- spatial_index :geom
226
- end
227
- }.should raise_error(Sequel::Error)
228
- end
229
-
230
- specify "should raise on partial index definitions" do
231
- proc {
232
- @db.create_table(:cats) do
233
- text :name
234
- index :name, :where => {:something => true}
235
- end
236
- }.should raise_error(Sequel::Error)
237
- end
238
-
239
- specify "should raise index definitions with type" do
240
- proc {
241
- @db.create_table(:cats) do
242
- text :name
243
- index :name, :type => :hash
244
- end
245
- }.should raise_error(Sequel::Error)
246
- end
247
-
248
- specify "should accept multiple index definitions" do
249
- @db.create_table(:cats) do
250
- integer :id
251
- index :id
252
- index :name
253
- end
254
- @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE INDEX cats_id_index ON cats (id)", "CREATE INDEX cats_name_index ON cats (name)"]
255
- end
256
-
257
- specify "should accept custom index names" do
258
- @db.create_table(:cats) do
259
- integer :id
260
- index :id, :name => 'abc'
261
- end
262
- @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE INDEX abc ON cats (id)"]
263
- end
264
-
265
- specify "should accept unique index definitions" do
266
- @db.create_table(:cats) do
267
- integer :id
268
- index :id, :unique => true
269
- end
270
- @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE UNIQUE INDEX cats_id_index ON cats (id)"]
271
- end
272
-
273
- specify "should accept composite index definitions" do
274
- @db.create_table(:cats) do
275
- integer :id
276
- index [:id, :name], :unique => true
277
- end
278
- @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE UNIQUE INDEX cats_id_name_index ON cats (id, name)"]
279
- end
280
-
281
- specify "should accept unnamed constraint definitions with blocks" do
282
- @db.create_table(:cats) do
283
- integer :score
284
- check {(:x > 0) & (:y < 1)}
285
- end
286
- @db.sqls.should == ["CREATE TABLE cats (score integer, CHECK ((x > 0) AND (y < 1)))"]
287
- end
288
-
289
- specify "should accept unnamed constraint definitions" do
290
- @db.create_table(:cats) do
291
- check 'price < ?', 100
292
- end
293
- @db.sqls.should == ["CREATE TABLE cats (CHECK (price < 100))"]
294
- end
295
-
296
- specify "should accept named constraint definitions" do
297
- @db.create_table(:cats) do
298
- integer :score
299
- constraint :valid_score, 'score <= 100'
300
- end
301
- @db.sqls.should == ["CREATE TABLE cats (score integer, CONSTRAINT valid_score CHECK (score <= 100))"]
302
- end
303
-
304
- specify "should accept named constraint definitions with block" do
305
- @db.create_table(:cats) do
306
- constraint(:blah_blah) {(:x > 0) & (:y < 1)}
307
- end
308
- @db.sqls.should == ["CREATE TABLE cats (CONSTRAINT blah_blah CHECK ((x > 0) AND (y < 1)))"]
309
- end
310
- end
311
-
312
- context "DB#create_table!" do
313
- setup do
314
- @db = SchemaDummyDatabase.new
315
- end
316
-
317
- specify "should drop the table and then create it" do
318
- @db.create_table!(:cats) {}
319
- @db.sqls.should == ['DROP TABLE cats', 'CREATE TABLE cats ()']
320
- end
321
- end
322
-
323
- context "DB#drop_table" do
324
- setup do
325
- @db = SchemaDummyDatabase.new
326
- end
327
-
328
- specify "should generate a DROP TABLE statement" do
329
- @db.drop_table :cats
330
- @db.sqls.should == ['DROP TABLE cats']
331
- end
332
- end
333
-
334
- context "DB#alter_table" do
335
- setup do
336
- @db = SchemaDummyDatabase.new
337
- end
338
-
339
- specify "should support add_column" do
340
- @db.alter_table(:cats) do
341
- add_column :score, :integer
342
- end
343
- @db.sqls.should == ["ALTER TABLE cats ADD COLUMN score integer"]
344
- end
345
-
346
- specify "should support add_constraint" do
347
- @db.alter_table(:cats) do
348
- add_constraint :valid_score, 'score <= 100'
349
- end
350
- @db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT valid_score CHECK (score <= 100)"]
351
- end
352
-
353
- specify "should support add_constraint with block" do
354
- @db.alter_table(:cats) do
355
- add_constraint(:blah_blah) {(:x > 0) & (:y < 1)}
356
- end
357
- @db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT blah_blah CHECK ((x > 0) AND (y < 1))"]
358
- end
359
-
360
- specify "should support add_foreign_key" do
361
- @db.alter_table(:cats) do
362
- add_foreign_key :node_id, :nodes
363
- end
364
- @db.sqls.should == ["ALTER TABLE cats ADD COLUMN node_id integer REFERENCES nodes"]
365
- end
366
-
367
- specify "should support add_index" do
368
- @db.alter_table(:cats) do
369
- add_index :name
370
- end
371
- @db.sqls.should == ["CREATE INDEX cats_name_index ON cats (name)"]
372
- end
373
-
374
- specify "should support add_primary_key" do
375
- @db.alter_table(:cats) do
376
- add_primary_key :id
377
- end
378
- @db.sqls.should == ["ALTER TABLE cats ADD COLUMN id integer PRIMARY KEY AUTOINCREMENT"]
379
- end
380
-
381
- specify "should support drop_column" do
382
- @db.alter_table(:cats) do
383
- drop_column :score
384
- end
385
- @db.sqls.should == ["ALTER TABLE cats DROP COLUMN score"]
386
- end
387
-
388
- specify "should support drop_constraint" do
389
- @db.alter_table(:cats) do
390
- drop_constraint :valid_score
391
- end
392
- @db.sqls.should == ["ALTER TABLE cats DROP CONSTRAINT valid_score"]
393
- end
394
-
395
- specify "should support drop_index" do
396
- @db.alter_table(:cats) do
397
- drop_index :name
398
- end
399
- @db.sqls.should == ["DROP INDEX cats_name_index"]
400
- end
401
-
402
- specify "should support rename_column" do
403
- @db.alter_table(:cats) do
404
- rename_column :name, :old_name
405
- end
406
- @db.sqls.should == ["ALTER TABLE cats RENAME COLUMN name TO old_name"]
407
- end
408
-
409
- specify "should support set_column_default" do
410
- @db.alter_table(:cats) do
411
- set_column_default :score, 3
412
- end
413
- @db.sqls.should == ["ALTER TABLE cats ALTER COLUMN score SET DEFAULT 3"]
414
- end
415
-
416
- specify "should support set_column_type" do
417
- @db.alter_table(:cats) do
418
- set_column_type :score, :real
419
- end
420
- @db.sqls.should == ["ALTER TABLE cats ALTER COLUMN score TYPE real"]
421
- end
422
- end