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
@@ -6,6 +6,17 @@
|
|
6
6
|
# the current database). The main interface is through
|
7
7
|
# Sequel::Database#dump_schema_migration.
|
8
8
|
#
|
9
|
+
# The schema_dumper extension is quite limited in what types of
|
10
|
+
# database objects it supports. In general, it only supports
|
11
|
+
# dumping tables, columns, primary key and foreign key constraints,
|
12
|
+
# and some indexes. It does not support most table options, CHECK
|
13
|
+
# constraints, partial indexes, database functions, triggers,
|
14
|
+
# security grants/revokes, and a wide variety of other useful
|
15
|
+
# database properties. Be aware of the limitations when using the
|
16
|
+
# schema_dumper extension. If you are dumping the schema to restore
|
17
|
+
# to the same database type, it is recommended to use your database's
|
18
|
+
# dump and restore programs instead of the schema_dumper extension.
|
19
|
+
#
|
9
20
|
# To load the extension:
|
10
21
|
#
|
11
22
|
# DB.extension :schema_dumper
|
@@ -20,8 +31,12 @@ module Sequel
|
|
20
31
|
# be :type. The other options added should modify that type (e.g. :size). If a
|
21
32
|
# database type is not recognized, return it as a String type.
|
22
33
|
def column_schema_to_ruby_type(schema)
|
23
|
-
|
24
|
-
|
34
|
+
type = schema[:db_type].downcase
|
35
|
+
if database_type == :oracle
|
36
|
+
type = type.sub(/ not null\z/, '')
|
37
|
+
end
|
38
|
+
case type
|
39
|
+
when /\A(medium|small)?int(?:eger)?(?:\((\d+)\))?( unsigned)?\z/
|
25
40
|
if !$1 && $2 && $2.to_i >= 10 && $3
|
26
41
|
# Unsigned integer type with 10 digits can potentially contain values which
|
27
42
|
# don't fit signed integer type, so use bigint type in target database.
|
@@ -29,36 +44,36 @@ module Sequel
|
|
29
44
|
else
|
30
45
|
{:type=>Integer}
|
31
46
|
end
|
32
|
-
when /\Atinyint(?:\((\d+)\))?(?: unsigned)?\z/
|
47
|
+
when /\Atinyint(?:\((\d+)\))?(?: unsigned)?\z/
|
33
48
|
{:type =>schema[:type] == :boolean ? TrueClass : Integer}
|
34
|
-
when /\Abigint(?:\((?:\d+)\))?(?: unsigned)?\z/
|
49
|
+
when /\Abigint(?:\((?:\d+)\))?(?: unsigned)?\z/
|
35
50
|
{:type=>:Bignum}
|
36
|
-
when /\A(?:real|float|double(?: precision)?|double\(\d+,\d+\)(?: unsigned)
|
51
|
+
when /\A(?:real|float|double(?: precision)?|double\(\d+,\d+\))(?: unsigned)?\z/
|
37
52
|
{:type=>Float}
|
38
53
|
when 'boolean', 'bit', 'bool'
|
39
54
|
{:type=>TrueClass}
|
40
|
-
when /\A(?:(?:tiny|medium|long|n)?text|clob)\z/
|
55
|
+
when /\A(?:(?:tiny|medium|long|n)?text|clob)\z/
|
41
56
|
{:type=>String, :text=>true}
|
42
57
|
when 'date'
|
43
58
|
{:type=>Date}
|
44
|
-
when /\A(?:small)?datetime\z/
|
59
|
+
when /\A(?:small)?datetime\z/
|
45
60
|
{:type=>DateTime}
|
46
|
-
when /\Atimestamp(?:\((\d+)\))?(?: with(?:out)? time zone)?\z/
|
61
|
+
when /\Atimestamp(?:\((\d+)\))?(?: with(?:out)? time zone)?\z/
|
47
62
|
{:type=>DateTime, :size=>($1.to_i if $1)}
|
48
|
-
when /\Atime(?: with(?:out)? time zone)?\z/
|
63
|
+
when /\Atime(?: with(?:out)? time zone)?\z/
|
49
64
|
{:type=>Time, :only_time=>true}
|
50
|
-
when /\An?char(?:acter)?(?:\((\d+)\))?\z/
|
65
|
+
when /\An?char(?:acter)?(?:\((\d+)\))?\z/
|
51
66
|
{:type=>String, :size=>($1.to_i if $1), :fixed=>true}
|
52
|
-
when /\A(?:n?
|
67
|
+
when /\A(?:n?varchar2?|character varying|bpchar|string)(?:\((\d+)\))?\z/
|
53
68
|
{:type=>String, :size=>($1.to_i if $1)}
|
54
|
-
when /\A(?:small)?money\z/
|
69
|
+
when /\A(?:small)?money\z/
|
55
70
|
{:type=>BigDecimal, :size=>[19,2]}
|
56
|
-
when /\A(?:decimal|numeric|number)(?:\((\d+)(?:,\s*(\d+))?\))?\z/
|
71
|
+
when /\A(?:decimal|numeric|number)(?:\((\d+)(?:,\s*(\d+))?\))?(?: unsigned)?\z/
|
57
72
|
s = [($1.to_i if $1), ($2.to_i if $2)].compact
|
58
73
|
{:type=>BigDecimal, :size=>(s.empty? ? nil : s)}
|
59
|
-
when /\A(?:bytea|(?:tiny|medium|long)?blob|(?:var)?binary)(?:\((\d+)\))?\z/
|
74
|
+
when /\A(?:bytea|(?:tiny|medium|long)?blob|(?:var)?binary)(?:\((\d+)\))?\z/
|
60
75
|
{:type=>File, :size=>($1.to_i if $1)}
|
61
|
-
when /\A(?:year|(?:int )?identity)\z/
|
76
|
+
when /\A(?:year|(?:int )?identity)\z/
|
62
77
|
{:type=>Integer}
|
63
78
|
else
|
64
79
|
{:type=>String}
|
@@ -66,7 +81,7 @@ module Sequel
|
|
66
81
|
end
|
67
82
|
|
68
83
|
# Dump foreign key constraints for all tables as a migration. This complements
|
69
|
-
# the :
|
84
|
+
# the foreign_keys: false option to dump_schema_migration. This only dumps
|
70
85
|
# the constraints (not the columns) using alter_table/add_foreign_key with an
|
71
86
|
# array of columns.
|
72
87
|
#
|
@@ -77,14 +92,14 @@ module Sequel
|
|
77
92
|
<<END_MIG
|
78
93
|
Sequel.migration do
|
79
94
|
change do
|
80
|
-
#{ts.
|
95
|
+
#{ts.sort.map{|t| dump_table_foreign_keys(t)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
|
81
96
|
end
|
82
97
|
end
|
83
98
|
END_MIG
|
84
99
|
end
|
85
100
|
|
86
101
|
# Dump indexes for all tables as a migration. This complements
|
87
|
-
# the :
|
102
|
+
# the indexes: false option to dump_schema_migration. Options:
|
88
103
|
# :same_db :: Create a dump for the same database type, so
|
89
104
|
# don't ignore errors if the index statements fail.
|
90
105
|
# :index_names :: If set to false, don't record names of indexes. If
|
@@ -95,13 +110,13 @@ END_MIG
|
|
95
110
|
<<END_MIG
|
96
111
|
Sequel.migration do
|
97
112
|
change do
|
98
|
-
#{ts.
|
113
|
+
#{ts.sort.map{|t| dump_table_indexes(t, :add_index, options)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
|
99
114
|
end
|
100
115
|
end
|
101
116
|
END_MIG
|
102
117
|
end
|
103
118
|
|
104
|
-
# Return a string that contains a Sequel
|
119
|
+
# Return a string that contains a Sequel migration that when
|
105
120
|
# run would recreate the database structure. Options:
|
106
121
|
# :same_db :: Don't attempt to translate database types to ruby types.
|
107
122
|
# If this isn't set to true, all database types will be translated to
|
@@ -128,14 +143,14 @@ END_MIG
|
|
128
143
|
# Handle skipped foreign keys by adding them at the end via
|
129
144
|
# alter_table/add_foreign_key. Note that skipped foreign keys
|
130
145
|
# probably result in a broken down migration.
|
131
|
-
sfka = sfk.
|
132
|
-
sfka.join("\n\n").gsub(
|
146
|
+
sfka = sfk.sort.map{|table, fks| dump_add_fk_constraints(table, fks.values)}
|
147
|
+
sfka.join("\n\n").gsub(/^/, ' ') unless sfka.empty?
|
133
148
|
end
|
134
149
|
|
135
150
|
<<END_MIG
|
136
151
|
Sequel.migration do
|
137
152
|
change do
|
138
|
-
#{ts.map{|t| dump_table_schema(t, options)}.join("\n\n").gsub(
|
153
|
+
#{ts.map{|t| dump_table_schema(t, options)}.join("\n\n").gsub(/^/, ' ')}#{"\n \n" if skipped_fks}#{skipped_fks}
|
139
154
|
end
|
140
155
|
end
|
141
156
|
END_MIG
|
@@ -146,7 +161,7 @@ END_MIG
|
|
146
161
|
def dump_table_schema(table, options=OPTS)
|
147
162
|
gen = dump_table_generator(table, options)
|
148
163
|
commands = [gen.dump_columns, gen.dump_constraints, gen.dump_indexes].reject{|x| x == ''}.join("\n\n")
|
149
|
-
"create_table(#{table.inspect}#{', :ignore_index_errors=>true' if !options[:same_db] && options[:indexes] != false && !gen.indexes.empty?}) do\n#{commands.gsub(
|
164
|
+
"create_table(#{table.inspect}#{', :ignore_index_errors=>true' if !options[:same_db] && options[:indexes] != false && !gen.indexes.empty?}) do\n#{commands.gsub(/^/, ' ')}\nend"
|
150
165
|
end
|
151
166
|
|
152
167
|
private
|
@@ -163,13 +178,15 @@ END_MIG
|
|
163
178
|
end
|
164
179
|
end
|
165
180
|
|
166
|
-
# Recreate the column in the passed Schema::
|
181
|
+
# Recreate the column in the passed Schema::CreateTableGenerator from the given name and parsed database schema.
|
167
182
|
def recreate_column(name, schema, gen, options)
|
168
183
|
if options[:single_pk] && schema_autoincrementing_primary_key?(schema)
|
169
184
|
type_hash = options[:same_db] ? {:type=>schema[:db_type]} : column_schema_to_ruby_type(schema)
|
170
185
|
[:table, :key, :on_delete, :on_update, :deferrable].each{|f| type_hash[f] = schema[f] if schema[f]}
|
171
|
-
if type_hash == {:type=>Integer} || type_hash == {:type=>"integer"}
|
186
|
+
if type_hash == {:type=>Integer} || type_hash == {:type=>"integer"} || type_hash == {:type=>"INTEGER"}
|
172
187
|
type_hash.delete(:type)
|
188
|
+
elsif options[:same_db] && type_hash == {:type=>type_literal_generic_bignum_symbol(type_hash).to_s}
|
189
|
+
type_hash[:type] = :Bignum
|
173
190
|
end
|
174
191
|
|
175
192
|
unless gen.columns.empty?
|
@@ -193,20 +210,26 @@ END_MIG
|
|
193
210
|
end
|
194
211
|
type = col_opts.delete(:type)
|
195
212
|
col_opts.delete(:size) if col_opts[:size].nil?
|
196
|
-
|
197
|
-
|
213
|
+
if schema[:generated]
|
214
|
+
if options[:same_db] && database_type == :postgres
|
215
|
+
col_opts[:generated_always_as] = column_schema_to_ruby_default_fallback(schema[:default], options)
|
216
|
+
end
|
198
217
|
else
|
199
|
-
schema[:ruby_default]
|
218
|
+
col_opts[:default] = if schema[:ruby_default].nil?
|
219
|
+
column_schema_to_ruby_default_fallback(schema[:default], options)
|
220
|
+
else
|
221
|
+
schema[:ruby_default]
|
222
|
+
end
|
223
|
+
col_opts.delete(:default) if col_opts[:default].nil?
|
200
224
|
end
|
201
|
-
col_opts.delete(:default) if col_opts[:default].nil?
|
202
225
|
col_opts[:null] = false if schema[:allow_null] == false
|
203
226
|
if table = schema[:table]
|
204
227
|
[:key, :on_delete, :on_update, :deferrable].each{|f| col_opts[f] = schema[f] if schema[f]}
|
205
|
-
col_opts[:type] = type unless type == Integer || type == 'integer'
|
228
|
+
col_opts[:type] = type unless type == Integer || type == 'integer' || type == 'INTEGER'
|
206
229
|
gen.foreign_key(name, table, col_opts)
|
207
230
|
else
|
208
231
|
gen.column(name, type, col_opts)
|
209
|
-
if [Integer, :Bignum, Float].include?(type) && schema[:db_type] =~ / unsigned\z/io
|
232
|
+
if [Integer, :Bignum, Float, BigDecimal].include?(type) && schema[:db_type] =~ / unsigned\z/io
|
210
233
|
gen.check(Sequel::SQL::Identifier.new(name) >= 0)
|
211
234
|
end
|
212
235
|
end
|
@@ -219,7 +242,7 @@ END_MIG
|
|
219
242
|
sfks = String.new
|
220
243
|
sfks << "alter_table(#{table.inspect}) do\n"
|
221
244
|
sfks << create_table_generator do
|
222
|
-
fks.sort_by{|fk| fk[:columns]
|
245
|
+
fks.sort_by{|fk| fk[:columns]}.each do |fk|
|
223
246
|
foreign_key fk[:columns], fk
|
224
247
|
end
|
225
248
|
end.dump_constraints.gsub(/^foreign_key /, ' add_foreign_key ')
|
@@ -230,7 +253,7 @@ END_MIG
|
|
230
253
|
# string that would add the foreign keys if run in a migration.
|
231
254
|
def dump_table_foreign_keys(table, options=OPTS)
|
232
255
|
if supports_foreign_key_parsing?
|
233
|
-
fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]
|
256
|
+
fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]}
|
234
257
|
end
|
235
258
|
|
236
259
|
if fks.nil? || fks.empty?
|
@@ -240,17 +263,17 @@ END_MIG
|
|
240
263
|
end
|
241
264
|
end
|
242
265
|
|
243
|
-
# Return a Schema::
|
266
|
+
# Return a Schema::CreateTableGenerator object that will recreate the
|
244
267
|
# table's schema. Takes the same options as dump_schema_migration.
|
245
268
|
def dump_table_generator(table, options=OPTS)
|
246
|
-
s = schema(table).dup
|
269
|
+
s = schema(table, options).dup
|
247
270
|
pks = s.find_all{|x| x.last[:primary_key] == true}.map(&:first)
|
248
271
|
options = options.merge(:single_pk=>true) if pks.length == 1
|
249
272
|
m = method(:recreate_column)
|
250
273
|
im = method(:index_to_generator_opts)
|
251
274
|
|
252
275
|
if options[:indexes] != false && supports_index_parsing?
|
253
|
-
indexes = indexes(table).
|
276
|
+
indexes = indexes(table).sort
|
254
277
|
end
|
255
278
|
|
256
279
|
if options[:foreign_keys] != false && supports_foreign_key_parsing?
|
@@ -290,7 +313,7 @@ END_MIG
|
|
290
313
|
# creating the index migration.
|
291
314
|
def dump_table_indexes(table, meth, options=OPTS)
|
292
315
|
if supports_index_parsing?
|
293
|
-
indexes = indexes(table).
|
316
|
+
indexes = indexes(table).sort
|
294
317
|
else
|
295
318
|
return ''
|
296
319
|
end
|
@@ -302,7 +325,7 @@ END_MIG
|
|
302
325
|
gen.dump_indexes(meth=>table, :ignore_errors=>!options[:same_db])
|
303
326
|
end
|
304
327
|
|
305
|
-
# Convert the parsed index information into options to the
|
328
|
+
# Convert the parsed index information into options to the CreateTableGenerator's index method.
|
306
329
|
def index_to_generator_opts(table, name, index_opts, options=OPTS)
|
307
330
|
h = {}
|
308
331
|
if options[:index_names] != false && default_index_name(table, index_opts[:columns]) != name.to_s
|
@@ -329,7 +352,7 @@ END_MIG
|
|
329
352
|
options[:skipped_foreign_keys] = skipped_foreign_keys
|
330
353
|
tables
|
331
354
|
else
|
332
|
-
tables.
|
355
|
+
tables.sort
|
333
356
|
end
|
334
357
|
end
|
335
358
|
|
@@ -354,14 +377,14 @@ END_MIG
|
|
354
377
|
# outstanding foreign keys and skipping those foreign keys.
|
355
378
|
# The skipped foreign keys will be added at the end of the
|
356
379
|
# migration.
|
357
|
-
skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table
|
380
|
+
skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table]}.first
|
358
381
|
skip_fks_hash = skipped_foreign_keys[skip_table] = {}
|
359
382
|
skip_fks.each{|fk| skip_fks_hash[fk[:columns]] = fk}
|
360
383
|
this_loop << skip_table
|
361
384
|
end
|
362
385
|
|
363
386
|
# Add sorted tables from this loop to the final list
|
364
|
-
sorted_tables.concat(this_loop.
|
387
|
+
sorted_tables.concat(this_loop.sort)
|
365
388
|
|
366
389
|
# Remove tables that were handled this loop
|
367
390
|
this_loop.each{|t| table_fks.delete(t)}
|
@@ -378,7 +401,7 @@ END_MIG
|
|
378
401
|
end
|
379
402
|
|
380
403
|
module Schema
|
381
|
-
class
|
404
|
+
class CreateTableGenerator
|
382
405
|
# Dump this generator's columns to a string that could be evaled inside
|
383
406
|
# another instance to represent the same columns
|
384
407
|
def dump_columns
|
@@ -452,11 +475,11 @@ END_MIG
|
|
452
475
|
|
453
476
|
# Dump this generator's indexes to a string that could be evaled inside
|
454
477
|
# another instance to represent the same indexes. Options:
|
455
|
-
#
|
456
|
-
#
|
457
|
-
#
|
458
|
-
#
|
459
|
-
#
|
478
|
+
# :add_index :: Use add_index instead of index, so the methods
|
479
|
+
# can be called outside of a generator but inside a migration.
|
480
|
+
# The value of this option should be the table name to use.
|
481
|
+
# :drop_index :: Same as add_index, but create drop_index statements.
|
482
|
+
# :ignore_errors :: Add the ignore_errors option to the outputted indexes
|
460
483
|
def dump_indexes(options=OPTS)
|
461
484
|
is = indexes.map do |c|
|
462
485
|
c = c.dup
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
#
|
3
|
-
# The select_remove extension adds
|
3
|
+
# The select_remove extension adds select_remove for removing existing selected
|
4
4
|
# columns from a dataset. It's not part of Sequel core as it is rarely needed and has
|
5
5
|
# some corner cases where it can't work correctly.
|
6
6
|
#
|
@@ -26,8 +26,8 @@ module Sequel
|
|
26
26
|
# # Assume columns a, b, and c in items table
|
27
27
|
# DB[:items] # SELECT * FROM items
|
28
28
|
# DB[:items].select_remove(:c) # SELECT a, b FROM items
|
29
|
-
# DB[:items].select(:a, :
|
30
|
-
# DB[:items].select(:a, :
|
29
|
+
# DB[:items].select(:a, Sequel[:b].as(:c), Sequel[:c].as(:b)).select_remove(:c) # SELECT a, c AS b FROM items
|
30
|
+
# DB[:items].select(:a, Sequel[:b][:c], Sequel[:c][:b]).select_remove(Sequel[:c][:b]) # SELECT a, b AS c FROM items
|
31
31
|
#
|
32
32
|
# Note that there are a few cases where this method may not work correctly:
|
33
33
|
#
|
@@ -35,7 +35,7 @@ module Sequel
|
|
35
35
|
# In this case, the code will currently use unqualified column names for all columns
|
36
36
|
# the dataset returns, except for the columns given.
|
37
37
|
# * This dataset has an existing explicit selection containing an item that returns
|
38
|
-
# multiple database columns (e.g. Sequel
|
38
|
+
# multiple database columns (e.g. Sequel[:table].*, Sequel.lit('column1, column2')). In this case,
|
39
39
|
# the behavior is undefined and this method should not be used.
|
40
40
|
#
|
41
41
|
# There may be other cases where this method does not work correctly, use it with caution.
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
#
|
3
|
+
# This adds the following dataset methods:
|
4
|
+
#
|
5
|
+
# and :: alias for where
|
6
|
+
# exclude_where :: alias for exclude
|
7
|
+
# interval :: Returns max - min, using a single query
|
8
|
+
# range :: Returns min..max, using a single query
|
9
|
+
#
|
10
|
+
# It is only recommended to use this for backwards compatibility.
|
11
|
+
#
|
12
|
+
# You can load this extension into specific datasets:
|
13
|
+
#
|
14
|
+
# ds = DB[:table]
|
15
|
+
# ds = ds.extension(:sequel_4_dataset_methods)
|
16
|
+
#
|
17
|
+
# Or you can load it into all of a database's datasets, which
|
18
|
+
# is probably the desired behavior if you are using this extension:
|
19
|
+
#
|
20
|
+
# DB.extension(:sequel_4_dataset_methods)
|
21
|
+
#
|
22
|
+
# Related module: Sequel::Sequel4DatasetMethods
|
23
|
+
|
24
|
+
#
|
25
|
+
module Sequel
|
26
|
+
module Sequel4DatasetMethods
|
27
|
+
# Alias for where.
|
28
|
+
def and(*cond, &block)
|
29
|
+
where(*cond, &block)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Alias for exclude.
|
33
|
+
def exclude_where(*cond, &block)
|
34
|
+
exclude(*cond, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns the interval between minimum and maximum values for the given
|
38
|
+
# column/expression. Uses a virtual row block if no argument is given.
|
39
|
+
#
|
40
|
+
# DB[:table].interval(:id) # SELECT (max(id) - min(id)) FROM table LIMIT 1
|
41
|
+
# # => 6
|
42
|
+
# DB[:table].interval{function(column)} # SELECT (max(function(column)) - min(function(column))) FROM table LIMIT 1
|
43
|
+
# # => 7
|
44
|
+
def interval(column=(no_arg = true), &block)
|
45
|
+
column = Sequel.virtual_row(&block) if no_arg
|
46
|
+
if loader = cached_placeholder_literalizer(:_interval_loader) do |pl|
|
47
|
+
arg = pl.arg
|
48
|
+
aggregate_dataset.limit(1).select((SQL::Function.new(:max, arg) - SQL::Function.new(:min, arg)).as(:interval))
|
49
|
+
end
|
50
|
+
|
51
|
+
loader.get(column)
|
52
|
+
else
|
53
|
+
aggregate_dataset.get{(max(column) - min(column)).as(:interval)}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns a +Range+ instance made from the minimum and maximum values for the
|
58
|
+
# given column/expression. Uses a virtual row block if no argument is given.
|
59
|
+
#
|
60
|
+
# DB[:table].range(:id) # SELECT max(id) AS v1, min(id) AS v2 FROM table LIMIT 1
|
61
|
+
# # => 1..10
|
62
|
+
# DB[:table].interval{function(column)} # SELECT max(function(column)) AS v1, min(function(column)) AS v2 FROM table LIMIT 1
|
63
|
+
# # => 0..7
|
64
|
+
def range(column=(no_arg = true), &block)
|
65
|
+
column = Sequel.virtual_row(&block) if no_arg
|
66
|
+
r = if loader = cached_placeholder_literalizer(:_range_loader) do |pl|
|
67
|
+
arg = pl.arg
|
68
|
+
aggregate_dataset.limit(1).select(SQL::Function.new(:min, arg).as(:v1), SQL::Function.new(:max, arg).as(:v2))
|
69
|
+
end
|
70
|
+
|
71
|
+
loader.first(column)
|
72
|
+
else
|
73
|
+
aggregate_dataset.select{[min(column).as(v1), max(column).as(v2)]}.first
|
74
|
+
end
|
75
|
+
|
76
|
+
if r
|
77
|
+
(r[:v1]..r[:v2])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
Dataset.register_extension(:sequel_4_dataset_methods, Sequel4DatasetMethods)
|
84
|
+
end
|
85
|
+
|
@@ -16,7 +16,7 @@
|
|
16
16
|
# end
|
17
17
|
# DB[:a].all # Uses default
|
18
18
|
#
|
19
|
-
# You can
|
19
|
+
# You can nest calls to with_server:
|
20
20
|
#
|
21
21
|
# DB.with_server(:shard1) do
|
22
22
|
# DB[:a].all # Uses shard1
|
@@ -39,6 +39,25 @@
|
|
39
39
|
# DB[:a].server(:read_only).all # Uses shard1
|
40
40
|
# end
|
41
41
|
#
|
42
|
+
# If you pass two separate shards to with_server, the second shard will
|
43
|
+
# be used instead of the :read_only shard, and the first shard will be
|
44
|
+
# used instead of the :default shard:
|
45
|
+
#
|
46
|
+
# DB.with_server(:shard1, :shard2) do
|
47
|
+
# DB[:a].all # Uses shard2
|
48
|
+
# DB[:a].delete # Uses shard1
|
49
|
+
# DB[:a].server(:shard3).all # Uses shard3
|
50
|
+
# DB[:a].server(:shard3).delete # Uses shard3
|
51
|
+
# DB[:a].server(:default).all # Uses shard1
|
52
|
+
# DB[:a].server(:read_only).delete # Uses shard2
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# If you use an invalid server when calling with_server, it will be
|
56
|
+
# treated the same way as if you called Dataset#server with an invalid
|
57
|
+
# server. By default, the default server will be used in such cases.
|
58
|
+
# If you would like a different server to be used, or an exception to
|
59
|
+
# be raised, then use the :servers_hash Database option.
|
60
|
+
#
|
42
61
|
# Related modules: Sequel::ServerBlock, Sequel::UnthreadedServerBlock,
|
43
62
|
# Sequel::ThreadedServerBlock
|
44
63
|
|
@@ -60,28 +79,26 @@ module Sequel
|
|
60
79
|
end
|
61
80
|
|
62
81
|
# Delegate to the connection pool
|
63
|
-
def with_server(
|
64
|
-
pool.with_server(
|
82
|
+
def with_server(default_server, read_only_server=default_server, &block)
|
83
|
+
pool.with_server(default_server, read_only_server, &block)
|
65
84
|
end
|
66
85
|
end
|
67
86
|
|
68
87
|
# Adds with_server support for the sharded single connection pool.
|
69
88
|
module UnthreadedServerBlock
|
70
89
|
# Set a default server/shard to use inside the block.
|
71
|
-
def with_server(
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
clear_default_server
|
77
|
-
end
|
90
|
+
def with_server(default_server, read_only_server=default_server)
|
91
|
+
set_default_server(default_server, read_only_server)
|
92
|
+
yield
|
93
|
+
ensure
|
94
|
+
clear_default_server
|
78
95
|
end
|
79
96
|
|
80
97
|
private
|
81
98
|
|
82
99
|
# Make the given server the new default server.
|
83
|
-
def set_default_server(
|
84
|
-
@default_servers <<
|
100
|
+
def set_default_server(default_server, read_only_server=default_server)
|
101
|
+
@default_servers << [default_server, read_only_server]
|
85
102
|
end
|
86
103
|
|
87
104
|
# Remove the current default server, restoring the
|
@@ -96,8 +113,10 @@ module Sequel
|
|
96
113
|
super
|
97
114
|
else
|
98
115
|
case server
|
99
|
-
when :default, nil
|
100
|
-
@default_servers
|
116
|
+
when :default, nil
|
117
|
+
@servers[@default_servers[-1][0]]
|
118
|
+
when :read_only
|
119
|
+
@servers[@default_servers[-1][1]]
|
101
120
|
else
|
102
121
|
super
|
103
122
|
end
|
@@ -109,26 +128,24 @@ module Sequel
|
|
109
128
|
module ThreadedServerBlock
|
110
129
|
# Set a default server/shard to use inside the block for the current
|
111
130
|
# thread.
|
112
|
-
def with_server(
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
clear_default_server
|
118
|
-
end
|
131
|
+
def with_server(default_server, read_only_server=default_server)
|
132
|
+
set_default_server(default_server, read_only_server)
|
133
|
+
yield
|
134
|
+
ensure
|
135
|
+
clear_default_server
|
119
136
|
end
|
120
137
|
|
121
138
|
private
|
122
139
|
|
123
140
|
# Make the given server the new default server for the current thread.
|
124
|
-
def set_default_server(
|
125
|
-
sync{(@default_servers[
|
141
|
+
def set_default_server(default_server, read_only_server=default_server)
|
142
|
+
sync{(@default_servers[Sequel.current] ||= [])} << [default_server, read_only_server]
|
126
143
|
end
|
127
144
|
|
128
145
|
# Remove the current default server for the current thread, restoring the
|
129
146
|
# previous default server.
|
130
147
|
def clear_default_server
|
131
|
-
t =
|
148
|
+
t = Sequel.current
|
132
149
|
a = sync{@default_servers[t]}
|
133
150
|
a.pop
|
134
151
|
sync{@default_servers.delete(t)} if a.empty?
|
@@ -136,13 +153,20 @@ module Sequel
|
|
136
153
|
|
137
154
|
# Use the server given to with_server for the given thread, if appropriate.
|
138
155
|
def pick_server(server)
|
139
|
-
a = sync{@default_servers[
|
156
|
+
a = sync{@default_servers[Sequel.current]}
|
140
157
|
if !a || a.empty?
|
141
158
|
super
|
142
159
|
else
|
160
|
+
# Hash handling required to work when loaded after arbitrary servers plugin.
|
143
161
|
case server
|
144
|
-
when :default, nil
|
145
|
-
a
|
162
|
+
when :default, nil
|
163
|
+
v = a[-1][0]
|
164
|
+
v = @servers[v] unless v.is_a?(Hash)
|
165
|
+
v
|
166
|
+
when :read_only
|
167
|
+
v = a[-1][1]
|
168
|
+
v = @servers[v] unless v.is_a?(Hash)
|
169
|
+
v
|
146
170
|
else
|
147
171
|
super
|
148
172
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# The split_array_nil extension overrides Sequel's default handling of
|
4
4
|
# IN/NOT IN with arrays of values to do specific nil checking. For example,
|
5
5
|
#
|
6
|
-
# ds = DB[:table].where(:
|
6
|
+
# ds = DB[:table].where(column: [1, nil])
|
7
7
|
#
|
8
8
|
# By default, that produces the following SQL:
|
9
9
|
#
|
@@ -19,7 +19,7 @@
|
|
19
19
|
#
|
20
20
|
# Similarly, for NOT IN queries:
|
21
21
|
#
|
22
|
-
# ds = DB[:table].exclude(:
|
22
|
+
# ds = DB[:table].exclude(column: [1, nil])
|
23
23
|
# # Default:
|
24
24
|
# # SELECT * FROM table WHERE (column NOT IN (1, NULL))
|
25
25
|
# # with split_array_nils extension:
|
@@ -46,9 +46,9 @@ module Sequel
|
|
46
46
|
def complex_expression_sql_append(sql, op, args)
|
47
47
|
case op
|
48
48
|
when :IN, :"NOT IN"
|
49
|
-
vals = args
|
49
|
+
vals = args[1]
|
50
50
|
if vals.is_a?(Array) && vals.any?(&:nil?)
|
51
|
-
cols = args
|
51
|
+
cols = args[0]
|
52
52
|
vals = vals.compact
|
53
53
|
c = Sequel::SQL::BooleanExpression
|
54
54
|
if op == :IN
|