sequel 5.20.0 → 5.49.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 +4 -4
- data/CHANGELOG +398 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +7 -7
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +80 -16
- data/doc/cheat_sheet.rdoc +6 -5
- data/doc/code_order.rdoc +10 -12
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/fork_safety.rdoc +84 -0
- data/doc/migration.rdoc +11 -5
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +10 -2
- data/doc/postgresql.rdoc +82 -3
- data/doc/querying.rdoc +4 -4
- 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.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.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/sharding.rdoc +2 -0
- data/doc/sql.rdoc +13 -1
- data/doc/testing.rdoc +20 -7
- data/doc/transactions.rdoc +0 -8
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +1 -1
- data/lib/sequel/adapters/ado/access.rb +1 -1
- data/lib/sequel/adapters/ado.rb +43 -35
- data/lib/sequel/adapters/ibmdb.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
- data/lib/sequel/adapters/jdbc.rb +24 -6
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +2 -3
- data/lib/sequel/adapters/odbc.rb +8 -6
- data/lib/sequel/adapters/oracle.rb +5 -4
- data/lib/sequel/adapters/postgres.rb +15 -9
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +66 -21
- data/lib/sequel/adapters/shared/mysql.rb +27 -10
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +271 -32
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +161 -19
- data/lib/sequel/adapters/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/sqlite.rb +1 -1
- data/lib/sequel/adapters/tinytds.rb +15 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
- data/lib/sequel/ast_transformer.rb +6 -0
- data/lib/sequel/connection_pool/sharded_single.rb +4 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +2 -2
- data/lib/sequel/core.rb +333 -319
- data/lib/sequel/database/connecting.rb +3 -4
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +31 -12
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +53 -51
- data/lib/sequel/database/schema_methods.rb +38 -23
- data/lib/sequel/database/transactions.rb +17 -18
- data/lib/sequel/dataset/actions.rb +14 -9
- data/lib/sequel/dataset/features.rb +16 -0
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +26 -9
- data/lib/sequel/dataset/sql.rb +76 -25
- data/lib/sequel/dataset.rb +4 -2
- data/lib/sequel/deprecated.rb +3 -1
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +1 -2
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/date_arithmetic.rb +36 -24
- data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
- data/lib/sequel/extensions/eval_inspect.rb +2 -0
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/inflector.rb +9 -1
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +11 -3
- data/lib/sequel/extensions/named_timezones.rb +56 -8
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_array.rb +5 -0
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +11 -3
- data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +36 -8
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +238 -0
- data/lib/sequel/extensions/pg_loose_count.rb +3 -1
- data/lib/sequel/extensions/pg_range.rb +17 -9
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +4 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +3 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +24 -7
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -1
- data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +9 -3
- data/lib/sequel/model/associations.rb +356 -117
- data/lib/sequel/model/base.rb +107 -68
- data/lib/sequel/model/errors.rb +10 -1
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model/plugins.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- 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 +60 -18
- data/lib/sequel/plugins/association_proxies.rb +8 -2
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_validations.rb +39 -5
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/blacklist_security.rb +1 -2
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/caching.rb +3 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/composition.rb +7 -2
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +2 -1
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/dataset_associations.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/json_serializer.rb +57 -35
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +108 -9
- data/lib/sequel/plugins/nested_attributes.rb +15 -3
- data/lib/sequel/plugins/pg_array_associations.rb +58 -41
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
- data/lib/sequel/plugins/prepared_statements.rb +15 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +43 -35
- data/lib/sequel/plugins/serialization.rb +8 -3
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +11 -5
- data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +9 -4
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +1 -1
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/tree.rb +9 -4
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +1 -1
- data/lib/sequel/plugins/validation_class_methods.rb +5 -1
- data/lib/sequel/plugins/validation_helpers.rb +18 -11
- data/lib/sequel/plugins/xml_serializer.rb +1 -1
- data/lib/sequel/sql.rb +20 -5
- data/lib/sequel/timezones.rb +63 -17
- data/lib/sequel/version.rb +1 -1
- metadata +113 -381
- data/Rakefile +0 -151
- 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.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- 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/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -804
- data/spec/adapters/mysql_spec.rb +0 -1065
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4125
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2865
- data/spec/core/dataset_spec.rb +0 -5515
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1455
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1826
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -28
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -229
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- 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 -273
- data/spec/extensions/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -150
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -189
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/eager_graph_eager_spec.rb +0 -100
- 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/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -402
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -291
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -864
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -111
- data/spec/extensions/nested_attributes_spec.rb +0 -767
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
- data/spec/extensions/pg_enum_spec.rb +0 -118
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -289
- data/spec/extensions/pg_json_spec.rb +0 -262
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -519
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -177
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -381
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -870
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -97
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -189
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -63
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_spec.rb +0 -471
- data/spec/extensions/string_agg_spec.rb +0 -90
- 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 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -334
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- 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 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1981
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2396
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -889
- data/spec/integration/spec_helper.rb +0 -65
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- 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/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
data/doc/postgresql.rdoc
CHANGED
|
@@ -139,10 +139,81 @@ conversion via a USING clause, and Sequel supports this using the <tt>:using</tt
|
|
|
139
139
|
# ALTER TABLE "table" ALTER COLUMN "unix_time" TYPE timestamp
|
|
140
140
|
# USING (CAST('epoch' AS timestamp) + (CAST('1 second' AS interval) * "unix_time"))
|
|
141
141
|
|
|
142
|
+
=== Creating Partitioned Tables
|
|
143
|
+
|
|
144
|
+
PostgreSQL allows marking tables as partitioned tables, and adding partitions to such tables. Sequel
|
|
145
|
+
offers support for this. You can create a partitioned table using the +:partition_by+ option and
|
|
146
|
+
+:partition_type+ options (the default partition type is range partitioning):
|
|
147
|
+
|
|
148
|
+
DB.create_table(:table1, partition_by: :column, partition_type: :range) do
|
|
149
|
+
Integer :id
|
|
150
|
+
Date :column
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
DB.create_table(:table2, partition_by: :column, partition_type: :list) do
|
|
154
|
+
Integer :id
|
|
155
|
+
String :column
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
DB.create_table(:table3, partition_by: :column, partition_type: :hash) do
|
|
159
|
+
Integer :id
|
|
160
|
+
Integer :column
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
To add partitions of other tables, you use the +:partition_of+ option. This option will use
|
|
164
|
+
a custom DSL specific to partitioning other tables. For range partitioning, you can use the
|
|
165
|
+
+from+ and +to+ methods to specify the inclusive beginning and exclusive ending of the
|
|
166
|
+
range of the partition. You can call the +minvalue+ and +maxvalue+ methods to get the minimum
|
|
167
|
+
and maximum values for the column(s) in the range, useful as arguments to +from+ and +to+:
|
|
168
|
+
|
|
169
|
+
DB.create_table(:table1a, partition_of: :table1) do
|
|
170
|
+
from minvalue
|
|
171
|
+
to 0
|
|
172
|
+
end
|
|
173
|
+
DB.create_table(:table1b, partition_of: :table1) do
|
|
174
|
+
from 0
|
|
175
|
+
to 100
|
|
176
|
+
end
|
|
177
|
+
DB.create_table(:table1c, partition_of: :table1) do
|
|
178
|
+
from 100
|
|
179
|
+
to maxvalue
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
For list partitioning, you use the +values_in+ method. You can also use the +default+ method
|
|
183
|
+
to mark a partition as the default partition:
|
|
184
|
+
|
|
185
|
+
DB.create_table(:table2a, partition_of: :table2) do
|
|
186
|
+
values_in 1, 2, 3
|
|
187
|
+
end
|
|
188
|
+
DB.create_table(:table2b, partition_of: :table2) do
|
|
189
|
+
values_in 4, 5, 6
|
|
190
|
+
end
|
|
191
|
+
DB.create_table(:table2c, partition_of: :table2) do
|
|
192
|
+
default
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
For hash partitioning, you use the +modulus+ and +remainder+ methods:
|
|
196
|
+
|
|
197
|
+
DB.create_table(:table3a, partition_of: :table3) do
|
|
198
|
+
modulus 3
|
|
199
|
+
remainder 0
|
|
200
|
+
end
|
|
201
|
+
DB.create_table(:table3b, partition_of: :table3) do
|
|
202
|
+
modulus 3
|
|
203
|
+
remainder 1
|
|
204
|
+
end
|
|
205
|
+
DB.create_table(:table3c, partition_of: :table3) do
|
|
206
|
+
modulus 3
|
|
207
|
+
remainder 2
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
There is currently no support for using custom column or table constraints in partitions of
|
|
211
|
+
other tables. Support may be added in the future.
|
|
212
|
+
|
|
142
213
|
=== Creating Unlogged Tables
|
|
143
214
|
|
|
144
215
|
PostgreSQL allows users to create unlogged tables, which are faster but not crash safe. Sequel
|
|
145
|
-
allows you
|
|
216
|
+
allows you to create an unlogged table by specifying the <tt>unlogged: true</tt> option to +create_table+:
|
|
146
217
|
|
|
147
218
|
DB.create_table(:table, unlogged: true){Integer :i}
|
|
148
219
|
# CREATE UNLOGGED TABLE "table" ("i" integer)
|
|
@@ -341,12 +412,12 @@ Dataset#overriding_system_value and Dataset#overriding_user_value to use this ne
|
|
|
341
412
|
syntax:
|
|
342
413
|
|
|
343
414
|
DB.create_table(:table){primary_key :id}
|
|
344
|
-
# Ignore the given value for id, using the identity's sequence value
|
|
415
|
+
# Ignore the given value for id, using the identity's sequence value.
|
|
345
416
|
DB[:table].overriding_user_value.insert(:id=>1)
|
|
346
417
|
|
|
347
418
|
DB.create_table(:table){primary_key :id, :identity=>:always}
|
|
348
419
|
# Force the use of the given value for id, because otherwise the insert will
|
|
349
|
-
# raise an error, since GENERATED ALWAYS was
|
|
420
|
+
# raise an error, since GENERATED ALWAYS was used when creating the column.
|
|
350
421
|
DB[:table].overriding_system_value.insert(:id=>1)
|
|
351
422
|
|
|
352
423
|
=== Distinct On Specific Columns
|
|
@@ -357,6 +428,14 @@ rows that are distinct on just those columns:
|
|
|
357
428
|
DB[:table].distinct(:id).all
|
|
358
429
|
# SELECT DISTINCT ON ("id") * FROM "table"
|
|
359
430
|
|
|
431
|
+
=== JOIN USING table alias
|
|
432
|
+
|
|
433
|
+
Sequel allows passing an SQL::AliasedExpression to join table methods to use a USING
|
|
434
|
+
join with a table alias for the USING columns:
|
|
435
|
+
|
|
436
|
+
DB[:t1].join(:t2, Sequel.as([:c1, :c2], :alias))
|
|
437
|
+
# SELECT * FROM "t1" INNER JOIN "t2" USING ("c1", "c2") AS "alias"
|
|
438
|
+
|
|
360
439
|
=== Calling PostgreSQL 11+ Procedures <tt>postgres only</tt>
|
|
361
440
|
|
|
362
441
|
PostgreSQL 11+ added support for procedures, which are different from the user defined
|
data/doc/querying.rdoc
CHANGED
|
@@ -498,7 +498,7 @@ filters:
|
|
|
498
498
|
# SELECT * FROM artists WHERE (id != 5)
|
|
499
499
|
|
|
500
500
|
Artist.where(id: 5).exclude{name > 'A'}
|
|
501
|
-
# SELECT * FROM artists WHERE ((id = 5)
|
|
501
|
+
# SELECT * FROM artists WHERE ((id = 5) AND (name <= 'A')
|
|
502
502
|
|
|
503
503
|
So to do a NOT IN with an array:
|
|
504
504
|
|
|
@@ -746,7 +746,7 @@ shortcuts for all common (and most uncommon) join types. For example
|
|
|
746
746
|
|
|
747
747
|
Album.join(:artists, id: :artist_id)
|
|
748
748
|
# SELECT * FROM albums
|
|
749
|
-
# INNER JOIN artists ON (artists.id = albums.artist_id)
|
|
749
|
+
# INNER JOIN artists ON (artists.id = albums.artist_id)
|
|
750
750
|
|
|
751
751
|
And +left_join+ does a LEFT JOIN:
|
|
752
752
|
|
|
@@ -870,14 +870,14 @@ In this case, you don't even need to specify any conditions.
|
|
|
870
870
|
==== Join Blocks
|
|
871
871
|
|
|
872
872
|
You can provide a block to any of the join methods that accept
|
|
873
|
-
conditions. This block should accept 3 arguments
|
|
873
|
+
conditions. This block should accept 3 arguments: the table alias
|
|
874
874
|
for the table currently being joined, the table alias for the last
|
|
875
875
|
table joined (or first table), and an array of previous
|
|
876
876
|
<tt>Sequel::SQL::JoinClause</tt>s.
|
|
877
877
|
|
|
878
878
|
This allows you to qualify columns similar to how the implicit
|
|
879
879
|
qualification works, without worrying about the specific aliases
|
|
880
|
-
being used. For example,
|
|
880
|
+
being used. For example, let's say you wanted to join the albums
|
|
881
881
|
and artists tables, but only want albums where the artist's name
|
|
882
882
|
comes before the album's name.
|
|
883
883
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* The pg_json extension now adds a Database#wrap_json_primitives
|
|
4
|
+
accessor. When set to true, JSON primitive values (string, number,
|
|
5
|
+
true, false, and null) will be wrapped by delegate Ruby objects
|
|
6
|
+
instead of using Ruby primitives. This allows the values to round
|
|
7
|
+
trip, so the following code will work even for primitive values in
|
|
8
|
+
json_column:
|
|
9
|
+
|
|
10
|
+
DB.extension :pg_json
|
|
11
|
+
DB.wrap_json_primitives = true
|
|
12
|
+
value = DB[:table].get(:json_column)
|
|
13
|
+
DB[:other_table].insert(json_column: value)
|
|
14
|
+
|
|
15
|
+
This should be enabled with care, especially in cases where false
|
|
16
|
+
and null JSON values are used, as the behavior will change if
|
|
17
|
+
the objects are used in a boolean context in Ruby, as only false
|
|
18
|
+
and nil in Ruby are treated as false:
|
|
19
|
+
|
|
20
|
+
# assume JSON false or null value
|
|
21
|
+
value = DB[:table].get(:json_column)
|
|
22
|
+
|
|
23
|
+
if value
|
|
24
|
+
# executed if wrap_json_primitives is true
|
|
25
|
+
else
|
|
26
|
+
# executed by default
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
When typecasting input in model objects to a JSON type, string
|
|
30
|
+
input will still be parsed as JSON. However, you can set the
|
|
31
|
+
Database#typecast_json_strings accessor to true, and then string
|
|
32
|
+
input will be considered as a JSON string instead of parsing the
|
|
33
|
+
string as JSON.
|
|
34
|
+
|
|
35
|
+
To prevent backwards compatibility issues, Sequel.pg_json/pg_jsonb
|
|
36
|
+
behavior has not changed. To support wrapping Ruby primitives in
|
|
37
|
+
the delegate objects, new Sequel.pg_json_wrap/pg_jsonb_wrap methods
|
|
38
|
+
have been added. These methods only handle the Ruby primitives,
|
|
39
|
+
they cannot be used if the existing object is already a delegate
|
|
40
|
+
object.
|
|
41
|
+
|
|
42
|
+
As model objects always consider a nil value as SQL NULL and do
|
|
43
|
+
not typecast it, if you want to explicitly set a JSON null value,
|
|
44
|
+
you need to wrap it explicitly:
|
|
45
|
+
|
|
46
|
+
model_object.json_column = Sequel.pg_json_wrap(nil)
|
|
47
|
+
|
|
48
|
+
= Other Improvements
|
|
49
|
+
|
|
50
|
+
* Sequel now supports window function options :window, :exclude, and
|
|
51
|
+
:frame :type=>:groups, :start, and :end on SQLite 3.28.0+.
|
|
52
|
+
|
|
53
|
+
* The server_block extension now respects the :servers_hash Database
|
|
54
|
+
option. This makes it more similar to Sequel's default behavior.
|
|
55
|
+
However, that means by default, the server_block extension will
|
|
56
|
+
default to handling unknown shards as the default shard, instead
|
|
57
|
+
of raising an error for them.
|
|
58
|
+
|
|
59
|
+
* The rcte_tree plugin now disallows eager graphing of the ancestors
|
|
60
|
+
and descendants associations. Previously, eager graphing of these
|
|
61
|
+
associations generated incorrect results. It is not possible to
|
|
62
|
+
eager graph these extensions, but normal eager loading does work.
|
|
63
|
+
|
|
64
|
+
* The ado adapter's performance has been improved by using faster
|
|
65
|
+
callables for type conversion and a more efficient inner loop.
|
|
66
|
+
|
|
67
|
+
* The sqlite adapter now converts a :timeout option given as a string
|
|
68
|
+
to an integer. This allows you to use the option inside of a
|
|
69
|
+
connection string.
|
|
70
|
+
|
|
71
|
+
* The mysql and mysql2 adapters now recognize an additional
|
|
72
|
+
DatabaseLockTimeout error.
|
|
73
|
+
|
|
74
|
+
* The jdbc/mysql adapter now works correctly when using JRuby with
|
|
75
|
+
Java 11.
|
|
76
|
+
|
|
77
|
+
* The ado adapter now handles numeric values when using locales that
|
|
78
|
+
use comma instead of period as the decimal separator.
|
|
79
|
+
|
|
80
|
+
= Backwards Compatibility
|
|
81
|
+
|
|
82
|
+
* In the pg_json extension, the following singleton methods of
|
|
83
|
+
Sequel::Postgres::JSONDatabaseMethods are now deprecated:
|
|
84
|
+
|
|
85
|
+
* parse_json
|
|
86
|
+
* db_parse_json
|
|
87
|
+
* db_parse_jsonb
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Sequel now supports Ruby 2.7+ startless ranges in filters:
|
|
4
|
+
|
|
5
|
+
DB[:table].where(:column=>(..10))
|
|
6
|
+
# SELECT * FROM table WHERE (column <= 10)
|
|
7
|
+
|
|
8
|
+
DB[:table].where(:column=>(...10))
|
|
9
|
+
# SELECT * FROM table WHERE (column < 10)
|
|
10
|
+
|
|
11
|
+
It also supports startless, endless ranges in filters, using a
|
|
12
|
+
condition that is always true:
|
|
13
|
+
|
|
14
|
+
DB[:table].where(:column=>(nil..nil))
|
|
15
|
+
# SELECT * FROM table WHERE (1 = 1)
|
|
16
|
+
|
|
17
|
+
* Sequel now supports startless ranges in the pg_range extension:
|
|
18
|
+
|
|
19
|
+
DB.extension :pg_range
|
|
20
|
+
|
|
21
|
+
DB[:table].insert(:column=>(..10))
|
|
22
|
+
# INSERT INTO "table" ("column") VALUES ('[,10]') RETURNING "id"
|
|
23
|
+
|
|
24
|
+
DB[:table].insert(:column=>(...10))
|
|
25
|
+
# INSERT INTO "table" ("column") VALUES ('[,10)') RETURNING "id"
|
|
26
|
+
|
|
27
|
+
DB[:table].insert(:column=>(nil..nil))
|
|
28
|
+
# INSERT INTO "table" ("column") VALUES ('[,]') RETURNING "id"
|
|
29
|
+
|
|
30
|
+
* Sequel now supports a :materialized option in Dataset#with on
|
|
31
|
+
PostgreSQL 12+, to control the inlining of common table expressions:
|
|
32
|
+
|
|
33
|
+
DB[:t].with(:t, DB[:t2], :materialized=>false)
|
|
34
|
+
# WITH "t" AS NOT MATERIALIZED (SELECT * FROM "t2")
|
|
35
|
+
# SELECT * FROM "t"
|
|
36
|
+
|
|
37
|
+
DB[:t].with(:t, DB[:t2], :materialized=>true)
|
|
38
|
+
# WITH "t" AS MATERIALIZED (SELECT * FROM "t2")
|
|
39
|
+
# SELECT * FROM "t"
|
|
40
|
+
|
|
41
|
+
= Other Improvements
|
|
42
|
+
|
|
43
|
+
* Database#primary_key_sequence now works for tables without serial
|
|
44
|
+
sequences on PostgreSQL 12+.
|
|
45
|
+
|
|
46
|
+
* Dataset#multi_insert and #import with return: :primary_key option
|
|
47
|
+
on Microsoft SQL Server now work correctly if the dataset uses
|
|
48
|
+
a row_proc (e.g. for model datasets).
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* An insert_conflict plugin has been added for automatically handling
|
|
4
|
+
constraint conflicts when saving new model instances. It is
|
|
5
|
+
supported on PostgreSQL 9.5+ and SQLite 3.24.0+.
|
|
6
|
+
|
|
7
|
+
Album.new(name: 'Foo', copies_sold: 1000).
|
|
8
|
+
insert_conflict(
|
|
9
|
+
target: :name,
|
|
10
|
+
update: {copies_sold: Sequel[:excluded][:b]}
|
|
11
|
+
).
|
|
12
|
+
save
|
|
13
|
+
|
|
14
|
+
* On Microsoft SQL Server, the Database :ansi option has been added,
|
|
15
|
+
which sets the following ANSI related options:
|
|
16
|
+
|
|
17
|
+
* ANSI_NULLS
|
|
18
|
+
* ANSI_PADDING
|
|
19
|
+
* ANSI_WARNINGS
|
|
20
|
+
* ANSI_NULL_DFLT_ON
|
|
21
|
+
* QUOTED_IDENTIFIER
|
|
22
|
+
* CONCAT_NULL_YIELDS_NULL
|
|
23
|
+
|
|
24
|
+
= Other Improvements
|
|
25
|
+
|
|
26
|
+
* Sequel.datetime_class = Time is now supported when using the
|
|
27
|
+
named_timezones extension. For backwards compatibility, the
|
|
28
|
+
named_timezones extension still sets
|
|
29
|
+
Sequel.datetime_class = DateTime. When using Ruby 2.6+, the
|
|
30
|
+
Time instances have the timezone set on them using Ruby 2.6+'s
|
|
31
|
+
timezone support, but basic support works correctly in earlier
|
|
32
|
+
versions of Ruby.
|
|
33
|
+
|
|
34
|
+
* On Microsoft SQL Server, Sequel now handles parsing schema for
|
|
35
|
+
tables in another database on the same server or in a database
|
|
36
|
+
on a linked server.
|
|
37
|
+
|
|
38
|
+
* The pg_json extension now correctly handles subclasses of core
|
|
39
|
+
classes when wrapping objects. This stopped working in Sequel
|
|
40
|
+
5.21.0, when support for wrapping JSON primitives was added.
|
|
41
|
+
|
|
42
|
+
* Sequel now works around a couple bugs in jdbc-sqlite 3.27.2.1,
|
|
43
|
+
allowing schema parsing and foreign key parsing to work.
|
|
44
|
+
|
|
45
|
+
* Dataset#execute* private methods now respect an explicitly given
|
|
46
|
+
:server option, fixing Dataset#paged_each in the postgres adapter
|
|
47
|
+
when using sharding.
|
|
48
|
+
|
|
49
|
+
* Timezone offsets are now handled correctly when typecasting an array
|
|
50
|
+
or hash to datetime when Sequel.datetime_class = Time.
|
|
51
|
+
|
|
52
|
+
* Sequel now avoids errors when parsing schema when using the mock
|
|
53
|
+
SQLite adapter.
|
|
54
|
+
|
|
55
|
+
* A minor thread-safety issue has been fixed in the named_timezones
|
|
56
|
+
extension.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* A :cache_file plugin option has been added to the
|
|
4
|
+
pg_auto_constraint_validations plugin. This option specifies
|
|
5
|
+
a file to use to cache the metadata the plugin uses, so the
|
|
6
|
+
plugin does not need to run 5 queries per model at startup to
|
|
7
|
+
load the metadata. This can dramatically improve startup time
|
|
8
|
+
when using the plugin with a large number of models.
|
|
9
|
+
|
|
10
|
+
To create the metadata file, load the plugin into Sequel::Model
|
|
11
|
+
(or whatever class you are using as the base class for your
|
|
12
|
+
model classes) with the :cache_file option, and after loading
|
|
13
|
+
all of the subclasses of that class, run:
|
|
14
|
+
|
|
15
|
+
Sequel::Model.dump_pg_auto_constraint_validations_cache
|
|
16
|
+
|
|
17
|
+
As when using the schema_caching and index_caching extensions,
|
|
18
|
+
it is up to the user to ensure that the cached metadata matches
|
|
19
|
+
the current database schema. Sequel does no checking of this,
|
|
20
|
+
as checking would take more time, and the point of this plugin
|
|
21
|
+
is to improve startup performance.
|
|
22
|
+
|
|
23
|
+
* A static_cache_cache plugin has been added. This plugin allows
|
|
24
|
+
for caching rows for models using the static_cache plugin. This
|
|
25
|
+
prevents the need to issue a query at model creation time to
|
|
26
|
+
get the rows. This plugin should be loaded into Sequel::Model
|
|
27
|
+
(or whatever class you are using as the base class for your
|
|
28
|
+
model classes) before loading the models using the static_cache
|
|
29
|
+
plugin. To create the metadata file, after all subclasses of
|
|
30
|
+
that class have been loaded, run:
|
|
31
|
+
|
|
32
|
+
Sequel::Model.dump_static_cache_cache
|
|
33
|
+
|
|
34
|
+
* :unique_deferrable and :primary_key_deferrable column
|
|
35
|
+
options are now supported on PostgreSQL 9+ and Oracle. This
|
|
36
|
+
allows you to created deferrable unique and primary key
|
|
37
|
+
column constraints. You could already create deferrable
|
|
38
|
+
table constraints using the :deferrable option to the primary_key
|
|
39
|
+
and unique methods.
|
|
40
|
+
|
|
41
|
+
* A :generated_always_as column option is now supported on
|
|
42
|
+
PostgreSQL 12+, for creating generated columns.
|
|
43
|
+
|
|
44
|
+
* A Database#skip_logging? private method has been added. This
|
|
45
|
+
is designed for use in extensions, to force log timing even
|
|
46
|
+
when no loggers are configured.
|
|
47
|
+
|
|
48
|
+
= Other Improvements
|
|
49
|
+
|
|
50
|
+
* Sequel no longer sets the :host option to localhost by default
|
|
51
|
+
in the mysql2 adapter. This prevents Sequel from overriding
|
|
52
|
+
a host specified in the defaults_file.
|
|
53
|
+
|
|
54
|
+
* All database array types are converted to Ruby arrays in the
|
|
55
|
+
jdbc adapter. Previously, this was only done in the
|
|
56
|
+
jdbc/postgresql subadapter.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* An association_multi_add_remove plugin has been added. This plugin
|
|
4
|
+
adds a shortcut for adding or removing multiple associated objects
|
|
5
|
+
in a single method call:
|
|
6
|
+
|
|
7
|
+
Artist.plugin :association_multi_add_remove
|
|
8
|
+
Artist.many_to_one :albums
|
|
9
|
+
Artist[1].add_albums([Album[2], Album[3]])
|
|
10
|
+
Artist[1].remove_albums([Album[4], Album[5]])
|
|
11
|
+
|
|
12
|
+
It also offers a setter method, which will add and remove associated
|
|
13
|
+
objects as necessary:
|
|
14
|
+
|
|
15
|
+
Artist[1].albums = [Album[3], Album[4]]
|
|
16
|
+
|
|
17
|
+
= Other Improvements
|
|
18
|
+
|
|
19
|
+
* The sharding plugin now integrates with the server_block extension.
|
|
20
|
+
This makes it so if you retrieve a model instance inside a
|
|
21
|
+
with_server block, saving the model instance will save it back to
|
|
22
|
+
the shard from which it was retrieved.
|
|
23
|
+
|
|
24
|
+
* Setting a default for a column on Microsoft SQL Server now works
|
|
25
|
+
correctly if the column already has a default.
|
|
26
|
+
|
|
27
|
+
* Sequel::SQL::NumericMethods#coerce no longer raises NoMethodError
|
|
28
|
+
if the super method is not defined. This fixes some cases when
|
|
29
|
+
comparing Date/DateTime instances to Sequel objects.
|
|
30
|
+
|
|
31
|
+
* The csv_serializer plugin now avoids keyword argument separation
|
|
32
|
+
issues on Ruby 2.7+.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Support for SQL/JSON path expressions has been added to the
|
|
4
|
+
pg_json_ops extension. These are supported in PostgreSQL 12+.
|
|
5
|
+
Examples:
|
|
6
|
+
|
|
7
|
+
j = Sequel.pg_json_op(:json_column)
|
|
8
|
+
j.path_exists('$.foo') # (jsonb_column @? '$.foo')
|
|
9
|
+
j.path_match('$.foo') # (jsonb_column @@ '$.foo')
|
|
10
|
+
j.path_exists!('$.foo') # jsonb_path_exists(jsonb_column, '$.foo')
|
|
11
|
+
j.path_match!('$.foo') # jsonb_path_match(jsonb_column, '$.foo')
|
|
12
|
+
j.path_query('$.foo') # jsonb_path_query(jsonb_column, '$.foo')
|
|
13
|
+
j.path_query_array('$.foo') # jsonb_path_query_array(jsonb_column, '$.foo')
|
|
14
|
+
j.path_query_first('$.foo') # jsonb_path_query_first(jsonb_column, '$.foo')
|
|
15
|
+
|
|
16
|
+
* The nested_attributes method in the nested_attributes plugin now
|
|
17
|
+
supports a :require_modification option, which can override the
|
|
18
|
+
default require_modification setting for the nested objects. This
|
|
19
|
+
can be useful to avoid errors if multiple requests are submitted
|
|
20
|
+
simultaneously to delete the same nested row.
|
|
21
|
+
|
|
22
|
+
= Other Improvements
|
|
23
|
+
|
|
24
|
+
* The dirty plugin now works correctly with the typecast_on_load
|
|
25
|
+
plugin.
|
|
26
|
+
|
|
27
|
+
* Sequel::Postgres::PGRange#hash has been added to the pg_range
|
|
28
|
+
extension, allowing PGRange instances to be usable as hash keys.
|
|
29
|
+
|
|
30
|
+
* Table aliases are now supported for single table INSERT
|
|
31
|
+
statements on PostgreSQL 9.5+, which can make some insert_conflict
|
|
32
|
+
usage easier.
|
|
33
|
+
|
|
34
|
+
* Two more foreign key constraint violation types are now recognized
|
|
35
|
+
on MySQL 8.0.13+.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Sequel::DEFAULT has been added a constant for the DEFAULT expression,
|
|
4
|
+
useful in inserts and especially updates:
|
|
5
|
+
|
|
6
|
+
DB[:a].where(:id=>1).update(:b=>Sequel::DEFAULT)
|
|
7
|
+
# UPDATE "a" SET "b" = DEFAULT WHERE "id" = 1
|
|
8
|
+
|
|
9
|
+
* SQL::Function#filter for filtered aggregate functions is now
|
|
10
|
+
supported on all databases. On databases not supporting it natively
|
|
11
|
+
(all except PostgreSQL 9.4+ and SQLite 3.30+), a CASE statement is
|
|
12
|
+
used to emulate the support.
|
|
13
|
+
|
|
14
|
+
= Other Improvements
|
|
15
|
+
|
|
16
|
+
* NULLS FIRST/LAST is now used without emulation on SQLite 3.30+.
|
|
17
|
+
|
|
18
|
+
* The pg_enum extension now works correctly on PostgreSQL 8.3-9.0.
|
|
19
|
+
|
|
20
|
+
* Postgres::ArrayOp#join in the pg_array_ops extension now works
|
|
21
|
+
correctly on PostgreSQL <9.1.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* An any_not_empty extension has been added, for making Dataset#any?
|
|
4
|
+
without a block be the same as !empty?. This can result in a
|
|
5
|
+
much faster database query.
|
|
6
|
+
|
|
7
|
+
* An exclude_or_null extension has been added, adding a
|
|
8
|
+
Dataset#exclude_or_null method that returns rows where the given
|
|
9
|
+
expression is false or NULL. This extension is supported on
|
|
10
|
+
PostgreSQL, SQLite, MySQL, H2, and HSQLDB.
|
|
11
|
+
|
|
12
|
+
= Other Improvements
|
|
13
|
+
|
|
14
|
+
* When using the jdbc/postgresql adapter, calling with_fetch_size
|
|
15
|
+
on a dataset will emit a warning. This is because the driver
|
|
16
|
+
will ignore the setting.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* An empty_failure_backtraces plugin has been added for using empty
|
|
4
|
+
backtraces for ValidationFailed and HookFailed exceptions. In many
|
|
5
|
+
cases, these exceptions are automatically handled (e.g. web form
|
|
6
|
+
submission handling to display appropriate error pages), and using
|
|
7
|
+
empty backtraces is 10-15x faster on JRuby 9.2.7.0+.
|
|
8
|
+
|
|
9
|
+
* Dataset#json_serializer_opts has been added to the json_serializer
|
|
10
|
+
plugin. This allows setting default options on a per-Dataset basis
|
|
11
|
+
for all Dataset#to_json calls.
|
|
12
|
+
|
|
13
|
+
= Other Improvements
|
|
14
|
+
|
|
15
|
+
* Another disconnect error is now recognized in the tinytds adapter.
|
|
16
|
+
|
|
17
|
+
* Using Sequel with the the CRuby master branch (what will be Ruby 3)
|
|
18
|
+
now works by supporting a second argument for
|
|
19
|
+
Dataset#initialize_clone.
|
|
20
|
+
|
|
21
|
+
* Sequel now avoids a warning in verbose mode when using the postgres
|
|
22
|
+
adapter, a recent version of ruby-pg, and bound variables.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Sequel now supports generated columns on SQLite 3.31+ using the
|
|
4
|
+
:generated_always_as and :generated_type options. Example:
|
|
5
|
+
|
|
6
|
+
DB.create_table(:table) do
|
|
7
|
+
primary_key :id
|
|
8
|
+
Numeric :amount, null: false
|
|
9
|
+
Numeric :tax, null: false
|
|
10
|
+
Numeric :total, generated_always_as: (Sequel[:amount] + :tax)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
= Other Improvements
|
|
14
|
+
|
|
15
|
+
* The Database#transaction :before_retry option is now called before
|
|
16
|
+
retrying the transaction even when the :num_retries option is set
|
|
17
|
+
to nil.
|
|
18
|
+
|
|
19
|
+
* The gem no longer ships with specs and older release notes, reducing
|
|
20
|
+
the gem size by over 40%.
|