sequel 4.26.0 → 5.37.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.
- checksums.yaml +5 -5
- data/CHANGELOG +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/error_splitter.rb +19 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -179
- data/spec/core/schema_spec.rb +0 -1659
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -712
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -395
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -229
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -404
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -789
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
class Database
|
|
3
5
|
# ---------------------
|
|
@@ -5,32 +7,19 @@ module Sequel
|
|
|
5
7
|
# These methods execute code on the database that modifies the database's schema.
|
|
6
8
|
# ---------------------
|
|
7
9
|
|
|
8
|
-
AUTOINCREMENT = 'AUTOINCREMENT'.freeze
|
|
9
|
-
COMMA_SEPARATOR = ', '.freeze
|
|
10
|
-
NOT_NULL = ' NOT NULL'.freeze
|
|
11
|
-
NULL = ' NULL'.freeze
|
|
12
|
-
PRIMARY_KEY = ' PRIMARY KEY'.freeze
|
|
13
|
-
TEMPORARY = 'TEMPORARY '.freeze
|
|
14
|
-
UNDERSCORE = '_'.freeze
|
|
15
|
-
UNIQUE = ' UNIQUE'.freeze
|
|
16
|
-
UNSIGNED = ' UNSIGNED'.freeze
|
|
17
|
-
|
|
18
10
|
# The order of column modifiers to use when defining a column.
|
|
19
|
-
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references]
|
|
20
|
-
|
|
21
|
-
# The default options for join table columns.
|
|
22
|
-
DEFAULT_JOIN_TABLE_COLUMN_OPTIONS = {:null=>false}
|
|
11
|
+
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references].freeze
|
|
23
12
|
|
|
24
13
|
# The alter table operations that are combinable.
|
|
25
14
|
COMBINABLE_ALTER_TABLE_OPS = [:add_column, :drop_column, :rename_column,
|
|
26
15
|
:set_column_type, :set_column_default, :set_column_null,
|
|
27
|
-
:add_constraint, :drop_constraint]
|
|
16
|
+
:add_constraint, :drop_constraint].freeze
|
|
28
17
|
|
|
29
18
|
# Adds a column to the specified table. This method expects a column name,
|
|
30
19
|
# a datatype and optionally a hash with additional constraints and options:
|
|
31
20
|
#
|
|
32
|
-
# DB.add_column :items, :name,
|
|
33
|
-
# DB.add_column :items, :category,
|
|
21
|
+
# DB.add_column :items, :name, String, unique: true, null: false
|
|
22
|
+
# DB.add_column :items, :category, String, default: 'ruby'
|
|
34
23
|
#
|
|
35
24
|
# See <tt>alter_table</tt>.
|
|
36
25
|
def add_column(table, *args)
|
|
@@ -40,9 +29,10 @@ module Sequel
|
|
|
40
29
|
# Adds an index to a table for the given columns:
|
|
41
30
|
#
|
|
42
31
|
# DB.add_index :posts, :title
|
|
43
|
-
# DB.add_index :posts, [:author, :title], :
|
|
32
|
+
# DB.add_index :posts, [:author, :title], unique: true
|
|
44
33
|
#
|
|
45
34
|
# Options:
|
|
35
|
+
#
|
|
46
36
|
# :ignore_errors :: Ignore any DatabaseErrors that are raised
|
|
47
37
|
# :name :: Name to use for index instead of default
|
|
48
38
|
#
|
|
@@ -54,16 +44,17 @@ module Sequel
|
|
|
54
44
|
rescue DatabaseError
|
|
55
45
|
raise unless e
|
|
56
46
|
end
|
|
47
|
+
nil
|
|
57
48
|
end
|
|
58
49
|
|
|
59
50
|
# Alters the given table with the specified block. Example:
|
|
60
51
|
#
|
|
61
52
|
# DB.alter_table :items do
|
|
62
|
-
# add_column :category,
|
|
53
|
+
# add_column :category, String, default: 'ruby'
|
|
63
54
|
# drop_column :category
|
|
64
55
|
# rename_column :cntr, :counter
|
|
65
|
-
# set_column_type :value,
|
|
66
|
-
# set_column_default :value,
|
|
56
|
+
# set_column_type :value, Float
|
|
57
|
+
# set_column_default :value, 4.2
|
|
67
58
|
# add_index [:group, :category]
|
|
68
59
|
# drop_index [:group, :category]
|
|
69
60
|
# end
|
|
@@ -73,8 +64,8 @@ module Sequel
|
|
|
73
64
|
# available for index definition.
|
|
74
65
|
#
|
|
75
66
|
# See <tt>Schema::AlterTableGenerator</tt> and the {"Migrations and Schema Modification" guide}[rdoc-ref:doc/migration.rdoc].
|
|
76
|
-
def alter_table(name,
|
|
77
|
-
generator
|
|
67
|
+
def alter_table(name, &block)
|
|
68
|
+
generator = alter_table_generator(&block)
|
|
78
69
|
remove_cached_schema(name)
|
|
79
70
|
apply_alter_table_generator(name, generator)
|
|
80
71
|
nil
|
|
@@ -89,7 +80,7 @@ module Sequel
|
|
|
89
80
|
# Create a join table using a hash of foreign keys to referenced
|
|
90
81
|
# table names. Example:
|
|
91
82
|
#
|
|
92
|
-
# create_join_table(:
|
|
83
|
+
# create_join_table(cat_id: :cats, dog_id: :dogs)
|
|
93
84
|
# # CREATE TABLE cats_dogs (
|
|
94
85
|
# # cat_id integer NOT NULL REFERENCES cats,
|
|
95
86
|
# # dog_id integer NOT NULL REFERENCES dogs,
|
|
@@ -102,15 +93,22 @@ module Sequel
|
|
|
102
93
|
# key ensures that entries in the table are unique, which is the typical
|
|
103
94
|
# desire for a join table.
|
|
104
95
|
#
|
|
96
|
+
# The default table name this will create is the sorted version of the two
|
|
97
|
+
# hash values, joined by an underscore. So the following two method calls
|
|
98
|
+
# create the same table:
|
|
99
|
+
#
|
|
100
|
+
# create_join_table(cat_id: :cats, dog_id: :dogs) # cats_dogs
|
|
101
|
+
# create_join_table(dog_id: :dogs, cat_id: :cats) # cats_dogs
|
|
102
|
+
#
|
|
105
103
|
# You can provide column options by making the values in the hash
|
|
106
104
|
# be option hashes, so long as the option hashes have a :table
|
|
107
105
|
# entry giving the table referenced:
|
|
108
106
|
#
|
|
109
|
-
# create_join_table(:
|
|
107
|
+
# create_join_table(cat_id: {table: :cats, type: :Bignum}, dog_id: :dogs)
|
|
110
108
|
#
|
|
111
109
|
# You can provide a second argument which is a table options hash:
|
|
112
110
|
#
|
|
113
|
-
# create_join_table({:
|
|
111
|
+
# create_join_table({cat_id: :cats, dog_id: :dogs}, temp: true)
|
|
114
112
|
#
|
|
115
113
|
# Some table options are handled specially:
|
|
116
114
|
#
|
|
@@ -119,19 +117,20 @@ module Sequel
|
|
|
119
117
|
# :no_index :: Set to true not to create the second index.
|
|
120
118
|
# :no_primary_key :: Set to true to not create the primary key.
|
|
121
119
|
def create_join_table(hash, options=OPTS)
|
|
122
|
-
keys = hash.keys.
|
|
120
|
+
keys = hash.keys.sort
|
|
123
121
|
create_table(join_table_name(hash, options), options) do
|
|
124
122
|
keys.each do |key|
|
|
125
123
|
v = hash[key]
|
|
126
124
|
unless v.is_a?(Hash)
|
|
127
125
|
v = {:table=>v}
|
|
128
126
|
end
|
|
129
|
-
v =
|
|
127
|
+
v[:null] = false unless v.has_key?(:null)
|
|
130
128
|
foreign_key(key, v)
|
|
131
129
|
end
|
|
132
130
|
primary_key(keys) unless options[:no_primary_key]
|
|
133
|
-
index(keys.reverse, options[:index_options] ||
|
|
131
|
+
index(keys.reverse, options[:index_options] || OPTS) unless options[:no_index]
|
|
134
132
|
end
|
|
133
|
+
nil
|
|
135
134
|
end
|
|
136
135
|
|
|
137
136
|
# Forcibly create a join table, attempting to drop it if it already exists, then creating it.
|
|
@@ -153,7 +152,7 @@ module Sequel
|
|
|
153
152
|
#
|
|
154
153
|
# DB.create_table :posts do
|
|
155
154
|
# primary_key :id
|
|
156
|
-
# column :title,
|
|
155
|
+
# column :title, String
|
|
157
156
|
# String :content
|
|
158
157
|
# index :title
|
|
159
158
|
# end
|
|
@@ -182,11 +181,11 @@ module Sequel
|
|
|
182
181
|
# where keys are option names and values are option values. Note
|
|
183
182
|
# that option names are unquoted, so you should not use untrusted
|
|
184
183
|
# keys.
|
|
184
|
+
# :tablespace :: The tablespace to use for the table.
|
|
185
185
|
#
|
|
186
|
-
# See <tt>Schema::
|
|
186
|
+
# See <tt>Schema::CreateTableGenerator</tt> and the {"Schema Modification" guide}[rdoc-ref:doc/schema_modification.rdoc].
|
|
187
187
|
def create_table(name, options=OPTS, &block)
|
|
188
188
|
remove_cached_schema(name)
|
|
189
|
-
options = {:generator=>options} if options.is_a?(Schema::CreateTableGenerator)
|
|
190
189
|
if sql = options[:as]
|
|
191
190
|
raise(Error, "can't provide both :as option and block to create_table") if block
|
|
192
191
|
create_table_as(name, sql, options)
|
|
@@ -194,8 +193,8 @@ module Sequel
|
|
|
194
193
|
generator = options[:generator] || create_table_generator(&block)
|
|
195
194
|
create_table_from_generator(name, generator, options)
|
|
196
195
|
create_table_indexes_from_generator(name, generator, options)
|
|
197
|
-
nil
|
|
198
196
|
end
|
|
197
|
+
nil
|
|
199
198
|
end
|
|
200
199
|
|
|
201
200
|
# Forcibly create a table, attempting to drop it if it already exists, then creating it.
|
|
@@ -233,7 +232,7 @@ module Sequel
|
|
|
233
232
|
# Creates a view, replacing a view with the same name if one already exists.
|
|
234
233
|
#
|
|
235
234
|
# DB.create_or_replace_view(:some_items, "SELECT * FROM items WHERE price < 100")
|
|
236
|
-
# DB.create_or_replace_view(:some_items, DB[:items].
|
|
235
|
+
# DB.create_or_replace_view(:some_items, DB[:items].where(category: 'ruby'))
|
|
237
236
|
#
|
|
238
237
|
# For databases where replacing a view is not natively supported, support
|
|
239
238
|
# is emulated by dropping a view with the same name before creating the view.
|
|
@@ -245,6 +244,7 @@ module Sequel
|
|
|
245
244
|
end
|
|
246
245
|
|
|
247
246
|
create_view(name, source, options)
|
|
247
|
+
nil
|
|
248
248
|
end
|
|
249
249
|
|
|
250
250
|
# Creates a view based on a dataset or an SQL string:
|
|
@@ -253,11 +253,11 @@ module Sequel
|
|
|
253
253
|
# # CREATE VIEW cheap_items AS
|
|
254
254
|
# # SELECT * FROM items WHERE price < 100
|
|
255
255
|
#
|
|
256
|
-
# DB.create_view(:ruby_items, DB[:items].where(:
|
|
256
|
+
# DB.create_view(:ruby_items, DB[:items].where(category: 'ruby'))
|
|
257
257
|
# # CREATE VIEW ruby_items AS
|
|
258
258
|
# # SELECT * FROM items WHERE (category = 'ruby')
|
|
259
259
|
#
|
|
260
|
-
# DB.create_view(:checked_items, DB[:items].where(:foo), :
|
|
260
|
+
# DB.create_view(:checked_items, DB[:items].where(:foo), check: true)
|
|
261
261
|
# # CREATE VIEW checked_items AS
|
|
262
262
|
# # SELECT * FROM items WHERE foo
|
|
263
263
|
# # WITH CHECK OPTION
|
|
@@ -281,7 +281,8 @@ module Sequel
|
|
|
281
281
|
# option. Since a recursive view requires a union that isn't
|
|
282
282
|
# in a subquery, if you are providing a Dataset as the source
|
|
283
283
|
# argument, if should probably call the union method with the
|
|
284
|
-
# :
|
|
284
|
+
# all: true and from_self: false options.
|
|
285
|
+
# :tablespace :: The tablespace to use for materialized views.
|
|
285
286
|
def create_view(name, source, options = OPTS)
|
|
286
287
|
execute_ddl(create_view_sql(name, source, options))
|
|
287
288
|
remove_cached_schema(name)
|
|
@@ -297,7 +298,7 @@ module Sequel
|
|
|
297
298
|
alter_table(table) {drop_column(*args)}
|
|
298
299
|
end
|
|
299
300
|
|
|
300
|
-
# Removes an index for the given table and column
|
|
301
|
+
# Removes an index for the given table and column(s):
|
|
301
302
|
#
|
|
302
303
|
# DB.drop_index :posts, :title
|
|
303
304
|
# DB.drop_index :posts, [:author, :title]
|
|
@@ -310,7 +311,7 @@ module Sequel
|
|
|
310
311
|
# Drop the join table that would have been created with the
|
|
311
312
|
# same arguments to create_join_table:
|
|
312
313
|
#
|
|
313
|
-
# drop_join_table(:
|
|
314
|
+
# drop_join_table(cat_id: :cats, dog_id: :dogs)
|
|
314
315
|
# # DROP TABLE cats_dogs
|
|
315
316
|
def drop_join_table(hash, options=OPTS)
|
|
316
317
|
drop_table(join_table_name(hash, options), options)
|
|
@@ -320,9 +321,9 @@ module Sequel
|
|
|
320
321
|
#
|
|
321
322
|
# DB.drop_table(:posts) # DROP TABLE posts
|
|
322
323
|
# DB.drop_table(:posts, :comments)
|
|
323
|
-
# DB.drop_table(:posts, :comments, :
|
|
324
|
+
# DB.drop_table(:posts, :comments, cascade: true)
|
|
324
325
|
def drop_table(*names)
|
|
325
|
-
options = names.last.is_a?(Hash) ? names.pop :
|
|
326
|
+
options = names.last.is_a?(Hash) ? names.pop : OPTS
|
|
326
327
|
names.each do |n|
|
|
327
328
|
execute_ddl(drop_table_sql(n, options))
|
|
328
329
|
remove_cached_schema(n)
|
|
@@ -337,7 +338,7 @@ module Sequel
|
|
|
337
338
|
# # SELECT NULL FROM a LIMIT 1 -- check existence
|
|
338
339
|
# # DROP TABLE a -- if it already exists
|
|
339
340
|
def drop_table?(*names)
|
|
340
|
-
options = names.last.is_a?(Hash) ? names.pop :
|
|
341
|
+
options = names.last.is_a?(Hash) ? names.pop : OPTS
|
|
341
342
|
if supports_drop_table_if_exists?
|
|
342
343
|
options = options.merge(:if_exists=>true)
|
|
343
344
|
names.each do |name|
|
|
@@ -348,14 +349,15 @@ module Sequel
|
|
|
348
349
|
drop_table(name, options) if table_exists?(name)
|
|
349
350
|
end
|
|
350
351
|
end
|
|
352
|
+
nil
|
|
351
353
|
end
|
|
352
354
|
|
|
353
355
|
# Drops one or more views corresponding to the given names:
|
|
354
356
|
#
|
|
355
357
|
# DB.drop_view(:cheap_items)
|
|
356
358
|
# DB.drop_view(:cheap_items, :pricey_items)
|
|
357
|
-
# DB.drop_view(:cheap_items, :pricey_items, :
|
|
358
|
-
# DB.drop_view(:cheap_items, :pricey_items, :
|
|
359
|
+
# DB.drop_view(:cheap_items, :pricey_items, cascade: true)
|
|
360
|
+
# DB.drop_view(:cheap_items, :pricey_items, if_exists: true)
|
|
359
361
|
#
|
|
360
362
|
# Options:
|
|
361
363
|
# :cascade :: Also drop objects depending on this view.
|
|
@@ -364,7 +366,7 @@ module Sequel
|
|
|
364
366
|
# PostgreSQL specific options:
|
|
365
367
|
# :materialized :: Drop a materialized view.
|
|
366
368
|
def drop_view(*names)
|
|
367
|
-
options = names.last.is_a?(Hash) ? names.pop :
|
|
369
|
+
options = names.last.is_a?(Hash) ? names.pop : OPTS
|
|
368
370
|
names.each do |n|
|
|
369
371
|
execute_ddl(drop_view_sql(n, options))
|
|
370
372
|
remove_cached_schema(n)
|
|
@@ -420,7 +422,15 @@ module Sequel
|
|
|
420
422
|
|
|
421
423
|
# Apply the operations in the given generator to the table given by name.
|
|
422
424
|
def apply_alter_table_generator(name, generator)
|
|
423
|
-
|
|
425
|
+
ops = generator.operations
|
|
426
|
+
|
|
427
|
+
unless can_add_primary_key_constraint_on_nullable_columns?
|
|
428
|
+
if add_pk = ops.find{|op| op[:op] == :add_constraint && op[:type] == :primary_key}
|
|
429
|
+
ops = add_pk[:columns].map{|column| {:op => :set_column_null, :name => column, :null => false}} + ops
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
apply_alter_table(name, ops)
|
|
424
434
|
end
|
|
425
435
|
|
|
426
436
|
# The class used for alter_table generators.
|
|
@@ -432,6 +442,7 @@ module Sequel
|
|
|
432
442
|
def alter_table_op_sql(table, op)
|
|
433
443
|
meth = "alter_table_#{op[:op]}_sql"
|
|
434
444
|
if respond_to?(meth, true)
|
|
445
|
+
# Allow calling private methods as alter table op sql methods are private
|
|
435
446
|
send(meth, table, op)
|
|
436
447
|
else
|
|
437
448
|
raise Error, "Unsupported ALTER TABLE operation: #{op[:op]}"
|
|
@@ -474,7 +485,7 @@ module Sequel
|
|
|
474
485
|
"DROP CONSTRAINT #{quoted_name}#{' CASCADE' if op[:cascade]}"
|
|
475
486
|
end
|
|
476
487
|
|
|
477
|
-
# The SQL to execute to modify the
|
|
488
|
+
# The SQL to execute to modify the table. op
|
|
478
489
|
# should be one of the operations returned by the AlterTableGenerator.
|
|
479
490
|
def alter_table_sql(table, op)
|
|
480
491
|
case op[:op]
|
|
@@ -483,12 +494,14 @@ module Sequel
|
|
|
483
494
|
when :drop_index
|
|
484
495
|
drop_index_sql(table, op)
|
|
485
496
|
else
|
|
486
|
-
|
|
497
|
+
if sql = alter_table_op_sql(table, op)
|
|
498
|
+
"ALTER TABLE #{quote_schema_table(table)} #{sql}"
|
|
499
|
+
end
|
|
487
500
|
end
|
|
488
501
|
end
|
|
489
502
|
|
|
490
|
-
# Array of SQL
|
|
491
|
-
# corresponding to
|
|
503
|
+
# Array of SQL statements used to modify the table,
|
|
504
|
+
# corresponding to changes specified by the operations.
|
|
492
505
|
def alter_table_sql_list(table, operations)
|
|
493
506
|
if supports_combining_alter_table_ops?
|
|
494
507
|
grouped_ops = []
|
|
@@ -520,17 +533,18 @@ module Sequel
|
|
|
520
533
|
# The SQL string specify the autoincrement property, generally used by
|
|
521
534
|
# primary keys.
|
|
522
535
|
def auto_increment_sql
|
|
523
|
-
AUTOINCREMENT
|
|
536
|
+
'AUTOINCREMENT'
|
|
524
537
|
end
|
|
525
538
|
|
|
526
539
|
# The order of the column definition, as an array of symbols.
|
|
527
540
|
def column_definition_order
|
|
528
|
-
|
|
541
|
+
COLUMN_DEFINITION_ORDER
|
|
529
542
|
end
|
|
530
543
|
|
|
531
|
-
# SQL
|
|
544
|
+
# SQL fragment containing the column creation SQL for the given column.
|
|
532
545
|
def column_definition_sql(column)
|
|
533
|
-
sql =
|
|
546
|
+
sql = String.new
|
|
547
|
+
sql << "#{quote_identifier(column[:name])} #{type_literal(column)}"
|
|
534
548
|
column_definition_order.each{|m| send(:"column_definition_#{m}_sql", sql, column)}
|
|
535
549
|
sql
|
|
536
550
|
end
|
|
@@ -555,8 +569,16 @@ module Sequel
|
|
|
555
569
|
# Add null/not null SQL fragment to column creation SQL.
|
|
556
570
|
def column_definition_null_sql(sql, column)
|
|
557
571
|
null = column.fetch(:null, column[:allow_null])
|
|
558
|
-
|
|
559
|
-
|
|
572
|
+
if null.nil? && !can_add_primary_key_constraint_on_nullable_columns? && column[:primary_key]
|
|
573
|
+
null = false
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
case null
|
|
577
|
+
when false
|
|
578
|
+
sql << ' NOT NULL'
|
|
579
|
+
when true
|
|
580
|
+
sql << ' NULL'
|
|
581
|
+
end
|
|
560
582
|
end
|
|
561
583
|
|
|
562
584
|
# Add primary key SQL fragment to column creation SQL.
|
|
@@ -565,7 +587,8 @@ module Sequel
|
|
|
565
587
|
if name = column[:primary_key_constraint_name]
|
|
566
588
|
sql << " CONSTRAINT #{quote_identifier(name)}"
|
|
567
589
|
end
|
|
568
|
-
sql <<
|
|
590
|
+
sql << ' PRIMARY KEY'
|
|
591
|
+
constraint_deferrable_sql_append(sql, column[:primary_key_deferrable])
|
|
569
592
|
end
|
|
570
593
|
end
|
|
571
594
|
|
|
@@ -585,44 +608,46 @@ module Sequel
|
|
|
585
608
|
if name = column[:unique_constraint_name]
|
|
586
609
|
sql << " CONSTRAINT #{quote_identifier(name)}"
|
|
587
610
|
end
|
|
588
|
-
sql << UNIQUE
|
|
611
|
+
sql << ' UNIQUE'
|
|
612
|
+
constraint_deferrable_sql_append(sql, column[:unique_deferrable])
|
|
589
613
|
end
|
|
590
614
|
end
|
|
591
615
|
|
|
592
616
|
# SQL for all given columns, used inside a CREATE TABLE block.
|
|
593
617
|
def column_list_sql(generator)
|
|
594
|
-
(generator.columns.map{|c| column_definition_sql(c)} + generator.constraints.map{|c| constraint_definition_sql(c)}).join(
|
|
618
|
+
(generator.columns.map{|c| column_definition_sql(c)} + generator.constraints.map{|c| constraint_definition_sql(c)}).join(', ')
|
|
595
619
|
end
|
|
596
620
|
|
|
597
|
-
# SQL
|
|
621
|
+
# SQL fragment for column foreign key references (column constraints)
|
|
598
622
|
def column_references_column_constraint_sql(column)
|
|
599
623
|
column_references_sql(column)
|
|
600
624
|
end
|
|
601
625
|
|
|
602
|
-
# SQL
|
|
626
|
+
# SQL fragment for column foreign key references
|
|
603
627
|
def column_references_sql(column)
|
|
604
|
-
sql =
|
|
605
|
-
sql << "
|
|
628
|
+
sql = String.new
|
|
629
|
+
sql << " REFERENCES #{quote_schema_table(column[:table])}"
|
|
630
|
+
sql << "(#{Array(column[:key]).map{|x| quote_identifier(x)}.join(', ')})" if column[:key]
|
|
606
631
|
sql << " ON DELETE #{on_delete_clause(column[:on_delete])}" if column[:on_delete]
|
|
607
632
|
sql << " ON UPDATE #{on_update_clause(column[:on_update])}" if column[:on_update]
|
|
608
633
|
constraint_deferrable_sql_append(sql, column[:deferrable])
|
|
609
634
|
sql
|
|
610
635
|
end
|
|
611
636
|
|
|
612
|
-
# SQL
|
|
637
|
+
# SQL fragment for table foreign key references (table constraints)
|
|
613
638
|
def column_references_table_constraint_sql(constraint)
|
|
614
639
|
"FOREIGN KEY #{literal(constraint[:columns])}#{column_references_sql(constraint)}"
|
|
615
640
|
end
|
|
616
641
|
|
|
617
642
|
# Whether the given alter table operation is combinable.
|
|
618
643
|
def combinable_alter_table_op?(op)
|
|
619
|
-
# Use a dynamic lookup for easier overriding in adapters
|
|
620
644
|
COMBINABLE_ALTER_TABLE_OPS.include?(op[:op])
|
|
621
645
|
end
|
|
622
646
|
|
|
623
|
-
# SQL
|
|
647
|
+
# SQL fragment specifying a constraint on a table.
|
|
624
648
|
def constraint_definition_sql(constraint)
|
|
625
|
-
sql =
|
|
649
|
+
sql = String.new
|
|
650
|
+
sql << "CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]
|
|
626
651
|
case constraint[:type]
|
|
627
652
|
when :check
|
|
628
653
|
check = constraint[:check]
|
|
@@ -643,7 +668,7 @@ module Sequel
|
|
|
643
668
|
sql
|
|
644
669
|
end
|
|
645
670
|
|
|
646
|
-
# SQL
|
|
671
|
+
# SQL fragment specifying the deferrable constraint attributes.
|
|
647
672
|
def constraint_deferrable_sql_append(sql, defer)
|
|
648
673
|
case defer
|
|
649
674
|
when nil
|
|
@@ -671,14 +696,15 @@ module Sequel
|
|
|
671
696
|
e = options[:ignore_index_errors] || options[:if_not_exists]
|
|
672
697
|
generator.indexes.each do |index|
|
|
673
698
|
begin
|
|
674
|
-
index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}
|
|
699
|
+
pr = proc{index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}}
|
|
700
|
+
supports_transactional_ddl? ? transaction(:savepoint=>:only, &pr) : pr.call
|
|
675
701
|
rescue Error
|
|
676
702
|
raise unless e
|
|
677
703
|
end
|
|
678
704
|
end
|
|
679
705
|
end
|
|
680
706
|
|
|
681
|
-
#
|
|
707
|
+
# SQL statement for creating a table with the given name, columns, and options
|
|
682
708
|
def create_table_sql(name, generator, options)
|
|
683
709
|
unless supports_named_column_constraints?
|
|
684
710
|
# Split column constraints into table constraints if they have a name
|
|
@@ -697,36 +723,48 @@ module Sequel
|
|
|
697
723
|
end
|
|
698
724
|
end
|
|
699
725
|
end
|
|
726
|
+
|
|
727
|
+
unless can_add_primary_key_constraint_on_nullable_columns?
|
|
728
|
+
if pk = generator.constraints.find{|op| op[:type] == :primary_key}
|
|
729
|
+
pk[:columns].each do |column|
|
|
730
|
+
if matched_column = generator.columns.find{|gc| gc[:name] == column}
|
|
731
|
+
matched_column[:null] = false
|
|
732
|
+
end
|
|
733
|
+
end
|
|
734
|
+
end
|
|
735
|
+
end
|
|
736
|
+
|
|
700
737
|
"#{create_table_prefix_sql(name, options)} (#{column_list_sql(generator)})"
|
|
701
738
|
end
|
|
702
739
|
|
|
703
|
-
# Run
|
|
740
|
+
# Run SQL statement to create the table with the given name from the given
|
|
704
741
|
# SELECT sql statement.
|
|
705
742
|
def create_table_as(name, sql, options)
|
|
706
743
|
sql = sql.sql if sql.is_a?(Sequel::Dataset)
|
|
707
744
|
run(create_table_as_sql(name, sql, options))
|
|
708
745
|
end
|
|
709
746
|
|
|
710
|
-
#
|
|
747
|
+
# SQL statement for creating a table from the result of a SELECT statement.
|
|
711
748
|
# +sql+ should be a string representing a SELECT query.
|
|
712
749
|
def create_table_as_sql(name, sql, options)
|
|
713
750
|
"#{create_table_prefix_sql(name, options)} AS #{sql}"
|
|
714
751
|
end
|
|
715
752
|
|
|
716
|
-
#
|
|
753
|
+
# SQL fragment for initial part of CREATE TABLE statement
|
|
717
754
|
def create_table_prefix_sql(name, options)
|
|
718
755
|
"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)}"
|
|
719
756
|
end
|
|
720
757
|
|
|
721
|
-
#
|
|
758
|
+
# SQL fragment for initial part of CREATE VIEW statement
|
|
722
759
|
def create_view_prefix_sql(name, options)
|
|
723
760
|
create_view_sql_append_columns("CREATE #{'OR REPLACE 'if options[:replace]}VIEW #{quote_schema_table(name)}", options[:columns])
|
|
724
761
|
end
|
|
725
762
|
|
|
726
|
-
#
|
|
763
|
+
# SQL statement for creating a view.
|
|
727
764
|
def create_view_sql(name, source, options)
|
|
728
765
|
source = source.sql if source.is_a?(Dataset)
|
|
729
|
-
sql =
|
|
766
|
+
sql = String.new
|
|
767
|
+
sql << "#{create_view_prefix_sql(name, options)} AS #{source}"
|
|
730
768
|
if check = options[:check]
|
|
731
769
|
sql << " WITH#{' LOCAL' if check == :local} CHECK OPTION"
|
|
732
770
|
end
|
|
@@ -736,7 +774,7 @@ module Sequel
|
|
|
736
774
|
# Append the column list to the SQL, if a column list is given.
|
|
737
775
|
def create_view_sql_append_columns(sql, columns)
|
|
738
776
|
if columns
|
|
739
|
-
sql
|
|
777
|
+
sql += ' ('
|
|
740
778
|
schema_utility_dataset.send(:identifier_list_append, sql, columns)
|
|
741
779
|
sql << ')'
|
|
742
780
|
end
|
|
@@ -747,7 +785,7 @@ module Sequel
|
|
|
747
785
|
# for certain databases.
|
|
748
786
|
def default_index_name(table_name, columns)
|
|
749
787
|
schema, table = schema_and_table(table_name)
|
|
750
|
-
"#{"#{schema}_" if schema}#{table}_#{columns.map{|c| [String, Symbol].any?{|cl| c.is_a?(cl)} ? c : literal(c).gsub(/\W/, '_')}.join(
|
|
788
|
+
"#{"#{schema}_" if schema}#{table}_#{columns.map{|c| [String, Symbol].any?{|cl| c.is_a?(cl)} ? c : literal(c).gsub(/\W/, '_')}.join('_')}_index"
|
|
751
789
|
end
|
|
752
790
|
|
|
753
791
|
# Get foreign key name for given table and columns.
|
|
@@ -773,11 +811,25 @@ module Sequel
|
|
|
773
811
|
end
|
|
774
812
|
|
|
775
813
|
# Proxy the filter_expr call to the dataset, used for creating constraints.
|
|
776
|
-
|
|
777
|
-
|
|
814
|
+
# Support passing Proc arguments as blocks, as well as treating plain strings
|
|
815
|
+
# as literal strings, so that previous migrations that used this API do not break.
|
|
816
|
+
def filter_expr(arg=nil, &block)
|
|
817
|
+
if arg.is_a?(Proc) && !block
|
|
818
|
+
block = arg
|
|
819
|
+
arg = nil
|
|
820
|
+
elsif arg.is_a?(String)
|
|
821
|
+
arg = Sequel.lit(arg)
|
|
822
|
+
elsif arg.is_a?(Array)
|
|
823
|
+
if arg.first.is_a?(String)
|
|
824
|
+
arg = Sequel.lit(*arg)
|
|
825
|
+
elsif arg.length > 1
|
|
826
|
+
arg = Sequel.&(*arg)
|
|
827
|
+
end
|
|
828
|
+
end
|
|
829
|
+
schema_utility_dataset.literal(schema_utility_dataset.send(:filter_expr, arg, &block))
|
|
778
830
|
end
|
|
779
831
|
|
|
780
|
-
# SQL
|
|
832
|
+
# SQL statement for creating an index for the table with the given name
|
|
781
833
|
# and index specifications.
|
|
782
834
|
def index_definition_sql(table_name, index)
|
|
783
835
|
index_name = index[:name] || default_index_name(table_name, index[:columns])
|
|
@@ -786,7 +838,7 @@ module Sequel
|
|
|
786
838
|
"CREATE #{'UNIQUE ' if index[:unique]}INDEX #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{literal(index[:columns])}#{" WHERE #{filter_expr(index[:where])}" if index[:where]}"
|
|
787
839
|
end
|
|
788
840
|
|
|
789
|
-
# Array of SQL
|
|
841
|
+
# Array of SQL statements, one for each index specification,
|
|
790
842
|
# for the given table.
|
|
791
843
|
def index_sql_list(table_name, indexes)
|
|
792
844
|
indexes.map{|i| index_definition_sql(table_name, i)}
|
|
@@ -818,7 +870,7 @@ module Sequel
|
|
|
818
870
|
end
|
|
819
871
|
end
|
|
820
872
|
|
|
821
|
-
# SQL
|
|
873
|
+
# SQL fragment to use for ON DELETE, based on the given action.
|
|
822
874
|
# The following actions are recognized:
|
|
823
875
|
#
|
|
824
876
|
# :cascade :: Delete rows referencing this row.
|
|
@@ -845,7 +897,7 @@ module Sequel
|
|
|
845
897
|
schema_utility_dataset.quote_schema_table(table)
|
|
846
898
|
end
|
|
847
899
|
|
|
848
|
-
# SQL
|
|
900
|
+
# SQL statement for renaming a table.
|
|
849
901
|
def rename_table_sql(name, new_name)
|
|
850
902
|
"ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_schema_table(new_name)}"
|
|
851
903
|
end
|
|
@@ -870,14 +922,21 @@ module Sequel
|
|
|
870
922
|
schema_utility_dataset.split_qualifiers(table_name)
|
|
871
923
|
end
|
|
872
924
|
|
|
873
|
-
# SQL
|
|
925
|
+
# SQL fragment for temporary table
|
|
874
926
|
def temporary_table_sql
|
|
875
|
-
|
|
927
|
+
'TEMPORARY '
|
|
876
928
|
end
|
|
877
929
|
|
|
878
930
|
# SQL fragment specifying the type of a given column.
|
|
879
931
|
def type_literal(column)
|
|
880
|
-
column[:type]
|
|
932
|
+
case column[:type]
|
|
933
|
+
when Class
|
|
934
|
+
type_literal_generic(column)
|
|
935
|
+
when :Bignum
|
|
936
|
+
type_literal_generic_bignum_symbol(column)
|
|
937
|
+
else
|
|
938
|
+
type_literal_specific(column)
|
|
939
|
+
end
|
|
881
940
|
end
|
|
882
941
|
|
|
883
942
|
# SQL fragment specifying the full type of a column,
|
|
@@ -885,6 +944,7 @@ module Sequel
|
|
|
885
944
|
def type_literal_generic(column)
|
|
886
945
|
meth = "type_literal_generic_#{column[:type].name.to_s.downcase}"
|
|
887
946
|
if respond_to?(meth, true)
|
|
947
|
+
# Allow calling private methods as per type literal generic methods are private
|
|
888
948
|
send(meth, column)
|
|
889
949
|
else
|
|
890
950
|
raise Error, "Unsupported ruby class used as database type: #{column[:type]}"
|
|
@@ -896,8 +956,8 @@ module Sequel
|
|
|
896
956
|
type_literal_generic_numeric(column)
|
|
897
957
|
end
|
|
898
958
|
|
|
899
|
-
# Sequel uses the bigint type by default for
|
|
900
|
-
def
|
|
959
|
+
# Sequel uses the bigint type by default for :Bignum symbol.
|
|
960
|
+
def type_literal_generic_bignum_symbol(column)
|
|
901
961
|
:bigint
|
|
902
962
|
end
|
|
903
963
|
|
|
@@ -960,7 +1020,16 @@ module Sequel
|
|
|
960
1020
|
# Sequel uses the timestamp type by default for Time values.
|
|
961
1021
|
# If the :only_time option is used, the time type is used.
|
|
962
1022
|
def type_literal_generic_time(column)
|
|
963
|
-
column[:only_time]
|
|
1023
|
+
if column[:only_time]
|
|
1024
|
+
type_literal_generic_only_time(column)
|
|
1025
|
+
else
|
|
1026
|
+
type_literal_generic_datetime(column)
|
|
1027
|
+
end
|
|
1028
|
+
end
|
|
1029
|
+
|
|
1030
|
+
# Use time by default for Time values if :only_time option is used.
|
|
1031
|
+
def type_literal_generic_only_time(column)
|
|
1032
|
+
:time
|
|
964
1033
|
end
|
|
965
1034
|
|
|
966
1035
|
# Sequel uses the boolean type by default for TrueClass and FalseClass.
|
|
@@ -975,10 +1044,10 @@ module Sequel
|
|
|
975
1044
|
type = "double precision" if type.to_s == 'double'
|
|
976
1045
|
column[:size] ||= default_string_column_size if type.to_s == 'varchar'
|
|
977
1046
|
elements = column[:size] || column[:elements]
|
|
978
|
-
"#{type}#{literal(Array(elements)) if elements}#{UNSIGNED if column[:unsigned]}"
|
|
1047
|
+
"#{type}#{literal(Array(elements)) if elements}#{' UNSIGNED' if column[:unsigned]}"
|
|
979
1048
|
end
|
|
980
1049
|
|
|
981
|
-
# Whether clob should be used for String :
|
|
1050
|
+
# Whether clob should be used for String text: true columns.
|
|
982
1051
|
def uses_clob_for_text?
|
|
983
1052
|
false
|
|
984
1053
|
end
|