sequel 5.29.0 → 5.34.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 +70 -1922
- data/README.rdoc +1 -1
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +3 -3
- data/doc/code_order.rdoc +12 -2
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/postgresql.rdoc +71 -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/testing.rdoc +1 -1
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +5 -5
- data/lib/sequel/adapters/shared/mysql.rb +9 -9
- data/lib/sequel/adapters/shared/oracle.rb +16 -16
- data/lib/sequel/adapters/shared/postgres.rb +169 -14
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +32 -5
- 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 +318 -314
- data/lib/sequel/database/connecting.rb +1 -1
- data/lib/sequel/database/misc.rb +16 -10
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +0 -1
- data/lib/sequel/database/schema_methods.rb +15 -16
- data/lib/sequel/database/transactions.rb +12 -13
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/query.rb +4 -3
- data/lib/sequel/deprecated.rb +2 -0
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +1 -1
- data/lib/sequel/extensions/pg_enum.rb +5 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_inet.rb +13 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -0
- data/lib/sequel/extensions/pg_range.rb +2 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/schema_dumper.rb +10 -4
- data/lib/sequel/extensions/server_block.rb +3 -3
- data/lib/sequel/model.rb +2 -0
- data/lib/sequel/model/associations.rb +30 -18
- data/lib/sequel/model/base.rb +64 -55
- data/lib/sequel/model/plugins.rb +3 -3
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
- data/lib/sequel/plugins/association_pks.rb +57 -16
- data/lib/sequel/plugins/association_proxies.rb +2 -0
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
- data/lib/sequel/plugins/dirty.rb +13 -13
- data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
- data/lib/sequel/plugins/json_serializer.rb +3 -7
- data/lib/sequel/plugins/rcte_tree.rb +2 -2
- data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/timezones.rb +6 -4
- data/lib/sequel/version.rb +1 -1
- metadata +17 -368
- 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 -828
- data/spec/adapters/mysql_spec.rb +0 -1060
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4476
- 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 -2915
- data/spec/core/dataset_spec.rb +0 -5544
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1498
- 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 -1844
- 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/any_not_empty_spec.rb +0 -23
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
- 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 -222
- 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/empty_failure_backtraces_spec.rb +0 -60
- 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/exclude_or_null_spec.rb +0 -15
- 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_conflict_spec.rb +0 -103
- 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 -346
- 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 -218
- data/spec/extensions/nested_attributes_spec.rb +0 -815
- 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 -209
- 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 -356
- data/spec/extensions/pg_json_spec.rb +0 -451
- 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 -600
- 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 -387
- 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 -135
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -197
- 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 -70
- 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_cache_spec.rb +0 -35
- 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 -2037
- 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 -2423
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -903
- data/spec/integration/spec_helper.rb +0 -71
- 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 -5
- data/spec/spec_config.rb +0 -12
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "split_array_nil extension" do
|
|
4
|
-
before do
|
|
5
|
-
@ds = Sequel.mock[:table].extension(:split_array_nil)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should split IN with nil in array into separate OR IS NULL clause" do
|
|
9
|
-
@ds.filter(:a=>[1, nil]).sql.must_equal "SELECT * FROM table WHERE ((a IN (1)) OR (a IS NULL))"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should split NOT IN with nil in array into separate AND IS NOT NULL clause" do
|
|
13
|
-
@ds.exclude(:a=>[1, nil]).sql.must_equal "SELECT * FROM table WHERE ((a NOT IN (1)) AND (a IS NOT NULL))"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should not affect other IN/NOT in clauses" do
|
|
17
|
-
@ds.filter(:a=>[1, 2]).sql.must_equal "SELECT * FROM table WHERE (a IN (1, 2))"
|
|
18
|
-
@ds.exclude(:a=>[1, 2]).sql.must_equal "SELECT * FROM table WHERE (a NOT IN (1, 2))"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should not affect other types of filters clauses" do
|
|
22
|
-
@ds.filter(:a=>1).sql.must_equal "SELECT * FROM table WHERE (a = 1)"
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::SplitValues" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:a))
|
|
6
|
-
@c.columns :id, :x
|
|
7
|
-
@c.plugin :split_values
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "stores non-columns in a separate hash" do
|
|
11
|
-
@c.dataset = @c.dataset.with_fetch(:id=>1, :x=>2, :y=>3)
|
|
12
|
-
o = @c.first
|
|
13
|
-
@c.db.reset
|
|
14
|
-
|
|
15
|
-
o.must_equal @c.load(:id=>1, :x=>2)
|
|
16
|
-
o[:id].must_equal 1
|
|
17
|
-
o[:x].must_equal 2
|
|
18
|
-
o[:y].must_equal 3
|
|
19
|
-
{@c.load(:id=>1, :x=>2)=>4}[o].must_equal 4
|
|
20
|
-
o.values.must_equal(:id=>1, :x=>2)
|
|
21
|
-
|
|
22
|
-
o.save
|
|
23
|
-
@c.db.sqls.must_equal ["UPDATE a SET x = 2 WHERE (id = 1)"]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "handles false values" do
|
|
27
|
-
@c.dataset = @c.dataset.with_fetch(:id=>1, :x=>false, :y=>3)
|
|
28
|
-
o = @c.first
|
|
29
|
-
@c.db.reset
|
|
30
|
-
|
|
31
|
-
o.must_equal @c.load(:id=>1, :x=>false)
|
|
32
|
-
o[:id].must_equal 1
|
|
33
|
-
o[:x].must_equal false
|
|
34
|
-
o[:y].must_equal 3
|
|
35
|
-
{@c.load(:id=>1, :x=>false)=>4}[o].must_equal 4
|
|
36
|
-
o.values.must_equal(:id=>1, :x=>false)
|
|
37
|
-
|
|
38
|
-
o.save
|
|
39
|
-
@c.db.sqls.must_equal ["UPDATE a SET x = 'f' WHERE (id = 1)"]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "handles nil values" do
|
|
43
|
-
@c.dataset = @c.dataset.with_fetch(:id=>1, :x=>nil, :y=>3)
|
|
44
|
-
o = @c.first
|
|
45
|
-
@c.db.reset
|
|
46
|
-
|
|
47
|
-
o.must_equal @c.load(:id=>1, :x=>nil)
|
|
48
|
-
o[:id].must_equal 1
|
|
49
|
-
o[:x].must_be_nil
|
|
50
|
-
o[:y].must_equal 3
|
|
51
|
-
{@c.load(:id=>1, :x=>nil)=>4}[o].must_equal 4
|
|
52
|
-
o.values.must_equal(:id=>1, :x=>nil)
|
|
53
|
-
|
|
54
|
-
o.save
|
|
55
|
-
@c.db.sqls.must_equal ["UPDATE a SET x = NULL WHERE (id = 1)"]
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "sql_comments extension" do
|
|
4
|
-
before do
|
|
5
|
-
@ds = Sequel.mock[:t].extension(:sql_comments)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should not add a comment if one is not set for the dataset" do
|
|
9
|
-
@ds.select_sql.must_equal 'SELECT * FROM t'
|
|
10
|
-
@ds.insert_sql(:a=>1).must_equal 'INSERT INTO t (a) VALUES (1)'
|
|
11
|
-
@ds.delete_sql.must_equal 'DELETE FROM t'
|
|
12
|
-
@ds.update_sql(:a=>1).must_equal 'UPDATE t SET a = 1'
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should add a comment if one is set for the dataset" do
|
|
16
|
-
ds = @ds.comment("Some\nComment\r\n Here")
|
|
17
|
-
ds.select_sql.must_equal "SELECT * FROM t -- Some Comment Here\n"
|
|
18
|
-
ds.insert_sql(:a=>1).must_equal "INSERT INTO t (a) VALUES (1) -- Some Comment Here\n"
|
|
19
|
-
ds.delete_sql.must_equal "DELETE FROM t -- Some Comment Here\n"
|
|
20
|
-
ds.update_sql(:a=>1).must_equal "UPDATE t SET a = 1 -- Some Comment Here\n"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should handle comments used in nested datasets" do
|
|
24
|
-
ds = @ds.comment("Some\nComment\r\n Here")
|
|
25
|
-
ds.where(:id=>ds).select_sql.must_equal "SELECT * FROM t WHERE (id IN (SELECT * FROM t -- Some Comment Here\n)) -- Some Comment Here\n"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should handle frozen SQL strings" do
|
|
29
|
-
@ds = Sequel.mock[:t].with_extend{def select_sql; super.freeze; end}.extension(:sql_comments)
|
|
30
|
-
ds = @ds.comment("Some\nComment\r\n Here")
|
|
31
|
-
ds.select_sql.must_equal "SELECT * FROM t -- Some Comment Here\n"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :sql_expr
|
|
4
|
-
|
|
5
|
-
describe "Sequel sql_expr extension" do
|
|
6
|
-
before do
|
|
7
|
-
@ds = Sequel.mock.dataset
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "Object#sql_expr should wrap the object in a GenericComplexExpression" do
|
|
11
|
-
o = Object.new
|
|
12
|
-
def o.sql_literal(ds) 'foo' end
|
|
13
|
-
s = o.sql_expr
|
|
14
|
-
@ds.literal(s).must_equal "foo"
|
|
15
|
-
@ds.literal(s+1).must_equal "(foo + 1)"
|
|
16
|
-
@ds.literal(s & true).must_equal "(foo AND 't')"
|
|
17
|
-
@ds.literal(s < 1).must_equal "(foo < 1)"
|
|
18
|
-
@ds.literal(s.sql_subscript(1)).must_equal "(foo)[1]"
|
|
19
|
-
@ds.literal(s.like('a')).must_equal "(foo LIKE 'a' ESCAPE '\\')"
|
|
20
|
-
@ds.literal(s.as(:a)).must_equal "foo AS a"
|
|
21
|
-
@ds.literal(s.cast(Integer)).must_equal "CAST(foo AS integer)"
|
|
22
|
-
@ds.literal(s.desc).must_equal "foo DESC"
|
|
23
|
-
@ds.literal(s.sql_string + '1').must_equal "(foo || '1')"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "Numeric#sql_expr should wrap the object in a NumericExpression" do
|
|
27
|
-
[1, 2.0, 2^70, BigDecimal('1.0')].each do |o|
|
|
28
|
-
@ds.literal(o.sql_expr).must_equal @ds.literal(o)
|
|
29
|
-
@ds.literal(o.sql_expr + 1).must_equal "(#{@ds.literal(o)} + 1)"
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "String#sql_expr should wrap the object in a StringExpression" do
|
|
34
|
-
@ds.literal("".sql_expr).must_equal "''"
|
|
35
|
-
@ds.literal("".sql_expr + :a).must_equal "('' || a)"
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "NilClass, TrueClass, and FalseClass#sql_expr should wrap the object in a BooleanExpression" do
|
|
39
|
-
[nil, true, false].each do |o|
|
|
40
|
-
@ds.literal(o.sql_expr).must_equal @ds.literal(o)
|
|
41
|
-
@ds.literal(o.sql_expr & :a).must_equal "(#{@ds.literal(o)} AND a)"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "Proc#sql_expr should should treat the object as a virtual row block" do
|
|
46
|
-
@ds.literal(proc{a}.sql_expr).must_equal "a"
|
|
47
|
-
@ds.literal(proc{a(b)}.sql_expr).must_equal "a(b)"
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "Proc#sql_expr should should wrap the object in a GenericComplexExpression if the object is not already an expression" do
|
|
51
|
-
@ds.literal(proc{1}.sql_expr).must_equal "1"
|
|
52
|
-
@ds.literal(proc{1}.sql_expr + 2).must_equal "(1 + 2)"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "Proc#sql_expr should should convert a hash or array of two element arrays to a BooleanExpression" do
|
|
56
|
-
@ds.literal(proc{{a=>b}}.sql_expr).must_equal "(a = b)"
|
|
57
|
-
@ds.literal(proc{[[a, b]]}.sql_expr & :a).must_equal "((a = b) AND a)"
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "static_cache_cache plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock
|
|
6
|
-
@db.fetch = [{:id=>1, :name=>'A'}, {:id=>2, :name=>'B'}]
|
|
7
|
-
@c = Class.new(Sequel::Model(@db[:t]))
|
|
8
|
-
def @c.name; 'Foo' end
|
|
9
|
-
@c.columns :id, :name
|
|
10
|
-
@file = "spec/files/static_cache_cache-spec-#{$$}.cache"
|
|
11
|
-
end
|
|
12
|
-
after do
|
|
13
|
-
File.delete(@file) if File.file?(@file)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should allow dumping and loading static cache rows from a cache file" do
|
|
17
|
-
@c.plugin :static_cache_cache, @file
|
|
18
|
-
@db.sqls
|
|
19
|
-
@c.plugin :static_cache
|
|
20
|
-
@db.sqls.must_equal ['SELECT * FROM t']
|
|
21
|
-
@c.all.must_equal [@c.load(:id=>1, :name=>'A'), @c.load(:id=>2, :name=>'B')]
|
|
22
|
-
|
|
23
|
-
@c.dump_static_cache_cache
|
|
24
|
-
|
|
25
|
-
@db.fetch = []
|
|
26
|
-
c = Class.new(Sequel::Model(@db[:t]))
|
|
27
|
-
def c.name; 'Foo' end
|
|
28
|
-
c.columns :id, :name
|
|
29
|
-
@c.plugin :static_cache_cache, @file
|
|
30
|
-
@db.sqls
|
|
31
|
-
@c.plugin :static_cache
|
|
32
|
-
@db.sqls.must_be_empty
|
|
33
|
-
@c.all.must_equal [@c.load(:id=>1, :name=>'A'), @c.load(:id=>2, :name=>'B')]
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::StaticCache" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock
|
|
6
|
-
@db.fetch = [{:id=>1}, {:id=>2}]
|
|
7
|
-
@db.numrows = 1
|
|
8
|
-
@c = Class.new(Sequel::Model(@db[:t]))
|
|
9
|
-
@c.columns :id, :name
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should not attempt to validate objects" do
|
|
13
|
-
@c.send(:define_method, :validate){errors.add(:name, 'bad')}
|
|
14
|
-
@c.plugin(:static_cache)
|
|
15
|
-
@c.map{|o| o.valid?}.must_equal [true, true]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
static_cache_specs = shared_description do
|
|
19
|
-
it "should use a ruby hash as a cache of all model instances" do
|
|
20
|
-
@c.cache.must_equal(1=>@c.load(:id=>1), 2=>@c.load(:id=>2))
|
|
21
|
-
@c.cache[1].must_be_same_as(@c1)
|
|
22
|
-
@c.cache[2].must_be_same_as(@c2)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should make .[] method with primary key use the cache" do
|
|
26
|
-
@c[1].must_equal @c1
|
|
27
|
-
@c[2].must_equal @c2
|
|
28
|
-
@c[3].must_be_nil
|
|
29
|
-
@c[[1, 2]].must_be_nil
|
|
30
|
-
@c[nil].must_be_nil
|
|
31
|
-
@c[].must_be_nil
|
|
32
|
-
@db.sqls.must_equal []
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should have .[] with a hash not use the cache" do
|
|
36
|
-
@db.fetch = {:id=>2}
|
|
37
|
-
@c[:id=>2].must_equal @c2
|
|
38
|
-
@db.sqls.must_equal ['SELECT * FROM t WHERE (id = 2) LIMIT 1']
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "should support cache_get_pk" do
|
|
42
|
-
@c.cache_get_pk(1).must_equal @c1
|
|
43
|
-
@c.cache_get_pk(2).must_equal @c2
|
|
44
|
-
@c.cache_get_pk(3).must_be_nil
|
|
45
|
-
@db.sqls.must_equal []
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should have first just returns instances without sending a query" do
|
|
49
|
-
@c.first.must_equal @c1
|
|
50
|
-
@c.first(2).must_equal [@c1, @c2]
|
|
51
|
-
@c.first(0).must_equal []
|
|
52
|
-
@db.sqls.must_equal []
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should have first just returns instances with sending a query" do
|
|
56
|
-
@db.fetch = lambda do |s|
|
|
57
|
-
case s
|
|
58
|
-
when /id = '?(\d+)'?/
|
|
59
|
-
id = $1.to_i
|
|
60
|
-
id <= 2 ? { id: id } : nil
|
|
61
|
-
when /id >= '?(\d+)'?/
|
|
62
|
-
id = $1.to_i
|
|
63
|
-
id <= 2 ? (id..2).map { |i| { id: i } } : []
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
@c.first(id: 2).must_equal @c2
|
|
68
|
-
@c.first(id: '2').must_equal @c2
|
|
69
|
-
@c.first(id: 3).must_be_nil
|
|
70
|
-
@c.first { id >= 2 }.must_equal @c2
|
|
71
|
-
@c.first(2) { id >= 1 }.must_equal [@c1, @c2]
|
|
72
|
-
@c.first(Sequel.lit('id = ?', 2)).must_equal @c2
|
|
73
|
-
@db.sqls.must_equal [
|
|
74
|
-
"SELECT * FROM t WHERE (id = 2) LIMIT 1",
|
|
75
|
-
"SELECT * FROM t WHERE (id = '2') LIMIT 1",
|
|
76
|
-
"SELECT * FROM t WHERE (id = 3) LIMIT 1",
|
|
77
|
-
"SELECT * FROM t WHERE (id >= 2) LIMIT 1",
|
|
78
|
-
"SELECT * FROM t WHERE (id >= 1) LIMIT 2",
|
|
79
|
-
"SELECT * FROM t WHERE (id = 2) LIMIT 1"
|
|
80
|
-
]
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should have each just iterate over the hash's values without sending a query" do
|
|
84
|
-
a = []
|
|
85
|
-
@c.each{|o| a << o}
|
|
86
|
-
a = a.sort_by{|o| o.id}
|
|
87
|
-
a.first.must_equal @c1
|
|
88
|
-
a.last.must_equal @c2
|
|
89
|
-
@db.sqls.must_equal []
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should have map just iterate over the hash's values without sending a query if no argument is given" do
|
|
93
|
-
@c.map{|v| v.id}.sort.must_equal [1, 2]
|
|
94
|
-
@db.sqls.must_equal []
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should have count with no argument or block not issue a query" do
|
|
98
|
-
@c.count.must_equal 2
|
|
99
|
-
@db.sqls.must_equal []
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should have count with argument or block not issue a query" do
|
|
103
|
-
@db.fetch = [[{:count=>1}], [{:count=>2}]]
|
|
104
|
-
@c.count(:a).must_equal 1
|
|
105
|
-
@c.count{b}.must_equal 2
|
|
106
|
-
@db.sqls.must_equal ["SELECT count(a) AS count FROM t LIMIT 1", "SELECT count(b) AS count FROM t LIMIT 1"]
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "should have map not send a query if given an argument" do
|
|
110
|
-
@c.map(:id).sort.must_equal [1, 2]
|
|
111
|
-
@db.sqls.must_equal []
|
|
112
|
-
@c.map([:id,:id]).sort.must_equal [[1,1], [2,2]]
|
|
113
|
-
@db.sqls.must_equal []
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "should have map without a block or argument not raise an exception or issue a query" do
|
|
117
|
-
@c.map.to_a.must_equal @c.all
|
|
118
|
-
@db.sqls.must_equal []
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should have map without a block not return a frozen object" do
|
|
122
|
-
@c.map.frozen?.must_equal false
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it "should have map without a block return an Enumerator" do
|
|
126
|
-
@c.map.class.must_equal Enumerator
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "should have map with a block and argument raise" do
|
|
130
|
-
proc{@c.map(:id){}}.must_raise(Sequel::Error)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "should have other enumerable methods work without sending a query" do
|
|
134
|
-
a = @c.sort_by{|o| o.id}
|
|
135
|
-
a.first.must_equal @c1
|
|
136
|
-
a.last.must_equal @c2
|
|
137
|
-
@db.sqls.must_equal []
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
it "should have all return all objects" do
|
|
141
|
-
a = @c.all.sort_by{|o| o.id}
|
|
142
|
-
a.first.must_equal @c1
|
|
143
|
-
a.last.must_equal @c2
|
|
144
|
-
@db.sqls.must_equal []
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "should have all not return a frozen object" do
|
|
148
|
-
@c.all.frozen?.must_equal false
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it "should have all return things in dataset order" do
|
|
152
|
-
@c.all.must_equal [@c1, @c2]
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
it "should have all receiving block" do
|
|
156
|
-
a = []
|
|
157
|
-
b = @c.all { |o| a << o }
|
|
158
|
-
a.must_equal [@c1, @c2]
|
|
159
|
-
a.must_equal b
|
|
160
|
-
@db.sqls.must_equal []
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should have as_hash/to_hash without arguments run without a query" do
|
|
164
|
-
a = @c.to_hash
|
|
165
|
-
a.must_equal(1=>@c1, 2=>@c2)
|
|
166
|
-
a[1].must_equal @c1
|
|
167
|
-
a[2].must_equal @c2
|
|
168
|
-
|
|
169
|
-
a = @c.as_hash
|
|
170
|
-
a.must_equal(1=>@c1, 2=>@c2)
|
|
171
|
-
a[1].must_equal @c1
|
|
172
|
-
a[2].must_equal @c2
|
|
173
|
-
@db.sqls.must_equal []
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "should have as_hash handle :hash option" do
|
|
177
|
-
h = {}
|
|
178
|
-
a = @c.as_hash(nil, nil, :hash=>h)
|
|
179
|
-
a.must_be_same_as h
|
|
180
|
-
a.must_equal(1=>@c1, 2=>@c2)
|
|
181
|
-
a[1].must_equal @c1
|
|
182
|
-
a[2].must_equal @c2
|
|
183
|
-
|
|
184
|
-
h = {}
|
|
185
|
-
a = @c.as_hash(:id, nil, :hash=>h)
|
|
186
|
-
a.must_be_same_as h
|
|
187
|
-
a.must_equal(1=>@c1, 2=>@c2)
|
|
188
|
-
a[1].must_equal @c1
|
|
189
|
-
a[2].must_equal @c2
|
|
190
|
-
|
|
191
|
-
@db.sqls.must_equal []
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
it "should have as_hash with arguments return results without a query" do
|
|
195
|
-
a = @c.as_hash(:id)
|
|
196
|
-
a.must_equal(1=>@c1, 2=>@c2)
|
|
197
|
-
a[1].must_equal @c1
|
|
198
|
-
a[2].must_equal @c2
|
|
199
|
-
|
|
200
|
-
a = @c.as_hash([:id])
|
|
201
|
-
a.must_equal([1]=>@c1, [2]=>@c2)
|
|
202
|
-
a[[1]].must_equal @c1
|
|
203
|
-
a[[2]].must_equal @c2
|
|
204
|
-
|
|
205
|
-
@c.as_hash(:id, :id).must_equal(1=>1, 2=>2)
|
|
206
|
-
@c.as_hash([:id], :id).must_equal([1]=>1, [2]=>2)
|
|
207
|
-
@c.as_hash(:id, [:id]).must_equal(1=>[1], 2=>[2])
|
|
208
|
-
@c.as_hash([:id], [:id]).must_equal([1]=>[1], [2]=>[2])
|
|
209
|
-
|
|
210
|
-
@db.sqls.must_equal []
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "should have as_hash not return a frozen object" do
|
|
214
|
-
@c.as_hash.frozen?.must_equal false
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
it "should have to_hash_groups without arguments return the cached objects without a query" do
|
|
218
|
-
a = @c.to_hash_groups(:id)
|
|
219
|
-
a.must_equal(1=>[@c1], 2=>[@c2])
|
|
220
|
-
a[1].first.must_equal @c1
|
|
221
|
-
a[2].first.must_equal @c2
|
|
222
|
-
|
|
223
|
-
a = @c.to_hash_groups([:id])
|
|
224
|
-
a.must_equal([1]=>[@c1], [2]=>[@c2])
|
|
225
|
-
a[[1]].first.must_equal @c1
|
|
226
|
-
a[[2]].first.must_equal @c2
|
|
227
|
-
|
|
228
|
-
@c.to_hash_groups(:id, :id).must_equal(1=>[1], 2=>[2])
|
|
229
|
-
@c.to_hash_groups([:id], :id).must_equal([1]=>[1], [2]=>[2])
|
|
230
|
-
@c.to_hash_groups(:id, [:id]).must_equal(1=>[[1]], 2=>[[2]])
|
|
231
|
-
@c.to_hash_groups([:id], [:id]).must_equal([1]=>[[1]], [2]=>[[2]])
|
|
232
|
-
|
|
233
|
-
@db.sqls.must_equal []
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
it "should have to_hash_groups handle :hash option" do
|
|
237
|
-
h = {}
|
|
238
|
-
a = @c.to_hash_groups(:id, nil, :hash=>h)
|
|
239
|
-
a.must_be_same_as h
|
|
240
|
-
a.must_equal(1=>[@c1], 2=>[@c2])
|
|
241
|
-
a[1].first.must_equal @c1
|
|
242
|
-
a[2].first.must_equal @c2
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
it "should have as_hash_groups without arguments return the cached objects without a query" do
|
|
246
|
-
a = @c.to_hash_groups(:id)
|
|
247
|
-
a.must_equal(1=>[@c1], 2=>[@c2])
|
|
248
|
-
a[1].first.must_equal @c1
|
|
249
|
-
a[2].first.must_equal @c2
|
|
250
|
-
|
|
251
|
-
a = @c.to_hash_groups([:id])
|
|
252
|
-
a.must_equal([1]=>[@c1], [2]=>[@c2])
|
|
253
|
-
a[[1]].first.must_equal @c1
|
|
254
|
-
a[[2]].first.must_equal @c2
|
|
255
|
-
|
|
256
|
-
@c.to_hash_groups(:id, :id).must_equal(1=>[1], 2=>[2])
|
|
257
|
-
@c.to_hash_groups([:id], :id).must_equal([1]=>[1], [2]=>[2])
|
|
258
|
-
@c.to_hash_groups(:id, [:id]).must_equal(1=>[[1]], 2=>[[2]])
|
|
259
|
-
@c.to_hash_groups([:id], [:id]).must_equal([1]=>[[1]], [2]=>[[2]])
|
|
260
|
-
|
|
261
|
-
@db.sqls.must_equal []
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
it "subclasses should work correctly" do
|
|
265
|
-
c = Class.new(@c)
|
|
266
|
-
c.all.must_equal [c.load(:id=>1), c.load(:id=>2)]
|
|
267
|
-
c.as_hash.must_equal(1=>c.load(:id=>1), 2=>c.load(:id=>2))
|
|
268
|
-
@db.sqls.must_equal ['SELECT * FROM t']
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
it "set_dataset should work correctly" do
|
|
272
|
-
ds = @c.dataset.from(:t2).columns(:id).with_fetch(:id=>3)
|
|
273
|
-
@c.dataset = ds
|
|
274
|
-
@c.all.must_equal [@c.load(:id=>3)]
|
|
275
|
-
@c.as_hash.must_equal(3=>@c.load(:id=>3))
|
|
276
|
-
@c.as_hash[3].must_equal @c.all.first
|
|
277
|
-
@db.sqls.must_equal ['SELECT * FROM t2']
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
it "should have load_cache" do
|
|
281
|
-
a = @c.all.sort_by{|o| o.id}
|
|
282
|
-
a.first.must_equal @c1
|
|
283
|
-
a.last.must_equal @c2
|
|
284
|
-
@db.sqls.must_equal []
|
|
285
|
-
|
|
286
|
-
@c.load_cache
|
|
287
|
-
|
|
288
|
-
a = @c.all.sort_by{|o| o.id}
|
|
289
|
-
a.first.must_equal @c1
|
|
290
|
-
a.last.must_equal @c2
|
|
291
|
-
@db.sqls.must_equal ['SELECT * FROM t']
|
|
292
|
-
end
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
describe "without options" do
|
|
296
|
-
before do
|
|
297
|
-
@c.plugin :static_cache
|
|
298
|
-
@c1 = @c.cache[1]
|
|
299
|
-
@c2 = @c.cache[2]
|
|
300
|
-
@db.sqls
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
include static_cache_specs
|
|
304
|
-
|
|
305
|
-
it "should work correctly with composite keys" do
|
|
306
|
-
@db.fetch = [{:id=>1, :id2=>1}, {:id=>2, :id2=>1}]
|
|
307
|
-
@c = Class.new(Sequel::Model(@db[:t]))
|
|
308
|
-
@c.columns :id, :id2
|
|
309
|
-
@c.set_primary_key([:id, :id2])
|
|
310
|
-
@c.plugin :static_cache
|
|
311
|
-
@db.sqls
|
|
312
|
-
@c1 = @c.cache[[1, 2]]
|
|
313
|
-
@c2 = @c.cache[[2, 1]]
|
|
314
|
-
@c[[1, 2]].must_be_same_as(@c1)
|
|
315
|
-
@c[[2, 1]].must_be_same_as(@c2)
|
|
316
|
-
@db.sqls.must_equal []
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
it "all of the static cache values (model instances) should be frozen" do
|
|
320
|
-
@c.all.all?{|o| o.frozen?}.must_equal true
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
it "should make .[] method with primary key return cached instances" do
|
|
324
|
-
@c[1].must_be_same_as(@c1)
|
|
325
|
-
@c[2].must_be_same_as(@c2)
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
it "should have cache_get_pk return cached instances" do
|
|
329
|
-
@c.cache_get_pk(1).must_be_same_as(@c1)
|
|
330
|
-
@c.cache_get_pk(2).must_be_same_as(@c2)
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
it "should have each yield cached objects" do
|
|
334
|
-
a = []
|
|
335
|
-
@c.each{|o| a << o}
|
|
336
|
-
a = a.sort_by{|o| o.id}
|
|
337
|
-
a.first.must_be_same_as(@c1)
|
|
338
|
-
a.last.must_be_same_as(@c2)
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
it "should have other enumerable methods work yield cached objects" do
|
|
342
|
-
a = @c.sort_by{|o| o.id}
|
|
343
|
-
a.first.must_be_same_as(@c1)
|
|
344
|
-
a.last.must_be_same_as(@c2)
|
|
345
|
-
end
|
|
346
|
-
|
|
347
|
-
it "should have all return cached instances" do
|
|
348
|
-
a = @c.all.sort_by{|o| o.id}
|
|
349
|
-
a.first.must_be_same_as(@c1)
|
|
350
|
-
a.last.must_be_same_as(@c2)
|
|
351
|
-
end
|
|
352
|
-
|
|
353
|
-
it "should have as_hash without arguments use cached instances" do
|
|
354
|
-
a = @c.as_hash
|
|
355
|
-
a[1].must_be_same_as(@c1)
|
|
356
|
-
a[2].must_be_same_as(@c2)
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
it "should have as_hash with arguments return cached instances" do
|
|
360
|
-
a = @c.as_hash(:id)
|
|
361
|
-
a[1].must_be_same_as(@c1)
|
|
362
|
-
a[2].must_be_same_as(@c2)
|
|
363
|
-
|
|
364
|
-
a = @c.as_hash([:id])
|
|
365
|
-
a[[1]].must_be_same_as(@c1)
|
|
366
|
-
a[[2]].must_be_same_as(@c2)
|
|
367
|
-
end
|
|
368
|
-
|
|
369
|
-
it "should have to_hash_groups without single argument return the cached instances" do
|
|
370
|
-
a = @c.to_hash_groups(:id)
|
|
371
|
-
a[1].first.must_be_same_as(@c1)
|
|
372
|
-
a[2].first.must_be_same_as(@c2)
|
|
373
|
-
|
|
374
|
-
a = @c.to_hash_groups([:id])
|
|
375
|
-
a[[1]].first.must_be_same_as(@c1)
|
|
376
|
-
a[[2]].first.must_be_same_as(@c2)
|
|
377
|
-
end
|
|
378
|
-
|
|
379
|
-
it "should not allow the saving of new objects" do
|
|
380
|
-
proc{@c.create}.must_raise(Sequel::HookFailed)
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
it "should not allow the saving of existing objects" do
|
|
384
|
-
@db.fetch = {:id=>1}
|
|
385
|
-
proc{@c.first(:id=>1).save}.must_raise(Sequel::HookFailed)
|
|
386
|
-
end
|
|
387
|
-
|
|
388
|
-
it "should not allow the destroying of existing objects" do
|
|
389
|
-
@db.fetch = {:id=>1}
|
|
390
|
-
proc{@c.first(:id=>1).destroy}.must_raise(Sequel::HookFailed)
|
|
391
|
-
end
|
|
392
|
-
end
|
|
393
|
-
|
|
394
|
-
describe "with :frozen=>false option" do
|
|
395
|
-
before do
|
|
396
|
-
@c.plugin :static_cache, :frozen=>false
|
|
397
|
-
@c1 = @c.cache[1]
|
|
398
|
-
@c2 = @c.cache[2]
|
|
399
|
-
@db.sqls
|
|
400
|
-
end
|
|
401
|
-
|
|
402
|
-
include static_cache_specs
|
|
403
|
-
|
|
404
|
-
it "record retrieved by primary key should not be frozen" do
|
|
405
|
-
@c[1].frozen?.must_equal false
|
|
406
|
-
@c.cache_get_pk(1).frozen?.must_equal false
|
|
407
|
-
end
|
|
408
|
-
|
|
409
|
-
it "none of values returned in #all should be frozen" do
|
|
410
|
-
@c.all.all?{|o| !o.frozen?}.must_equal true
|
|
411
|
-
end
|
|
412
|
-
|
|
413
|
-
it "none of values yielded by each should be frozen" do
|
|
414
|
-
a = []
|
|
415
|
-
@c.each{|o| a << o}
|
|
416
|
-
a.all?{|o| !o.frozen?}.must_equal true
|
|
417
|
-
end
|
|
418
|
-
|
|
419
|
-
it "none of values yielded by Enumerable method should be frozen" do
|
|
420
|
-
@c.sort_by{|o| o.id}.all?{|o| !o.frozen?}.must_equal true
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
it "none of values returned by map without an argument or block should be frozen" do
|
|
424
|
-
@c.map{|o| o}.all?{|o| !o.frozen?}.must_equal true
|
|
425
|
-
@c.map.all?{|o| !o.frozen?}.must_equal true
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
it "none of values in the hash returned by as_hash without an argument should be frozen" do
|
|
429
|
-
@c.as_hash.values.all?{|o| !o.frozen?}.must_equal true
|
|
430
|
-
end
|
|
431
|
-
|
|
432
|
-
it "none of values in the hash returned by as_hash with a single argument should be frozen" do
|
|
433
|
-
@c.as_hash(:id).values.all?{|o| !o.frozen?}.must_equal true
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
it "none of values in the hash returned by as_hash with a single array argument should be frozen" do
|
|
437
|
-
@c.as_hash([:id, :id]).values.all?{|o| !o.frozen?}.must_equal true
|
|
438
|
-
end
|
|
439
|
-
|
|
440
|
-
it "none of values in the hash returned by to_hash_groups with a single argument should be frozen" do
|
|
441
|
-
@c.to_hash_groups(:id).values.flatten.all?{|o| !o.frozen?}.must_equal true
|
|
442
|
-
end
|
|
443
|
-
|
|
444
|
-
it "none of values in the hash returned by to_hash_groups with a single array argument should be frozen" do
|
|
445
|
-
@c.to_hash_groups([:id, :id]).values.flatten.all?{|o| !o.frozen?}.must_equal true
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
it "should not automatically update the cache when creating new model objects" do
|
|
449
|
-
o = @c.new
|
|
450
|
-
o.id = 3
|
|
451
|
-
@db.autoid = 3
|
|
452
|
-
@db.fetch = [[{:id=>1}, {:id=>2}, {:id=>3}], [{:id=>3}]]
|
|
453
|
-
o.save
|
|
454
|
-
@c[3].must_be_nil
|
|
455
|
-
end
|
|
456
|
-
|
|
457
|
-
it "should not automatically update the cache when updating model objects" do
|
|
458
|
-
o = @c[2]
|
|
459
|
-
@db.fetch = [[{:id=>1}, {:id=>2, :name=>'a'}]]
|
|
460
|
-
o.update(:name=>'a')
|
|
461
|
-
@c[2].values.must_equal(:id=>2)
|
|
462
|
-
end
|
|
463
|
-
|
|
464
|
-
it "should not automatically update the cache when updating model objects" do
|
|
465
|
-
o = @c[2]
|
|
466
|
-
@db.fetch = [[{:id=>1}]]
|
|
467
|
-
o.destroy
|
|
468
|
-
@c[2].must_equal @c2
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
end
|