sequel 3.21.0 → 3.31.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.
- data/CHANGELOG +485 -3
- data/README.rdoc +20 -6
- data/Rakefile +37 -19
- data/bin/sequel +1 -5
- data/doc/association_basics.rdoc +249 -43
- data/doc/dataset_basics.rdoc +4 -4
- data/doc/dataset_filtering.rdoc +8 -0
- data/doc/mass_assignment.rdoc +54 -0
- data/doc/migration.rdoc +15 -538
- data/doc/model_hooks.rdoc +72 -27
- data/doc/opening_databases.rdoc +89 -50
- data/doc/prepared_statements.rdoc +40 -13
- data/doc/reflection.rdoc +8 -2
- data/doc/release_notes/3.22.0.txt +39 -0
- data/doc/release_notes/3.23.0.txt +172 -0
- data/doc/release_notes/3.24.0.txt +420 -0
- data/doc/release_notes/3.25.0.txt +88 -0
- data/doc/release_notes/3.26.0.txt +88 -0
- data/doc/release_notes/3.27.0.txt +82 -0
- data/doc/release_notes/3.28.0.txt +304 -0
- data/doc/release_notes/3.29.0.txt +459 -0
- data/doc/release_notes/3.30.0.txt +135 -0
- data/doc/release_notes/3.31.0.txt +146 -0
- data/doc/schema_modification.rdoc +547 -0
- data/doc/sharding.rdoc +7 -1
- data/doc/testing.rdoc +129 -0
- data/doc/transactions.rdoc +137 -0
- data/doc/virtual_rows.rdoc +2 -2
- data/lib/sequel/adapters/ado/mssql.rb +18 -6
- data/lib/sequel/adapters/ado.rb +40 -18
- data/lib/sequel/adapters/amalgalite.rb +17 -9
- data/lib/sequel/adapters/db2.rb +175 -86
- data/lib/sequel/adapters/dbi.rb +15 -15
- data/lib/sequel/adapters/do/mysql.rb +5 -7
- data/lib/sequel/adapters/do/postgres.rb +0 -5
- data/lib/sequel/adapters/do/sqlite.rb +0 -5
- data/lib/sequel/adapters/do.rb +17 -36
- data/lib/sequel/adapters/firebird.rb +27 -208
- data/lib/sequel/adapters/ibmdb.rb +448 -0
- data/lib/sequel/adapters/informix.rb +6 -23
- data/lib/sequel/adapters/jdbc/as400.rb +16 -34
- data/lib/sequel/adapters/jdbc/db2.rb +45 -0
- data/lib/sequel/adapters/jdbc/derby.rb +247 -0
- data/lib/sequel/adapters/jdbc/firebird.rb +29 -0
- data/lib/sequel/adapters/jdbc/h2.rb +56 -29
- data/lib/sequel/adapters/jdbc/hsqldb.rb +170 -0
- data/lib/sequel/adapters/jdbc/informix.rb +26 -0
- data/lib/sequel/adapters/jdbc/jtds.rb +34 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -11
- data/lib/sequel/adapters/jdbc/oracle.rb +81 -25
- data/lib/sequel/adapters/jdbc/postgresql.rb +9 -13
- data/lib/sequel/adapters/jdbc/sqlite.rb +2 -6
- data/lib/sequel/adapters/jdbc/sqlserver.rb +71 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
- data/lib/sequel/adapters/jdbc.rb +231 -78
- data/lib/sequel/adapters/mock.rb +335 -0
- data/lib/sequel/adapters/mysql.rb +82 -184
- data/lib/sequel/adapters/mysql2.rb +26 -25
- data/lib/sequel/adapters/odbc/db2.rb +17 -0
- data/lib/sequel/adapters/odbc/mssql.rb +1 -6
- data/lib/sequel/adapters/odbc.rb +28 -9
- data/lib/sequel/adapters/openbase.rb +3 -5
- data/lib/sequel/adapters/oracle.rb +351 -53
- data/lib/sequel/adapters/postgres.rb +194 -33
- data/lib/sequel/adapters/shared/access.rb +32 -9
- data/lib/sequel/adapters/shared/db2.rb +321 -0
- data/lib/sequel/adapters/shared/firebird.rb +221 -0
- data/lib/sequel/adapters/shared/informix.rb +53 -0
- data/lib/sequel/adapters/shared/mssql.rb +231 -106
- data/lib/sequel/adapters/shared/mysql.rb +181 -63
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +149 -0
- data/lib/sequel/adapters/shared/oracle.rb +231 -41
- data/lib/sequel/adapters/shared/postgres.rb +214 -82
- data/lib/sequel/adapters/shared/progress.rb +4 -7
- data/lib/sequel/adapters/shared/sqlite.rb +201 -57
- data/lib/sequel/adapters/sqlite.rb +29 -21
- data/lib/sequel/adapters/swift/mysql.rb +12 -7
- data/lib/sequel/adapters/swift/postgres.rb +0 -5
- data/lib/sequel/adapters/swift/sqlite.rb +8 -6
- data/lib/sequel/adapters/swift.rb +5 -5
- data/lib/sequel/adapters/tinytds.rb +160 -19
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +66 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
- data/lib/sequel/ast_transformer.rb +190 -0
- data/lib/sequel/connection_pool/threaded.rb +3 -2
- data/lib/sequel/connection_pool.rb +1 -1
- data/lib/sequel/core.rb +46 -5
- data/lib/sequel/database/connecting.rb +5 -6
- data/lib/sequel/database/dataset.rb +4 -4
- data/lib/sequel/database/dataset_defaults.rb +59 -1
- data/lib/sequel/database/logging.rb +1 -1
- data/lib/sequel/database/misc.rb +104 -19
- data/lib/sequel/database/query.rb +153 -58
- data/lib/sequel/database/schema_generator.rb +17 -7
- data/lib/sequel/database/schema_methods.rb +59 -29
- data/lib/sequel/dataset/actions.rb +231 -76
- data/lib/sequel/dataset/features.rb +91 -8
- data/lib/sequel/dataset/graph.rb +38 -11
- data/lib/sequel/dataset/misc.rb +50 -23
- data/lib/sequel/dataset/mutation.rb +5 -6
- data/lib/sequel/dataset/prepared_statements.rb +48 -27
- data/lib/sequel/dataset/query.rb +236 -43
- data/lib/sequel/dataset/sql.rb +665 -253
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/exceptions.rb +4 -0
- data/lib/sequel/extensions/columns_introspection.rb +61 -0
- data/lib/sequel/extensions/migration.rb +6 -4
- data/lib/sequel/extensions/named_timezones.rb +5 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
- data/lib/sequel/extensions/to_dot.rb +95 -83
- data/lib/sequel/model/associations.rb +1020 -337
- data/lib/sequel/model/base.rb +414 -132
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/model/exceptions.rb +5 -1
- data/lib/sequel/model.rb +15 -8
- data/lib/sequel/plugins/association_pks.rb +22 -4
- data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/defaults_setter.rb +58 -0
- data/lib/sequel/plugins/force_encoding.rb +6 -6
- data/lib/sequel/plugins/identity_map.rb +114 -7
- data/lib/sequel/plugins/many_through_many.rb +65 -7
- data/lib/sequel/plugins/prepared_statements.rb +151 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +84 -0
- data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
- data/lib/sequel/plugins/rcte_tree.rb +29 -15
- data/lib/sequel/plugins/serialization.rb +88 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +51 -0
- data/lib/sequel/plugins/sharding.rb +21 -54
- data/lib/sequel/plugins/single_table_inheritance.rb +3 -1
- data/lib/sequel/plugins/typecast_on_load.rb +9 -12
- data/lib/sequel/plugins/update_primary_key.rb +2 -2
- data/lib/sequel/plugins/xml_serializer.rb +3 -3
- data/lib/sequel/sql.rb +109 -52
- data/lib/sequel/timezones.rb +57 -38
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +146 -0
- data/spec/adapters/mssql_spec.rb +111 -29
- data/spec/adapters/mysql_spec.rb +135 -123
- data/spec/adapters/oracle_spec.rb +49 -77
- data/spec/adapters/postgres_spec.rb +267 -78
- data/spec/adapters/spec_helper.rb +6 -5
- data/spec/adapters/sqlite_spec.rb +35 -21
- data/spec/core/connection_pool_spec.rb +71 -92
- data/spec/core/core_sql_spec.rb +21 -30
- data/spec/core/database_spec.rb +788 -512
- data/spec/core/dataset_spec.rb +1073 -1053
- data/spec/core/expression_filters_spec.rb +159 -42
- data/spec/core/mock_adapter_spec.rb +419 -0
- data/spec/core/object_graph_spec.rb +86 -114
- data/spec/core/schema_generator_spec.rb +3 -3
- data/spec/core/schema_spec.rb +298 -38
- data/spec/core/spec_helper.rb +6 -48
- data/spec/extensions/association_autoreloading_spec.rb +1 -10
- data/spec/extensions/association_dependencies_spec.rb +2 -12
- data/spec/extensions/association_pks_spec.rb +66 -32
- data/spec/extensions/caching_spec.rb +23 -50
- data/spec/extensions/class_table_inheritance_spec.rb +31 -83
- data/spec/extensions/columns_introspection_spec.rb +91 -0
- data/spec/extensions/composition_spec.rb +18 -13
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/defaults_setter_spec.rb +64 -0
- data/spec/extensions/hook_class_methods_spec.rb +65 -91
- data/spec/extensions/identity_map_spec.rb +114 -22
- data/spec/extensions/instance_filters_spec.rb +11 -21
- data/spec/extensions/instance_hooks_spec.rb +53 -0
- data/spec/extensions/json_serializer_spec.rb +4 -5
- data/spec/extensions/lazy_attributes_spec.rb +16 -20
- data/spec/extensions/list_spec.rb +17 -39
- data/spec/extensions/many_through_many_spec.rb +283 -250
- data/spec/extensions/migration_spec.rb +35 -32
- data/spec/extensions/named_timezones_spec.rb +23 -3
- data/spec/extensions/nested_attributes_spec.rb +97 -88
- data/spec/extensions/optimistic_locking_spec.rb +9 -20
- data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
- data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
- data/spec/extensions/prepared_statements_spec.rb +53 -0
- data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
- data/spec/extensions/pretty_table_spec.rb +1 -6
- data/spec/extensions/rcte_tree_spec.rb +41 -43
- data/spec/extensions/schema_dumper_spec.rb +5 -8
- data/spec/extensions/schema_spec.rb +13 -21
- data/spec/extensions/serialization_modification_detection_spec.rb +37 -0
- data/spec/extensions/serialization_spec.rb +72 -43
- data/spec/extensions/sharding_spec.rb +66 -140
- data/spec/extensions/single_table_inheritance_spec.rb +18 -29
- data/spec/extensions/spec_helper.rb +13 -61
- data/spec/extensions/sql_expr_spec.rb +20 -60
- data/spec/extensions/tactical_eager_loading_spec.rb +9 -19
- data/spec/extensions/thread_local_timezones_spec.rb +22 -2
- data/spec/extensions/timestamps_spec.rb +6 -6
- data/spec/extensions/to_dot_spec.rb +4 -7
- data/spec/extensions/touch_spec.rb +13 -14
- data/spec/extensions/tree_spec.rb +11 -26
- data/spec/extensions/typecast_on_load_spec.rb +1 -6
- data/spec/extensions/update_primary_key_spec.rb +30 -24
- data/spec/extensions/validation_class_methods_spec.rb +30 -51
- data/spec/extensions/validation_helpers_spec.rb +16 -35
- data/spec/extensions/xml_serializer_spec.rb +16 -4
- data/spec/integration/associations_test.rb +537 -21
- data/spec/integration/database_test.rb +4 -2
- data/spec/integration/dataset_test.rb +461 -65
- data/spec/integration/eager_loader_test.rb +19 -21
- data/spec/integration/model_test.rb +80 -1
- data/spec/integration/plugin_test.rb +304 -116
- data/spec/integration/prepared_statement_test.rb +212 -122
- data/spec/integration/schema_test.rb +161 -30
- data/spec/integration/spec_helper.rb +39 -30
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +172 -5
- data/spec/integration/type_test.rb +17 -3
- data/spec/model/association_reflection_spec.rb +201 -7
- data/spec/model/associations_spec.rb +865 -662
- data/spec/model/base_spec.rb +275 -95
- data/spec/model/dataset_methods_spec.rb +7 -27
- data/spec/model/eager_loading_spec.rb +677 -676
- data/spec/model/hooks_spec.rb +309 -67
- data/spec/model/model_spec.rb +222 -168
- data/spec/model/plugins_spec.rb +24 -13
- data/spec/model/record_spec.rb +381 -218
- data/spec/model/spec_helper.rb +13 -71
- data/spec/model/validations_spec.rb +11 -0
- metadata +115 -73
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Sequel
|
|
2
2
|
class Database
|
|
3
3
|
# ---------------------
|
|
4
|
-
# :section: Methods that modify the database schema
|
|
4
|
+
# :section: 2 - Methods that modify the database schema
|
|
5
5
|
# These methods execute code on the database that modifies the database's schema.
|
|
6
6
|
# ---------------------
|
|
7
7
|
|
|
@@ -21,7 +21,7 @@ module Sequel
|
|
|
21
21
|
UNSIGNED = ' UNSIGNED'.freeze
|
|
22
22
|
|
|
23
23
|
# The order of column modifiers to use when defining a column.
|
|
24
|
-
COLUMN_DEFINITION_ORDER = [:default, :null, :unique, :primary_key, :auto_increment, :references]
|
|
24
|
+
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references]
|
|
25
25
|
|
|
26
26
|
# Adds a column to the specified table. This method expects a column name,
|
|
27
27
|
# a datatype and optionally a hash with additional constraints and options:
|
|
@@ -29,7 +29,7 @@ module Sequel
|
|
|
29
29
|
# DB.add_column :items, :name, :text, :unique => true, :null => false
|
|
30
30
|
# DB.add_column :items, :category, :text, :default => 'ruby'
|
|
31
31
|
#
|
|
32
|
-
# See alter_table
|
|
32
|
+
# See <tt>alter_table</tt>.
|
|
33
33
|
def add_column(table, *args)
|
|
34
34
|
alter_table(table) {add_column(*args)}
|
|
35
35
|
end
|
|
@@ -40,9 +40,9 @@ module Sequel
|
|
|
40
40
|
# DB.add_index :posts, [:author, :title], :unique => true
|
|
41
41
|
#
|
|
42
42
|
# Options:
|
|
43
|
-
#
|
|
43
|
+
# :ignore_errors :: Ignore any DatabaseErrors that are raised
|
|
44
44
|
#
|
|
45
|
-
# See alter_table
|
|
45
|
+
# See <tt>alter_table</tt>.
|
|
46
46
|
def add_index(table, columns, options={})
|
|
47
47
|
e = options[:ignore_errors]
|
|
48
48
|
begin
|
|
@@ -65,17 +65,17 @@ module Sequel
|
|
|
65
65
|
# end
|
|
66
66
|
#
|
|
67
67
|
# Note that +add_column+ accepts all the options available for column
|
|
68
|
-
# definitions using create_table
|
|
68
|
+
# definitions using <tt>create_table</tt>, and +add_index+ accepts all the options
|
|
69
69
|
# available for index definition.
|
|
70
70
|
#
|
|
71
|
-
# See Schema::AlterTableGenerator and the {"Migrations and Schema Modification" guide}[link:files/doc/migration_rdoc.html].
|
|
71
|
+
# See <tt>Schema::AlterTableGenerator</tt> and the {"Migrations and Schema Modification" guide}[link:files/doc/migration_rdoc.html].
|
|
72
72
|
def alter_table(name, generator=nil, &block)
|
|
73
73
|
generator ||= Schema::AlterTableGenerator.new(self, &block)
|
|
74
|
-
alter_table_sql_list(name, generator.operations).flatten.each {|sql| execute_ddl(sql)}
|
|
75
74
|
remove_cached_schema(name)
|
|
75
|
+
apply_alter_table(name, generator.operations)
|
|
76
76
|
nil
|
|
77
77
|
end
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
# Creates a table with the columns given in the provided block:
|
|
80
80
|
#
|
|
81
81
|
# DB.create_table :posts do
|
|
@@ -89,7 +89,7 @@ module Sequel
|
|
|
89
89
|
# :temp :: Create the table as a temporary table.
|
|
90
90
|
# :ignore_index_errors :: Ignore any errors when creating indexes.
|
|
91
91
|
#
|
|
92
|
-
# See Schema::Generator and the {"Migrations and Schema Modification" guide}[link:files/doc/migration_rdoc.html].
|
|
92
|
+
# See <tt>Schema::Generator</tt> and the {"Migrations and Schema Modification" guide}[link:files/doc/migration_rdoc.html].
|
|
93
93
|
def create_table(name, options={}, &block)
|
|
94
94
|
remove_cached_schema(name)
|
|
95
95
|
options = {:generator=>options} if options.is_a?(Schema::Generator)
|
|
@@ -99,19 +99,28 @@ module Sequel
|
|
|
99
99
|
nil
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
-
# Forcibly
|
|
102
|
+
# Forcibly create a table, attempting to drop it if it already exists, then creating it.
|
|
103
103
|
#
|
|
104
104
|
# DB.create_table!(:a){Integer :a}
|
|
105
|
-
# #
|
|
105
|
+
# # SELECT * FROM a LIMIT a -- check existence
|
|
106
|
+
# # DROP TABLE a -- drop table if already exists
|
|
106
107
|
# # CREATE TABLE a (a integer)
|
|
107
108
|
def create_table!(name, options={}, &block)
|
|
108
|
-
drop_table(name)
|
|
109
|
+
drop_table(name) if table_exists?(name)
|
|
109
110
|
create_table(name, options, &block)
|
|
110
111
|
end
|
|
111
112
|
|
|
112
|
-
# Creates the table unless the table already exists
|
|
113
|
+
# Creates the table unless the table already exists.
|
|
114
|
+
#
|
|
115
|
+
# DB.create_table?(:a){Integer :a}
|
|
116
|
+
# # SELECT * FROM a LIMIT a -- check existence
|
|
117
|
+
# # CREATE TABLE a (a integer) -- if it doesn't already exist
|
|
113
118
|
def create_table?(name, options={}, &block)
|
|
114
|
-
|
|
119
|
+
if supports_create_table_if_not_exists?
|
|
120
|
+
create_table(name, options.merge(:if_not_exists=>true), &block)
|
|
121
|
+
elsif !table_exists?(name)
|
|
122
|
+
create_table(name, options, &block)
|
|
123
|
+
end
|
|
115
124
|
end
|
|
116
125
|
|
|
117
126
|
# Creates a view, replacing it if it already exists:
|
|
@@ -138,7 +147,7 @@ module Sequel
|
|
|
138
147
|
#
|
|
139
148
|
# DB.drop_column :items, :category
|
|
140
149
|
#
|
|
141
|
-
# See alter_table
|
|
150
|
+
# See <tt>alter_table</tt>.
|
|
142
151
|
def drop_column(table, *args)
|
|
143
152
|
alter_table(table) {drop_column(*args)}
|
|
144
153
|
end
|
|
@@ -148,17 +157,20 @@ module Sequel
|
|
|
148
157
|
# DB.drop_index :posts, :title
|
|
149
158
|
# DB.drop_index :posts, [:author, :title]
|
|
150
159
|
#
|
|
151
|
-
# See alter_table
|
|
160
|
+
# See <tt>alter_table</tt>.
|
|
152
161
|
def drop_index(table, columns, options={})
|
|
153
162
|
alter_table(table){drop_index(columns, options)}
|
|
154
163
|
end
|
|
155
164
|
|
|
156
165
|
# Drops one or more tables corresponding to the given names:
|
|
157
166
|
#
|
|
167
|
+
# DB.drop_table(:posts)
|
|
158
168
|
# DB.drop_table(:posts, :comments)
|
|
169
|
+
# DB.drop_table(:posts, :comments, :cascade=>true)
|
|
159
170
|
def drop_table(*names)
|
|
171
|
+
options = names.last.is_a?(Hash) ? names.pop : {}
|
|
160
172
|
names.each do |n|
|
|
161
|
-
execute_ddl(drop_table_sql(n))
|
|
173
|
+
execute_ddl(drop_table_sql(n, options))
|
|
162
174
|
remove_cached_schema(n)
|
|
163
175
|
end
|
|
164
176
|
nil
|
|
@@ -167,9 +179,12 @@ module Sequel
|
|
|
167
179
|
# Drops one or more views corresponding to the given names:
|
|
168
180
|
#
|
|
169
181
|
# DB.drop_view(:cheap_items)
|
|
182
|
+
# DB.drop_view(:cheap_items, :pricey_items)
|
|
183
|
+
# DB.drop_view(:cheap_items, :pricey_items, :cascade=>true)
|
|
170
184
|
def drop_view(*names)
|
|
185
|
+
options = names.last.is_a?(Hash) ? names.pop : {}
|
|
171
186
|
names.each do |n|
|
|
172
|
-
execute_ddl(
|
|
187
|
+
execute_ddl(drop_view_sql(n, options))
|
|
173
188
|
remove_cached_schema(n)
|
|
174
189
|
end
|
|
175
190
|
nil
|
|
@@ -191,7 +206,7 @@ module Sequel
|
|
|
191
206
|
#
|
|
192
207
|
# DB.rename_column :items, :cntr, :counter
|
|
193
208
|
#
|
|
194
|
-
# See alter_table
|
|
209
|
+
# See <tt>alter_table</tt>.
|
|
195
210
|
def rename_column(table, *args)
|
|
196
211
|
alter_table(table) {rename_column(*args)}
|
|
197
212
|
end
|
|
@@ -200,7 +215,7 @@ module Sequel
|
|
|
200
215
|
#
|
|
201
216
|
# DB.set_column_default :items, :category, 'perl!'
|
|
202
217
|
#
|
|
203
|
-
# See alter_table
|
|
218
|
+
# See <tt>alter_table</tt>.
|
|
204
219
|
def set_column_default(table, *args)
|
|
205
220
|
alter_table(table) {set_column_default(*args)}
|
|
206
221
|
end
|
|
@@ -209,13 +224,18 @@ module Sequel
|
|
|
209
224
|
#
|
|
210
225
|
# DB.set_column_type :items, :price, :float
|
|
211
226
|
#
|
|
212
|
-
# See alter_table
|
|
227
|
+
# See <tt>alter_table</tt>.
|
|
213
228
|
def set_column_type(table, *args)
|
|
214
229
|
alter_table(table) {set_column_type(*args)}
|
|
215
230
|
end
|
|
216
231
|
|
|
217
232
|
private
|
|
218
233
|
|
|
234
|
+
# Apply the changes in the given alter table ops to the table given by name.
|
|
235
|
+
def apply_alter_table(name, ops)
|
|
236
|
+
alter_table_sql_list(name, ops).flatten.each{|sql| execute_ddl(sql)}
|
|
237
|
+
end
|
|
238
|
+
|
|
219
239
|
# The SQL to execute to modify the DDL for the given table name. op
|
|
220
240
|
# should be one of the operations returned by the AlterTableGenerator.
|
|
221
241
|
def alter_table_sql(table, op)
|
|
@@ -224,7 +244,7 @@ module Sequel
|
|
|
224
244
|
when :add_column
|
|
225
245
|
"ADD COLUMN #{column_definition_sql(op)}"
|
|
226
246
|
when :drop_column
|
|
227
|
-
"DROP COLUMN #{quoted_name}"
|
|
247
|
+
"DROP COLUMN #{quoted_name}#{' CASCADE' if op[:cascade]}"
|
|
228
248
|
when :rename_column
|
|
229
249
|
"RENAME COLUMN #{quoted_name} TO #{quote_identifier(op[:new_name])}"
|
|
230
250
|
when :set_column_type
|
|
@@ -240,7 +260,7 @@ module Sequel
|
|
|
240
260
|
when :add_constraint
|
|
241
261
|
"ADD #{constraint_definition_sql(op)}"
|
|
242
262
|
when :drop_constraint
|
|
243
|
-
"DROP CONSTRAINT #{quoted_name}"
|
|
263
|
+
"DROP CONSTRAINT #{quoted_name}#{' CASCADE' if op[:cascade]}"
|
|
244
264
|
else
|
|
245
265
|
raise Error, "Unsupported ALTER TABLE operation"
|
|
246
266
|
end
|
|
@@ -275,7 +295,12 @@ module Sequel
|
|
|
275
295
|
def column_definition_auto_increment_sql(sql, column)
|
|
276
296
|
sql << " #{auto_increment_sql}" if column[:auto_increment]
|
|
277
297
|
end
|
|
278
|
-
|
|
298
|
+
|
|
299
|
+
# Add collate SQL fragment to column creation SQL.
|
|
300
|
+
def column_definition_collate_sql(sql, column)
|
|
301
|
+
sql << " COLLATE #{column[:collate]}" if column[:collate]
|
|
302
|
+
end
|
|
303
|
+
|
|
279
304
|
# Add default SQL fragment to column creation SQL.
|
|
280
305
|
def column_definition_default_sql(sql, column)
|
|
281
306
|
sql << " DEFAULT #{literal(column[:default])}" if column.include?(:default)
|
|
@@ -354,7 +379,7 @@ module Sequel
|
|
|
354
379
|
|
|
355
380
|
# Execute the create index statements using the generator.
|
|
356
381
|
def create_table_indexes_from_generator(name, generator, options)
|
|
357
|
-
e = options[:ignore_index_errors]
|
|
382
|
+
e = options[:ignore_index_errors] || options[:if_not_exists]
|
|
358
383
|
generator.indexes.each do |index|
|
|
359
384
|
begin
|
|
360
385
|
index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}
|
|
@@ -366,7 +391,7 @@ module Sequel
|
|
|
366
391
|
|
|
367
392
|
# DDL statement for creating a table with the given name, columns, and options
|
|
368
393
|
def create_table_sql(name, generator, options)
|
|
369
|
-
"CREATE #{temporary_table_sql if options[:temp]}TABLE #{quote_schema_table(name)} (#{column_list_sql(generator)})"
|
|
394
|
+
"CREATE #{temporary_table_sql if options[:temp]}TABLE#{' IF NOT EXISTS' if options[:if_not_exists]} #{options[:temp] ? quote_identifier(name) : quote_schema_table(name)} (#{column_list_sql(generator)})"
|
|
370
395
|
end
|
|
371
396
|
|
|
372
397
|
# Default index name for the table and columns, may be too long
|
|
@@ -382,10 +407,15 @@ module Sequel
|
|
|
382
407
|
end
|
|
383
408
|
|
|
384
409
|
# SQL DDL statement to drop the table with the given name.
|
|
385
|
-
def drop_table_sql(name)
|
|
386
|
-
"DROP TABLE #{quote_schema_table(name)}"
|
|
410
|
+
def drop_table_sql(name, options)
|
|
411
|
+
"DROP TABLE #{quote_schema_table(name)}#{' CASCADE' if options[:cascade]}"
|
|
387
412
|
end
|
|
388
413
|
|
|
414
|
+
# SQL DDL statement to drop a view with the given name.
|
|
415
|
+
def drop_view_sql(name, options)
|
|
416
|
+
"DROP VIEW #{quote_schema_table(name)}#{' CASCADE' if options[:cascade]}"
|
|
417
|
+
end
|
|
418
|
+
|
|
389
419
|
# Proxy the filter_expr call to the dataset, used for creating constraints.
|
|
390
420
|
def filter_expr(*args, &block)
|
|
391
421
|
schema_utility_dataset.literal(schema_utility_dataset.send(:filter_expr, *args, &block))
|