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,423 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::AssociationPks" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:autoid=>1, :fetch=>proc do |sql|
|
|
6
|
-
case sql
|
|
7
|
-
when /SELECT \* FROM (?:artists|albums) WHERE \(id = (\d+)\) LIMIT 1/
|
|
8
|
-
{:id=>$1.to_i}
|
|
9
|
-
when "SELECT id FROM albums WHERE (albums.artist_id = 1)"
|
|
10
|
-
[{:id=>1}, {:id=>2}, {:id=>3}]
|
|
11
|
-
when /SELECT tag_id FROM albums_tags WHERE \(album_id = (\d)\)/,
|
|
12
|
-
/SELECT tags.id FROM tags INNER JOIN albums_tags ON \(albums_tags.tag_id = tags.id\) WHERE \(albums_tags.album_id = (\d)\)/
|
|
13
|
-
a = []
|
|
14
|
-
a << {:tag_id=>1} if $1 == '1'
|
|
15
|
-
a << {:tag_id=>2} if $1 != '3'
|
|
16
|
-
a << {:tag_id=>3} if $1 == '2'
|
|
17
|
-
a
|
|
18
|
-
when "SELECT first, last FROM vocalists WHERE (vocalists.album_id = 1)"
|
|
19
|
-
[{:first=>"F1", :last=>"L1"}, {:first=>"F2", :last=>"L2"}]
|
|
20
|
-
when /SELECT first, last FROM albums_vocalists WHERE \(album_id = (\d)\)/
|
|
21
|
-
a = []
|
|
22
|
-
a << {:first=>"F1", :last=>"L1"} if $1 == '1'
|
|
23
|
-
a << {:first=>"F2", :last=>"L2"} if $1 != '3'
|
|
24
|
-
a << {:first=>"F3", :last=>"L3"} if $1 == '2'
|
|
25
|
-
a
|
|
26
|
-
when "SELECT id FROM instruments WHERE ((instruments.first = 'F1') AND (instruments.last = 'L1'))"
|
|
27
|
-
[{:id=>1}, {:id=>2}]
|
|
28
|
-
when /SELECT instrument_id FROM vocalists_instruments WHERE \(\((?:first|last) = '?[FL1](\d)/
|
|
29
|
-
a = []
|
|
30
|
-
a << {:instrument_id=>1} if $1 == "1"
|
|
31
|
-
a << {:instrument_id=>2} if $1 != "3"
|
|
32
|
-
a << {:instrument_id=>3} if $1 == "2"
|
|
33
|
-
a
|
|
34
|
-
when "SELECT year, week FROM hits WHERE ((hits.first = 'F1') AND (hits.last = 'L1'))"
|
|
35
|
-
[{:year=>1997, :week=>1}, {:year=>1997, :week=>2}]
|
|
36
|
-
when /SELECT year, week FROM vocalists_hits WHERE \(\((?:first|last) = '?[FL1](\d)/,
|
|
37
|
-
/SELECT hits.year, hits.week FROM hits INNER JOIN vocalists_hits ON \(\(vocalists_hits.(?:year|week) = hits.(?:year|week)\) AND \(vocalists_hits.(?:year|week) = hits.(?:year|week)\)\) WHERE \(\(vocalists_hits.(?:first|last) = '?[FL1](\d)/
|
|
38
|
-
a = []
|
|
39
|
-
a << {:year=>1997, :week=>1} if $1 == "1"
|
|
40
|
-
a << {:year=>1997, :week=>2} if $1 != "3"
|
|
41
|
-
a << {:year=>1997, :week=>3} if $1 == "2"
|
|
42
|
-
a
|
|
43
|
-
end
|
|
44
|
-
end)
|
|
45
|
-
@Artist = Class.new(Sequel::Model(@db[:artists]))
|
|
46
|
-
@Artist.columns :id
|
|
47
|
-
@Album = Class.new(Sequel::Model(@db[:albums]))
|
|
48
|
-
@Album.columns :id, :artist_id
|
|
49
|
-
@Tag = Class.new(Sequel::Model(@db[:tags]))
|
|
50
|
-
@Tag.columns :id
|
|
51
|
-
@Vocalist = Class.new(Sequel::Model(@db[:vocalists]))
|
|
52
|
-
@Vocalist.columns :first, :last, :album_id
|
|
53
|
-
@Vocalist.set_primary_key [:first, :last]
|
|
54
|
-
@Instrument = Class.new(Sequel::Model(@db[:instruments]))
|
|
55
|
-
@Instrument.columns :id, :first, :last
|
|
56
|
-
@Hit = Class.new(Sequel::Model(@db[:hits]))
|
|
57
|
-
@Hit.columns :year, :week, :first, :last
|
|
58
|
-
@Hit.set_primary_key [:year, :week]
|
|
59
|
-
@Artist.plugin :association_pks
|
|
60
|
-
@Album.plugin :association_pks
|
|
61
|
-
@Vocalist.plugin :association_pks
|
|
62
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id, :delay_pks=>false
|
|
63
|
-
@Album.many_to_many :tags, :class=>@Tag, :join_table=>:albums_tags, :left_key=>:album_id, :delay_pks=>false
|
|
64
|
-
@db.sqls
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should return correct associated pks for one_to_many associations" do
|
|
68
|
-
@Artist.load(:id=>1).album_pks.must_equal [1,2,3]
|
|
69
|
-
@db.sqls.must_equal ["SELECT id FROM albums WHERE (albums.artist_id = 1)"]
|
|
70
|
-
@Artist.load(:id=>2).album_pks.must_equal []
|
|
71
|
-
@db.sqls.must_equal ["SELECT id FROM albums WHERE (albums.artist_id = 2)"]
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should return correct associated pks for many_to_many associations" do
|
|
75
|
-
@Album.load(:id=>1).tag_pks.must_equal [1, 2]
|
|
76
|
-
@db.sqls.must_equal ["SELECT tag_id FROM albums_tags WHERE (album_id = 1)"]
|
|
77
|
-
@Album.load(:id=>2).tag_pks.must_equal [2, 3]
|
|
78
|
-
@db.sqls.must_equal ["SELECT tag_id FROM albums_tags WHERE (album_id = 2)"]
|
|
79
|
-
@Album.load(:id=>3).tag_pks.must_equal []
|
|
80
|
-
@db.sqls.must_equal ["SELECT tag_id FROM albums_tags WHERE (album_id = 3)"]
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should return correct associated pks for many_to_many associations using :association_pks_use_associated_table" do
|
|
84
|
-
@Album.many_to_many :tags, :class=>@Tag, :join_table=>:albums_tags, :left_key=>:album_id, :delay_pks=>false, :association_pks_use_associated_table=>true
|
|
85
|
-
@Album.load(:id=>1).tag_pks.must_equal [1, 2]
|
|
86
|
-
@db.sqls.must_equal ["SELECT tags.id FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1)"]
|
|
87
|
-
@Album.load(:id=>2).tag_pks.must_equal [2, 3]
|
|
88
|
-
@db.sqls.must_equal ["SELECT tags.id FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 2)"]
|
|
89
|
-
@Album.load(:id=>3).tag_pks.must_equal []
|
|
90
|
-
@db.sqls.must_equal ["SELECT tags.id FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 3)"]
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should set associated pks correctly for a one_to_many association" do
|
|
94
|
-
@Artist.load(:id=>1).album_pks = [1, 2]
|
|
95
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
96
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))"]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "should use associated class's primary key for a one_to_many association" do
|
|
100
|
-
@Album.set_primary_key :foo
|
|
101
|
-
@Artist.load(:id=>1).album_pks = [1, 2]
|
|
102
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (foo IN (1, 2))",
|
|
103
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (foo NOT IN (1, 2)))"]
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should set associated pks correctly for a many_to_many association" do
|
|
107
|
-
@Album.load(:id=>2).tag_pks = [1, 3]
|
|
108
|
-
@db.sqls.must_equal ["DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))",
|
|
109
|
-
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
110
|
-
'BEGIN',
|
|
111
|
-
'INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)',
|
|
112
|
-
'COMMIT']
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should return correct right-side associated cpks for one_to_many associations" do
|
|
116
|
-
@Album.one_to_many :vocalists, :class=>@Vocalist, :key=>:album_id
|
|
117
|
-
@Album.load(:id=>1).vocalist_pks.must_equal [["F1", "L1"], ["F2", "L2"]]
|
|
118
|
-
@Album.load(:id=>2).vocalist_pks.must_equal []
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should return correct right-side associated cpks for many_to_many associations" do
|
|
122
|
-
@Album.many_to_many :vocalists, :class=>@Vocalist, :join_table=>:albums_vocalists, :left_key=>:album_id, :right_key=>[:first, :last]
|
|
123
|
-
@Album.load(:id=>1).vocalist_pks.must_equal [["F1", "L1"], ["F2", "L2"]]
|
|
124
|
-
@Album.load(:id=>2).vocalist_pks.must_equal [["F2", "L2"], ["F3", "L3"]]
|
|
125
|
-
@Album.load(:id=>3).vocalist_pks.must_equal []
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
it "should set associated right-side cpks correctly for a one_to_many association" do
|
|
129
|
-
@Album.one_to_many :vocalists, :class=>@Vocalist, :key=>:album_id, :delay_pks=>false
|
|
130
|
-
@Album.load(:id=>1).vocalist_pks = [["F1", "L1"], ["F2", "L2"]]
|
|
131
|
-
@db.sqls.must_equal ["UPDATE vocalists SET album_id = 1 WHERE ((first, last) IN (('F1', 'L1'), ('F2', 'L2')))",
|
|
132
|
-
"UPDATE vocalists SET album_id = NULL WHERE ((vocalists.album_id = 1) AND ((first, last) NOT IN (('F1', 'L1'), ('F2', 'L2'))))"]
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it "should set associated right-side cpks correctly for a many_to_many association" do
|
|
136
|
-
@Album.many_to_many :vocalists, :class=>@Vocalist, :join_table=>:albums_vocalists, :left_key=>:album_id, :right_key=>[:first, :last], :delay_pks=>false
|
|
137
|
-
@Album.load(:id=>2).vocalist_pks = [["F1", "L1"], ["F2", "L2"]]
|
|
138
|
-
sqls = @db.sqls
|
|
139
|
-
sqls[0].must_equal "DELETE FROM albums_vocalists WHERE ((album_id = 2) AND ((first, last) NOT IN (('F1', 'L1'), ('F2', 'L2'))))"
|
|
140
|
-
sqls[1].must_equal 'SELECT first, last FROM albums_vocalists WHERE (album_id = 2)'
|
|
141
|
-
match = sqls[3].match(/INSERT INTO albums_vocalists \((.*)\) VALUES \((.*)\)/)
|
|
142
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F1'", "last"=>"'L1'", "album_id"=>"2")
|
|
143
|
-
sqls.length.must_equal 5
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should return correct associated pks for left-side cpks for one_to_many associations" do
|
|
147
|
-
@Vocalist.one_to_many :instruments, :class=>@Instrument, :key=>[:first, :last]
|
|
148
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks.must_equal [1, 2]
|
|
149
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').instrument_pks.must_equal []
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
it "should return correct associated pks for left-side cpks for many_to_many associations" do
|
|
153
|
-
@Vocalist.many_to_many :instruments, :class=>@Instrument, :join_table=>:vocalists_instruments, :left_key=>[:first, :last]
|
|
154
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks.must_equal [1, 2]
|
|
155
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').instrument_pks.must_equal [2, 3]
|
|
156
|
-
@Vocalist.load(:first=>'F3', :last=>'L3').instrument_pks.must_equal []
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "should set associated pks correctly for left-side cpks for a one_to_many association" do
|
|
160
|
-
@Vocalist.one_to_many :instruments, :class=>@Instrument, :key=>[:first, :last], :delay_pks=>false
|
|
161
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks = [1, 2]
|
|
162
|
-
@db.sqls.must_equal ["UPDATE instruments SET first = 'F1', last = 'L1' WHERE (id IN (1, 2))",
|
|
163
|
-
"UPDATE instruments SET first = NULL, last = NULL WHERE ((instruments.first = 'F1') AND (instruments.last = 'L1') AND (id NOT IN (1, 2)))"]
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it "should set associated pks correctly for left-side cpks for a many_to_many association" do
|
|
167
|
-
@Vocalist.many_to_many :instruments, :class=>@Instrument, :join_table=>:vocalists_instruments, :left_key=>[:first, :last], :delay_pks=>false
|
|
168
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').instrument_pks = [1, 2]
|
|
169
|
-
sqls = @db.sqls
|
|
170
|
-
sqls[0].must_equal "DELETE FROM vocalists_instruments WHERE ((first = 'F2') AND (last = 'L2') AND (instrument_id NOT IN (1, 2)))"
|
|
171
|
-
sqls[1].must_equal "SELECT instrument_id FROM vocalists_instruments WHERE ((first = 'F2') AND (last = 'L2'))"
|
|
172
|
-
match = sqls[3].match(/INSERT INTO vocalists_instruments \((.*)\) VALUES \((.*)\)/)
|
|
173
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F2'", "last"=>"'L2'", "instrument_id"=>"1")
|
|
174
|
-
sqls.length.must_equal 5
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it "should return correct right-side associated cpks for left-side cpks for one_to_many associations" do
|
|
178
|
-
@Vocalist.one_to_many :hits, :class=>@Hit, :key=>[:first, :last]
|
|
179
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks.must_equal [[1997, 1], [1997, 2]]
|
|
180
|
-
@db.sqls.must_equal ["SELECT year, week FROM hits WHERE ((hits.first = 'F1') AND (hits.last = 'L1'))"]
|
|
181
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks.must_equal []
|
|
182
|
-
@db.sqls.must_equal ["SELECT year, week FROM hits WHERE ((hits.first = 'F2') AND (hits.last = 'L2'))"]
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "should return correct right-side associated cpks for left-side cpks for many_to_many associations" do
|
|
186
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week]
|
|
187
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks.must_equal [[1997, 1], [1997, 2]]
|
|
188
|
-
@db.sqls.must_equal ["SELECT year, week FROM vocalists_hits WHERE ((first = 'F1') AND (last = 'L1'))"]
|
|
189
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks.must_equal [[1997, 2], [1997, 3]]
|
|
190
|
-
@db.sqls.must_equal ["SELECT year, week FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2'))"]
|
|
191
|
-
@Vocalist.load(:first=>'F3', :last=>'L3').hit_pks.must_equal []
|
|
192
|
-
@db.sqls.must_equal ["SELECT year, week FROM vocalists_hits WHERE ((first = 'F3') AND (last = 'L3'))"]
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
it "should return correct right-side associated cpks for left-side cpks for many_to_many associations when using :association_pks_use_associated_table" do
|
|
196
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week], :association_pks_use_associated_table=>true
|
|
197
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks.must_equal [[1997, 1], [1997, 2]]
|
|
198
|
-
@db.sqls.must_equal ["SELECT hits.year, hits.week FROM hits INNER JOIN vocalists_hits ON ((vocalists_hits.year = hits.year) AND (vocalists_hits.week = hits.week)) WHERE ((vocalists_hits.first = 'F1') AND (vocalists_hits.last = 'L1'))"]
|
|
199
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks.must_equal [[1997, 2], [1997, 3]]
|
|
200
|
-
@db.sqls.must_equal ["SELECT hits.year, hits.week FROM hits INNER JOIN vocalists_hits ON ((vocalists_hits.year = hits.year) AND (vocalists_hits.week = hits.week)) WHERE ((vocalists_hits.first = 'F2') AND (vocalists_hits.last = 'L2'))"]
|
|
201
|
-
@Vocalist.load(:first=>'F3', :last=>'L3').hit_pks.must_equal []
|
|
202
|
-
@db.sqls.must_equal ["SELECT hits.year, hits.week FROM hits INNER JOIN vocalists_hits ON ((vocalists_hits.year = hits.year) AND (vocalists_hits.week = hits.week)) WHERE ((vocalists_hits.first = 'F3') AND (vocalists_hits.last = 'L3'))"]
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
it "should set associated right-side cpks correctly for left-side cpks for a one_to_many association" do
|
|
206
|
-
@Vocalist.one_to_many :hits, :class=>@Hit, :key=>[:first, :last], :order=>:week, :delay_pks=>false
|
|
207
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks = [[1997, 1], [1997, 2]]
|
|
208
|
-
@db.sqls.must_equal ["UPDATE hits SET first = 'F1', last = 'L1' WHERE ((year, week) IN ((1997, 1), (1997, 2)))",
|
|
209
|
-
"UPDATE hits SET first = NULL, last = NULL WHERE ((hits.first = 'F1') AND (hits.last = 'L1') AND ((year, week) NOT IN ((1997, 1), (1997, 2))))"]
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it "should set associated right-side cpks correctly for left-side cpks for a many_to_many association" do
|
|
213
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week], :delay_pks=>false
|
|
214
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks = [[1997, 1], [1997, 2]]
|
|
215
|
-
sqls = @db.sqls
|
|
216
|
-
sqls[0].must_equal "DELETE FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2') AND ((year, week) NOT IN ((1997, 1), (1997, 2))))"
|
|
217
|
-
sqls[1].must_equal "SELECT year, week FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2'))"
|
|
218
|
-
match = sqls[3].match(/INSERT INTO vocalists_hits \((.*)\) VALUES \((.*)\)/)
|
|
219
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F2'", "last"=>"'L2'", "year"=>"1997", "week"=>"1")
|
|
220
|
-
sqls.length.must_equal 5
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
it "should use transactions if the object is configured to use transactions" do
|
|
224
|
-
artist = @Artist.load(:id=>1)
|
|
225
|
-
artist.use_transactions = true
|
|
226
|
-
artist.album_pks = [1, 2]
|
|
227
|
-
@db.sqls.must_equal ["BEGIN",
|
|
228
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
229
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))",
|
|
230
|
-
"COMMIT"]
|
|
231
|
-
|
|
232
|
-
album = @Album.load(:id=>2)
|
|
233
|
-
album.use_transactions = true
|
|
234
|
-
album.tag_pks = [1, 3]
|
|
235
|
-
@db.sqls.must_equal ["BEGIN",
|
|
236
|
-
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))",
|
|
237
|
-
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
238
|
-
'INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)',
|
|
239
|
-
"COMMIT"]
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "should automatically convert keys to numbers if the primary key is an integer for one_to_many associations" do
|
|
243
|
-
@Album.db_schema[:id][:type] = :integer
|
|
244
|
-
@Artist.load(:id=>1).album_pks = %w'1 2'
|
|
245
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
246
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))"]
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
it "should not automatically convert keys if the primary key is not an integer for one_to_many associations" do
|
|
250
|
-
@Album.db_schema[:id][:type] = :string
|
|
251
|
-
@Artist.load(:id=>1).album_pks = %w'1 2'
|
|
252
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN ('1', '2'))",
|
|
253
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN ('1', '2')))"]
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
it "should automatically convert keys to numbers if the primary key is an integer for many_to_many associations" do
|
|
257
|
-
@Tag.db_schema[:id][:type] = :integer
|
|
258
|
-
@Album.load(:id=>2).tag_pks = %w'1 3'
|
|
259
|
-
@db.sqls.must_equal ["DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))",
|
|
260
|
-
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
261
|
-
'BEGIN',
|
|
262
|
-
'INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)',
|
|
263
|
-
'COMMIT']
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
it "should not automatically convert keys to numbers if the primary key is an integer for many_to_many associations" do
|
|
267
|
-
@Tag.db_schema[:id][:type] = :string
|
|
268
|
-
@Album.load(:id=>2).tag_pks = %w'1 3'
|
|
269
|
-
@db.sqls.must_equal [
|
|
270
|
-
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN ('1', '3')))",
|
|
271
|
-
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
272
|
-
'BEGIN',
|
|
273
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, '1')",
|
|
274
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, '3')",
|
|
275
|
-
'COMMIT']
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
it "should automatically convert keys to numbers for appropriate integer primary key for composite key associations" do
|
|
279
|
-
@Hit.db_schema[:year][:type] = :integer
|
|
280
|
-
@Hit.db_schema[:week][:type] = :integer
|
|
281
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week], :delay_pks=>false
|
|
282
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks = [['1997', '1'], ['1997', '2']]
|
|
283
|
-
sqls = @db.sqls
|
|
284
|
-
sqls[0].must_equal "DELETE FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2') AND ((year, week) NOT IN ((1997, 1), (1997, 2))))"
|
|
285
|
-
sqls[1].must_equal "SELECT year, week FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2'))"
|
|
286
|
-
match = sqls[3].match(/INSERT INTO vocalists_hits \((.*)\) VALUES \((.*)\)/)
|
|
287
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F2'", "last"=>"'L2'", "year"=>"1997", "week"=>"1")
|
|
288
|
-
sqls.length.must_equal 5
|
|
289
|
-
|
|
290
|
-
@Vocalist.db_schema[:first][:type] = :integer
|
|
291
|
-
@Vocalist.db_schema[:last][:type] = :integer
|
|
292
|
-
@Album.one_to_many :vocalists, :class=>@Vocalist, :key=>:album_id, :delay_pks=>false
|
|
293
|
-
@Album.load(:id=>1).vocalist_pks = [["11", "11"], ["12", "12"]]
|
|
294
|
-
@db.sqls.must_equal ["UPDATE vocalists SET album_id = 1 WHERE ((first, last) IN ((11, 11), (12, 12)))",
|
|
295
|
-
"UPDATE vocalists SET album_id = NULL WHERE ((vocalists.album_id = 1) AND ((first, last) NOT IN ((11, 11), (12, 12))))"]
|
|
296
|
-
|
|
297
|
-
@Album.many_to_many :vocalists, :class=>@Vocalist, :join_table=>:albums_vocalists, :left_key=>:album_id, :right_key=>[:first, :last], :delay_pks=>false
|
|
298
|
-
@Album.load(:id=>2).vocalist_pks = [["11", "11"], ["12", "12"]]
|
|
299
|
-
sqls = @db.sqls
|
|
300
|
-
sqls[0].must_equal "DELETE FROM albums_vocalists WHERE ((album_id = 2) AND ((first, last) NOT IN ((11, 11), (12, 12))))"
|
|
301
|
-
sqls[1].must_equal 'SELECT first, last FROM albums_vocalists WHERE (album_id = 2)'
|
|
302
|
-
match = sqls[3].match(/INSERT INTO albums_vocalists \((.*)\) VALUES \((.*)\)/)
|
|
303
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"11", "last"=>"11", "album_id"=>"2")
|
|
304
|
-
match = sqls[4].match(/INSERT INTO albums_vocalists \((.*)\) VALUES \((.*)\)/)
|
|
305
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"12", "last"=>"12", "album_id"=>"2")
|
|
306
|
-
sqls.length.must_equal 6
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
it "should handle delaying setting of association pks until after saving for existing objects, if :delay_pks=>:always association option is used" do
|
|
310
|
-
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>:always
|
|
311
|
-
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>:always
|
|
312
|
-
@Album.db_schema[:id][:type] = :integer
|
|
313
|
-
|
|
314
|
-
ar = @Artist.new
|
|
315
|
-
ar.album_pks.must_equal []
|
|
316
|
-
ar.album_pks = ["1","2","3"]
|
|
317
|
-
ar.album_pks.must_equal [1,2,3]
|
|
318
|
-
@db.sqls.must_equal []
|
|
319
|
-
|
|
320
|
-
ar.save
|
|
321
|
-
@db.sqls.must_equal [
|
|
322
|
-
"INSERT INTO artists DEFAULT VALUES",
|
|
323
|
-
"SELECT * FROM artists WHERE (id = 1) LIMIT 1",
|
|
324
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2, 3))",
|
|
325
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2, 3)))",
|
|
326
|
-
]
|
|
327
|
-
|
|
328
|
-
al = @Album.new
|
|
329
|
-
al.tag_pks.must_equal []
|
|
330
|
-
al.tag_pks = [1,2]
|
|
331
|
-
al.tag_pks.must_equal [1, 2]
|
|
332
|
-
@db.sqls.must_equal []
|
|
333
|
-
|
|
334
|
-
al.save
|
|
335
|
-
@db.sqls.must_equal [
|
|
336
|
-
"INSERT INTO albums DEFAULT VALUES",
|
|
337
|
-
"SELECT * FROM albums WHERE (id = 2) LIMIT 1",
|
|
338
|
-
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 2)))",
|
|
339
|
-
"SELECT tag_id FROM albums_tags WHERE (album_id = 2)",
|
|
340
|
-
"BEGIN",
|
|
341
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)",
|
|
342
|
-
"COMMIT"
|
|
343
|
-
]
|
|
344
|
-
ar = @Artist.load(:id=>1)
|
|
345
|
-
ar.album_pks.must_equal [1,2,3]
|
|
346
|
-
@db.sqls
|
|
347
|
-
ar.album_pks = ["2","4"]
|
|
348
|
-
ar.album_pks.must_equal [2,4]
|
|
349
|
-
@db.sqls.must_equal []
|
|
350
|
-
|
|
351
|
-
ar.save_changes
|
|
352
|
-
@db.sqls.must_equal [
|
|
353
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (2, 4))",
|
|
354
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (2, 4)))"
|
|
355
|
-
]
|
|
356
|
-
|
|
357
|
-
ar.album_pks = []
|
|
358
|
-
@db.sqls.must_equal []
|
|
359
|
-
|
|
360
|
-
ar.save_changes
|
|
361
|
-
@db.sqls.must_equal [
|
|
362
|
-
"UPDATE albums SET artist_id = NULL WHERE (artist_id = 1)"
|
|
363
|
-
]
|
|
364
|
-
|
|
365
|
-
al = @Album.load(:id=>1)
|
|
366
|
-
al.tag_pks.must_equal [1,2]
|
|
367
|
-
@db.sqls
|
|
368
|
-
al.tag_pks = [2,3]
|
|
369
|
-
al.tag_pks.must_equal [2,3]
|
|
370
|
-
@db.sqls.must_equal []
|
|
371
|
-
|
|
372
|
-
al.save_changes
|
|
373
|
-
@db.sqls.must_equal [
|
|
374
|
-
"DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id NOT IN (2, 3)))",
|
|
375
|
-
"SELECT tag_id FROM albums_tags WHERE (album_id = 1)",
|
|
376
|
-
"BEGIN",
|
|
377
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3)",
|
|
378
|
-
"COMMIT",
|
|
379
|
-
]
|
|
380
|
-
|
|
381
|
-
al.tag_pks = []
|
|
382
|
-
@db.sqls.must_equal []
|
|
383
|
-
|
|
384
|
-
al.save_changes
|
|
385
|
-
@db.sqls.must_equal [
|
|
386
|
-
"DELETE FROM albums_tags WHERE (album_id = 1)",
|
|
387
|
-
]
|
|
388
|
-
end
|
|
389
|
-
|
|
390
|
-
it "should clear delayed associated pks if refreshing, if :delay plugin option is used" do
|
|
391
|
-
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>:always
|
|
392
|
-
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>:always
|
|
393
|
-
|
|
394
|
-
ar = @Artist.load(:id=>1)
|
|
395
|
-
ar.album_pks.must_equal [1,2,3]
|
|
396
|
-
ar.album_pks = [2,4]
|
|
397
|
-
ar.album_pks.must_equal [2,4]
|
|
398
|
-
ar.refresh
|
|
399
|
-
ar.album_pks.must_equal [1,2,3]
|
|
400
|
-
end
|
|
401
|
-
|
|
402
|
-
it "should remove all values if nil given to setter and :association_pks_nil=>:remove" do
|
|
403
|
-
@Artist.one_to_many :albums, :clone=>:albums, :association_pks_nil=>:remove
|
|
404
|
-
|
|
405
|
-
ar = @Artist.load(:id=>1)
|
|
406
|
-
ar.album_pks = nil
|
|
407
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = NULL WHERE (artist_id = 1)"]
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
it "should take no action if nil given to setter and :association_pks_nil=>:ignore" do
|
|
411
|
-
@Artist.one_to_many :albums, :clone=>:albums, :association_pks_nil=>:ignore
|
|
412
|
-
|
|
413
|
-
ar = @Artist.load(:id=>1)
|
|
414
|
-
ar = @Artist.new
|
|
415
|
-
ar.album_pks = nil
|
|
416
|
-
@db.sqls.must_equal []
|
|
417
|
-
end
|
|
418
|
-
|
|
419
|
-
it "should raise error if nil given to setter by default" do
|
|
420
|
-
ar = @Artist.load(:id=>1)
|
|
421
|
-
proc{ar.album_pks = nil}.must_raise Sequel::Error
|
|
422
|
-
end
|
|
423
|
-
end
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::AssociationProxies" do
|
|
4
|
-
before do
|
|
5
|
-
class ::Tag < Sequel::Model
|
|
6
|
-
end
|
|
7
|
-
class ::Item < Sequel::Model
|
|
8
|
-
plugin :association_proxies
|
|
9
|
-
many_to_many :tags, :extend=>Module.new{def size; count end}
|
|
10
|
-
end
|
|
11
|
-
@i = Item.load(:id=>1)
|
|
12
|
-
@t = @i.tags
|
|
13
|
-
Item.db.reset
|
|
14
|
-
end
|
|
15
|
-
after do
|
|
16
|
-
Object.send(:remove_const, :Tag)
|
|
17
|
-
Object.send(:remove_const, :Item)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should send method calls to the associated object array if sent an array method" do
|
|
21
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
22
|
-
@t.select{|x| false}.must_equal []
|
|
23
|
-
@i.associations.has_key?(:tags).must_equal true
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
if RUBY_VERSION < '2.6'
|
|
27
|
-
deprecated "should issue deprecation warning when using filter on association proxy on ruby <2.6" do
|
|
28
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
29
|
-
@t.filter{|x| false}.sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND 'f')"
|
|
30
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
31
|
-
end
|
|
32
|
-
else
|
|
33
|
-
it "should treat filter on association proxy as array method on ruby 2.6+" do
|
|
34
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
35
|
-
@t.filter{|x| false}.must_equal []
|
|
36
|
-
@i.associations.has_key?(:tags).must_equal true
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should send method calls to the association dataset if sent a non-array method" do
|
|
41
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
42
|
-
@t.where(:a=>1).sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
|
|
43
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should accept block to plugin to specify which methods to proxy to dataset" do
|
|
47
|
-
Item.plugin :association_proxies do |opts|
|
|
48
|
-
opts[:method] == :where || opts[:arguments].first.is_a?(Sequel::LiteralString) || opts[:block]
|
|
49
|
-
end
|
|
50
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
51
|
-
@t.where(:a=>1).sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
|
|
52
|
-
@t.where(Sequel.lit('a = 1')).sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
|
|
53
|
-
@t.where{{:a=>1}}.sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
|
|
54
|
-
|
|
55
|
-
@i.associations.has_key?(:tags).must_equal false
|
|
56
|
-
Item.plugin :association_proxies do |opts|
|
|
57
|
-
proxy_arg = opts[:proxy_argument]
|
|
58
|
-
proxy_block = opts[:proxy_block]
|
|
59
|
-
cached = opts[:instance].associations[opts[:reflection][:name]]
|
|
60
|
-
is_size = opts[:method] == :size
|
|
61
|
-
is_size && !cached && !proxy_arg[:reload] && !proxy_block
|
|
62
|
-
end
|
|
63
|
-
@t.size.must_equal 1
|
|
64
|
-
Item.db.sqls.must_equal ["SELECT count(*) AS count FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE (items_tags.item_id = 1) LIMIT 1"]
|
|
65
|
-
@i.tags{|ds| ds}.size.must_equal 1
|
|
66
|
-
Item.db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE (items_tags.item_id = 1)"]
|
|
67
|
-
@i.tags(:reload=>true).size.must_equal 1
|
|
68
|
-
Item.db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE (items_tags.item_id = 1)"]
|
|
69
|
-
@t.size.must_equal 1
|
|
70
|
-
Item.db.sqls.must_equal []
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should reload the cached association if sent an array method and the reload flag was given" do
|
|
74
|
-
@t.select{|x| false}.must_equal []
|
|
75
|
-
Item.db.sqls.length.must_equal 1
|
|
76
|
-
@t.select{|x| false}.must_equal []
|
|
77
|
-
Item.db.sqls.length.must_equal 0
|
|
78
|
-
@i.tags(:reload=>true).select{|x| false}.must_equal []
|
|
79
|
-
Item.db.sqls.length.must_equal 1
|
|
80
|
-
@t.where(:a=>1).sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
|
|
81
|
-
Item.db.sqls.length.must_equal 0
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should not return a proxy object for associations that do not return an array" do
|
|
85
|
-
Item.many_to_one :tag
|
|
86
|
-
proc{@i.tag.where(:a=>1)}.must_raise(NoMethodError)
|
|
87
|
-
|
|
88
|
-
Tag.one_to_one :item
|
|
89
|
-
proc{Tag.load(:id=>1, :item_id=>2).item.where(:a=>1)}.must_raise(NoMethodError)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should work correctly in subclasses" do
|
|
93
|
-
i = Class.new(Item).load(:id=>1)
|
|
94
|
-
i.associations.has_key?(:tags).must_equal false
|
|
95
|
-
i.tags.select{|x| false}.must_equal []
|
|
96
|
-
i.associations.has_key?(:tags).must_equal true
|
|
97
|
-
i.tags.where(:a=>1).sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
end
|