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
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::Dirty" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:initial=>'i'.dup, :initial_changed=>'ic'.dup}, :numrows=>1)
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:c]))
|
|
7
|
-
@c.plugin :dirty
|
|
8
|
-
@c.columns :initial, :initial_changed, :missing, :missing_changed
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
dirty_plugin_specs = shared_description do
|
|
12
|
-
it "initial_value should be the current value if value has not changed" do
|
|
13
|
-
@o.initial_value(:initial).must_equal 'i'
|
|
14
|
-
@o.initial_value(:missing).must_be_nil
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "initial_value should be the intial value if value has changed" do
|
|
18
|
-
@o.initial_value(:initial_changed).must_equal 'ic'
|
|
19
|
-
@o.initial_value(:missing_changed).must_be_nil
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "initial_value should handle case where initial value is reassigned later" do
|
|
23
|
-
@o.initial_changed = 'ic'
|
|
24
|
-
@o.initial_value(:initial_changed).must_equal 'ic'
|
|
25
|
-
@o.missing_changed = nil
|
|
26
|
-
@o.initial_value(:missing_changed).must_be_nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "changed_columns should handle case where initial value is reassigned later" do
|
|
30
|
-
@o.changed_columns.must_equal [:initial_changed, :missing_changed]
|
|
31
|
-
@o.initial_changed = 'ic'
|
|
32
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
33
|
-
@o.missing_changed = nil
|
|
34
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "column_change should give initial and current values if there has been a change made" do
|
|
38
|
-
@o.column_change(:initial_changed).must_equal ['ic', 'ic2']
|
|
39
|
-
@o.column_change(:missing_changed).must_equal [nil, 'mc2']
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "column_change should be nil if no change has been made" do
|
|
43
|
-
@o.column_change(:initial).must_be_nil
|
|
44
|
-
@o.column_change(:missing).must_be_nil
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "column_changed? should return whether the column has changed" do
|
|
48
|
-
@o.column_changed?(:initial).must_equal false
|
|
49
|
-
@o.column_changed?(:initial_changed).must_equal true
|
|
50
|
-
@o.column_changed?(:missing).must_equal false
|
|
51
|
-
@o.column_changed?(:missing_changed).must_equal true
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "column_changed? should handle case where initial value is reassigned later" do
|
|
55
|
-
@o.initial_changed = 'ic'
|
|
56
|
-
@o.column_changed?(:initial_changed).must_equal false
|
|
57
|
-
@o.missing_changed = nil
|
|
58
|
-
@o.column_changed?(:missing_changed).must_equal false
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "changed_columns should handle case where initial value is reassigned later" do
|
|
62
|
-
@o.changed_columns.must_equal [:initial_changed, :missing_changed]
|
|
63
|
-
@o.initial_changed = 'ic'
|
|
64
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
65
|
-
@o.missing_changed = nil
|
|
66
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "column_changes should give initial and current values" do
|
|
70
|
-
@o.column_changes.must_equal(:initial_changed=>['ic', 'ic2'], :missing_changed=>[nil, 'mc2'])
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "reset_column should reset the column to its initial value" do
|
|
74
|
-
@o.reset_column(:initial)
|
|
75
|
-
@o.initial.must_equal 'i'
|
|
76
|
-
@o.reset_column(:initial_changed)
|
|
77
|
-
@o.initial_changed.must_equal 'ic'
|
|
78
|
-
@o.reset_column(:missing)
|
|
79
|
-
@o.missing.must_be_nil
|
|
80
|
-
@o.reset_column(:missing_changed)
|
|
81
|
-
@o.missing_changed.must_be_nil
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "reset_column should remove missing values from the values" do
|
|
85
|
-
@o.reset_column(:missing)
|
|
86
|
-
@o.values.has_key?(:missing).must_equal false
|
|
87
|
-
@o.reset_column(:missing_changed)
|
|
88
|
-
@o.values.has_key?(:missing_changed).must_equal false
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "refresh should clear the cached initial values" do
|
|
92
|
-
@o.refresh
|
|
93
|
-
@o.column_changes.must_equal({})
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "will_change_column should be used to signal in-place modification to column" do
|
|
97
|
-
@o.will_change_column(:initial)
|
|
98
|
-
@o.initial << 'b'
|
|
99
|
-
@o.column_change(:initial).must_equal ['i', 'ib']
|
|
100
|
-
@o.will_change_column(:initial_changed)
|
|
101
|
-
@o.initial_changed << 'b'
|
|
102
|
-
@o.column_change(:initial_changed).must_equal ['ic', 'ic2b']
|
|
103
|
-
@o.will_change_column(:missing)
|
|
104
|
-
@o.values[:missing] = 'b'
|
|
105
|
-
@o.column_change(:missing).must_equal [nil, 'b']
|
|
106
|
-
@o.will_change_column(:missing_changed)
|
|
107
|
-
@o.missing_changed << 'b'
|
|
108
|
-
@o.column_change(:missing_changed).must_equal [nil, 'mc2b']
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "will_change_column should different types of existing objects" do
|
|
112
|
-
[nil, true, false, Class.new{undef_method :clone}.new, Class.new{def clone; raise TypeError; end}.new].each do |v|
|
|
113
|
-
o = @c.new(:initial=>v)
|
|
114
|
-
o.will_change_column(:initial)
|
|
115
|
-
o.initial = 'a'
|
|
116
|
-
o.column_change(:initial).must_equal [v, 'a']
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should work when freezing objects" do
|
|
121
|
-
@o.freeze
|
|
122
|
-
@o.initial_value(:initial).must_equal 'i'
|
|
123
|
-
proc{@o.initial = 'b'}.must_raise
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should have #dup duplicate structures" do
|
|
127
|
-
was_new = @o.new?
|
|
128
|
-
@o.update(:missing=>'m2')
|
|
129
|
-
@o.dup.initial_values.must_equal @o.initial_values
|
|
130
|
-
@o.dup.initial_values.wont_be_same_as(@o.initial_values)
|
|
131
|
-
@o.dup.instance_variable_get(:@missing_initial_values).must_equal @o.instance_variable_get(:@missing_initial_values)
|
|
132
|
-
@o.dup.instance_variable_get(:@missing_initial_values).wont_be_same_as(@o.instance_variable_get(:@missing_initial_values))
|
|
133
|
-
if was_new
|
|
134
|
-
@o.previous_changes.must_be_nil
|
|
135
|
-
@o.dup.previous_changes.must_be_nil
|
|
136
|
-
else
|
|
137
|
-
@o.dup.previous_changes.must_equal @o.previous_changes
|
|
138
|
-
end
|
|
139
|
-
@o.dup.previous_changes.wont_be_same_as(@o.previous_changes) if @o.previous_changes
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
describe "with new instance" do
|
|
144
|
-
before do
|
|
145
|
-
@o = @c.new(:initial=>'i'.dup, :initial_changed=>'ic'.dup)
|
|
146
|
-
@o.initial_changed = 'ic2'.dup
|
|
147
|
-
@o.missing_changed = 'mc2'.dup
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
include dirty_plugin_specs
|
|
151
|
-
|
|
152
|
-
it "save should clear the cached initial values" do
|
|
153
|
-
@o.save
|
|
154
|
-
@o.column_changes.must_equal({})
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "save_changes should clear the cached initial values" do
|
|
158
|
-
@c.dataset = @c.dataset.with_extend do
|
|
159
|
-
def supports_insert_select?; true end
|
|
160
|
-
def insert_select(*) {:id=>1} end
|
|
161
|
-
end
|
|
162
|
-
@o.save
|
|
163
|
-
@o.column_changes.must_equal({})
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
describe "with existing instance" do
|
|
168
|
-
before do
|
|
169
|
-
@o = @c[1]
|
|
170
|
-
@o.initial_changed = 'ic2'.dup
|
|
171
|
-
@o.missing_changed = 'mc2'.dup
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
include dirty_plugin_specs
|
|
175
|
-
|
|
176
|
-
it "previous_changes should be the previous changes after saving" do
|
|
177
|
-
@o.save
|
|
178
|
-
@o.previous_changes.must_equal(:initial_changed=>['ic', 'ic2'], :missing_changed=>[nil, 'mc2'])
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it "should work when freezing objects after saving" do
|
|
182
|
-
@o.initial = 'a'
|
|
183
|
-
@o.save
|
|
184
|
-
@o.freeze
|
|
185
|
-
@o.previous_changes[:initial].must_equal ['i', 'a']
|
|
186
|
-
proc{@o.initial = 'b'}.must_raise
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
end
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
mod = shared_description do
|
|
4
|
-
it "should take action depending on :on_duplicate_columns if 2 or more columns have the same name" do
|
|
5
|
-
check(nil, @cols)
|
|
6
|
-
@warned.must_be_nil
|
|
7
|
-
|
|
8
|
-
check(:ignore, @cols)
|
|
9
|
-
@warned.must_be_nil
|
|
10
|
-
|
|
11
|
-
check(:warn, @cols)
|
|
12
|
-
@warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
|
|
13
|
-
|
|
14
|
-
proc{check(:raise, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
15
|
-
|
|
16
|
-
cols = nil
|
|
17
|
-
check(proc{|cs| cols = cs; nil}, @cols)
|
|
18
|
-
@warned.must_be_nil
|
|
19
|
-
cols.must_equal @cols
|
|
20
|
-
|
|
21
|
-
cols = nil
|
|
22
|
-
check(proc{|cs| cols = cs; :ignore}, @cols)
|
|
23
|
-
@warned.must_be_nil
|
|
24
|
-
cols.must_equal @cols
|
|
25
|
-
|
|
26
|
-
cols = nil
|
|
27
|
-
proc{check(proc{|cs| cols = cs; :raise}, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
28
|
-
cols.must_equal @cols
|
|
29
|
-
|
|
30
|
-
cols = nil
|
|
31
|
-
check(proc{|cs| cols = cs; :warn}, @cols)
|
|
32
|
-
@warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
|
|
33
|
-
cols.must_equal @cols
|
|
34
|
-
|
|
35
|
-
check(:raise, nil)
|
|
36
|
-
@warned.must_be_nil
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should not raise error or warning if no columns have the same name" do
|
|
40
|
-
[nil, :ignore, :raise, :warn, proc{|cs| :raise}].each do |handler|
|
|
41
|
-
check(handler, @cols.uniq)
|
|
42
|
-
@warned.must_be_nil
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe "Sequel::DuplicateColumnsHandler Database configuration" do
|
|
48
|
-
before do
|
|
49
|
-
@db = Sequel.mock
|
|
50
|
-
@db.extension(:duplicate_columns_handler)
|
|
51
|
-
@cols = [:id, :name, :id]
|
|
52
|
-
@warned = nil
|
|
53
|
-
set_warned = @set_warned = proc{|m| @warned = m}
|
|
54
|
-
@ds = @db[:things].with_extend{define_method(:warn){|message| set_warned.call(message)}}
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def check(handler, cols)
|
|
58
|
-
@db.opts[:on_duplicate_columns] = handler
|
|
59
|
-
@set_warned.call(nil)
|
|
60
|
-
@ds.send(:columns=, cols)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
include mod
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
describe "Sequel::DuplicateColumnsHandler Dataset configuration" do
|
|
67
|
-
before do
|
|
68
|
-
@cols = [:id, :name, :id]
|
|
69
|
-
@warned = nil
|
|
70
|
-
set_warned = @set_warned = proc{|m| @warned = m}
|
|
71
|
-
@ds = Sequel.mock[:things].extension(:duplicate_columns_handler).with_extend{define_method(:warn){|message| set_warned.call(message)}}
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def check(handler, cols)
|
|
75
|
-
@set_warned.call(nil)
|
|
76
|
-
@ds.on_duplicate_columns(handler).send(:columns=, cols)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
include mod
|
|
80
|
-
|
|
81
|
-
it "should use handlers passed as blocks to on_duplicate_columns" do
|
|
82
|
-
proc{@ds.on_duplicate_columns{:raise}.send(:columns=, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should raise an error if not providing either an argument or block to on_duplicate_columns" do
|
|
86
|
-
proc{@ds.on_duplicate_columns}.must_raise(Sequel::Error)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should raise an error if providing both an argument and block to on_duplicate_columns" do
|
|
90
|
-
proc{@ds.on_duplicate_columns(:raise){:raise}}.must_raise(Sequel::Error)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should warn by defaul if there is no database or dataset handler" do
|
|
94
|
-
@ds.send(:columns=, @cols)
|
|
95
|
-
@warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should fallback to database setting if there is no dataset-level handler" do
|
|
99
|
-
@ds.db.opts[:on_duplicate_columns] = :raise
|
|
100
|
-
proc{@ds.send(:columns=, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
101
|
-
check(:ignore, @cols)
|
|
102
|
-
@warned.must_be_nil
|
|
103
|
-
end
|
|
104
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::EagerEach" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:items))
|
|
6
|
-
@c.columns :id, :parent_id
|
|
7
|
-
@c.plugin :eager_each
|
|
8
|
-
@c.one_to_many :children, :class=>@c, :key=>:parent_id
|
|
9
|
-
@c.db.sqls
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should make #each on an eager dataset do eager loading" do
|
|
13
|
-
a = []
|
|
14
|
-
ds = @c.eager(:children).with_fetch([{:id=>1, :parent_id=>nil}, {:id=>2, :parent_id=>nil}])
|
|
15
|
-
@c.dataset = @c.dataset.with_fetch([{:id=>3, :parent_id=>1}, {:id=>4, :parent_id=>1}, {:id=>5, :parent_id=>2}, {:id=>6, :parent_id=>2}])
|
|
16
|
-
ds.each{|c| a << c}
|
|
17
|
-
a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
|
|
18
|
-
a.map{|c| c.associations[:children]}.must_equal [[@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)], [@c.load(:id=>5, :parent_id=>2), @c.load(:id=>6, :parent_id=>2)]]
|
|
19
|
-
sqls = @c.db.sqls
|
|
20
|
-
sqls.shift.must_equal 'SELECT * FROM items'
|
|
21
|
-
['SELECT * FROM items WHERE (items.parent_id IN (1, 2))',
|
|
22
|
-
'SELECT * FROM items WHERE (items.parent_id IN (2, 1))'].must_include(sqls.pop)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should make #each on an eager_graph dataset do eager loading" do
|
|
26
|
-
a = []
|
|
27
|
-
ds = @c.eager_graph(:children).with_fetch([{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}, {:id=>1, :parent_id=>nil, :children_id=>4, :children_parent_id=>1}, {:id=>2, :parent_id=>nil, :children_id=>5, :children_parent_id=>2}, {:id=>2, :parent_id=>nil, :children_id=>6, :children_parent_id=>2}])
|
|
28
|
-
ds.each{|c| a << c}
|
|
29
|
-
a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
|
|
30
|
-
a.map{|c| c.associations[:children]}.must_equal [[@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)], [@c.load(:id=>5, :parent_id=>2), @c.load(:id=>6, :parent_id=>2)]]
|
|
31
|
-
@c.db.sqls.must_equal ['SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id)']
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should make #first on an eager dataset do eager loading" do
|
|
35
|
-
ds = @c.eager(:children).with_fetch([{:id=>1, :parent_id=>nil}])
|
|
36
|
-
@c.dataset = @c.dataset.with_fetch([{:id=>3, :parent_id=>1}, {:id=>4, :parent_id=>1}])
|
|
37
|
-
a = ds.first
|
|
38
|
-
a.values.must_equal(:id=>1, :parent_id=>nil)
|
|
39
|
-
a.associations[:children].must_equal [@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)]
|
|
40
|
-
@c.db.sqls.must_equal ['SELECT * FROM items LIMIT 1','SELECT * FROM items WHERE (items.parent_id IN (1))']
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "should make #first on an eager_graph dataset do eager loading" do
|
|
44
|
-
a = @c.eager_graph(:children).with_fetch([[{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}], [{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}, {:id=>1, :parent_id=>nil, :children_id=>4, :children_parent_id=>1}]]).first
|
|
45
|
-
a.values.must_equal(:id=>1, :parent_id=>nil)
|
|
46
|
-
a.associations[:children].must_equal [@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)]
|
|
47
|
-
@c.db.sqls.must_equal ['SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) LIMIT 1',
|
|
48
|
-
'SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) WHERE (items.id = 1)']
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should make #first on a non-eager dataset work correctly" do
|
|
52
|
-
@c.dataset.with_fetch([{:id=>1, :parent_id=>nil}]).first.must_equal @c.load(:id=>1, :parent_id=>nil)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should get columns normally columns" do
|
|
56
|
-
@c.dataset.columns!.must_equal [:id, :parent_id]
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "should not attempt to eager load when getting the columns" do
|
|
60
|
-
@c.eager(:children).with_extend{def all; raise; end}.columns!.must_equal [:id, :parent_id]
|
|
61
|
-
end
|
|
62
|
-
end
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "eager_graph_eager plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:items))
|
|
6
|
-
@c.columns :id, :parent_id
|
|
7
|
-
@c.plugin :eager_graph_eager
|
|
8
|
-
@c.one_to_many :children, :class=>@c, :key=>:parent_id
|
|
9
|
-
@c.many_to_one :parent, :class=>@c
|
|
10
|
-
@c.db.sqls
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should support Dataset#eager_graph_eager for eager loading dependencies of eager_graph associations for one_to_many associations" do
|
|
14
|
-
a = @c.eager_graph(:children).
|
|
15
|
-
with_fetch([{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}, {:id=>2, :parent_id=>nil}]).
|
|
16
|
-
eager_graph_eager([:children], :children=>proc{|ds| ds.with_fetch(:id=>4, :parent_id=>3)}).
|
|
17
|
-
all
|
|
18
|
-
@c.db.sqls.must_equal ["SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id)",
|
|
19
|
-
"SELECT * FROM items WHERE (items.parent_id IN (3))"]
|
|
20
|
-
|
|
21
|
-
a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
|
|
22
|
-
a.map(&:children).must_equal [[@c.load(:id=>3, :parent_id=>1)], []]
|
|
23
|
-
a.first.children.first.children.must_equal [@c.load(:id=>4, :parent_id=>3)]
|
|
24
|
-
@c.db.sqls.must_equal []
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should support Dataset#eager_graph_eager for eager loading dependencies of eager_graph associations for many_to_one associations" do
|
|
28
|
-
a = @c.eager_graph(:parent).
|
|
29
|
-
with_fetch([{:id=>4, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1}, {:id=>2, :parent_id=>nil}]).
|
|
30
|
-
eager_graph_eager([:parent], :parent=>proc{|ds| ds.with_fetch(:id=>1, :parent_id=>nil)}).
|
|
31
|
-
all
|
|
32
|
-
@c.db.sqls.must_equal ["SELECT items.id, items.parent_id, parent.id AS parent_id_0, parent.parent_id AS parent_parent_id FROM items LEFT OUTER JOIN items AS parent ON (parent.id = items.parent_id)",
|
|
33
|
-
"SELECT * FROM items WHERE (items.id IN (1))"]
|
|
34
|
-
|
|
35
|
-
a.must_equal [@c.load(:id=>4, :parent_id=>3), @c.load(:id=>2, :parent_id=>nil)]
|
|
36
|
-
a.map(&:parent).must_equal [@c.load(:id=>3, :parent_id=>1), nil]
|
|
37
|
-
a.first.parent.parent.must_equal @c.load(:id=>1, :parent_id=>nil)
|
|
38
|
-
@c.db.sqls.must_equal []
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "should support multiple entries in dependency chain" do
|
|
42
|
-
a = @c.eager_graph(:children=>:children).
|
|
43
|
-
with_fetch([{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1, :children_0_id=>4, :children_0_parent_id=>3}, {:id=>2, :parent_id=>nil}]).
|
|
44
|
-
eager_graph_eager([:children, :children], :children=>proc{|ds| ds.with_fetch(:id=>5, :parent_id=>4)}).
|
|
45
|
-
all
|
|
46
|
-
@c.db.sqls.must_equal ["SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id, children_0.id AS children_0_id, children_0.parent_id AS children_0_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) LEFT OUTER JOIN items AS children_0 ON (children_0.parent_id = children.id)",
|
|
47
|
-
"SELECT * FROM items WHERE (items.parent_id IN (4))"]
|
|
48
|
-
|
|
49
|
-
a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
|
|
50
|
-
a.map(&:children).must_equal [[@c.load(:id=>3, :parent_id=>1)], []]
|
|
51
|
-
a.first.children.first.children.must_equal [@c.load(:id=>4, :parent_id=>3)]
|
|
52
|
-
a.first.children.first.children.first.children.must_equal [@c.load(:id=>5, :parent_id=>4)]
|
|
53
|
-
@c.db.sqls.must_equal []
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should support multiple dependency chains" do
|
|
57
|
-
a = @c.eager_graph(:children, :parent).
|
|
58
|
-
with_fetch([{:id=>4, :parent_id=>3, :children_id=>5, :children_parent_id=>4, :parent_id_0=>3, :parent_parent_id=>1}, {:id=>2, :parent_id=>nil}]).
|
|
59
|
-
eager_graph_eager([:children], :children=>proc{|ds| ds.with_fetch(:id=>6, :parent_id=>5)}).
|
|
60
|
-
eager_graph_eager([:parent], :parent=>proc{|ds| ds.with_fetch(:id=>1, :parent_id=>nil)}).
|
|
61
|
-
all
|
|
62
|
-
@c.db.sqls.must_equal ["SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id, parent.id AS parent_id_0, parent.parent_id AS parent_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) LEFT OUTER JOIN items AS parent ON (parent.id = items.parent_id)",
|
|
63
|
-
"SELECT * FROM items WHERE (items.parent_id IN (5))",
|
|
64
|
-
"SELECT * FROM items WHERE (items.id IN (1))"]
|
|
65
|
-
|
|
66
|
-
a.must_equal [@c.load(:id=>4, :parent_id=>3), @c.load(:id=>2, :parent_id=>nil)]
|
|
67
|
-
a.map(&:children).must_equal [[@c.load(:id=>5, :parent_id=>4)], []]
|
|
68
|
-
a.map(&:parent).must_equal [@c.load(:id=>3, :parent_id=>1), nil]
|
|
69
|
-
a.first.children.first.children.must_equal [@c.load(:id=>6, :parent_id=>5)]
|
|
70
|
-
a.first.parent.parent.must_equal @c.load(:id=>1, :parent_id=>nil)
|
|
71
|
-
@c.db.sqls.must_equal []
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should raise for invalid dependency chains" do
|
|
75
|
-
proc{@c.dataset.eager_graph_eager([], :children)}.must_raise Sequel::Error
|
|
76
|
-
proc{@c.dataset.eager_graph_eager(:children, :children)}.must_raise Sequel::Error
|
|
77
|
-
proc{@c.dataset.eager_graph_eager(['foo'], :children)}.must_raise Sequel::Error
|
|
78
|
-
proc{@c.dataset.eager_graph_eager([:foo], :children)}.must_raise Sequel::Error
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should handle cases where not all associated objects are unique" do
|
|
82
|
-
a = @c.eager_graph(:parent=>:children).
|
|
83
|
-
with_fetch([
|
|
84
|
-
{:id=>4, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>4, :children_parent_id=>3},
|
|
85
|
-
{:id=>5, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>4, :children_parent_id=>3},
|
|
86
|
-
{:id=>4, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>5, :children_parent_id=>3},
|
|
87
|
-
{:id=>5, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>5, :children_parent_id=>3}
|
|
88
|
-
]).
|
|
89
|
-
eager_graph_eager([:parent], :parent=>proc{|ds| ds.with_fetch(:id=>1, :parent_id=>nil)}).
|
|
90
|
-
all
|
|
91
|
-
@c.db.sqls.must_equal ["SELECT items.id, items.parent_id, parent.id AS parent_id_0, parent.parent_id AS parent_parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS parent ON (parent.id = items.parent_id) LEFT OUTER JOIN items AS children ON (children.parent_id = parent.id)",
|
|
92
|
-
"SELECT * FROM items WHERE (items.id IN (1))"]
|
|
93
|
-
|
|
94
|
-
a.must_equal [@c.load(:id=>4, :parent_id=>3), @c.load(:id=>5, :parent_id=>3)]
|
|
95
|
-
a.map(&:parent).must_equal [@c.load(:id=>3, :parent_id=>1), @c.load(:id=>3, :parent_id=>1)]
|
|
96
|
-
a.map(&:parent).map(&:children).must_equal [a, a]
|
|
97
|
-
a.map(&:parent).map(&:parent).must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>1, :parent_id=>nil)]
|
|
98
|
-
@c.db.sqls.must_equal []
|
|
99
|
-
end
|
|
100
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "filter_having extension" do
|
|
4
|
-
before do
|
|
5
|
-
@dataset = Sequel.mock[:test].extension(:empty_array_consider_nulls)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should handle all types of IN/NOT IN queries with empty arrays" do
|
|
9
|
-
@dataset.filter(:id => []).sql.must_equal "SELECT * FROM test WHERE (id != id)"
|
|
10
|
-
@dataset.filter([:id1, :id2] => []).sql.must_equal "SELECT * FROM test WHERE ((id1 != id1) AND (id2 != id2))"
|
|
11
|
-
@dataset.exclude(:id => []).sql.must_equal "SELECT * FROM test WHERE (id = id)"
|
|
12
|
-
@dataset.exclude([:id1, :id2] => []).sql.must_equal "SELECT * FROM test WHERE ((id1 = id1) AND (id2 = id2))"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should handle IN/NOT IN queries with multiple columns and an empty dataset where the database doesn't support it" do
|
|
16
|
-
db = Sequel.mock
|
|
17
|
-
d1 = db[:test].select(:id1, :id2).filter(:region=>'Asia').columns(:id1, :id2)
|
|
18
|
-
@dataset = @dataset.with_extend{def supports_multiple_column_in?; false end}
|
|
19
|
-
@dataset.filter([:id1, :id2] => d1).sql.must_equal "SELECT * FROM test WHERE ((id1 != id1) AND (id2 != id2))"
|
|
20
|
-
db.sqls.must_equal ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
|
|
21
|
-
@dataset.exclude([:id1, :id2] => d1).sql.must_equal "SELECT * FROM test WHERE ((id1 = id1) AND (id2 = id2))"
|
|
22
|
-
db.sqls.must_equal ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::ErrorSplitter" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model)
|
|
6
|
-
@c.plugin :error_splitter
|
|
7
|
-
@m = @c.new
|
|
8
|
-
def @m.validate
|
|
9
|
-
errors.add([:a, :b], 'is bad')
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should split errors for multiple columns and assign them to each column" do
|
|
14
|
-
@m.valid?.must_equal false
|
|
15
|
-
@m.errors.must_equal(:a=>['is bad'], :b=>['is bad'])
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "error_sql extension" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>proc{|sql| @db.log_connection_yield(sql, nil){raise StandardError}}).extension(:error_sql)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should have Sequel::DatabaseError#sql give the SQL causing the error" do
|
|
9
|
-
@db["SELECT"].all rescue (e = $!)
|
|
10
|
-
e.sql.must_equal "SELECT"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should have Sequel::DatabaseError#sql give the SQL causing the error when using a logger" do
|
|
14
|
-
l = Object.new
|
|
15
|
-
def l.method_missing(*) end
|
|
16
|
-
@db.loggers = [l]
|
|
17
|
-
@db["SELECT"].all rescue (e = $!)
|
|
18
|
-
e.sql.must_equal "SELECT"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "escaped_like extension" do
|
|
4
|
-
before do
|
|
5
|
-
Sequel.extension(:escaped_like)
|
|
6
|
-
@ds = Sequel.mock[:t]
|
|
7
|
-
@c = Sequel[:c]
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "escaped_like should support creating case sensitive pattern matches" do
|
|
11
|
-
@ds.where(@c.escaped_like('?', 'a')).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a' ESCAPE '\\')"
|
|
12
|
-
@ds.where(@c.escaped_like('?%', 'a')).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a%' ESCAPE '\\')"
|
|
13
|
-
@ds.where(@c.escaped_like('?', 'a%')).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a\\%' ESCAPE '\\')"
|
|
14
|
-
@ds.where(@c.escaped_like('?', ['a%'])).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a\\%' ESCAPE '\\')"
|
|
15
|
-
@ds.where(@c.escaped_like('??', ['a', '%'])).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a\\%' ESCAPE '\\')"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "escaped_ilike should support creating case insensitive pattern matches" do
|
|
19
|
-
@ds.where(@c.escaped_ilike('?', 'a')).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a') ESCAPE '\\')"
|
|
20
|
-
@ds.where(@c.escaped_ilike('?%', 'a')).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a%') ESCAPE '\\')"
|
|
21
|
-
@ds.where(@c.escaped_ilike('?', 'a%')).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a\\%') ESCAPE '\\')"
|
|
22
|
-
@ds.where(@c.escaped_ilike('?', ['a%'])).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a\\%') ESCAPE '\\')"
|
|
23
|
-
@ds.where(@c.escaped_ilike('??', ['a', '%'])).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a\\%') ESCAPE '\\')"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should raise an Error for a mismatched number of placeholders" do
|
|
27
|
-
proc{@ds.where(@c.escaped_like('?', [])).sql}.must_raise Sequel::Error
|
|
28
|
-
proc{@ds.where(@c.escaped_like('??', ['a'])).sql}.must_raise Sequel::Error
|
|
29
|
-
proc{@ds.where(@c.escaped_ilike('', ['a'])).sql}.must_raise Sequel::Error
|
|
30
|
-
proc{@ds.where(@c.escaped_ilike('?', ['a', 'a'])).sql}.must_raise Sequel::Error
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "escaped_like and escaped_ilike should return expressions" do
|
|
34
|
-
@ds.select(@c.escaped_like('?', 'a').as(:b)).sql.must_equal "SELECT (c LIKE 'a' ESCAPE '\\') AS b FROM t"
|
|
35
|
-
@ds.select(@c.escaped_like('?', 'a').cast(String)).sql.must_equal "SELECT CAST((c LIKE 'a' ESCAPE '\\') AS varchar(255)) FROM t"
|
|
36
|
-
@ds.order(@c.escaped_like('?', 'a').desc).sql.must_equal "SELECT * FROM t ORDER BY (c LIKE 'a' ESCAPE '\\') DESC"
|
|
37
|
-
@ds.where(@c.escaped_like('?', 'a') | @c.escaped_like('?', 'b')).sql.must_equal "SELECT * FROM t WHERE ((c LIKE 'a' ESCAPE '\\') OR (c LIKE 'b' ESCAPE '\\'))"
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :eval_inspect
|
|
4
|
-
|
|
5
|
-
describe "eval_inspect extension" do
|
|
6
|
-
before do
|
|
7
|
-
@ds = Sequel.mock.dataset.with_extend do
|
|
8
|
-
def supports_window_functions?; true end
|
|
9
|
-
def literal_blob_append(sql, s) sql << "X'#{s}'" end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should make eval(obj.inspect) == obj for all Sequel::SQL::Expression subclasses" do
|
|
14
|
-
[
|
|
15
|
-
# Objects with components where eval(inspect) == self
|
|
16
|
-
Sequel::SQL::AliasedExpression.new(:b, :a),
|
|
17
|
-
Sequel::SQL::AliasedExpression.new(:b, :a, [:c, :d]),
|
|
18
|
-
Sequel::SQL::CaseExpression.new({:b=>:a}, :c),
|
|
19
|
-
Sequel::SQL::CaseExpression.new({:b=>:a}, :c, :d),
|
|
20
|
-
Sequel::SQL::Cast.new(:a, :b),
|
|
21
|
-
Sequel::SQL::ColumnAll.new(:a),
|
|
22
|
-
Sequel::SQL::ComplexExpression.new(:'=', :b, :a),
|
|
23
|
-
Sequel::SQL::Constant.new(:a),
|
|
24
|
-
Sequel::CURRENT_DATE,
|
|
25
|
-
Sequel::CURRENT_TIMESTAMP,
|
|
26
|
-
Sequel::CURRENT_TIME,
|
|
27
|
-
Sequel::SQLTRUE,
|
|
28
|
-
Sequel::SQLFALSE,
|
|
29
|
-
Sequel::NULL,
|
|
30
|
-
Sequel::NOTNULL,
|
|
31
|
-
Sequel::SQL::Function.new(:a, :b, :c),
|
|
32
|
-
Sequel::SQL::Identifier.new(:a),
|
|
33
|
-
Sequel::SQL::JoinClause.new(:inner, :b),
|
|
34
|
-
Sequel::SQL::JoinOnClause.new({:d=>:a}, :inner, :b),
|
|
35
|
-
Sequel::SQL::JoinUsingClause.new([:a], :inner, :b),
|
|
36
|
-
Sequel::SQL::JoinClause.new(:inner, Sequel.as(:b, :c, [:d, :e])),
|
|
37
|
-
Sequel::SQL::JoinOnClause.new({:d=>:a}, :inner, Sequel.as(:b, :c, [:d, :e])),
|
|
38
|
-
Sequel::SQL::JoinUsingClause.new([:a], :inner, Sequel.as(:b, :c, [:d, :e])),
|
|
39
|
-
Sequel::SQL::PlaceholderLiteralString.new('? = ?', [:a, :b]),
|
|
40
|
-
Sequel::SQL::PlaceholderLiteralString.new(':a = :b', [{:a=>:b, :b=>42}]),
|
|
41
|
-
Sequel::SQL::OrderedExpression.new(:a),
|
|
42
|
-
Sequel::SQL::OrderedExpression.new(:a, false),
|
|
43
|
-
Sequel::SQL::OrderedExpression.new(:a, false, :nulls=>:first),
|
|
44
|
-
Sequel::SQL::OrderedExpression.new(:a, false, :nulls=>:last),
|
|
45
|
-
Sequel::SQL::QualifiedIdentifier.new(:b, :a),
|
|
46
|
-
Sequel::SQL::Subscript.new(:a, [1, 2]),
|
|
47
|
-
Sequel::SQL::Window.new(:order=>:a, :partition=>:b),
|
|
48
|
-
Sequel::SQL::Function.new(:a, :b, :c).over(:order=>:a, :partition=>:b),
|
|
49
|
-
Sequel::SQL::Wrapper.new(:a),
|
|
50
|
-
|
|
51
|
-
# Objects with components where eval(inspect) != self
|
|
52
|
-
Sequel::SQL::AliasedExpression.new(Sequel::SQL::Blob.new('s'), :a),
|
|
53
|
-
Sequel::SQL::AliasedExpression.new(Sequel::LiteralString.new('s'), :a),
|
|
54
|
-
Sequel::SQL::PlaceholderLiteralString.new('(a, b) IN ?', [Sequel::SQL::ValueList.new([[1, 2]])]),
|
|
55
|
-
Sequel::SQL::CaseExpression.new({{:d=>Sequel::LiteralString.new('e')}=>:a}, :c, :d),
|
|
56
|
-
Sequel::SQL::AliasedExpression.new(Date.new(2011, 10, 11), :a),
|
|
57
|
-
Sequel::SQL::AliasedExpression.new(Sequel::SQLTime.create(10, 20, 30, 500000.125), :a),
|
|
58
|
-
Sequel::SQL::AliasedExpression.new(DateTime.new(2011, 9, 11, 10, 20, 30), :a),
|
|
59
|
-
Sequel::SQL::AliasedExpression.new(DateTime.new(2011, 9, 11, 10, 20, 30, 0.25), :a),
|
|
60
|
-
Sequel::SQL::AliasedExpression.new(DateTime.new(2011, 9, 11, 10, 20, 30, -0.25), :a),
|
|
61
|
-
Sequel::SQL::AliasedExpression.new(Time.local(2011, 9, 11, 10, 20, 30), :a),
|
|
62
|
-
Sequel::SQL::AliasedExpression.new(Time.local(2011, 9, 11, 10, 20, 30, 500000.125), :a),
|
|
63
|
-
Sequel::SQL::AliasedExpression.new(Time.utc(2011, 9, 11, 10, 20, 30), :a),
|
|
64
|
-
Sequel::SQL::AliasedExpression.new(Time.utc(2011, 9, 11, 10, 20, 30, 500000.125), :a),
|
|
65
|
-
Sequel::SQL::AliasedExpression.new(BigDecimal('1.000000000000000000000000000000000000000000000001'), :a),
|
|
66
|
-
Sequel::SQL::AliasedExpression.new(Sequel::CURRENT_DATE, :a),
|
|
67
|
-
Sequel::SQL::AliasedExpression.new(Sequel::CURRENT_TIMESTAMP, :a),
|
|
68
|
-
].each do |o|
|
|
69
|
-
v = eval(o.inspect)
|
|
70
|
-
v.must_equal o
|
|
71
|
-
@ds.literal(v).must_equal @ds.literal(o)
|
|
72
|
-
|
|
73
|
-
ds = @ds
|
|
74
|
-
@ds.db.create_table(:test) do
|
|
75
|
-
v = eval(o.inspect)
|
|
76
|
-
v.must_equal o
|
|
77
|
-
ds.literal(v).must_equal ds.literal(o)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|