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,97 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
with_server_specs = shared_description do
|
|
4
|
-
it "should set the default server to use in the block" do
|
|
5
|
-
@db.with_server(:a){@db[:t].all}
|
|
6
|
-
@db.sqls.must_equal ["SELECT * FROM t -- a"]
|
|
7
|
-
@db.with_server(:b){@db[:t].all}
|
|
8
|
-
@db.sqls.must_equal ["SELECT * FROM t -- b"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should set the default server to use in the block" do
|
|
12
|
-
@db.with_server(:a, :b){@db[:t].all}
|
|
13
|
-
@db.sqls.must_equal ["SELECT * FROM t -- b"]
|
|
14
|
-
@db.with_server(:a, :b){@db[:t].insert}
|
|
15
|
-
@db.sqls.must_equal ["INSERT INTO t DEFAULT VALUES -- a"]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should have no affect after the block" do
|
|
19
|
-
@db.with_server(:a){@db[:t].all}
|
|
20
|
-
@db.sqls.must_equal ["SELECT * FROM t -- a"]
|
|
21
|
-
@db[:t].all
|
|
22
|
-
@db.sqls.must_equal ["SELECT * FROM t"]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should not override specific server inside the block" do
|
|
26
|
-
@db.with_server(:a){@db[:t].server(:b).all}
|
|
27
|
-
@db.sqls.must_equal ["SELECT * FROM t -- b"]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should work correctly when blocks are nested" do
|
|
31
|
-
@db[:t].all
|
|
32
|
-
@db.with_server(:a) do
|
|
33
|
-
@db[:t].all
|
|
34
|
-
@db.with_server(:b){@db[:t].all}
|
|
35
|
-
@db[:t].all
|
|
36
|
-
end
|
|
37
|
-
@db[:t].all
|
|
38
|
-
@db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t"]
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "should work correctly for inserts/updates/deletes" do
|
|
42
|
-
@db.with_server(:a) do
|
|
43
|
-
@db[:t].insert
|
|
44
|
-
@db[:t].update(:a=>1)
|
|
45
|
-
@db[:t].delete
|
|
46
|
-
end
|
|
47
|
-
@db.sqls.must_equal ["INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe "Database#with_server single threaded" do
|
|
52
|
-
before do
|
|
53
|
-
@db = Sequel.mock(:single_threaded=>true, :servers=>{:a=>{}, :b=>{}})
|
|
54
|
-
@db.extension :server_block
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
include with_server_specs
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe "Database#with_server multi threaded" do
|
|
61
|
-
before do
|
|
62
|
-
@db = Sequel.mock(:servers=>{:a=>{}, :b=>{}, :c=>{}, :d=>{}})
|
|
63
|
-
@db.extension :server_block
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
include with_server_specs
|
|
67
|
-
|
|
68
|
-
it "should respect multithreaded access" do
|
|
69
|
-
q, q1 = Queue.new, Queue.new
|
|
70
|
-
|
|
71
|
-
t = nil
|
|
72
|
-
@db[:t].all
|
|
73
|
-
@db.with_server(:a) do
|
|
74
|
-
@db[:t].all
|
|
75
|
-
t = Thread.new do
|
|
76
|
-
@db[:t].all
|
|
77
|
-
@db.with_server(:c) do
|
|
78
|
-
@db[:t].all
|
|
79
|
-
@db.with_server(:d){@db[:t].all}
|
|
80
|
-
q.push nil
|
|
81
|
-
q1.pop
|
|
82
|
-
@db[:t].all
|
|
83
|
-
end
|
|
84
|
-
@db[:t].all
|
|
85
|
-
end
|
|
86
|
-
q.pop
|
|
87
|
-
@db.with_server(:b){@db[:t].all}
|
|
88
|
-
@db[:t].all
|
|
89
|
-
end
|
|
90
|
-
@db[:t].all
|
|
91
|
-
q1.push nil
|
|
92
|
-
t.join
|
|
93
|
-
@db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t -- d",
|
|
94
|
-
"SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t"]
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "server_logging extension" do
|
|
4
|
-
before do
|
|
5
|
-
@o = Object.new
|
|
6
|
-
def @o.logs; @logs || []; end
|
|
7
|
-
def @o.log; logs.length.must_equal 1; logs.first.length.must_equal 1; logs.shift.first; end
|
|
8
|
-
def @o.to_ary; [self]; end
|
|
9
|
-
def @o.method_missing(m, *args); (@logs ||= []) << args; end
|
|
10
|
-
@db = Sequel::mock(:test=>false, :servers=>{:read_only=>{}, :b=>{}}, :logger=>@o).extension(:server_logging)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should include shard when logging" do
|
|
14
|
-
@db[:a].all
|
|
15
|
-
@o.log.must_include "server: read_only) SELECT * FROM a"
|
|
16
|
-
@db[:a].insert
|
|
17
|
-
@o.log.must_include "server: default) INSERT INTO a DEFAULT VALUES"
|
|
18
|
-
@db[:a].server(:b).all
|
|
19
|
-
@o.log.must_include "server: b) SELECT * FROM a"
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should not include shard when not logging connection info" do
|
|
23
|
-
@db.log_connection_info = false
|
|
24
|
-
@db[:a].all
|
|
25
|
-
log = @o.log
|
|
26
|
-
log.wont_include "server: read_only) SELECT * FROM a"
|
|
27
|
-
log.must_include "SELECT * FROM a"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should not turn on logging connction info if it was turned off" do
|
|
31
|
-
@db.log_connection_info = false
|
|
32
|
-
@db.extension :server_logging
|
|
33
|
-
@db[:a].all
|
|
34
|
-
log = @o.log
|
|
35
|
-
log.wont_include "server: read_only) SELECT * FROM a"
|
|
36
|
-
log.must_include "SELECT * FROM a"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should remove mapping when disconnecting" do
|
|
40
|
-
c = @db.synchronize{|c1| c1}
|
|
41
|
-
@db.disconnect
|
|
42
|
-
@db.send(:log_connection_execute, c, "SELECT * FROM a")
|
|
43
|
-
@o.log.must_include "server: ) SELECT * FROM a"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "sharding plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:numrows=>1, :autoid=>proc{1}, :servers=>{:s1=>{}, :s2=>{}, :s3=>{}, :s4=>{}})
|
|
6
|
-
@Artist = Class.new(Sequel::Model(@db[:artists].with_fetch(:id=>2, :name=>'YJM')))
|
|
7
|
-
@Artist.class_eval do
|
|
8
|
-
columns :id, :name
|
|
9
|
-
plugin :sharding
|
|
10
|
-
end
|
|
11
|
-
@Album = Class.new(Sequel::Model(@db[:albums].with_fetch(:id=>1, :name=>'RF', :artist_id=>2)))
|
|
12
|
-
@Album.class_eval do
|
|
13
|
-
columns :id, :artist_id, :name
|
|
14
|
-
plugin :sharding
|
|
15
|
-
end
|
|
16
|
-
@Tag = Class.new(Sequel::Model(@db[:tags].with_fetch(:id=>3, :name=>'M')))
|
|
17
|
-
@Tag.class_eval do
|
|
18
|
-
columns :id, :name
|
|
19
|
-
plugin :sharding
|
|
20
|
-
end
|
|
21
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
22
|
-
@Album.many_to_one :artist, :class=>@Artist
|
|
23
|
-
@Album.many_to_many :tags, :class=>@Tag, :left_key=>:album_id, :right_key=>:tag_id, :join_table=>:albums_tags
|
|
24
|
-
@db.sqls
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should allow you to instantiate a new object for a specified shard" do
|
|
28
|
-
@Album.new_using_server(:s1, :name=>'RF').save
|
|
29
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
|
|
30
|
-
|
|
31
|
-
@Album.new_using_server(:s2){|o| o.name = 'MO'}.save
|
|
32
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should allow you to create and save a new object for a specified shard" do
|
|
36
|
-
@Album.create_using_server(:s1, :name=>'RF')
|
|
37
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
|
|
38
|
-
|
|
39
|
-
@Album.create_using_server(:s2){|o| o.name = 'MO'}
|
|
40
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "should have objects retrieved from a specific shard update that shard" do
|
|
44
|
-
@Album.server(:s1).first.update(:name=>'MO')
|
|
45
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s1"]
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should have objects retrieved from a specific shard delete from that shard" do
|
|
49
|
-
@Album.server(:s1).first.delete
|
|
50
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "DELETE FROM albums WHERE (id = 1) -- s1"]
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should have objects retrieved from a specific shard reload from that shard" do
|
|
54
|
-
@Album.server(:s1).first.reload
|
|
55
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should use current dataset's shard when eager loading if eagerly loaded dataset doesn't have its own shard" do
|
|
59
|
-
albums = @Album.server(:s1).eager(:artist).all
|
|
60
|
-
@db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s1"]
|
|
61
|
-
albums.length.must_equal 1
|
|
62
|
-
albums.first.artist.save
|
|
63
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "should not use current dataset's shard when eager loading if eagerly loaded dataset has its own shard" do
|
|
67
|
-
@Artist.dataset = @Artist.dataset.server(:s2)
|
|
68
|
-
albums = @Album.server(:s1).eager(:artist).all
|
|
69
|
-
@db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s2"]
|
|
70
|
-
albums.length.must_equal 1
|
|
71
|
-
albums.first.artist.save
|
|
72
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should use current dataset's shard when eager graphing if eagerly graphed dataset doesn't have its own shard" do
|
|
76
|
-
albums = @Album.server(:s1).eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
|
|
77
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
|
|
78
|
-
albums.length.must_equal 1
|
|
79
|
-
albums.first.artist.save
|
|
80
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should not use current dataset's shard when eager graphing if eagerly graphed dataset has its own shard" do
|
|
84
|
-
@Artist.dataset = @Artist.dataset.server(:s2)
|
|
85
|
-
albums = @Album.server(:s1).eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
|
|
86
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
|
|
87
|
-
albums.length.must_equal 1
|
|
88
|
-
albums.first.artist.save
|
|
89
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should use eagerly graphed dataset shard for eagerly graphed objects even if current dataset does not have a shard" do
|
|
93
|
-
@Artist.dataset = @Artist.dataset.server(:s2)
|
|
94
|
-
albums = @Album.eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
|
|
95
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id)"]
|
|
96
|
-
albums.length.must_equal 1
|
|
97
|
-
albums.first.artist.save
|
|
98
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it "should have objects retrieved from a specific shard use associated objects from that shard, with modifications to the associated objects using that shard" do
|
|
102
|
-
album = @Album.server(:s1).first
|
|
103
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1"]
|
|
104
|
-
album.artist.update(:name=>'AS')
|
|
105
|
-
@db.sqls.must_equal ["SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1 -- s1", "UPDATE artists SET name = 'AS' WHERE (id = 2) -- s1"]
|
|
106
|
-
album.tags.map{|a| a.update(:name=>'SR')}
|
|
107
|
-
@db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- s1", "UPDATE tags SET name = 'SR' WHERE (id = 3) -- s1"]
|
|
108
|
-
@Artist.server(:s2).first.albums.map{|a| a.update(:name=>'MO')}
|
|
109
|
-
@db.sqls.must_equal ["SELECT * FROM artists LIMIT 1 -- s2", "SELECT * FROM albums WHERE (albums.artist_id = 2) -- s2", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s2"]
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should have objects retrieved from a specific shard add associated objects to that shard" do
|
|
113
|
-
album = @Album.server(:s1).first
|
|
114
|
-
artist = @Artist.server(:s2).first
|
|
115
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
116
|
-
|
|
117
|
-
artist.add_album(:name=>'MO')
|
|
118
|
-
sqls = @db.sqls
|
|
119
|
-
["INSERT INTO albums (artist_id, name) VALUES (2, 'MO') -- s2", "INSERT INTO albums (name, artist_id) VALUES ('MO', 2) -- s2"].must_include(sqls.shift)
|
|
120
|
-
sqls.must_equal ["SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
121
|
-
|
|
122
|
-
album.add_tag(:name=>'SR')
|
|
123
|
-
sqls = @db.sqls
|
|
124
|
-
["INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3) -- s1", "INSERT INTO albums_tags (tag_id, album_id) VALUES (3, 1) -- s1"].must_include(sqls.pop)
|
|
125
|
-
sqls.must_equal ["INSERT INTO tags (name) VALUES ('SR') -- s1", "SELECT * FROM tags WHERE (id = 1) LIMIT 1 -- s1", ]
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
it "should have objects retrieved from a specific shard remove associated objects from that shard" do
|
|
129
|
-
album = @Album.server(:s1).first
|
|
130
|
-
artist = @Artist.server(:s2).first
|
|
131
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
132
|
-
|
|
133
|
-
artist.remove_album(1)
|
|
134
|
-
sqls = @db.sqls
|
|
135
|
-
["UPDATE albums SET artist_id = NULL, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = NULL WHERE (id = 1) -- s2"].must_include(sqls.pop)
|
|
136
|
-
sqls.must_equal ["SELECT * FROM albums WHERE ((albums.artist_id = 2) AND (albums.id = 1)) LIMIT 1 -- s2"]
|
|
137
|
-
|
|
138
|
-
album.remove_tag(3)
|
|
139
|
-
@db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE ((albums_tags.album_id = 1) AND (tags.id = 3)) LIMIT 1 -- s1", "DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id = 3)) -- s1"]
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "should have objects retrieved from a specific shard remove all associated objects from that shard" do
|
|
143
|
-
album = @Album.server(:s1).first
|
|
144
|
-
artist = @Artist.server(:s2).first
|
|
145
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
146
|
-
|
|
147
|
-
artist.remove_all_albums
|
|
148
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = NULL WHERE (artist_id = 2) -- s2"]
|
|
149
|
-
|
|
150
|
-
album.remove_all_tags
|
|
151
|
-
@db.sqls.must_equal ["DELETE FROM albums_tags WHERE (album_id = 1) -- s1"]
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it "should not override a server already set on an associated object" do
|
|
155
|
-
@Album.server(:s1).first
|
|
156
|
-
artist = @Artist.server(:s2).first
|
|
157
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
158
|
-
|
|
159
|
-
artist.add_album(@Album.load(:id=>4, :name=>'MO').set_server(:s3))
|
|
160
|
-
["UPDATE albums SET artist_id = 2, name = 'MO' WHERE (id = 4) -- s3", "UPDATE albums SET name = 'MO', artist_id = 2 WHERE (id = 4) -- s3"].must_include(@db.sqls.pop)
|
|
161
|
-
|
|
162
|
-
artist.remove_album(@Album.load(:id=>5, :name=>'T', :artist_id=>2).set_server(:s4))
|
|
163
|
-
# Should select from current object's shard to check existing association, but update associated object's shard
|
|
164
|
-
sqls = @db.sqls
|
|
165
|
-
["UPDATE albums SET artist_id = NULL, name = 'T' WHERE (id = 5) -- s4", "UPDATE albums SET name = 'T', artist_id = NULL WHERE (id = 5) -- s4"].must_include(sqls.pop)
|
|
166
|
-
sqls.must_equal ["SELECT 1 AS one FROM albums WHERE ((albums.artist_id = 2) AND (id = 5)) LIMIT 1 -- s2"]
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "should be able to set a shard to use for any object using set_server" do
|
|
170
|
-
@Album.server(:s1).first.set_server(:s2).reload
|
|
171
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
it "should use transactions on the correct shard" do
|
|
175
|
-
@Album.use_transactions = true
|
|
176
|
-
@Album.server(:s2).first.save
|
|
177
|
-
sqls = @db.sqls
|
|
178
|
-
["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s2"].must_include(sqls.slice!(2))
|
|
179
|
-
sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s2", "COMMIT -- s2"]
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
it "should use override current shard when saving with given :server option" do
|
|
183
|
-
@Album.use_transactions = true
|
|
184
|
-
@Album.server(:s2).first.save(:server=>:s1)
|
|
185
|
-
sqls = @db.sqls
|
|
186
|
-
["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s1", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s1"].must_include(sqls.slice!(2))
|
|
187
|
-
sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s1", "COMMIT -- s1"]
|
|
188
|
-
end
|
|
189
|
-
end
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Shared caching behavior" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock
|
|
6
|
-
|
|
7
|
-
class ::LookupModel < ::Sequel::Model(@db)
|
|
8
|
-
columns :id, :caching_model_id, :caching_model_id2
|
|
9
|
-
many_to_one :caching_model
|
|
10
|
-
many_to_one :caching_model2, :key=>[:caching_model_id, :caching_model_id2], :class=>:CachingModel
|
|
11
|
-
end
|
|
12
|
-
@c = LookupModel
|
|
13
|
-
|
|
14
|
-
class ::CachingModel < Sequel::Model(@db)
|
|
15
|
-
columns :id, :id2
|
|
16
|
-
end
|
|
17
|
-
@cc = CachingModel
|
|
18
|
-
end
|
|
19
|
-
after do
|
|
20
|
-
Object.send(:remove_const, :CachingModel)
|
|
21
|
-
Object.send(:remove_const, :LookupModel)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
many_to_one_cpk_specs = shared_description do
|
|
25
|
-
it "should use a simple primary key lookup when retrieving many_to_one associated records with a composite key" do
|
|
26
|
-
@db.sqls.must_equal []
|
|
27
|
-
@c.load(:id=>3, :caching_model_id=>1, :caching_model_id2=>2).caching_model2.must_be_same_as(@cm12)
|
|
28
|
-
@c.load(:id=>3, :caching_model_id=>2, :caching_model_id2=>1).caching_model2.must_be_same_as(@cm21)
|
|
29
|
-
@db.sqls.must_equal []
|
|
30
|
-
@db.fetch = []
|
|
31
|
-
@c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.must_be_nil
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
many_to_one_pk_specs = shared_description do
|
|
36
|
-
it "should use a simple primary key lookup when retrieving many_to_one associated records" do
|
|
37
|
-
@cc.set_primary_key([:id, :id2])
|
|
38
|
-
@db.sqls.must_equal []
|
|
39
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model.must_be_same_as(@cm1)
|
|
40
|
-
@c.load(:id=>4, :caching_model_id=>2).caching_model.must_be_same_as(@cm2)
|
|
41
|
-
@db.sqls.must_equal []
|
|
42
|
-
@db.fetch = []
|
|
43
|
-
@c.load(:id=>4, :caching_model_id=>3).caching_model.must_be_nil
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should not use a simple primary key lookup if the assocation has a nil :key option" do
|
|
47
|
-
@c.many_to_one :caching_model, :key=>nil, :dataset=>proc{CachingModel.filter(:caching_model_id=>caching_model_id)}
|
|
48
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
49
|
-
@db.sqls.wont_equal []
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should not use a simple primary key lookup if the assocation has a nil :key option" do
|
|
53
|
-
@c.many_to_one :caching_model, :many_to_one_pk_lookup=>false
|
|
54
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
55
|
-
@db.sqls.wont_equal []
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should not use a simple primary key lookup if the assocation's :primary_key option doesn't match the primary key of the associated class" do
|
|
59
|
-
@c.many_to_one :caching_model, :primary_key=>:id2
|
|
60
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
61
|
-
@db.sqls.wont_equal []
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should not use a simple primary key lookup if the assocation has :conditions" do
|
|
65
|
-
@c.many_to_one :caching_model, :conditions=>{:a=>1}
|
|
66
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
67
|
-
@db.sqls.wont_equal []
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should not use a simple primary key lookup if the assocation has :select" do
|
|
71
|
-
@c.many_to_one :caching_model, :select=>[:a, :b]
|
|
72
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
73
|
-
@db.sqls.wont_equal []
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should not use a simple primary key lookup if the assocation has a block" do
|
|
77
|
-
@c.many_to_one(:caching_model){|ds| ds.where{a > 1}}
|
|
78
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
79
|
-
@db.sqls.wont_equal []
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should not use a simple primary key lookup if the assocation has a non-default :dataset option" do
|
|
83
|
-
cc = @cc
|
|
84
|
-
@c.many_to_one :caching_model, :dataset=>proc{cc.where(:id=>caching_model_id)}
|
|
85
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
86
|
-
@db.sqls.wont_equal []
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should use a simple primary key lookup if explicitly set" do
|
|
90
|
-
@c.many_to_one :caching_model, :select=>[:a, :b], :many_to_one_pk_lookup=>true
|
|
91
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
92
|
-
@db.sqls.must_equal []
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
describe "With caching plugin" do
|
|
97
|
-
before do
|
|
98
|
-
@cache_class = Class.new(Hash) do
|
|
99
|
-
attr_accessor :ttl
|
|
100
|
-
def set(k, v, ttl); self[k] = v; @ttl = ttl; end
|
|
101
|
-
def get(k); self[k]; end
|
|
102
|
-
end
|
|
103
|
-
cache = @cache_class.new
|
|
104
|
-
@cache = cache
|
|
105
|
-
|
|
106
|
-
@cc.plugin :caching, @cache
|
|
107
|
-
@db.fetch = {:id=>1}
|
|
108
|
-
@cm1 = @cc[1]
|
|
109
|
-
@cm2 = @cc[2]
|
|
110
|
-
@cm12 = @cc[1, 2]
|
|
111
|
-
@cm21 = @cc[2, 1]
|
|
112
|
-
|
|
113
|
-
@db.sqls
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
include many_to_one_cpk_specs
|
|
117
|
-
include many_to_one_pk_specs
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
describe "With static_cache plugin with single key" do
|
|
121
|
-
before do
|
|
122
|
-
@db.fetch = [{:id=>1}, {:id=>2}]
|
|
123
|
-
@cc.plugin :static_cache
|
|
124
|
-
@cm1 = @cc[1]
|
|
125
|
-
@cm2 = @cc[2]
|
|
126
|
-
@db.sqls
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
include many_to_one_pk_specs
|
|
130
|
-
|
|
131
|
-
it "should not issue regular query if primary key lookup returns no rows" do
|
|
132
|
-
def @cc.primary_key_lookup(pk); end
|
|
133
|
-
@c.many_to_one :caching_model
|
|
134
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
135
|
-
@db.sqls.must_equal []
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
describe "With static_cache plugin with composite key" do
|
|
140
|
-
before do
|
|
141
|
-
@cc.set_primary_key([:id, :id2])
|
|
142
|
-
@db.fetch = [{:id=>1, :id2=>2}, {:id=>2, :id2=>1}]
|
|
143
|
-
@cc.plugin :static_cache
|
|
144
|
-
@cm12 = @cc[[1, 2]]
|
|
145
|
-
@cm21 = @cc[[2, 1]]
|
|
146
|
-
@db.sqls
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
include many_to_one_cpk_specs
|
|
150
|
-
end
|
|
151
|
-
end
|