sequel 3.21.0 → 3.41.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 +1131 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +106 -65
- data/Rakefile +59 -27
- data/bin/sequel +50 -26
- data/doc/active_record.rdoc +68 -52
- data/doc/advanced_associations.rdoc +201 -75
- data/doc/association_basics.rdoc +327 -79
- data/doc/bin_sequel.rdoc +144 -0
- data/doc/cheat_sheet.rdoc +21 -21
- data/doc/core_extensions.rdoc +374 -0
- data/doc/dataset_basics.rdoc +10 -10
- data/doc/dataset_filtering.rdoc +54 -42
- data/doc/mass_assignment.rdoc +56 -0
- data/doc/migration.rdoc +89 -557
- data/doc/model_hooks.rdoc +80 -29
- data/doc/object_model.rdoc +576 -0
- data/doc/opening_databases.rdoc +121 -53
- data/doc/prepared_statements.rdoc +41 -15
- data/doc/querying.rdoc +137 -56
- data/doc/reflection.rdoc +36 -10
- 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/release_notes/3.32.0.txt +202 -0
- data/doc/release_notes/3.33.0.txt +157 -0
- data/doc/release_notes/3.34.0.txt +671 -0
- data/doc/release_notes/3.35.0.txt +144 -0
- data/doc/release_notes/3.36.0.txt +245 -0
- data/doc/release_notes/3.37.0.txt +338 -0
- data/doc/release_notes/3.38.0.txt +234 -0
- data/doc/release_notes/3.39.0.txt +237 -0
- data/doc/release_notes/3.40.0.txt +73 -0
- data/doc/release_notes/3.41.0.txt +155 -0
- data/doc/schema_modification.rdoc +585 -0
- data/doc/sharding.rdoc +99 -8
- data/doc/sql.rdoc +154 -112
- data/doc/testing.rdoc +169 -0
- data/doc/thread_safety.rdoc +17 -0
- data/doc/transactions.rdoc +137 -0
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +78 -43
- data/lib/sequel/adapters/ado/access.rb +334 -0
- data/lib/sequel/adapters/ado/mssql.rb +18 -12
- data/lib/sequel/adapters/ado.rb +69 -21
- data/lib/sequel/adapters/amalgalite.rb +17 -14
- data/lib/sequel/adapters/cubrid.rb +143 -0
- data/lib/sequel/adapters/db2.rb +178 -85
- data/lib/sequel/adapters/dbi.rb +19 -21
- data/lib/sequel/adapters/do/mysql.rb +17 -11
- data/lib/sequel/adapters/do/postgres.rb +2 -61
- data/lib/sequel/adapters/do/sqlite.rb +0 -10
- data/lib/sequel/adapters/do.rb +20 -39
- data/lib/sequel/adapters/firebird.rb +33 -210
- data/lib/sequel/adapters/ibmdb.rb +452 -0
- data/lib/sequel/adapters/informix.rb +6 -29
- data/lib/sequel/adapters/jdbc/as400.rb +16 -34
- data/lib/sequel/adapters/jdbc/cubrid.rb +52 -0
- data/lib/sequel/adapters/jdbc/db2.rb +78 -0
- data/lib/sequel/adapters/jdbc/derby.rb +325 -0
- data/lib/sequel/adapters/jdbc/firebird.rb +24 -0
- data/lib/sequel/adapters/jdbc/h2.rb +68 -31
- data/lib/sequel/adapters/jdbc/hsqldb.rb +189 -0
- data/lib/sequel/adapters/jdbc/informix.rb +21 -0
- data/lib/sequel/adapters/jdbc/jtds.rb +40 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
- data/lib/sequel/adapters/jdbc/mysql.rb +16 -28
- data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
- data/lib/sequel/adapters/jdbc/postgresql.rb +77 -52
- data/lib/sequel/adapters/jdbc/progress.rb +21 -0
- data/lib/sequel/adapters/jdbc/sqlite.rb +20 -10
- data/lib/sequel/adapters/jdbc/sqlserver.rb +72 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
- data/lib/sequel/adapters/jdbc.rb +308 -114
- data/lib/sequel/adapters/mock.rb +372 -0
- data/lib/sequel/adapters/mysql.rb +130 -230
- data/lib/sequel/adapters/mysql2.rb +64 -63
- data/lib/sequel/adapters/odbc/mssql.rb +17 -9
- data/lib/sequel/adapters/odbc.rb +29 -10
- data/lib/sequel/adapters/openbase.rb +7 -11
- data/lib/sequel/adapters/oracle.rb +364 -57
- data/lib/sequel/adapters/postgres.rb +379 -145
- data/lib/sequel/adapters/shared/access.rb +236 -11
- data/lib/sequel/adapters/shared/cubrid.rb +216 -0
- data/lib/sequel/adapters/shared/db2.rb +353 -0
- data/lib/sequel/adapters/shared/firebird.rb +231 -0
- data/lib/sequel/adapters/shared/informix.rb +53 -0
- data/lib/sequel/adapters/shared/mssql.rb +412 -116
- data/lib/sequel/adapters/shared/mysql.rb +396 -89
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +166 -0
- data/lib/sequel/adapters/shared/oracle.rb +262 -45
- data/lib/sequel/adapters/shared/postgres.rb +688 -279
- data/lib/sequel/adapters/shared/progress.rb +5 -8
- data/lib/sequel/adapters/shared/sqlite.rb +317 -96
- data/lib/sequel/adapters/sqlite.rb +109 -46
- data/lib/sequel/adapters/swift/mysql.rb +10 -12
- data/lib/sequel/adapters/swift/postgres.rb +13 -79
- data/lib/sequel/adapters/swift/sqlite.rb +9 -6
- data/lib/sequel/adapters/swift.rb +31 -27
- data/lib/sequel/adapters/tinytds.rb +177 -25
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +77 -0
- data/lib/sequel/adapters/utils/pg_types.rb +81 -0
- data/lib/sequel/adapters/utils/split_alter_table.rb +36 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
- data/lib/sequel/ast_transformer.rb +194 -0
- data/lib/sequel/connection_pool/sharded_single.rb +23 -13
- data/lib/sequel/connection_pool/sharded_threaded.rb +64 -13
- data/lib/sequel/connection_pool/single.rb +11 -3
- data/lib/sequel/connection_pool/threaded.rb +69 -20
- data/lib/sequel/connection_pool.rb +20 -18
- data/lib/sequel/core.rb +143 -11
- data/lib/sequel/database/connecting.rb +66 -29
- data/lib/sequel/database/dataset.rb +4 -4
- data/lib/sequel/database/dataset_defaults.rb +63 -2
- data/lib/sequel/database/logging.rb +7 -2
- data/lib/sequel/database/misc.rb +192 -51
- data/lib/sequel/database/query.rb +299 -114
- data/lib/sequel/database/schema_generator.rb +103 -36
- data/lib/sequel/database/schema_methods.rb +310 -69
- data/lib/sequel/dataset/actions.rb +344 -90
- data/lib/sequel/dataset/features.rb +101 -8
- data/lib/sequel/dataset/graph.rb +42 -15
- data/lib/sequel/dataset/misc.rb +52 -25
- data/lib/sequel/dataset/mutation.rb +12 -7
- data/lib/sequel/dataset/prepared_statements.rb +68 -30
- data/lib/sequel/dataset/query.rb +322 -68
- data/lib/sequel/dataset/sql.rb +716 -293
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/exceptions.rb +4 -0
- data/lib/sequel/extensions/_pretty_table.rb +83 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +109 -0
- data/lib/sequel/extensions/blank.rb +4 -0
- data/lib/sequel/extensions/columns_introspection.rb +72 -0
- data/lib/sequel/extensions/connection_validator.rb +109 -0
- data/lib/sequel/extensions/constraint_validations.rb +451 -0
- data/lib/sequel/{core_sql.rb → extensions/core_extensions.rb} +30 -46
- data/lib/sequel/extensions/eval_inspect.rb +173 -0
- data/lib/sequel/extensions/inflector.rb +4 -0
- data/lib/sequel/extensions/looser_typecasting.rb +5 -4
- data/lib/sequel/extensions/migration.rb +100 -11
- data/lib/sequel/extensions/named_timezones.rb +9 -0
- data/lib/sequel/extensions/null_dataset.rb +94 -0
- data/lib/sequel/extensions/pagination.rb +4 -0
- data/lib/sequel/extensions/pg_array.rb +539 -0
- data/lib/sequel/extensions/pg_array_ops.rb +263 -0
- data/lib/sequel/extensions/pg_auto_parameterize.rb +175 -0
- data/lib/sequel/extensions/pg_hstore.rb +334 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +293 -0
- data/lib/sequel/extensions/pg_inet.rb +113 -0
- data/lib/sequel/extensions/pg_interval.rb +191 -0
- data/lib/sequel/extensions/pg_json.rb +212 -0
- data/lib/sequel/extensions/pg_range.rb +513 -0
- data/lib/sequel/extensions/pg_range_ops.rb +150 -0
- data/lib/sequel/extensions/pg_row.rb +576 -0
- data/lib/sequel/extensions/pg_row_ops.rb +182 -0
- data/lib/sequel/extensions/pg_statement_cache.rb +317 -0
- data/lib/sequel/extensions/pretty_table.rb +17 -72
- data/lib/sequel/extensions/query.rb +8 -4
- data/lib/sequel/extensions/query_literals.rb +79 -0
- data/lib/sequel/extensions/schema_caching.rb +76 -0
- data/lib/sequel/extensions/schema_dumper.rb +282 -76
- data/lib/sequel/extensions/select_remove.rb +39 -0
- data/lib/sequel/extensions/server_block.rb +140 -0
- data/lib/sequel/extensions/split_array_nil.rb +65 -0
- data/lib/sequel/extensions/sql_expr.rb +8 -110
- data/lib/sequel/extensions/string_date_time.rb +4 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +10 -4
- data/lib/sequel/extensions/to_dot.rb +99 -83
- data/lib/sequel/model/associations.rb +1263 -409
- data/lib/sequel/model/base.rb +624 -171
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/model/exceptions.rb +24 -2
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model.rb +30 -11
- data/lib/sequel/no_core_ext.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +13 -1
- data/lib/sequel/plugins/association_pks.rb +137 -16
- data/lib/sequel/plugins/caching.rb +25 -18
- data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/composition.rb +44 -12
- data/lib/sequel/plugins/constraint_validations.rb +198 -0
- data/lib/sequel/plugins/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/defaults_setter.rb +72 -0
- data/lib/sequel/plugins/dirty.rb +214 -0
- data/lib/sequel/plugins/eager_each.rb +59 -0
- data/lib/sequel/plugins/force_encoding.rb +6 -6
- data/lib/sequel/plugins/hook_class_methods.rb +1 -1
- data/lib/sequel/plugins/identity_map.rb +134 -15
- data/lib/sequel/plugins/instance_filters.rb +10 -0
- data/lib/sequel/plugins/instance_hooks.rb +1 -1
- data/lib/sequel/plugins/json_serializer.rb +77 -6
- data/lib/sequel/plugins/list.rb +13 -2
- data/lib/sequel/plugins/many_through_many.rb +103 -51
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +71 -0
- data/lib/sequel/plugins/nested_attributes.rb +150 -66
- data/lib/sequel/plugins/optimistic_locking.rb +8 -0
- data/lib/sequel/plugins/pg_row.rb +121 -0
- data/lib/sequel/plugins/pg_typecast_on_load.rb +65 -0
- data/lib/sequel/plugins/prepared_statements.rb +168 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +87 -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 +31 -17
- data/lib/sequel/plugins/schema.rb +8 -3
- data/lib/sequel/plugins/serialization.rb +98 -49
- data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
- data/lib/sequel/plugins/sharding.rb +21 -54
- data/lib/sequel/plugins/single_table_inheritance.rb +57 -12
- data/lib/sequel/plugins/static_cache.rb +99 -0
- data/lib/sequel/plugins/subclasses.rb +29 -3
- data/lib/sequel/plugins/tactical_eager_loading.rb +7 -7
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/touch.rb +18 -6
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +9 -12
- data/lib/sequel/plugins/update_primary_key.rb +2 -2
- data/lib/sequel/plugins/validation_class_methods.rb +2 -1
- data/lib/sequel/plugins/validation_helpers.rb +57 -4
- data/lib/sequel/plugins/xml_serializer.rb +15 -4
- data/lib/sequel/sql.rb +721 -141
- data/lib/sequel/timezones.rb +67 -40
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +146 -0
- data/spec/adapters/firebird_spec.rb +53 -39
- data/spec/adapters/mssql_spec.rb +261 -66
- data/spec/adapters/mysql_spec.rb +597 -352
- data/spec/adapters/oracle_spec.rb +92 -117
- data/spec/adapters/postgres_spec.rb +2103 -341
- data/spec/adapters/spec_helper.rb +16 -6
- data/spec/adapters/sqlite_spec.rb +237 -76
- data/spec/core/connection_pool_spec.rb +270 -141
- data/spec/core/database_spec.rb +980 -524
- data/spec/core/dataset_spec.rb +1658 -1243
- data/spec/core/expression_filters_spec.rb +741 -334
- data/spec/core/mock_adapter_spec.rb +453 -0
- data/spec/core/object_graph_spec.rb +88 -129
- data/spec/core/schema_generator_spec.rb +4 -4
- data/spec/core/schema_spec.rb +556 -53
- data/spec/core/spec_helper.rb +7 -48
- data/spec/core_extensions_spec.rb +626 -0
- data/spec/extensions/active_model_spec.rb +13 -0
- data/spec/extensions/arbitrary_servers_spec.rb +110 -0
- data/spec/extensions/association_autoreloading_spec.rb +18 -10
- data/spec/extensions/association_dependencies_spec.rb +15 -25
- data/spec/extensions/association_pks_spec.rb +227 -33
- data/spec/extensions/association_proxies_spec.rb +4 -4
- data/spec/extensions/boolean_readers_spec.rb +25 -25
- data/spec/extensions/caching_spec.rb +47 -51
- 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/connection_validator_spec.rb +118 -0
- data/spec/extensions/constraint_validations_plugin_spec.rb +196 -0
- data/spec/extensions/constraint_validations_spec.rb +316 -0
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/defaults_setter_spec.rb +88 -0
- data/spec/extensions/dirty_spec.rb +155 -0
- data/spec/extensions/eager_each_spec.rb +34 -0
- data/spec/extensions/eval_inspect_spec.rb +67 -0
- data/spec/extensions/force_encoding_spec.rb +4 -2
- data/spec/extensions/hook_class_methods_spec.rb +97 -128
- data/spec/extensions/identity_map_spec.rb +142 -24
- data/spec/extensions/inflector_spec.rb +0 -4
- data/spec/extensions/instance_filters_spec.rb +11 -21
- data/spec/extensions/instance_hooks_spec.rb +72 -0
- data/spec/extensions/json_serializer_spec.rb +49 -12
- data/spec/extensions/lazy_attributes_spec.rb +16 -20
- data/spec/extensions/list_spec.rb +49 -40
- data/spec/extensions/looser_typecasting_spec.rb +7 -7
- data/spec/extensions/many_through_many_spec.rb +368 -254
- data/spec/extensions/many_to_one_pk_lookup_spec.rb +140 -0
- data/spec/extensions/migration_spec.rb +140 -35
- data/spec/extensions/named_timezones_spec.rb +29 -11
- data/spec/extensions/nested_attributes_spec.rb +268 -89
- data/spec/extensions/null_dataset_spec.rb +85 -0
- data/spec/extensions/optimistic_locking_spec.rb +24 -21
- data/spec/extensions/pg_array_ops_spec.rb +112 -0
- data/spec/extensions/pg_array_spec.rb +324 -0
- data/spec/extensions/pg_auto_parameterize_spec.rb +65 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +140 -0
- data/spec/extensions/pg_hstore_spec.rb +200 -0
- data/spec/extensions/pg_inet_spec.rb +47 -0
- data/spec/extensions/pg_interval_spec.rb +72 -0
- data/spec/extensions/pg_json_spec.rb +99 -0
- data/spec/extensions/pg_range_ops_spec.rb +56 -0
- data/spec/extensions/pg_range_spec.rb +395 -0
- data/spec/extensions/pg_row_ops_spec.rb +58 -0
- data/spec/extensions/pg_row_plugin_spec.rb +49 -0
- data/spec/extensions/pg_row_spec.rb +340 -0
- data/spec/extensions/pg_statement_cache_spec.rb +208 -0
- data/spec/extensions/pg_typecast_on_load_spec.rb +58 -0
- 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 +87 -0
- data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
- data/spec/extensions/pretty_table_spec.rb +7 -6
- data/spec/extensions/query_literals_spec.rb +167 -0
- data/spec/extensions/query_spec.rb +9 -3
- data/spec/extensions/rcte_tree_spec.rb +50 -43
- data/spec/extensions/schema_caching_spec.rb +41 -0
- data/spec/extensions/schema_dumper_spec.rb +434 -49
- data/spec/extensions/schema_spec.rb +30 -49
- data/spec/extensions/select_remove_spec.rb +38 -0
- data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
- data/spec/extensions/serialization_spec.rb +86 -48
- data/spec/extensions/server_block_spec.rb +90 -0
- data/spec/extensions/sharding_spec.rb +69 -143
- data/spec/extensions/single_table_inheritance_spec.rb +65 -29
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +34 -67
- data/spec/extensions/split_array_nil_spec.rb +24 -0
- data/spec/extensions/sql_expr_spec.rb +29 -60
- data/spec/extensions/static_cache_spec.rb +145 -0
- data/spec/extensions/subclasses_spec.rb +14 -0
- data/spec/extensions/tactical_eager_loading_spec.rb +17 -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 +8 -11
- data/spec/extensions/touch_spec.rb +53 -14
- data/spec/extensions/tree_spec.rb +11 -26
- data/spec/extensions/typecast_on_load_spec.rb +9 -6
- data/spec/extensions/update_primary_key_spec.rb +30 -24
- data/spec/extensions/validation_class_methods_spec.rb +77 -68
- data/spec/extensions/validation_helpers_spec.rb +48 -37
- data/spec/extensions/xml_serializer_spec.rb +29 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +4 -0
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +4 -0
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +3 -0
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +3 -0
- data/spec/integration/associations_test.rb +659 -21
- data/spec/integration/database_test.rb +25 -5
- data/spec/integration/dataset_test.rb +729 -141
- data/spec/integration/eager_loader_test.rb +38 -54
- data/spec/integration/migrator_test.rb +2 -3
- data/spec/integration/model_test.rb +81 -2
- data/spec/integration/plugin_test.rb +871 -160
- data/spec/integration/prepared_statement_test.rb +272 -128
- data/spec/integration/schema_test.rb +377 -57
- data/spec/integration/spec_helper.rb +49 -32
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +183 -8
- data/spec/integration/type_test.rb +40 -8
- data/spec/model/association_reflection_spec.rb +207 -8
- data/spec/model/associations_spec.rb +1206 -693
- data/spec/model/base_spec.rb +334 -100
- data/spec/model/dataset_methods_spec.rb +45 -27
- data/spec/model/eager_loading_spec.rb +828 -692
- data/spec/model/hooks_spec.rb +355 -67
- data/spec/model/model_spec.rb +251 -179
- data/spec/model/plugins_spec.rb +24 -13
- data/spec/model/record_spec.rb +506 -232
- data/spec/model/spec_helper.rb +16 -77
- data/spec/model/validations_spec.rb +38 -2
- data/spec/rcov.opts +2 -0
- metadata +223 -81
- data/spec/core/core_sql_spec.rb +0 -451
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
module Sequel
|
|
2
2
|
# The Schema module holds the schema generators.
|
|
3
3
|
module Schema
|
|
4
|
-
# Schema::
|
|
4
|
+
# Schema::CreateTableGenerator is an internal class that the user is not expected
|
|
5
5
|
# to instantiate directly. Instances are created by Database#create_table.
|
|
6
6
|
# It is used to specify table creation parameters. It takes a Database
|
|
7
7
|
# object and a block of column/index/constraint specifications, and
|
|
8
8
|
# gives the Database a table description, which the database uses to
|
|
9
9
|
# create a table.
|
|
10
10
|
#
|
|
11
|
-
# Schema::
|
|
11
|
+
# Schema::CreateTableGenerator has some methods but also includes method_missing,
|
|
12
12
|
# allowing users to specify column type as a method instead of using
|
|
13
13
|
# the column method, which makes for a nicer DSL.
|
|
14
14
|
#
|
|
15
15
|
# For more information on Sequel's support for schema modification, see
|
|
16
|
-
# the {"
|
|
17
|
-
class
|
|
16
|
+
# the {"Schema Modification" guide}[link:files/doc/schema_modification_rdoc.html].
|
|
17
|
+
class CreateTableGenerator
|
|
18
18
|
# Classes specifying generic types that Sequel will convert to database-specific types.
|
|
19
19
|
GENERIC_TYPES=[String, Integer, Fixnum, Bignum, Float, Numeric, BigDecimal,
|
|
20
20
|
Date, DateTime, Time, File, TrueClass, FalseClass]
|
|
@@ -83,30 +83,30 @@ module Sequel
|
|
|
83
83
|
# reference table will use for its foreign key a value that does not
|
|
84
84
|
# exists(yet) on referenced table. Basically it adds
|
|
85
85
|
# DEFERRABLE INITIALLY DEFERRED on key creation.
|
|
86
|
-
# :index :: Create an index on this column.
|
|
86
|
+
# :index :: Create an index on this column. If given a hash, use the hash as the
|
|
87
|
+
# options for the index.
|
|
87
88
|
# :key :: For foreign key columns, the column in the associated table
|
|
88
89
|
# that this column references. Unnecessary if this column
|
|
89
|
-
# references the primary key of the associated table
|
|
90
|
+
# references the primary key of the associated table, except if you are
|
|
91
|
+
# using MySQL.
|
|
90
92
|
# :null :: Mark the column as allowing NULL values (if true),
|
|
91
93
|
# or not allowing NULL values (if false). If unspecified, will default
|
|
92
94
|
# to whatever the database default is.
|
|
93
95
|
# :on_delete :: Specify the behavior of this column when being deleted
|
|
94
|
-
# (:restrict, cascade, :set_null, :set_default, :no_action).
|
|
96
|
+
# (:restrict, :cascade, :set_null, :set_default, :no_action).
|
|
95
97
|
# :on_update :: Specify the behavior of this column when being updated
|
|
96
|
-
# (:restrict, cascade, :set_null, :set_default, :no_action).
|
|
98
|
+
# (:restrict, :cascade, :set_null, :set_default, :no_action).
|
|
97
99
|
# :primary_key :: Make the column as a single primary key column. This should only
|
|
98
100
|
# be used if you have a single, nonautoincrementing primary key column.
|
|
99
|
-
# :
|
|
100
|
-
#
|
|
101
|
-
# An array of two integers can be provided to set the size and the
|
|
102
|
-
# precision, respectively, of decimal columns.
|
|
101
|
+
# :type :: Overrides the type given as the argument. Generally not used by column
|
|
102
|
+
# itself, but can be passed as an option to other methods that call column.
|
|
103
103
|
# :unique :: Mark the column as unique, generally has the same effect as
|
|
104
104
|
# creating a unique index on the column.
|
|
105
|
-
# :unsigned :: Make the column type unsigned, only useful for integer
|
|
106
|
-
# columns.
|
|
107
105
|
def column(name, type, opts = {})
|
|
108
106
|
columns << {:name => name, :type => type}.merge(opts)
|
|
109
|
-
|
|
107
|
+
if index_opts = opts[:index]
|
|
108
|
+
index(name, index_opts.is_a?(Hash) ? index_opts : {})
|
|
109
|
+
end
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
# Adds a named constraint (or unnamed if name is nil) to the DDL,
|
|
@@ -124,6 +124,14 @@ module Sequel
|
|
|
124
124
|
# foreign_key(:artist_id) # artist_id INTEGER
|
|
125
125
|
# foreign_key(:artist_id, :artists) # artist_id INTEGER REFERENCES artists
|
|
126
126
|
# foreign_key(:artist_id, :artists, :key=>:id) # artist_id INTEGER REFERENCES artists(id)
|
|
127
|
+
# foreign_key(:artist_id, :artists, :type=>String) # artist_id varchar(255) REFERENCES artists(id)
|
|
128
|
+
#
|
|
129
|
+
# If you want a foreign key constraint without adding a column (usually because it is a
|
|
130
|
+
# composite foreign key), you can provide an array of columns as the first argument, and
|
|
131
|
+
# you can provide the :name option to name the constraint:
|
|
132
|
+
#
|
|
133
|
+
# foreign_key([:artist_name, :artist_location], :artists, :name=>:artist_fk)
|
|
134
|
+
# # ADD CONSTRAINT artist_fk FOREIGN KEY (artist_name, artist_location) REFERENCES artists
|
|
127
135
|
def foreign_key(name, table=nil, opts = {})
|
|
128
136
|
opts = case table
|
|
129
137
|
when Hash
|
|
@@ -140,6 +148,12 @@ module Sequel
|
|
|
140
148
|
end
|
|
141
149
|
|
|
142
150
|
# Add a full text index on the given columns to the DDL.
|
|
151
|
+
#
|
|
152
|
+
# PostgreSQL specific options:
|
|
153
|
+
# :language :: Set a language to use for the index (default: simple).
|
|
154
|
+
#
|
|
155
|
+
# Microsoft SQL Server specific options:
|
|
156
|
+
# :key_index :: The KEY INDEX to use for the full text index.
|
|
143
157
|
def full_text_index(columns, opts = {})
|
|
144
158
|
index(columns, opts.merge(:type => :full_text))
|
|
145
159
|
end
|
|
@@ -150,12 +164,26 @@ module Sequel
|
|
|
150
164
|
end
|
|
151
165
|
|
|
152
166
|
# Add an index on the given column(s) with the given options to the DDL.
|
|
153
|
-
#
|
|
167
|
+
# General options:
|
|
154
168
|
#
|
|
169
|
+
# :name :: The name to use for the index. If not given, a default name
|
|
170
|
+
# based on the table and columns is used.
|
|
155
171
|
# :type :: The type of index to use (only supported by some databases)
|
|
156
172
|
# :unique :: Make the index unique, so duplicate values are not allowed.
|
|
157
173
|
# :where :: Create a partial index (only supported by some databases)
|
|
158
174
|
#
|
|
175
|
+
# PostgreSQL specific options:
|
|
176
|
+
#
|
|
177
|
+
# :concurrently :: Create the index concurrently, so it doesn't block
|
|
178
|
+
# operations on the table while the index is being
|
|
179
|
+
# built.
|
|
180
|
+
# :opclass :: Use a specific operator class in the index.
|
|
181
|
+
#
|
|
182
|
+
# Microsoft SQL Server specific options:
|
|
183
|
+
#
|
|
184
|
+
# :include :: Include additional column values in the index, without
|
|
185
|
+
# actually indexing on those values.
|
|
186
|
+
#
|
|
159
187
|
# index :name
|
|
160
188
|
# # CREATE INDEX table_name_index ON table (name)
|
|
161
189
|
#
|
|
@@ -230,6 +258,9 @@ module Sequel
|
|
|
230
258
|
|
|
231
259
|
add_type_method(*GENERIC_TYPES)
|
|
232
260
|
end
|
|
261
|
+
|
|
262
|
+
# Alias of CreateTableGenerator for backwards compatibility.
|
|
263
|
+
Generator = CreateTableGenerator
|
|
233
264
|
|
|
234
265
|
# Schema::AlterTableGenerator is an internal class that the user is not expected
|
|
235
266
|
# to instantiate directly. Instances are created by Database#alter_table.
|
|
@@ -239,7 +270,7 @@ module Sequel
|
|
|
239
270
|
# alter a table's description.
|
|
240
271
|
#
|
|
241
272
|
# For more information on Sequel's support for schema modification, see
|
|
242
|
-
# the {"
|
|
273
|
+
# the {"Schema Modification" guide}[link:files/doc/schema_modification_rdoc.html].
|
|
243
274
|
class AlterTableGenerator
|
|
244
275
|
# An array of DDL operations to perform
|
|
245
276
|
attr_reader :operations
|
|
@@ -253,7 +284,7 @@ module Sequel
|
|
|
253
284
|
end
|
|
254
285
|
|
|
255
286
|
# Add a column with the given name, type, and opts to the DDL for the table.
|
|
256
|
-
# See
|
|
287
|
+
# See CreateTableGenerator#column for the available options.
|
|
257
288
|
#
|
|
258
289
|
# add_column(:name, String) # ADD COLUMN name varchar(255)
|
|
259
290
|
def add_column(name, type, opts = {})
|
|
@@ -261,9 +292,9 @@ module Sequel
|
|
|
261
292
|
end
|
|
262
293
|
|
|
263
294
|
# Add a constraint with the given name and args to the DDL for the table.
|
|
264
|
-
# See
|
|
295
|
+
# See CreateTableGenerator#constraint.
|
|
265
296
|
#
|
|
266
|
-
# add_constraint(:valid_name,
|
|
297
|
+
# add_constraint(:valid_name, Sequel.like(:name, 'A%'))
|
|
267
298
|
# # ADD CONSTRAINT valid_name CHECK (name LIKE 'A%')
|
|
268
299
|
def add_constraint(name, *args, &block)
|
|
269
300
|
@operations << {:op => :add_constraint, :name => name, :type => :check, :check => block || args}
|
|
@@ -278,37 +309,47 @@ module Sequel
|
|
|
278
309
|
end
|
|
279
310
|
|
|
280
311
|
# Add a foreign key with the given name and referencing the given table
|
|
281
|
-
# to the DDL for the table. See
|
|
312
|
+
# to the DDL for the table. See CreateTableGenerator#column for the available options.
|
|
282
313
|
#
|
|
283
314
|
# You can also pass an array of column names for creating composite foreign
|
|
284
|
-
# keys. In this case, it will assume the columns
|
|
285
|
-
# the constraint.
|
|
315
|
+
# keys. In this case, it will assume the columns exist and will only add
|
|
316
|
+
# the constraint. You can provide a :name option to name the constraint.
|
|
286
317
|
#
|
|
287
318
|
# NOTE: If you need to add a foreign key constraint to a single existing column
|
|
288
319
|
# use the composite key syntax even if it is only one column.
|
|
289
320
|
#
|
|
290
321
|
# add_foreign_key(:artist_id, :table) # ADD COLUMN artist_id integer REFERENCES table
|
|
291
322
|
# add_foreign_key([:name], :table) # ADD FOREIGN KEY (name) REFERENCES table
|
|
323
|
+
#
|
|
324
|
+
# PostgreSQL specific options:
|
|
325
|
+
#
|
|
326
|
+
# :not_valid :: Set to true to add the constraint with the NOT VALID syntax.
|
|
327
|
+
# This makes it so that future inserts must respect referential
|
|
328
|
+
# integrity, but allows the constraint to be added even if existing
|
|
329
|
+
# column values reference rows that do not exist. After all the
|
|
330
|
+
# existing data has been cleaned up, validate_constraint can be used
|
|
331
|
+
# to mark the constraint as valid. Note that this option only makes
|
|
332
|
+
# sense when using an array of columns.
|
|
292
333
|
def add_foreign_key(name, table, opts = {})
|
|
293
334
|
return add_composite_foreign_key(name, table, opts) if name.is_a?(Array)
|
|
294
335
|
add_column(name, Integer, {:table=>table}.merge(opts))
|
|
295
336
|
end
|
|
296
337
|
|
|
297
338
|
# Add a full text index on the given columns to the DDL for the table.
|
|
298
|
-
# See
|
|
339
|
+
# See CreateTableGenerator#index for available options.
|
|
299
340
|
def add_full_text_index(columns, opts = {})
|
|
300
341
|
add_index(columns, {:type=>:full_text}.merge(opts))
|
|
301
342
|
end
|
|
302
343
|
|
|
303
344
|
# Add an index on the given columns to the DDL for the table. See
|
|
304
|
-
#
|
|
345
|
+
# CreateTableGenerator#index for available options.
|
|
305
346
|
#
|
|
306
347
|
# add_index(:artist_id) # CREATE INDEX table_artist_id_index ON table (artist_id)
|
|
307
348
|
def add_index(columns, opts = {})
|
|
308
349
|
@operations << {:op => :add_index, :columns => Array(columns)}.merge(opts)
|
|
309
350
|
end
|
|
310
351
|
|
|
311
|
-
# Add a primary key to the DDL for the table. See
|
|
352
|
+
# Add a primary key to the DDL for the table. See CreateTableGenerator#column
|
|
312
353
|
# for the available options. Like +add_foreign_key+, if you specify
|
|
313
354
|
# the column name as an array, it just creates a constraint:
|
|
314
355
|
#
|
|
@@ -321,7 +362,7 @@ module Sequel
|
|
|
321
362
|
end
|
|
322
363
|
|
|
323
364
|
# Add a spatial index on the given columns to the DDL for the table.
|
|
324
|
-
# See
|
|
365
|
+
# See CreateTableGenerator#index for available options.
|
|
325
366
|
def add_spatial_index(columns, opts = {})
|
|
326
367
|
add_index(columns, {:type=>:spatial}.merge(opts))
|
|
327
368
|
end
|
|
@@ -329,18 +370,33 @@ module Sequel
|
|
|
329
370
|
# Remove a column from the DDL for the table.
|
|
330
371
|
#
|
|
331
372
|
# drop_column(:artist_id) # DROP COLUMN artist_id
|
|
332
|
-
|
|
333
|
-
|
|
373
|
+
# drop_column(:artist_id, :cascade=>true) # DROP COLUMN artist_id CASCADE
|
|
374
|
+
def drop_column(name, opts={})
|
|
375
|
+
@operations << {:op => :drop_column, :name => name}.merge(opts)
|
|
334
376
|
end
|
|
335
377
|
|
|
336
|
-
# Remove a constraint from the DDL for the table.
|
|
378
|
+
# Remove a constraint from the DDL for the table. MySQL/SQLite specific options:
|
|
379
|
+
#
|
|
380
|
+
# :type :: Set the type of constraint to drop, either :primary_key, :foreign_key,
|
|
381
|
+
# or :unique.
|
|
337
382
|
#
|
|
338
383
|
# drop_constraint(:unique_name) # DROP CONSTRAINT unique_name
|
|
339
|
-
|
|
340
|
-
|
|
384
|
+
# drop_constraint(:unique_name, :cascade=>true) # DROP CONSTRAINT unique_name CASCADE
|
|
385
|
+
def drop_constraint(name, opts={})
|
|
386
|
+
@operations << {:op => :drop_constraint, :name => name}.merge(opts)
|
|
341
387
|
end
|
|
342
388
|
|
|
343
|
-
# Remove an index from the DDL for the table.
|
|
389
|
+
# Remove an index from the DDL for the table. General options:
|
|
390
|
+
#
|
|
391
|
+
# :name :: The name of the index to drop. If not given, uses the same name
|
|
392
|
+
# that would be used by add_index with the same columns.
|
|
393
|
+
#
|
|
394
|
+
# PostgreSQL specific options:
|
|
395
|
+
#
|
|
396
|
+
# :cascade :: Cascade the index drop to dependent objects.
|
|
397
|
+
# :concurrently :: Drop the index using CONCURRENTLY, which doesn't block
|
|
398
|
+
# operations on the table. Supported in PostgreSQL 9.2+.
|
|
399
|
+
# :if_exists :: Only drop the index if it already exists.
|
|
344
400
|
#
|
|
345
401
|
# drop_index(:artist_id) # DROP INDEX table_artist_id_index
|
|
346
402
|
# drop_index([:a, :b]) # DROP INDEX table_a_b_index
|
|
@@ -366,17 +422,28 @@ module Sequel
|
|
|
366
422
|
# Modify a column's type in the DDL for the table.
|
|
367
423
|
#
|
|
368
424
|
# set_column_type(:artist_name, 'char(10)') # ALTER COLUMN artist_name TYPE char(10)
|
|
425
|
+
#
|
|
426
|
+
# PostgreSQL specific options:
|
|
427
|
+
#
|
|
428
|
+
# :using :: Add a USING clause that specifies how to convert existing values to new values.
|
|
369
429
|
def set_column_type(name, type, opts={})
|
|
370
430
|
@operations << {:op => :set_column_type, :name => name, :type => type}.merge(opts)
|
|
371
431
|
end
|
|
372
432
|
|
|
373
|
-
#
|
|
433
|
+
# Set a given column as allowing NULL values.
|
|
374
434
|
#
|
|
375
|
-
# set_column_allow_null(:artist_name
|
|
376
|
-
def set_column_allow_null(name, allow_null)
|
|
435
|
+
# set_column_allow_null(:artist_name) # ALTER COLUMN artist_name DROP NOT NULL
|
|
436
|
+
def set_column_allow_null(name, allow_null=true)
|
|
377
437
|
@operations << {:op => :set_column_null, :name => name, :null => allow_null}
|
|
378
438
|
end
|
|
379
439
|
|
|
440
|
+
# Set a given column as not allowing NULL values.
|
|
441
|
+
#
|
|
442
|
+
# set_column_not_null(:artist_name) # ALTER COLUMN artist_name SET NOT NULL
|
|
443
|
+
def set_column_not_null(name)
|
|
444
|
+
set_column_allow_null(name, false)
|
|
445
|
+
end
|
|
446
|
+
|
|
380
447
|
private
|
|
381
448
|
|
|
382
449
|
# Add a composite primary key constraint
|