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
|
@@ -51,6 +51,11 @@ module Sequel
|
|
|
51
51
|
false
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
# Whether deleting from joined datasets is supported, false by default.
|
|
55
|
+
def supports_deleting_joins?
|
|
56
|
+
supports_modifying_joins?
|
|
57
|
+
end
|
|
58
|
+
|
|
54
59
|
# Whether the database supports derived column lists (e.g.
|
|
55
60
|
# "table_expr AS table_alias(column_alias1, column_alias2, ...)"), true by
|
|
56
61
|
# default.
|
|
@@ -178,6 +183,11 @@ module Sequel
|
|
|
178
183
|
true
|
|
179
184
|
end
|
|
180
185
|
|
|
186
|
+
# Whether updating joined datasets is supported, false by default.
|
|
187
|
+
def supports_updating_joins?
|
|
188
|
+
supports_modifying_joins?
|
|
189
|
+
end
|
|
190
|
+
|
|
181
191
|
# Whether the dataset supports the WINDOW clause to define windows used by multiple
|
|
182
192
|
# window functions, false by default.
|
|
183
193
|
def supports_window_clause?
|
|
@@ -230,6 +240,12 @@ module Sequel
|
|
|
230
240
|
supports_cte_in_subqueries?
|
|
231
241
|
end
|
|
232
242
|
|
|
243
|
+
# Whether the dataset supports the FILTER clause for aggregate functions.
|
|
244
|
+
# If not, support is emulated using CASE.
|
|
245
|
+
def supports_filtered_aggregates?
|
|
246
|
+
false
|
|
247
|
+
end
|
|
248
|
+
|
|
233
249
|
# Whether the database supports quoting function names.
|
|
234
250
|
def supports_quoted_function_names?
|
|
235
251
|
false
|
data/lib/sequel/dataset/misc.rb
CHANGED
|
@@ -329,7 +329,7 @@ module Sequel
|
|
|
329
329
|
end
|
|
330
330
|
|
|
331
331
|
# Set the db, opts, and cache for the copy of the dataset.
|
|
332
|
-
def
|
|
332
|
+
def initialize_clone(c, _=nil)
|
|
333
333
|
@db = c.db
|
|
334
334
|
@opts = Hash[c.opts]
|
|
335
335
|
if cols = c.cache_get(:_columns)
|
|
@@ -338,7 +338,7 @@ module Sequel
|
|
|
338
338
|
@cache = {}
|
|
339
339
|
end
|
|
340
340
|
end
|
|
341
|
-
alias initialize_clone
|
|
341
|
+
alias initialize_copy initialize_clone
|
|
342
342
|
|
|
343
343
|
# Internal recursive version of unqualified_column_for, handling Strings inside
|
|
344
344
|
# of other objects.
|
|
@@ -114,10 +114,8 @@ module Sequel
|
|
|
114
114
|
prepared_sql << sql
|
|
115
115
|
prepared_sql << "$#{prepared_args[i]}"
|
|
116
116
|
end
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
prepared_sql << final_sql
|
|
120
|
-
end
|
|
117
|
+
frags << final_sql
|
|
118
|
+
prepared_sql << final_sql
|
|
121
119
|
|
|
122
120
|
[prepared_sql, frags]
|
|
123
121
|
end
|
|
@@ -213,9 +211,7 @@ module Sequel
|
|
|
213
211
|
end
|
|
214
212
|
ds.literal_append(s, v)
|
|
215
213
|
end
|
|
216
|
-
|
|
217
|
-
s << sql
|
|
218
|
-
end
|
|
214
|
+
s << @final_sql
|
|
219
215
|
s
|
|
220
216
|
end
|
|
221
217
|
end
|
|
@@ -201,7 +201,9 @@ module Sequel
|
|
|
201
201
|
when :insert_pk
|
|
202
202
|
fetch_rows(prepared_sql){|r| return r.values.first}
|
|
203
203
|
when Array
|
|
204
|
+
# :nocov:
|
|
204
205
|
case prepared_type[0]
|
|
206
|
+
# :nocov:
|
|
205
207
|
when :map, :as_hash, :to_hash, :to_hash_groups
|
|
206
208
|
public_send(*prepared_type, &block)
|
|
207
209
|
end
|
data/lib/sequel/dataset/query.rb
CHANGED
|
@@ -81,7 +81,7 @@ module Sequel
|
|
|
81
81
|
# If the options changed include options in COLUMN_CHANGE_OPTS, the cached
|
|
82
82
|
# columns are deleted. This method should generally not be called
|
|
83
83
|
# directly by user code.
|
|
84
|
-
def clone(opts = (return self
|
|
84
|
+
def clone(opts = nil || (return self))
|
|
85
85
|
# return self used above because clone is called by almost all
|
|
86
86
|
# other query methods, and it is the fastest approach
|
|
87
87
|
c = super(:freeze=>false)
|
|
@@ -330,16 +330,17 @@ module Sequel
|
|
|
330
330
|
# # SELECT * FROM a WHERE ((a LIKE '%foo%' ESCAPE '\') AND (b LIKE '%foo%' ESCAPE '\')
|
|
331
331
|
# # AND (a LIKE '%bar%' ESCAPE '\') AND (b LIKE '%bar%' ESCAPE '\'))
|
|
332
332
|
def grep(columns, patterns, opts=OPTS)
|
|
333
|
+
column_op = opts[:all_columns] ? :AND : :OR
|
|
333
334
|
if opts[:all_patterns]
|
|
334
335
|
conds = Array(patterns).map do |pat|
|
|
335
|
-
SQL::BooleanExpression.new(
|
|
336
|
+
SQL::BooleanExpression.new(column_op, *Array(columns).map{|c| SQL::StringExpression.like(c, pat, opts)})
|
|
336
337
|
end
|
|
337
|
-
where(SQL::BooleanExpression.new(
|
|
338
|
+
where(SQL::BooleanExpression.new(:AND, *conds))
|
|
338
339
|
else
|
|
339
340
|
conds = Array(columns).map do |c|
|
|
340
341
|
SQL::BooleanExpression.new(:OR, *Array(patterns).map{|pat| SQL::StringExpression.like(c, pat, opts)})
|
|
341
342
|
end
|
|
342
|
-
where(SQL::BooleanExpression.new(
|
|
343
|
+
where(SQL::BooleanExpression.new(column_op, *conds))
|
|
343
344
|
end
|
|
344
345
|
end
|
|
345
346
|
|
|
@@ -507,6 +508,7 @@ module Sequel
|
|
|
507
508
|
# argument.
|
|
508
509
|
# :implicit_qualifier :: The name to use for qualifying implicit conditions. By default,
|
|
509
510
|
# the last joined or primary table is used.
|
|
511
|
+
# :join_using :: Force the using of JOIN USING, even if +expr+ is not an array of symbols.
|
|
510
512
|
# :reset_implicit_qualifier :: Can set to false to ignore this join when future joins determine qualifier
|
|
511
513
|
# for implicit conditions.
|
|
512
514
|
# :qualify :: Can be set to false to not do any implicit qualification. Can be set
|
|
@@ -540,7 +542,7 @@ module Sequel
|
|
|
540
542
|
return s.join_table(type, ds, expr, options, &block)
|
|
541
543
|
end
|
|
542
544
|
|
|
543
|
-
using_join = expr.is_a?(Array) && !expr.empty? && expr.all?{|x| x.is_a?(Symbol)}
|
|
545
|
+
using_join = options[:join_using] || (expr.is_a?(Array) && !expr.empty? && expr.all?{|x| x.is_a?(Symbol)})
|
|
544
546
|
if using_join && !supports_join_using?
|
|
545
547
|
h = {}
|
|
546
548
|
expr.each{|e| h[e] = e}
|
|
@@ -615,7 +617,7 @@ module Sequel
|
|
|
615
617
|
UNCONDITIONED_JOIN_TYPES.each do |jtype|
|
|
616
618
|
class_eval(<<-END, __FILE__, __LINE__+1)
|
|
617
619
|
def #{jtype}_join(table, opts=Sequel::OPTS)
|
|
618
|
-
raise(Sequel::Error, '#{jtype}_join does not accept join table blocks') if
|
|
620
|
+
raise(Sequel::Error, '#{jtype}_join does not accept join table blocks') if defined?(yield)
|
|
619
621
|
raise(Sequel::Error, '#{jtype}_join 2nd argument should be an options hash, not conditions') unless opts.is_a?(Hash)
|
|
620
622
|
join_table(:#{jtype}, table, nil, opts)
|
|
621
623
|
end
|
|
@@ -698,7 +700,7 @@ module Sequel
|
|
|
698
700
|
end
|
|
699
701
|
|
|
700
702
|
# Returns a copy of the dataset with a specified order. Can be safely combined with limit.
|
|
701
|
-
# If you call limit with an offset, it will override
|
|
703
|
+
# If you call limit with an offset, it will override the offset if you've called
|
|
702
704
|
# offset first.
|
|
703
705
|
#
|
|
704
706
|
# DB[:items].offset(10) # SELECT * FROM items OFFSET 10
|
|
@@ -1061,6 +1063,8 @@ module Sequel
|
|
|
1061
1063
|
# Options:
|
|
1062
1064
|
# :args :: Specify the arguments/columns for the CTE, should be an array of symbols.
|
|
1063
1065
|
# :recursive :: Specify that this is a recursive CTE
|
|
1066
|
+
# :materialized :: Set to false to force inlining of the CTE, or true to force not inlining
|
|
1067
|
+
# the CTE (PostgreSQL 12+/SQLite 3.35+).
|
|
1064
1068
|
#
|
|
1065
1069
|
# DB[:items].with(:items, DB[:syx].where(Sequel[:name].like('A%')))
|
|
1066
1070
|
# # WITH items AS (SELECT * FROM syx WHERE (name LIKE 'A%' ESCAPE '\')) SELECT * FROM items
|
|
@@ -1233,6 +1237,20 @@ module Sequel
|
|
|
1233
1237
|
self
|
|
1234
1238
|
end
|
|
1235
1239
|
|
|
1240
|
+
# If invert is true, invert the condition.
|
|
1241
|
+
def _invert_filter(cond, invert)
|
|
1242
|
+
if invert
|
|
1243
|
+
SQL::BooleanExpression.invert(cond)
|
|
1244
|
+
else
|
|
1245
|
+
cond
|
|
1246
|
+
end
|
|
1247
|
+
end
|
|
1248
|
+
|
|
1249
|
+
# Add the given filter condition. Arguments:
|
|
1250
|
+
# clause :: Symbol or which SQL clause to effect, should be :where or :having
|
|
1251
|
+
# cond :: The filter condition to add
|
|
1252
|
+
# invert :: Whether the condition should be inverted (true or false)
|
|
1253
|
+
# combine :: How to combine the condition with an existing condition, should be :AND or :OR
|
|
1236
1254
|
def add_filter(clause, cond, invert=false, combine=:AND, &block)
|
|
1237
1255
|
if cond == EMPTY_ARRAY && !block
|
|
1238
1256
|
raise Error, "must provide an argument to a filtering method if not passing a block"
|
|
@@ -1252,8 +1270,7 @@ module Sequel
|
|
|
1252
1270
|
cond = nil
|
|
1253
1271
|
end
|
|
1254
1272
|
|
|
1255
|
-
cond = filter_expr(cond, &block)
|
|
1256
|
-
cond = SQL::BooleanExpression.invert(cond) if invert
|
|
1273
|
+
cond = _invert_filter(filter_expr(cond, &block), invert)
|
|
1257
1274
|
cond = SQL::BooleanExpression.new(combine, @opts[clause], cond) if @opts[clause]
|
|
1258
1275
|
|
|
1259
1276
|
if cond.nil?
|
data/lib/sequel/dataset/sql.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Sequel
|
|
|
22
22
|
def insert_sql(*values)
|
|
23
23
|
return static_sql(@opts[:sql]) if @opts[:sql]
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
check_insert_allowed!
|
|
26
26
|
|
|
27
27
|
columns = []
|
|
28
28
|
|
|
@@ -172,7 +172,7 @@ module Sequel
|
|
|
172
172
|
# than one table.
|
|
173
173
|
def update_sql(values = OPTS)
|
|
174
174
|
return static_sql(opts[:sql]) if opts[:sql]
|
|
175
|
-
|
|
175
|
+
check_update_allowed!
|
|
176
176
|
check_not_limited!(:update)
|
|
177
177
|
|
|
178
178
|
case values
|
|
@@ -215,7 +215,7 @@ module Sequel
|
|
|
215
215
|
lines << "def #{'_' if priv}#{type}_sql"
|
|
216
216
|
lines << 'if sql = opts[:sql]; return static_sql(sql) end' unless priv
|
|
217
217
|
lines << "if sql = cache_get(:_#{type}_sql); return sql end" if cacheable
|
|
218
|
-
lines << '
|
|
218
|
+
lines << 'check_delete_allowed!' << 'check_not_limited!(:delete)' if type == :delete
|
|
219
219
|
lines << 'sql = @opts[:append_sql] || sql_string_origin'
|
|
220
220
|
|
|
221
221
|
if clauses.all?{|c| c.is_a?(Array)}
|
|
@@ -492,11 +492,24 @@ module Sequel
|
|
|
492
492
|
end
|
|
493
493
|
|
|
494
494
|
sql << '('
|
|
495
|
+
if filter = opts[:filter]
|
|
496
|
+
filter = filter_expr(filter, &opts[:filter_block])
|
|
497
|
+
end
|
|
495
498
|
if opts[:*]
|
|
496
|
-
|
|
499
|
+
if filter && !supports_filtered_aggregates?
|
|
500
|
+
literal_append(sql, Sequel.case({filter=>1}, nil))
|
|
501
|
+
filter = nil
|
|
502
|
+
else
|
|
503
|
+
sql << '*'
|
|
504
|
+
end
|
|
497
505
|
else
|
|
498
506
|
sql << "DISTINCT " if opts[:distinct]
|
|
499
|
-
|
|
507
|
+
if filter && !supports_filtered_aggregates?
|
|
508
|
+
expression_list_append(sql, f.args.map{|arg| Sequel.case({filter=>arg}, nil)})
|
|
509
|
+
filter = nil
|
|
510
|
+
else
|
|
511
|
+
expression_list_append(sql, f.args)
|
|
512
|
+
end
|
|
500
513
|
if order = opts[:order]
|
|
501
514
|
sql << " ORDER BY "
|
|
502
515
|
expression_list_append(sql, order)
|
|
@@ -510,9 +523,9 @@ module Sequel
|
|
|
510
523
|
sql << ')'
|
|
511
524
|
end
|
|
512
525
|
|
|
513
|
-
if filter
|
|
526
|
+
if filter
|
|
514
527
|
sql << " FILTER (WHERE "
|
|
515
|
-
literal_append(sql,
|
|
528
|
+
literal_append(sql, filter)
|
|
516
529
|
sql << ')'
|
|
517
530
|
end
|
|
518
531
|
|
|
@@ -546,11 +559,9 @@ module Sequel
|
|
|
546
559
|
# Append literalization of JOIN USING clause to SQL string.
|
|
547
560
|
def join_using_clause_sql_append(sql, jc)
|
|
548
561
|
join_clause_sql_append(sql, jc)
|
|
549
|
-
sql
|
|
550
|
-
column_list_append(sql, jc.using)
|
|
551
|
-
sql << ')'
|
|
562
|
+
join_using_clause_using_sql_append(sql, jc.using)
|
|
552
563
|
end
|
|
553
|
-
|
|
564
|
+
|
|
554
565
|
# Append literalization of negative boolean constant to SQL string.
|
|
555
566
|
def negative_boolean_constant_sql_append(sql, constant)
|
|
556
567
|
sql << 'NOT '
|
|
@@ -905,10 +916,35 @@ module Sequel
|
|
|
905
916
|
!@opts[:no_cache_sql] && !cache_get(:_no_cache_sql)
|
|
906
917
|
end
|
|
907
918
|
|
|
908
|
-
# Raise an InvalidOperation exception if
|
|
919
|
+
# Raise an InvalidOperation exception if modification is not allowed for this dataset.
|
|
920
|
+
# Check whether it is allowed to insert into this dataset.
|
|
921
|
+
# Only for backwards compatibility with older external adapters.
|
|
909
922
|
def check_modification_allowed!
|
|
923
|
+
# SEQUEL6: Remove
|
|
924
|
+
Sequel::Deprecation.deprecate("Dataset#check_modification_allowed!", "Use check_{insert,delete,update,truncation}_allowed! instead")
|
|
925
|
+
_check_modification_allowed!(supports_modifying_joins?)
|
|
926
|
+
end
|
|
927
|
+
|
|
928
|
+
# Check whether it is allowed to insert into this dataset.
|
|
929
|
+
def check_insert_allowed!
|
|
930
|
+
_check_modification_allowed!(false)
|
|
931
|
+
end
|
|
932
|
+
alias check_truncation_allowed! check_insert_allowed!
|
|
933
|
+
|
|
934
|
+
# Check whether it is allowed to delete from this dataset.
|
|
935
|
+
def check_delete_allowed!
|
|
936
|
+
_check_modification_allowed!(supports_deleting_joins?)
|
|
937
|
+
end
|
|
938
|
+
|
|
939
|
+
# Check whether it is allowed to update this dataset.
|
|
940
|
+
def check_update_allowed!
|
|
941
|
+
_check_modification_allowed!(supports_updating_joins?)
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
# Internals of the check_*_allowed! methods
|
|
945
|
+
def _check_modification_allowed!(modifying_joins_supported)
|
|
910
946
|
raise(InvalidOperation, "Grouped datasets cannot be modified") if opts[:group]
|
|
911
|
-
raise(InvalidOperation, "Joined datasets cannot be modified") if !
|
|
947
|
+
raise(InvalidOperation, "Joined datasets cannot be modified") if !modifying_joins_supported && joined_dataset?
|
|
912
948
|
end
|
|
913
949
|
|
|
914
950
|
# Raise error if the dataset uses limits or offsets.
|
|
@@ -917,11 +953,6 @@ module Sequel
|
|
|
917
953
|
raise InvalidOperation, "Dataset##{type} not supported on datasets with limits or offsets" if opts[:limit] || opts[:offset]
|
|
918
954
|
end
|
|
919
955
|
|
|
920
|
-
# Alias of check_modification_allowed!
|
|
921
|
-
def check_truncation_allowed!
|
|
922
|
-
check_modification_allowed!
|
|
923
|
-
end
|
|
924
|
-
|
|
925
956
|
# Append column list to SQL string.
|
|
926
957
|
# If the column list is empty, a wildcard (*) is appended.
|
|
927
958
|
def column_list_append(sql, columns)
|
|
@@ -958,7 +989,9 @@ module Sequel
|
|
|
958
989
|
# operators unsupported by some databases. Used by adapters for databases
|
|
959
990
|
# that don't support the operators natively.
|
|
960
991
|
def complex_expression_emulate_append(sql, op, args)
|
|
992
|
+
# :nocov:
|
|
961
993
|
case op
|
|
994
|
+
# :nocov:
|
|
962
995
|
when :%
|
|
963
996
|
complex_expression_arg_pairs_append(sql, args){|a, b| Sequel.function(:MOD, a, b)}
|
|
964
997
|
when :>>
|
|
@@ -1183,6 +1216,13 @@ module Sequel
|
|
|
1183
1216
|
"#{join_type.to_s.gsub('_', ' ').upcase} JOIN"
|
|
1184
1217
|
end
|
|
1185
1218
|
|
|
1219
|
+
# Append USING clause for JOIN USING
|
|
1220
|
+
def join_using_clause_using_sql_append(sql, using_columns)
|
|
1221
|
+
sql << ' USING ('
|
|
1222
|
+
column_list_append(sql, using_columns)
|
|
1223
|
+
sql << ')'
|
|
1224
|
+
end
|
|
1225
|
+
|
|
1186
1226
|
# Append a literalization of the array to SQL string.
|
|
1187
1227
|
# Treats as an expression if an array of all two pairs, or as a SQL array otherwise.
|
|
1188
1228
|
def literal_array_append(sql, v)
|
|
@@ -1510,13 +1550,7 @@ module Sequel
|
|
|
1510
1550
|
comma = ', '
|
|
1511
1551
|
ws.each do |w|
|
|
1512
1552
|
sql << comma if c
|
|
1513
|
-
|
|
1514
|
-
if args = w[:args]
|
|
1515
|
-
sql << '('
|
|
1516
|
-
identifier_list_append(sql, args)
|
|
1517
|
-
sql << ')'
|
|
1518
|
-
end
|
|
1519
|
-
sql << ' AS '
|
|
1553
|
+
select_with_sql_prefix(sql, w)
|
|
1520
1554
|
literal_dataset_append(sql, w[:dataset])
|
|
1521
1555
|
c ||= true
|
|
1522
1556
|
end
|
|
@@ -1530,6 +1564,23 @@ module Sequel
|
|
|
1530
1564
|
"WITH "
|
|
1531
1565
|
end
|
|
1532
1566
|
|
|
1567
|
+
def select_with_sql_prefix(sql, w)
|
|
1568
|
+
quote_identifier_append(sql, w[:name])
|
|
1569
|
+
if args = w[:args]
|
|
1570
|
+
sql << '('
|
|
1571
|
+
identifier_list_append(sql, args)
|
|
1572
|
+
sql << ')'
|
|
1573
|
+
end
|
|
1574
|
+
sql << ' AS '
|
|
1575
|
+
|
|
1576
|
+
case w[:materialized]
|
|
1577
|
+
when true
|
|
1578
|
+
sql << "MATERIALIZED "
|
|
1579
|
+
when false
|
|
1580
|
+
sql << "NOT MATERIALIZED "
|
|
1581
|
+
end
|
|
1582
|
+
end
|
|
1583
|
+
|
|
1533
1584
|
# Whether the symbol cache should be skipped when literalizing the dataset
|
|
1534
1585
|
def skip_symbol_cache?
|
|
1535
1586
|
@opts[:skip_symbol_cache]
|
data/lib/sequel/dataset.rb
CHANGED
|
@@ -20,8 +20,10 @@ module Sequel
|
|
|
20
20
|
# old_posts = posts.where{stamp < Date.today - 7}
|
|
21
21
|
# davids_old_posts = davids_posts.where{stamp < Date.today - 7}
|
|
22
22
|
#
|
|
23
|
-
# Datasets are Enumerable objects, so they can be manipulated using
|
|
24
|
-
# of the Enumerable methods, such as map
|
|
23
|
+
# Datasets are Enumerable objects, so they can be manipulated using many
|
|
24
|
+
# of the Enumerable methods, such as +map+ and +inject+. Note that there are some methods
|
|
25
|
+
# that Dataset defines that override methods defined in Enumerable and result in different
|
|
26
|
+
# behavior, such as +select+ and +group_by+.
|
|
25
27
|
#
|
|
26
28
|
# For more information, see the {"Dataset Basics" guide}[rdoc-ref:doc/dataset_basics.rdoc].
|
|
27
29
|
class Dataset
|
data/lib/sequel/deprecated.rb
CHANGED
|
@@ -39,7 +39,7 @@ module Sequel
|
|
|
39
39
|
# Print the message and possibly backtrace to the output.
|
|
40
40
|
def self.deprecate(method, instead=nil)
|
|
41
41
|
return unless output
|
|
42
|
-
message = instead ? "#{method} is deprecated and will be removed in Sequel
|
|
42
|
+
message = instead ? "#{method} is deprecated and will be removed in Sequel 6. #{instead}." : method
|
|
43
43
|
message = "#{prefix}#{message}" if prefix
|
|
44
44
|
output.puts(message)
|
|
45
45
|
case b = backtrace_filter
|
|
@@ -60,7 +60,9 @@ module Sequel
|
|
|
60
60
|
# If using ruby 2.3+, use Module#deprecate_constant to deprecate the constant,
|
|
61
61
|
# otherwise do nothing as the ruby implementation does not support constant deprecation.
|
|
62
62
|
def self.deprecate_constant(mod, constant)
|
|
63
|
+
# :nocov:
|
|
63
64
|
if RUBY_VERSION > '2.3'
|
|
65
|
+
# :nocov:
|
|
64
66
|
mod.deprecate_constant(constant)
|
|
65
67
|
end
|
|
66
68
|
end
|
data/lib/sequel/exceptions.rb
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The any_not_empty extension changes the behavior of Dataset#any?
|
|
4
|
+
# if called without a block. By default, this method uses the
|
|
5
|
+
# standard Enumerable behavior of enumerating results and seeing
|
|
6
|
+
# if any result is not false or nil. With this extension, it
|
|
7
|
+
# just checks whether the dataset is empty. This approach can
|
|
8
|
+
# be much faster if the dataset is currently large.
|
|
9
|
+
#
|
|
10
|
+
# DB[:table].any?
|
|
11
|
+
# # SELECT * FROM table
|
|
12
|
+
#
|
|
13
|
+
# DB[:table].extension(:any_not_empty).any?
|
|
14
|
+
# # SELECT 1 as one FROM table LIMIT 1
|
|
15
|
+
#
|
|
16
|
+
# You can load this extension into specific datasets:
|
|
17
|
+
#
|
|
18
|
+
# ds = DB[:table]
|
|
19
|
+
# ds = ds.extension(:any_not_empty)
|
|
20
|
+
#
|
|
21
|
+
# Or you can load it into all of a database's datasets, which
|
|
22
|
+
# is probably the desired behavior if you are using this extension:
|
|
23
|
+
#
|
|
24
|
+
# DB.extension(:any_not_empty)
|
|
25
|
+
#
|
|
26
|
+
# Note that this can result in any? returning a different result if
|
|
27
|
+
# the dataset has a row_proc that can return false or nil.
|
|
28
|
+
#
|
|
29
|
+
# Related module: Sequel::AnyNotEmpty
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
module Sequel
|
|
33
|
+
module AnyNotEmpty
|
|
34
|
+
# If a block is not given, return whether the dataset is not empty.
|
|
35
|
+
def any?
|
|
36
|
+
if defined?(yield)
|
|
37
|
+
super
|
|
38
|
+
else
|
|
39
|
+
!empty?
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Dataset.register_extension(:any_not_empty, AnyNotEmpty)
|
|
45
|
+
end
|