sequel 4.36.0 → 5.61.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 +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- 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/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- 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 +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- 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.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -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 +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- 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 +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -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 +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -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 +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- 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 +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -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/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -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 +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -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/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -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 +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- 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.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- 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 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- 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 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- 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 -203
- data/spec/core/schema_spec.rb +0 -1676
- 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/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- 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 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- 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/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- 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_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- 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 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- 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 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- 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 -728
- 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/no_auto_literal_strings_spec.rb +0 -65
- 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 -390
- 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 -275
- 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 -473
- 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 -814
- 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/server_logging_spec.rb +0 -45
- 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_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- 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/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- 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/uuid_spec.rb +0 -106
- 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 -554
- 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/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- 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/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_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/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_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 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
@@ -7,32 +7,19 @@ module Sequel
|
|
7
7
|
# These methods execute code on the database that modifies the database's schema.
|
8
8
|
# ---------------------
|
9
9
|
|
10
|
-
AUTOINCREMENT = 'AUTOINCREMENT'.freeze
|
11
|
-
COMMA_SEPARATOR = ', '.freeze
|
12
|
-
NOT_NULL = ' NOT NULL'.freeze
|
13
|
-
NULL = ' NULL'.freeze
|
14
|
-
PRIMARY_KEY = ' PRIMARY KEY'.freeze
|
15
|
-
TEMPORARY = 'TEMPORARY '.freeze
|
16
|
-
UNDERSCORE = '_'.freeze
|
17
|
-
UNIQUE = ' UNIQUE'.freeze
|
18
|
-
UNSIGNED = ' UNSIGNED'.freeze
|
19
|
-
|
20
10
|
# The order of column modifiers to use when defining a column.
|
21
|
-
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references]
|
22
|
-
|
23
|
-
# The default options for join table columns.
|
24
|
-
DEFAULT_JOIN_TABLE_COLUMN_OPTIONS = {:null=>false}
|
11
|
+
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references].freeze
|
25
12
|
|
26
13
|
# The alter table operations that are combinable.
|
27
14
|
COMBINABLE_ALTER_TABLE_OPS = [:add_column, :drop_column, :rename_column,
|
28
15
|
:set_column_type, :set_column_default, :set_column_null,
|
29
|
-
:add_constraint, :drop_constraint]
|
16
|
+
:add_constraint, :drop_constraint].freeze
|
30
17
|
|
31
18
|
# Adds a column to the specified table. This method expects a column name,
|
32
19
|
# a datatype and optionally a hash with additional constraints and options:
|
33
20
|
#
|
34
|
-
# DB.add_column :items, :name,
|
35
|
-
# 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'
|
36
23
|
#
|
37
24
|
# See <tt>alter_table</tt>.
|
38
25
|
def add_column(table, *args)
|
@@ -42,9 +29,10 @@ module Sequel
|
|
42
29
|
# Adds an index to a table for the given columns:
|
43
30
|
#
|
44
31
|
# DB.add_index :posts, :title
|
45
|
-
# DB.add_index :posts, [:author, :title], :
|
32
|
+
# DB.add_index :posts, [:author, :title], unique: true
|
46
33
|
#
|
47
34
|
# Options:
|
35
|
+
#
|
48
36
|
# :ignore_errors :: Ignore any DatabaseErrors that are raised
|
49
37
|
# :name :: Name to use for index instead of default
|
50
38
|
#
|
@@ -56,16 +44,17 @@ module Sequel
|
|
56
44
|
rescue DatabaseError
|
57
45
|
raise unless e
|
58
46
|
end
|
47
|
+
nil
|
59
48
|
end
|
60
49
|
|
61
50
|
# Alters the given table with the specified block. Example:
|
62
51
|
#
|
63
52
|
# DB.alter_table :items do
|
64
|
-
# add_column :category,
|
53
|
+
# add_column :category, String, default: 'ruby'
|
65
54
|
# drop_column :category
|
66
55
|
# rename_column :cntr, :counter
|
67
|
-
# set_column_type :value,
|
68
|
-
# set_column_default :value,
|
56
|
+
# set_column_type :value, Float
|
57
|
+
# set_column_default :value, 4.2
|
69
58
|
# add_index [:group, :category]
|
70
59
|
# drop_index [:group, :category]
|
71
60
|
# end
|
@@ -74,9 +63,9 @@ module Sequel
|
|
74
63
|
# definitions using <tt>create_table</tt>, and +add_index+ accepts all the options
|
75
64
|
# available for index definition.
|
76
65
|
#
|
77
|
-
# See <tt>Schema::AlterTableGenerator</tt> and the {
|
78
|
-
def alter_table(name,
|
79
|
-
generator
|
66
|
+
# See <tt>Schema::AlterTableGenerator</tt> and the {Migrations guide}[rdoc-ref:doc/migration.rdoc].
|
67
|
+
def alter_table(name, &block)
|
68
|
+
generator = alter_table_generator(&block)
|
80
69
|
remove_cached_schema(name)
|
81
70
|
apply_alter_table_generator(name, generator)
|
82
71
|
nil
|
@@ -91,7 +80,7 @@ module Sequel
|
|
91
80
|
# Create a join table using a hash of foreign keys to referenced
|
92
81
|
# table names. Example:
|
93
82
|
#
|
94
|
-
# create_join_table(:
|
83
|
+
# create_join_table(cat_id: :cats, dog_id: :dogs)
|
95
84
|
# # CREATE TABLE cats_dogs (
|
96
85
|
# # cat_id integer NOT NULL REFERENCES cats,
|
97
86
|
# # dog_id integer NOT NULL REFERENCES dogs,
|
@@ -104,15 +93,22 @@ module Sequel
|
|
104
93
|
# key ensures that entries in the table are unique, which is the typical
|
105
94
|
# desire for a join table.
|
106
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
|
+
#
|
107
103
|
# You can provide column options by making the values in the hash
|
108
104
|
# be option hashes, so long as the option hashes have a :table
|
109
105
|
# entry giving the table referenced:
|
110
106
|
#
|
111
|
-
# create_join_table(:
|
107
|
+
# create_join_table(cat_id: {table: :cats, type: :Bignum}, dog_id: :dogs)
|
112
108
|
#
|
113
109
|
# You can provide a second argument which is a table options hash:
|
114
110
|
#
|
115
|
-
# create_join_table({:
|
111
|
+
# create_join_table({cat_id: :cats, dog_id: :dogs}, temp: true)
|
116
112
|
#
|
117
113
|
# Some table options are handled specially:
|
118
114
|
#
|
@@ -121,19 +117,20 @@ module Sequel
|
|
121
117
|
# :no_index :: Set to true not to create the second index.
|
122
118
|
# :no_primary_key :: Set to true to not create the primary key.
|
123
119
|
def create_join_table(hash, options=OPTS)
|
124
|
-
keys = hash.keys.
|
120
|
+
keys = hash.keys.sort
|
125
121
|
create_table(join_table_name(hash, options), options) do
|
126
122
|
keys.each do |key|
|
127
123
|
v = hash[key]
|
128
124
|
unless v.is_a?(Hash)
|
129
125
|
v = {:table=>v}
|
130
126
|
end
|
131
|
-
v =
|
127
|
+
v[:null] = false unless v.has_key?(:null)
|
132
128
|
foreign_key(key, v)
|
133
129
|
end
|
134
130
|
primary_key(keys) unless options[:no_primary_key]
|
135
|
-
index(keys.reverse, options[:index_options] ||
|
131
|
+
index(keys.reverse, options[:index_options] || OPTS) unless options[:no_index]
|
136
132
|
end
|
133
|
+
nil
|
137
134
|
end
|
138
135
|
|
139
136
|
# Forcibly create a join table, attempting to drop it if it already exists, then creating it.
|
@@ -155,7 +152,7 @@ module Sequel
|
|
155
152
|
#
|
156
153
|
# DB.create_table :posts do
|
157
154
|
# primary_key :id
|
158
|
-
# column :title,
|
155
|
+
# column :title, String
|
159
156
|
# String :content
|
160
157
|
# index :title
|
161
158
|
# end
|
@@ -184,11 +181,20 @@ module Sequel
|
|
184
181
|
# where keys are option names and values are option values. Note
|
185
182
|
# that option names are unquoted, so you should not use untrusted
|
186
183
|
# keys.
|
184
|
+
# :tablespace :: The tablespace to use for the table.
|
185
|
+
#
|
186
|
+
# SQLite specific options:
|
187
|
+
# :strict :: Create a STRICT table, which checks that the values for the columns
|
188
|
+
# are the correct type (similar to all other SQL databases). Note that
|
189
|
+
# when using this option, all column types used should be one of the
|
190
|
+
# following: +int+, +integer+, +real+, +text+, +blob+, and +any+.
|
191
|
+
# The +any+ type is treated like a SQLite column in a non-strict table,
|
192
|
+
# allowing any type of data to be stored. This option is supported on
|
193
|
+
# SQLite 3.37.0+.
|
187
194
|
#
|
188
|
-
# See <tt>Schema::
|
195
|
+
# See <tt>Schema::CreateTableGenerator</tt> and the {"Schema Modification" guide}[rdoc-ref:doc/schema_modification.rdoc].
|
189
196
|
def create_table(name, options=OPTS, &block)
|
190
197
|
remove_cached_schema(name)
|
191
|
-
options = {:generator=>options} if options.is_a?(Schema::CreateTableGenerator)
|
192
198
|
if sql = options[:as]
|
193
199
|
raise(Error, "can't provide both :as option and block to create_table") if block
|
194
200
|
create_table_as(name, sql, options)
|
@@ -196,8 +202,8 @@ module Sequel
|
|
196
202
|
generator = options[:generator] || create_table_generator(&block)
|
197
203
|
create_table_from_generator(name, generator, options)
|
198
204
|
create_table_indexes_from_generator(name, generator, options)
|
199
|
-
nil
|
200
205
|
end
|
206
|
+
nil
|
201
207
|
end
|
202
208
|
|
203
209
|
# Forcibly create a table, attempting to drop it if it already exists, then creating it.
|
@@ -235,7 +241,7 @@ module Sequel
|
|
235
241
|
# Creates a view, replacing a view with the same name if one already exists.
|
236
242
|
#
|
237
243
|
# DB.create_or_replace_view(:some_items, "SELECT * FROM items WHERE price < 100")
|
238
|
-
# DB.create_or_replace_view(:some_items, DB[:items].
|
244
|
+
# DB.create_or_replace_view(:some_items, DB[:items].where(category: 'ruby'))
|
239
245
|
#
|
240
246
|
# For databases where replacing a view is not natively supported, support
|
241
247
|
# is emulated by dropping a view with the same name before creating the view.
|
@@ -243,10 +249,11 @@ module Sequel
|
|
243
249
|
if supports_create_or_replace_view?
|
244
250
|
options = options.merge(:replace=>true)
|
245
251
|
else
|
246
|
-
drop_view(name)
|
252
|
+
swallow_database_error{drop_view(name)}
|
247
253
|
end
|
248
254
|
|
249
255
|
create_view(name, source, options)
|
256
|
+
nil
|
250
257
|
end
|
251
258
|
|
252
259
|
# Creates a view based on a dataset or an SQL string:
|
@@ -255,15 +262,19 @@ module Sequel
|
|
255
262
|
# # CREATE VIEW cheap_items AS
|
256
263
|
# # SELECT * FROM items WHERE price < 100
|
257
264
|
#
|
258
|
-
# DB.create_view(:ruby_items, DB[:items].where(:
|
265
|
+
# DB.create_view(:ruby_items, DB[:items].where(category: 'ruby'))
|
259
266
|
# # CREATE VIEW ruby_items AS
|
260
267
|
# # SELECT * FROM items WHERE (category = 'ruby')
|
261
268
|
#
|
262
|
-
# DB.create_view(:checked_items, DB[:items].where(:foo), :
|
269
|
+
# DB.create_view(:checked_items, DB[:items].where(:foo), check: true)
|
263
270
|
# # CREATE VIEW checked_items AS
|
264
271
|
# # SELECT * FROM items WHERE foo
|
265
272
|
# # WITH CHECK OPTION
|
266
273
|
#
|
274
|
+
# DB.create_view(:bar_items, DB[:items].select(:foo), columns: [:bar])
|
275
|
+
# # CREATE VIEW bar_items (bar) AS
|
276
|
+
# # SELECT foo FROM items
|
277
|
+
#
|
267
278
|
# Options:
|
268
279
|
# :columns :: The column names to use for the view. If not given,
|
269
280
|
# automatically determined based on the input dataset.
|
@@ -283,7 +294,11 @@ module Sequel
|
|
283
294
|
# option. Since a recursive view requires a union that isn't
|
284
295
|
# in a subquery, if you are providing a Dataset as the source
|
285
296
|
# argument, if should probably call the union method with the
|
286
|
-
# :
|
297
|
+
# all: true and from_self: false options.
|
298
|
+
# :security_invoker :: Set the security_invoker property on the view, making
|
299
|
+
# the access to the view use the current user's permissions,
|
300
|
+
# instead of the view owner's permissions.
|
301
|
+
# :tablespace :: The tablespace to use for materialized views.
|
287
302
|
def create_view(name, source, options = OPTS)
|
288
303
|
execute_ddl(create_view_sql(name, source, options))
|
289
304
|
remove_cached_schema(name)
|
@@ -299,7 +314,7 @@ module Sequel
|
|
299
314
|
alter_table(table) {drop_column(*args)}
|
300
315
|
end
|
301
316
|
|
302
|
-
# Removes an index for the given table and column
|
317
|
+
# Removes an index for the given table and column(s):
|
303
318
|
#
|
304
319
|
# DB.drop_index :posts, :title
|
305
320
|
# DB.drop_index :posts, [:author, :title]
|
@@ -312,7 +327,7 @@ module Sequel
|
|
312
327
|
# Drop the join table that would have been created with the
|
313
328
|
# same arguments to create_join_table:
|
314
329
|
#
|
315
|
-
# drop_join_table(:
|
330
|
+
# drop_join_table(cat_id: :cats, dog_id: :dogs)
|
316
331
|
# # DROP TABLE cats_dogs
|
317
332
|
def drop_join_table(hash, options=OPTS)
|
318
333
|
drop_table(join_table_name(hash, options), options)
|
@@ -322,9 +337,9 @@ module Sequel
|
|
322
337
|
#
|
323
338
|
# DB.drop_table(:posts) # DROP TABLE posts
|
324
339
|
# DB.drop_table(:posts, :comments)
|
325
|
-
# DB.drop_table(:posts, :comments, :
|
340
|
+
# DB.drop_table(:posts, :comments, cascade: true)
|
326
341
|
def drop_table(*names)
|
327
|
-
options = names.last.is_a?(Hash) ? names.pop :
|
342
|
+
options = names.last.is_a?(Hash) ? names.pop : OPTS
|
328
343
|
names.each do |n|
|
329
344
|
execute_ddl(drop_table_sql(n, options))
|
330
345
|
remove_cached_schema(n)
|
@@ -339,7 +354,7 @@ module Sequel
|
|
339
354
|
# # SELECT NULL FROM a LIMIT 1 -- check existence
|
340
355
|
# # DROP TABLE a -- if it already exists
|
341
356
|
def drop_table?(*names)
|
342
|
-
options = names.last.is_a?(Hash) ? names.pop :
|
357
|
+
options = names.last.is_a?(Hash) ? names.pop : OPTS
|
343
358
|
if supports_drop_table_if_exists?
|
344
359
|
options = options.merge(:if_exists=>true)
|
345
360
|
names.each do |name|
|
@@ -350,14 +365,15 @@ module Sequel
|
|
350
365
|
drop_table(name, options) if table_exists?(name)
|
351
366
|
end
|
352
367
|
end
|
368
|
+
nil
|
353
369
|
end
|
354
370
|
|
355
371
|
# Drops one or more views corresponding to the given names:
|
356
372
|
#
|
357
373
|
# DB.drop_view(:cheap_items)
|
358
374
|
# DB.drop_view(:cheap_items, :pricey_items)
|
359
|
-
# DB.drop_view(:cheap_items, :pricey_items, :
|
360
|
-
# DB.drop_view(:cheap_items, :pricey_items, :
|
375
|
+
# DB.drop_view(:cheap_items, :pricey_items, cascade: true)
|
376
|
+
# DB.drop_view(:cheap_items, :pricey_items, if_exists: true)
|
361
377
|
#
|
362
378
|
# Options:
|
363
379
|
# :cascade :: Also drop objects depending on this view.
|
@@ -366,7 +382,7 @@ module Sequel
|
|
366
382
|
# PostgreSQL specific options:
|
367
383
|
# :materialized :: Drop a materialized view.
|
368
384
|
def drop_view(*names)
|
369
|
-
options = names.last.is_a?(Hash) ? names.pop :
|
385
|
+
options = names.last.is_a?(Hash) ? names.pop : OPTS
|
370
386
|
names.each do |n|
|
371
387
|
execute_ddl(drop_view_sql(n, options))
|
372
388
|
remove_cached_schema(n)
|
@@ -422,7 +438,15 @@ module Sequel
|
|
422
438
|
|
423
439
|
# Apply the operations in the given generator to the table given by name.
|
424
440
|
def apply_alter_table_generator(name, generator)
|
425
|
-
|
441
|
+
ops = generator.operations
|
442
|
+
|
443
|
+
unless can_add_primary_key_constraint_on_nullable_columns?
|
444
|
+
if add_pk = ops.find{|op| op[:op] == :add_constraint && op[:type] == :primary_key}
|
445
|
+
ops = add_pk[:columns].map{|column| {:op => :set_column_null, :name => column, :null => false}} + ops
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
apply_alter_table(name, ops)
|
426
450
|
end
|
427
451
|
|
428
452
|
# The class used for alter_table generators.
|
@@ -434,6 +458,7 @@ module Sequel
|
|
434
458
|
def alter_table_op_sql(table, op)
|
435
459
|
meth = "alter_table_#{op[:op]}_sql"
|
436
460
|
if respond_to?(meth, true)
|
461
|
+
# Allow calling private methods as alter table op sql methods are private
|
437
462
|
send(meth, table, op)
|
438
463
|
else
|
439
464
|
raise Error, "Unsupported ALTER TABLE operation: #{op[:op]}"
|
@@ -476,7 +501,7 @@ module Sequel
|
|
476
501
|
"DROP CONSTRAINT #{quoted_name}#{' CASCADE' if op[:cascade]}"
|
477
502
|
end
|
478
503
|
|
479
|
-
# The SQL to execute to modify the
|
504
|
+
# The SQL to execute to modify the table. op
|
480
505
|
# should be one of the operations returned by the AlterTableGenerator.
|
481
506
|
def alter_table_sql(table, op)
|
482
507
|
case op[:op]
|
@@ -485,12 +510,14 @@ module Sequel
|
|
485
510
|
when :drop_index
|
486
511
|
drop_index_sql(table, op)
|
487
512
|
else
|
488
|
-
|
513
|
+
if sql = alter_table_op_sql(table, op)
|
514
|
+
"ALTER TABLE #{quote_schema_table(table)} #{sql}"
|
515
|
+
end
|
489
516
|
end
|
490
517
|
end
|
491
518
|
|
492
|
-
# Array of SQL
|
493
|
-
# corresponding to
|
519
|
+
# Array of SQL statements used to modify the table,
|
520
|
+
# corresponding to changes specified by the operations.
|
494
521
|
def alter_table_sql_list(table, operations)
|
495
522
|
if supports_combining_alter_table_ops?
|
496
523
|
grouped_ops = []
|
@@ -522,15 +549,15 @@ module Sequel
|
|
522
549
|
# The SQL string specify the autoincrement property, generally used by
|
523
550
|
# primary keys.
|
524
551
|
def auto_increment_sql
|
525
|
-
AUTOINCREMENT
|
552
|
+
'AUTOINCREMENT'
|
526
553
|
end
|
527
554
|
|
528
555
|
# The order of the column definition, as an array of symbols.
|
529
556
|
def column_definition_order
|
530
|
-
|
557
|
+
COLUMN_DEFINITION_ORDER
|
531
558
|
end
|
532
559
|
|
533
|
-
# SQL
|
560
|
+
# SQL fragment containing the column creation SQL for the given column.
|
534
561
|
def column_definition_sql(column)
|
535
562
|
sql = String.new
|
536
563
|
sql << "#{quote_identifier(column[:name])} #{type_literal(column)}"
|
@@ -558,17 +585,26 @@ module Sequel
|
|
558
585
|
# Add null/not null SQL fragment to column creation SQL.
|
559
586
|
def column_definition_null_sql(sql, column)
|
560
587
|
null = column.fetch(:null, column[:allow_null])
|
561
|
-
|
562
|
-
|
588
|
+
if null.nil? && !can_add_primary_key_constraint_on_nullable_columns? && column[:primary_key]
|
589
|
+
null = false
|
590
|
+
end
|
591
|
+
|
592
|
+
case null
|
593
|
+
when false
|
594
|
+
sql << ' NOT NULL'
|
595
|
+
when true
|
596
|
+
sql << ' NULL'
|
597
|
+
end
|
563
598
|
end
|
564
|
-
|
599
|
+
|
565
600
|
# Add primary key SQL fragment to column creation SQL.
|
566
601
|
def column_definition_primary_key_sql(sql, column)
|
567
602
|
if column[:primary_key]
|
568
603
|
if name = column[:primary_key_constraint_name]
|
569
604
|
sql << " CONSTRAINT #{quote_identifier(name)}"
|
570
605
|
end
|
571
|
-
sql <<
|
606
|
+
sql << " " << primary_key_constraint_sql_fragment(column)
|
607
|
+
constraint_deferrable_sql_append(sql, column[:primary_key_deferrable])
|
572
608
|
end
|
573
609
|
end
|
574
610
|
|
@@ -588,43 +624,43 @@ module Sequel
|
|
588
624
|
if name = column[:unique_constraint_name]
|
589
625
|
sql << " CONSTRAINT #{quote_identifier(name)}"
|
590
626
|
end
|
591
|
-
sql <<
|
627
|
+
sql << ' ' << unique_constraint_sql_fragment(column)
|
628
|
+
constraint_deferrable_sql_append(sql, column[:unique_deferrable])
|
592
629
|
end
|
593
630
|
end
|
594
631
|
|
595
632
|
# SQL for all given columns, used inside a CREATE TABLE block.
|
596
633
|
def column_list_sql(generator)
|
597
|
-
(generator.columns.map{|c| column_definition_sql(c)} + generator.constraints.map{|c| constraint_definition_sql(c)}).join(
|
634
|
+
(generator.columns.map{|c| column_definition_sql(c)} + generator.constraints.map{|c| constraint_definition_sql(c)}).join(', ')
|
598
635
|
end
|
599
636
|
|
600
|
-
# SQL
|
637
|
+
# SQL fragment for column foreign key references (column constraints)
|
601
638
|
def column_references_column_constraint_sql(column)
|
602
639
|
column_references_sql(column)
|
603
640
|
end
|
604
641
|
|
605
|
-
# SQL
|
642
|
+
# SQL fragment for column foreign key references
|
606
643
|
def column_references_sql(column)
|
607
644
|
sql = String.new
|
608
645
|
sql << " REFERENCES #{quote_schema_table(column[:table])}"
|
609
|
-
sql << "(#{Array(column[:key]).map{|x| quote_identifier(x)}.join(
|
646
|
+
sql << "(#{Array(column[:key]).map{|x| quote_identifier(x)}.join(', ')})" if column[:key]
|
610
647
|
sql << " ON DELETE #{on_delete_clause(column[:on_delete])}" if column[:on_delete]
|
611
648
|
sql << " ON UPDATE #{on_update_clause(column[:on_update])}" if column[:on_update]
|
612
649
|
constraint_deferrable_sql_append(sql, column[:deferrable])
|
613
650
|
sql
|
614
651
|
end
|
615
652
|
|
616
|
-
# SQL
|
653
|
+
# SQL fragment for table foreign key references (table constraints)
|
617
654
|
def column_references_table_constraint_sql(constraint)
|
618
655
|
"FOREIGN KEY #{literal(constraint[:columns])}#{column_references_sql(constraint)}"
|
619
656
|
end
|
620
657
|
|
621
658
|
# Whether the given alter table operation is combinable.
|
622
659
|
def combinable_alter_table_op?(op)
|
623
|
-
# Use a dynamic lookup for easier overriding in adapters
|
624
660
|
COMBINABLE_ALTER_TABLE_OPS.include?(op[:op])
|
625
661
|
end
|
626
662
|
|
627
|
-
# SQL
|
663
|
+
# SQL fragment specifying a constraint on a table.
|
628
664
|
def constraint_definition_sql(constraint)
|
629
665
|
sql = String.new
|
630
666
|
sql << "CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]
|
@@ -636,11 +672,11 @@ module Sequel
|
|
636
672
|
check = "(#{check})" unless check[0..0] == '(' && check[-1..-1] == ')'
|
637
673
|
sql << "CHECK #{check}"
|
638
674
|
when :primary_key
|
639
|
-
sql << "
|
675
|
+
sql << "#{primary_key_constraint_sql_fragment(constraint)} #{literal(constraint[:columns])}"
|
640
676
|
when :foreign_key
|
641
677
|
sql << column_references_table_constraint_sql(constraint.merge(:deferrable=>nil))
|
642
678
|
when :unique
|
643
|
-
sql << "
|
679
|
+
sql << "#{unique_constraint_sql_fragment(constraint)} #{literal(constraint[:columns])}"
|
644
680
|
else
|
645
681
|
raise Error, "Invalid constraint type #{constraint[:type]}, should be :check, :primary_key, :foreign_key, or :unique"
|
646
682
|
end
|
@@ -648,7 +684,7 @@ module Sequel
|
|
648
684
|
sql
|
649
685
|
end
|
650
686
|
|
651
|
-
# SQL
|
687
|
+
# SQL fragment specifying the deferrable constraint attributes.
|
652
688
|
def constraint_deferrable_sql_append(sql, defer)
|
653
689
|
case defer
|
654
690
|
when nil
|
@@ -676,14 +712,15 @@ module Sequel
|
|
676
712
|
e = options[:ignore_index_errors] || options[:if_not_exists]
|
677
713
|
generator.indexes.each do |index|
|
678
714
|
begin
|
679
|
-
index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}
|
715
|
+
pr = proc{index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}}
|
716
|
+
supports_transactional_ddl? ? transaction(:savepoint=>:only, &pr) : pr.call
|
680
717
|
rescue Error
|
681
718
|
raise unless e
|
682
719
|
end
|
683
720
|
end
|
684
721
|
end
|
685
722
|
|
686
|
-
#
|
723
|
+
# SQL statement for creating a table with the given name, columns, and options
|
687
724
|
def create_table_sql(name, generator, options)
|
688
725
|
unless supports_named_column_constraints?
|
689
726
|
# Split column constraints into table constraints if they have a name
|
@@ -702,33 +739,44 @@ module Sequel
|
|
702
739
|
end
|
703
740
|
end
|
704
741
|
end
|
742
|
+
|
743
|
+
unless can_add_primary_key_constraint_on_nullable_columns?
|
744
|
+
if pk = generator.constraints.find{|op| op[:type] == :primary_key}
|
745
|
+
pk[:columns].each do |column|
|
746
|
+
if matched_column = generator.columns.find{|gc| gc[:name] == column}
|
747
|
+
matched_column[:null] = false
|
748
|
+
end
|
749
|
+
end
|
750
|
+
end
|
751
|
+
end
|
752
|
+
|
705
753
|
"#{create_table_prefix_sql(name, options)} (#{column_list_sql(generator)})"
|
706
754
|
end
|
707
755
|
|
708
|
-
# Run
|
756
|
+
# Run SQL statement to create the table with the given name from the given
|
709
757
|
# SELECT sql statement.
|
710
758
|
def create_table_as(name, sql, options)
|
711
759
|
sql = sql.sql if sql.is_a?(Sequel::Dataset)
|
712
760
|
run(create_table_as_sql(name, sql, options))
|
713
761
|
end
|
714
762
|
|
715
|
-
#
|
763
|
+
# SQL statement for creating a table from the result of a SELECT statement.
|
716
764
|
# +sql+ should be a string representing a SELECT query.
|
717
765
|
def create_table_as_sql(name, sql, options)
|
718
766
|
"#{create_table_prefix_sql(name, options)} AS #{sql}"
|
719
767
|
end
|
720
768
|
|
721
|
-
#
|
769
|
+
# SQL fragment for initial part of CREATE TABLE statement
|
722
770
|
def create_table_prefix_sql(name, options)
|
723
771
|
"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)}"
|
724
772
|
end
|
725
773
|
|
726
|
-
#
|
774
|
+
# SQL fragment for initial part of CREATE VIEW statement
|
727
775
|
def create_view_prefix_sql(name, options)
|
728
776
|
create_view_sql_append_columns("CREATE #{'OR REPLACE 'if options[:replace]}VIEW #{quote_schema_table(name)}", options[:columns])
|
729
777
|
end
|
730
778
|
|
731
|
-
#
|
779
|
+
# SQL statement for creating a view.
|
732
780
|
def create_view_sql(name, source, options)
|
733
781
|
source = source.sql if source.is_a?(Dataset)
|
734
782
|
sql = String.new
|
@@ -741,9 +789,8 @@ module Sequel
|
|
741
789
|
|
742
790
|
# Append the column list to the SQL, if a column list is given.
|
743
791
|
def create_view_sql_append_columns(sql, columns)
|
744
|
-
sql = sql.dup
|
745
792
|
if columns
|
746
|
-
sql
|
793
|
+
sql += ' ('
|
747
794
|
schema_utility_dataset.send(:identifier_list_append, sql, columns)
|
748
795
|
sql << ')'
|
749
796
|
end
|
@@ -754,7 +801,7 @@ module Sequel
|
|
754
801
|
# for certain databases.
|
755
802
|
def default_index_name(table_name, columns)
|
756
803
|
schema, table = schema_and_table(table_name)
|
757
|
-
"#{"#{schema}_" if schema}#{table}_#{columns.map{|c| [String, Symbol].any?{|cl| c.is_a?(cl)} ? c : literal(c).gsub(/\W/, '_')}.join(
|
804
|
+
"#{"#{schema}_" if schema}#{table}_#{columns.map{|c| [String, Symbol].any?{|cl| c.is_a?(cl)} ? c : literal(c).gsub(/\W/, '_')}.join('_')}_index"
|
758
805
|
end
|
759
806
|
|
760
807
|
# Get foreign key name for given table and columns.
|
@@ -780,11 +827,25 @@ module Sequel
|
|
780
827
|
end
|
781
828
|
|
782
829
|
# Proxy the filter_expr call to the dataset, used for creating constraints.
|
783
|
-
|
784
|
-
|
830
|
+
# Support passing Proc arguments as blocks, as well as treating plain strings
|
831
|
+
# as literal strings, so that previous migrations that used this API do not break.
|
832
|
+
def filter_expr(arg=nil, &block)
|
833
|
+
if arg.is_a?(Proc) && !block
|
834
|
+
block = arg
|
835
|
+
arg = nil
|
836
|
+
elsif arg.is_a?(String)
|
837
|
+
arg = Sequel.lit(arg)
|
838
|
+
elsif arg.is_a?(Array)
|
839
|
+
if arg.first.is_a?(String)
|
840
|
+
arg = Sequel.lit(*arg)
|
841
|
+
elsif arg.length > 1
|
842
|
+
arg = Sequel.&(*arg)
|
843
|
+
end
|
844
|
+
end
|
845
|
+
schema_utility_dataset.literal(schema_utility_dataset.send(:filter_expr, arg, &block))
|
785
846
|
end
|
786
847
|
|
787
|
-
# SQL
|
848
|
+
# SQL statement for creating an index for the table with the given name
|
788
849
|
# and index specifications.
|
789
850
|
def index_definition_sql(table_name, index)
|
790
851
|
index_name = index[:name] || default_index_name(table_name, index[:columns])
|
@@ -793,7 +854,7 @@ module Sequel
|
|
793
854
|
"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]}"
|
794
855
|
end
|
795
856
|
|
796
|
-
# Array of SQL
|
857
|
+
# Array of SQL statements, one for each index specification,
|
797
858
|
# for the given table.
|
798
859
|
def index_sql_list(table_name, indexes)
|
799
860
|
indexes.map{|i| index_definition_sql(table_name, i)}
|
@@ -825,7 +886,7 @@ module Sequel
|
|
825
886
|
end
|
826
887
|
end
|
827
888
|
|
828
|
-
# SQL
|
889
|
+
# SQL fragment to use for ON DELETE, based on the given action.
|
829
890
|
# The following actions are recognized:
|
830
891
|
#
|
831
892
|
# :cascade :: Delete rows referencing this row.
|
@@ -847,12 +908,17 @@ module Sequel
|
|
847
908
|
on_delete_clause(action)
|
848
909
|
end
|
849
910
|
|
911
|
+
# Add fragment for primary key specification, separated for easier overridding.
|
912
|
+
def primary_key_constraint_sql_fragment(_)
|
913
|
+
'PRIMARY KEY'
|
914
|
+
end
|
915
|
+
|
850
916
|
# Proxy the quote_schema_table method to the dataset
|
851
917
|
def quote_schema_table(table)
|
852
918
|
schema_utility_dataset.quote_schema_table(table)
|
853
919
|
end
|
854
920
|
|
855
|
-
# SQL
|
921
|
+
# SQL statement for renaming a table.
|
856
922
|
def rename_table_sql(name, new_name)
|
857
923
|
"ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_schema_table(new_name)}"
|
858
924
|
end
|
@@ -877,9 +943,9 @@ module Sequel
|
|
877
943
|
schema_utility_dataset.split_qualifiers(table_name)
|
878
944
|
end
|
879
945
|
|
880
|
-
# SQL
|
946
|
+
# SQL fragment for temporary table
|
881
947
|
def temporary_table_sql
|
882
|
-
|
948
|
+
'TEMPORARY '
|
883
949
|
end
|
884
950
|
|
885
951
|
# SQL fragment specifying the type of a given column.
|
@@ -899,6 +965,7 @@ module Sequel
|
|
899
965
|
def type_literal_generic(column)
|
900
966
|
meth = "type_literal_generic_#{column[:type].name.to_s.downcase}"
|
901
967
|
if respond_to?(meth, true)
|
968
|
+
# Allow calling private methods as per type literal generic methods are private
|
902
969
|
send(meth, column)
|
903
970
|
else
|
904
971
|
raise Error, "Unsupported ruby class used as database type: #{column[:type]}"
|
@@ -910,12 +977,6 @@ module Sequel
|
|
910
977
|
type_literal_generic_numeric(column)
|
911
978
|
end
|
912
979
|
|
913
|
-
# Sequel uses the bigint type by default for Bignums.
|
914
|
-
def type_literal_generic_bignum(column)
|
915
|
-
Sequel::Deprecation.deprecate("Using the Bignum class as a generic type is deprecated and will be removed in Sequel 4.41.0, as the behavior will change in ruby 2.4. Switch to using the :Bignum symbol.")
|
916
|
-
type_literal_generic_bignum_symbol(column)
|
917
|
-
end
|
918
|
-
|
919
980
|
# Sequel uses the bigint type by default for :Bignum symbol.
|
920
981
|
def type_literal_generic_bignum_symbol(column)
|
921
982
|
:bigint
|
@@ -980,7 +1041,16 @@ module Sequel
|
|
980
1041
|
# Sequel uses the timestamp type by default for Time values.
|
981
1042
|
# If the :only_time option is used, the time type is used.
|
982
1043
|
def type_literal_generic_time(column)
|
983
|
-
column[:only_time]
|
1044
|
+
if column[:only_time]
|
1045
|
+
type_literal_generic_only_time(column)
|
1046
|
+
else
|
1047
|
+
type_literal_generic_datetime(column)
|
1048
|
+
end
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
# Use time by default for Time values if :only_time option is used.
|
1052
|
+
def type_literal_generic_only_time(column)
|
1053
|
+
:time
|
984
1054
|
end
|
985
1055
|
|
986
1056
|
# Sequel uses the boolean type by default for TrueClass and FalseClass.
|
@@ -995,10 +1065,15 @@ module Sequel
|
|
995
1065
|
type = "double precision" if type.to_s == 'double'
|
996
1066
|
column[:size] ||= default_string_column_size if type.to_s == 'varchar'
|
997
1067
|
elements = column[:size] || column[:elements]
|
998
|
-
"#{type}#{literal(Array(elements)) if elements}#{UNSIGNED if column[:unsigned]}"
|
1068
|
+
"#{type}#{literal(Array(elements)) if elements}#{' UNSIGNED' if column[:unsigned]}"
|
999
1069
|
end
|
1000
1070
|
|
1001
|
-
#
|
1071
|
+
# Add fragment for unique specification, separated for easier overridding.
|
1072
|
+
def unique_constraint_sql_fragment(_)
|
1073
|
+
'UNIQUE'
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
# Whether clob should be used for String text: true columns.
|
1002
1077
|
def uses_clob_for_text?
|
1003
1078
|
false
|
1004
1079
|
end
|