sequel_core 2.2.0 → 3.8.0

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.
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