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,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
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
describe "string_agg extension" do
|
|
5
|
-
dbf = lambda do |db_type|
|
|
6
|
-
db = Sequel.connect("mock://#{db_type}")
|
|
7
|
-
db.extension :string_agg
|
|
8
|
-
db
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
before(:all) do
|
|
12
|
-
Sequel.extension :string_agg
|
|
13
|
-
end
|
|
14
|
-
before do
|
|
15
|
-
@sa1 = Sequel.string_agg(:c)
|
|
16
|
-
@sa2 = Sequel.string_agg(:c, '-')
|
|
17
|
-
@sa3 = Sequel.string_agg(:c, '-').order(:o)
|
|
18
|
-
@sa4 = Sequel.string_agg(:c).order(:o).distinct
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should use existing method" do
|
|
22
|
-
db = Sequel.mock
|
|
23
|
-
db.extend_datasets do
|
|
24
|
-
def string_agg_sql_append(sql, sa)
|
|
25
|
-
sql << "sa(#{sa.expr})"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
db.extension :string_agg
|
|
29
|
-
db.literal(Sequel.string_agg(:c)).must_equal "sa(c)"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should correctly literalize on Postgres" do
|
|
33
|
-
ds = dbf.call(:postgres).dataset.with_quote_identifiers(false)
|
|
34
|
-
ds.literal(@sa1).must_equal "string_agg(c, ',')"
|
|
35
|
-
ds.literal(@sa2).must_equal "string_agg(c, '-')"
|
|
36
|
-
ds.literal(@sa3).must_equal "string_agg(c, '-' ORDER BY o)"
|
|
37
|
-
ds.literal(@sa4).must_equal "string_agg(DISTINCT c, ',' ORDER BY o)"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should correctly literalize on SQLAnywhere" do
|
|
41
|
-
ds = dbf.call(:sqlanywhere).dataset.with_quote_identifiers(false).with_extend{def input_identifier(v) v.to_s end}
|
|
42
|
-
ds.literal(@sa1).must_equal "list(c, ',')"
|
|
43
|
-
ds.literal(@sa2).must_equal "list(c, '-')"
|
|
44
|
-
ds.literal(@sa3).must_equal "list(c, '-' ORDER BY o)"
|
|
45
|
-
ds.literal(@sa4).must_equal "list(DISTINCT c, ',' ORDER BY o)"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should correctly literalize on MySQL, H2, HSQLDB" do
|
|
49
|
-
[:mysql, :h2, :hsqldb].each do |type|
|
|
50
|
-
db = dbf.call(type)
|
|
51
|
-
db.define_singleton_method(:database_type){type}
|
|
52
|
-
ds = db.dataset.with_quote_identifiers(false).with_extend{def input_identifier(v) v.to_s end}
|
|
53
|
-
ds.literal(@sa1).upcase.must_equal "GROUP_CONCAT(C SEPARATOR ',')"
|
|
54
|
-
ds.literal(@sa2).upcase.must_equal "GROUP_CONCAT(C SEPARATOR '-')"
|
|
55
|
-
ds.literal(@sa3).upcase.must_equal "GROUP_CONCAT(C ORDER BY O SEPARATOR '-')"
|
|
56
|
-
ds.literal(@sa4).upcase.must_equal "GROUP_CONCAT(DISTINCT C ORDER BY O SEPARATOR ',')"
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should correctly literalize on Oracle and DB2" do
|
|
61
|
-
[:oracle, :db2].each do |type|
|
|
62
|
-
ds = dbf.call(type).dataset.with_quote_identifiers(false).with_extend{def input_identifier(v) v.to_s end}
|
|
63
|
-
ds.literal(@sa1).must_equal "listagg(c, ',') WITHIN GROUP (ORDER BY 1)"
|
|
64
|
-
ds.literal(@sa2).must_equal "listagg(c, '-') WITHIN GROUP (ORDER BY 1)"
|
|
65
|
-
ds.literal(@sa3).must_equal "listagg(c, '-') WITHIN GROUP (ORDER BY o)"
|
|
66
|
-
proc{ds.literal(@sa4)}.must_raise Sequel::Error
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should raise Sequel::Error on unsupported database" do
|
|
71
|
-
proc{dbf.call(:foo).literal(@sa1)}.must_raise Sequel::Error
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should handle order without arguments" do
|
|
75
|
-
db = dbf.call(:postgres)
|
|
76
|
-
db.dataset.with_quote_identifiers(false).literal(@sa1.order).must_equal "string_agg(c, ',')"
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should handle operations on object" do
|
|
80
|
-
ds = dbf.call(:postgres).dataset.with_quote_identifiers(false)
|
|
81
|
-
ds.literal(@sa1 + 'b').must_equal "(string_agg(c, ',') || 'b')"
|
|
82
|
-
ds.literal(@sa1.like('b')).must_equal "(string_agg(c, ',') LIKE 'b')"
|
|
83
|
-
ds.literal(@sa1 < 'b').must_equal "(string_agg(c, ',') < 'b')"
|
|
84
|
-
ds.literal(@sa1.as(:b)).must_equal "string_agg(c, ',') AS b"
|
|
85
|
-
ds.literal(@sa1.cast(:b)).must_equal "CAST(string_agg(c, ',') AS b)"
|
|
86
|
-
ds.literal(@sa1.desc).must_equal "string_agg(c, ',') DESC"
|
|
87
|
-
ds.literal(@sa1 =~ /a/).must_equal "(string_agg(c, ',') ~ 'a')"
|
|
88
|
-
ds.literal(@sa1.sql_subscript(1)).must_equal "(string_agg(c, ','))[1]"
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :string_date_time
|
|
4
|
-
|
|
5
|
-
describe "String#to_time" do
|
|
6
|
-
it "should convert the string into a Time object" do
|
|
7
|
-
"2007-07-11".to_time.must_equal Time.parse("2007-07-11")
|
|
8
|
-
"06:30".to_time.must_equal Time.parse("06:30")
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should raise InvalidValue for an invalid time" do
|
|
12
|
-
proc {'0000-00-00'.to_time}.must_raise(Sequel::InvalidValue)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
describe "String#to_date" do
|
|
17
|
-
after do
|
|
18
|
-
Sequel.convert_two_digit_years = true
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should convert the string into a Date object" do
|
|
22
|
-
"2007-07-11".to_date.must_equal Date.parse("2007-07-11")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should convert 2 digit years by default" do
|
|
26
|
-
"July 11, 07".to_date.must_equal Date.parse("2007-07-11")
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should not convert 2 digit years if set not to" do
|
|
30
|
-
Sequel.convert_two_digit_years = false
|
|
31
|
-
"July 11, 07".to_date.must_equal Date.parse("0007-07-11")
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should raise InvalidValue for an invalid date" do
|
|
35
|
-
proc {'0000-00-00'.to_date}.must_raise(Sequel::InvalidValue)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
describe "String#to_datetime" do
|
|
40
|
-
after do
|
|
41
|
-
Sequel.convert_two_digit_years = true
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should convert the string into a DateTime object" do
|
|
45
|
-
"2007-07-11 10:11:12a".to_datetime.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should convert 2 digit years by default" do
|
|
49
|
-
"July 11, 07 10:11:12a".to_datetime.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should not convert 2 digit years if set not to" do
|
|
53
|
-
Sequel.convert_two_digit_years = false
|
|
54
|
-
"July 11, 07 10:11:12a".to_datetime.must_equal DateTime.parse("0007-07-11 10:11:12a")
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should raise InvalidValue for an invalid date" do
|
|
58
|
-
proc {'0000-00-00'.to_datetime}.must_raise(Sequel::InvalidValue)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
describe "String#to_sequel_time" do
|
|
63
|
-
after do
|
|
64
|
-
Sequel.datetime_class = Time
|
|
65
|
-
Sequel.convert_two_digit_years = true
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should convert the string into a Time object by default" do
|
|
69
|
-
"2007-07-11 10:11:12a".to_sequel_time.class.must_equal Time
|
|
70
|
-
"2007-07-11 10:11:12a".to_sequel_time.must_equal Time.parse("2007-07-11 10:11:12a")
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should convert the string into a DateTime object if that is set" do
|
|
74
|
-
Sequel.datetime_class = DateTime
|
|
75
|
-
"2007-07-11 10:11:12a".to_sequel_time.class.must_equal DateTime
|
|
76
|
-
"2007-07-11 10:11:12a".to_sequel_time.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should convert 2 digit years by default if using DateTime class" do
|
|
80
|
-
Sequel.datetime_class = DateTime
|
|
81
|
-
"July 11, 07 10:11:12a".to_sequel_time.must_equal DateTime.parse("2007-07-11 10:11:12a")
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should not convert 2 digit years if set not to when using DateTime class" do
|
|
85
|
-
Sequel.datetime_class = DateTime
|
|
86
|
-
Sequel.convert_two_digit_years = false
|
|
87
|
-
"July 11, 07 10:11:12a".to_sequel_time.must_equal DateTime.parse("0007-07-11 10:11:12a")
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should raise InvalidValue for an invalid time" do
|
|
91
|
-
proc {'0000-00-00'.to_sequel_time}.must_raise(Sequel::InvalidValue)
|
|
92
|
-
Sequel.datetime_class = DateTime
|
|
93
|
-
proc {'0000-00-00'.to_sequel_time}.must_raise(Sequel::InvalidValue)
|
|
94
|
-
end
|
|
95
|
-
end
|