sequel 5.28.0 → 5.33.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 +64 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +3 -3
- data/doc/code_order.rdoc +12 -2
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/postgresql.rdoc +71 -0
- data/doc/release_notes/5.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/testing.rdoc +1 -1
- data/lib/sequel/adapters/postgres.rb +5 -1
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +5 -5
- data/lib/sequel/adapters/shared/mysql.rb +10 -10
- data/lib/sequel/adapters/shared/oracle.rb +16 -16
- data/lib/sequel/adapters/shared/postgres.rb +169 -14
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +32 -5
- data/lib/sequel/adapters/tinytds.rb +1 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +2 -2
- data/lib/sequel/connection_pool/threaded.rb +1 -1
- data/lib/sequel/core.rb +318 -314
- data/lib/sequel/database/query.rb +1 -1
- data/lib/sequel/database/schema_generator.rb +1 -1
- data/lib/sequel/database/transactions.rb +8 -12
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +1 -1
- data/lib/sequel/extensions/pg_enum.rb +5 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_inet.rb +13 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -0
- data/lib/sequel/extensions/pg_range.rb +2 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/schema_dumper.rb +10 -4
- data/lib/sequel/extensions/server_block.rb +3 -3
- data/lib/sequel/model/associations.rb +18 -5
- data/lib/sequel/model/base.rb +60 -53
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
- data/lib/sequel/plugins/association_proxies.rb +2 -0
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
- data/lib/sequel/plugins/dirty.rb +13 -13
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
- data/lib/sequel/plugins/json_serializer.rb +18 -11
- data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/timezones.rb +6 -4
- data/lib/sequel/version.rb +1 -1
- metadata +18 -367
- data/Rakefile +0 -151
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -828
- data/spec/adapters/mysql_spec.rb +0 -1060
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4476
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2915
- data/spec/core/dataset_spec.rb +0 -5547
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1498
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1844
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -28
- data/spec/extensions/any_not_empty_spec.rb +0 -23
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -229
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -273
- data/spec/extensions/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -150
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -222
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/eager_graph_eager_spec.rb +0 -100
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- data/spec/extensions/exclude_or_null_spec.rb +0 -15
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -402
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_conflict_spec.rb +0 -103
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -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 -218
- data/spec/extensions/nested_attributes_spec.rb +0 -815
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
- data/spec/extensions/pg_enum_spec.rb +0 -118
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -356
- data/spec/extensions/pg_json_spec.rb +0 -451
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -600
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -177
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -387
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -870
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -135
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -197
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -70
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_cache_spec.rb +0 -35
- data/spec/extensions/static_cache_spec.rb +0 -471
- data/spec/extensions/string_agg_spec.rb +0 -90
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -334
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -2037
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2423
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -903
- data/spec/integration/spec_helper.rb +0 -71
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :pg_inet_ops
|
|
4
|
-
|
|
5
|
-
describe "Sequel::Postgres::InetOp" do
|
|
6
|
-
before do
|
|
7
|
-
db = Sequel.connect('mock://postgres')
|
|
8
|
-
db.extend_datasets{def quote_identifiers?; false end}
|
|
9
|
-
db.extension :pg_inet
|
|
10
|
-
@ds = db.dataset
|
|
11
|
-
@h = Sequel.pg_inet_op(:h)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "#pg_inet should return self" do
|
|
15
|
-
@h.pg_inet.must_be_same_as(@h)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "Sequel.pg_inet_op should return argument if already an InetOp" do
|
|
19
|
-
Sequel.pg_inet_op(@h).must_be_same_as(@h)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "#pg_inet should return a InetOp for literal strings, and expressions" do
|
|
23
|
-
@ds.literal(Sequel.function(:b, :h).pg_inet.abbrev).must_equal "abbrev(b(h))"
|
|
24
|
-
@ds.literal(Sequel.lit('h').pg_inet.abbrev).must_equal "abbrev(h)"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should define methods for all of the PostgreSQL inet operators" do
|
|
28
|
-
@ds.literal(@h + @h).must_equal "(h + h)"
|
|
29
|
-
@ds.literal(@h - @h).must_equal "(h - h)"
|
|
30
|
-
@ds.literal(@h << @h).must_equal "(h << h)"
|
|
31
|
-
@ds.literal(@h >> @h).must_equal "(h >> h)"
|
|
32
|
-
@ds.literal(@h & @h).must_equal "(h & h)"
|
|
33
|
-
@ds.literal(@h | @h).must_equal "(h | h)"
|
|
34
|
-
@ds.literal(~@h).must_equal "~h"
|
|
35
|
-
|
|
36
|
-
@ds.literal(@h.contained_by(@h)).must_equal "(h << h)"
|
|
37
|
-
@ds.literal(@h.contained_by_or_equals(@h)).must_equal "(h <<= h)"
|
|
38
|
-
@ds.literal(@h.contains(@h)).must_equal "(h >> h)"
|
|
39
|
-
@ds.literal(@h.contains_or_equals(@h)).must_equal "(h >>= h)"
|
|
40
|
-
@ds.literal(@h.contains_or_contained_by(@h)).must_equal "(h && h)"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "should define methods for all of the PostgreSQL inet functions" do
|
|
44
|
-
@ds.literal(@h.abbrev).must_equal "abbrev(h)"
|
|
45
|
-
@ds.literal(@h.broadcast).must_equal "broadcast(h)"
|
|
46
|
-
@ds.literal(@h.family).must_equal "family(h)"
|
|
47
|
-
@ds.literal(@h.host).must_equal "host(h)"
|
|
48
|
-
@ds.literal(@h.hostmask).must_equal "hostmask(h)"
|
|
49
|
-
@ds.literal(@h.masklen).must_equal "masklen(h)"
|
|
50
|
-
@ds.literal(@h.netmask).must_equal "netmask(h)"
|
|
51
|
-
@ds.literal(@h.network).must_equal "network(h)"
|
|
52
|
-
@ds.literal(@h.set_masklen(16)).must_equal "set_masklen(h, 16)"
|
|
53
|
-
@ds.literal(@h.text).must_equal "text(h)"
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should have operators that return booleans return boolean expressions" do
|
|
57
|
-
@ds.literal((@h << @h) & :b).must_equal "((h << h) AND b)"
|
|
58
|
-
@ds.literal((@h >> @h) & :b).must_equal "((h >> h) AND b)"
|
|
59
|
-
|
|
60
|
-
@ds.literal(@h.contained_by(@h) & :b).must_equal "((h << h) AND b)"
|
|
61
|
-
@ds.literal(@h.contained_by_or_equals(@h) & :b).must_equal "((h <<= h) AND b)"
|
|
62
|
-
@ds.literal(@h.contains(@h) & :b).must_equal "((h >> h) AND b)"
|
|
63
|
-
@ds.literal(@h.contains_or_equals(@h) & :b).must_equal "((h >>= h) AND b)"
|
|
64
|
-
@ds.literal(@h.contains_or_contained_by(@h) & :b).must_equal "((h && h) AND b)"
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should have operators that return inet return InetOp" do
|
|
68
|
-
@ds.literal((@h & @h).contains(:b)).must_equal "((h & h) >> b)"
|
|
69
|
-
@ds.literal((@h | @h).contains(:b)).must_equal "((h | h) >> b)"
|
|
70
|
-
@ds.literal((@h + @h).contains(:b)).must_equal "((h + h) >> b)"
|
|
71
|
-
@ds.literal((@h - 3).contains(:b)).must_equal "((h - 3) >> b)"
|
|
72
|
-
@ds.literal((~@h).contains(:b)).must_equal "(~h >> b)"
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should have - operator with inet op return numeric expression" do
|
|
76
|
-
@ds.literal((@h - @h) / :b).must_equal "((h - h) / b)"
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should have function methods returning int return numeric expressions" do
|
|
80
|
-
@ds.literal(@h.family / 2).must_equal "(family(h) / 2)"
|
|
81
|
-
@ds.literal(@h.masklen / 2).must_equal "(masklen(h) / 2)"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should have function methods returning text return string expressions" do
|
|
85
|
-
@ds.literal(@h.abbrev + :a).must_equal "(abbrev(h) || a)"
|
|
86
|
-
@ds.literal(@h.host + :a).must_equal "(host(h) || a)"
|
|
87
|
-
@ds.literal(@h.text + :a).must_equal "(text(h) || a)"
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should have function methods returning inet return InetOp" do
|
|
91
|
-
@ds.literal(@h.broadcast.contains(:a)).must_equal "(broadcast(h) >> a)"
|
|
92
|
-
@ds.literal(@h.hostmask.contains(:a)).must_equal "(hostmask(h) >> a)"
|
|
93
|
-
@ds.literal(@h.netmask.contains(:a)).must_equal "(netmask(h) >> a)"
|
|
94
|
-
@ds.literal(@h.network.contains(:a)).must_equal "(network(h) >> a)"
|
|
95
|
-
@ds.literal(@h.set_masklen(16).contains(:a)).must_equal "(set_masklen(h, 16) >> a)"
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should string and IPAddr instances in a cast to inet" do
|
|
99
|
-
@ds.literal(Sequel.pg_inet_op('1.2.3.4').contains(:a)).must_equal "(CAST('1.2.3.4' AS inet) >> a)"
|
|
100
|
-
@ds.literal(Sequel.pg_inet_op(IPAddr.new('1.2.3.4')).contains(:a)).must_equal "(CAST('1.2.3.4/32' AS inet) >> a)"
|
|
101
|
-
end
|
|
102
|
-
end
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "pg_inet extension" do
|
|
4
|
-
ipv6_broken = (IPAddr.new('::1'); false) rescue true
|
|
5
|
-
before do
|
|
6
|
-
@db = Sequel.connect('mock://postgres')
|
|
7
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
8
|
-
@db.extension(:pg_array, :pg_inet)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should literalize IPAddr v4 instances to strings correctly" do
|
|
12
|
-
@db.literal(IPAddr.new('127.0.0.1')).must_equal "'127.0.0.1/32'"
|
|
13
|
-
@db.literal(IPAddr.new('127.0.0.0/8')).must_equal "'127.0.0.0/8'"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should literalize IPAddr v6 instances to strings correctly" do
|
|
17
|
-
@db.literal(IPAddr.new('2001:4f8:3:ba::/64')).must_equal "'2001:4f8:3:ba::/64'"
|
|
18
|
-
@db.literal(IPAddr.new('2001:4f8:3:ba:2e0:81ff:fe22:d1f1')).must_equal "'2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128'"
|
|
19
|
-
end unless ipv6_broken
|
|
20
|
-
|
|
21
|
-
it "should set up conversion procs correctly" do
|
|
22
|
-
cp = @db.conversion_procs
|
|
23
|
-
cp[869].call("127.0.0.1").must_equal IPAddr.new('127.0.0.1')
|
|
24
|
-
cp[650].call("127.0.0.1").must_equal IPAddr.new('127.0.0.1')
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should set up conversion procs for arrays correctly" do
|
|
28
|
-
cp = @db.conversion_procs
|
|
29
|
-
cp[1041].call("{127.0.0.1}").must_equal [IPAddr.new('127.0.0.1')]
|
|
30
|
-
cp[651].call("{127.0.0.1}").must_equal [IPAddr.new('127.0.0.1')]
|
|
31
|
-
cp[1040].call("{127.0.0.1}").must_equal ['127.0.0.1']
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should not affect literalization of custom objects" do
|
|
35
|
-
o = Object.new
|
|
36
|
-
def o.sql_literal(ds) 'v' end
|
|
37
|
-
@db.literal(o).must_equal 'v'
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should support using IPAddr as bound variables" do
|
|
41
|
-
@db.bound_variable_arg(1, nil).must_equal 1
|
|
42
|
-
@db.bound_variable_arg(IPAddr.new('127.0.0.1'), nil).must_equal '127.0.0.1/32'
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should support using IPAddr instances in array types in bound variables" do
|
|
46
|
-
@db.bound_variable_arg(Sequel.pg_array([IPAddr.new('127.0.0.1')]), nil).must_equal '{"127.0.0.1/32"}'
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should parse inet/cidr type from the schema correctly" do
|
|
50
|
-
@db.fetch = [{:name=>'id', :db_type=>'integer'}, {:name=>'i', :db_type=>'inet'}, {:name=>'c', :db_type=>'cidr'}]
|
|
51
|
-
@db.schema(:items).map{|e| e[1][:type]}.must_equal [:integer, :ipaddr, :ipaddr]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should set :ruby_default schema entries if default value is recognized" do
|
|
55
|
-
@db.fetch = [{:name=>'id', :db_type=>'integer', :default=>'1'}, {:name=>'t', :db_type=>'inet', :default=>"'127.0.0.1'::inet"}]
|
|
56
|
-
s = @db.schema(:items)
|
|
57
|
-
s[1][1][:ruby_default].must_equal IPAddr.new('127.0.0.1')
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should support typecasting for the ipaddr type" do
|
|
61
|
-
ip = IPAddr.new('127.0.0.1')
|
|
62
|
-
@db.typecast_value(:ipaddr, ip).must_be_same_as(ip)
|
|
63
|
-
@db.typecast_value(:ipaddr, ip.to_s).must_equal ip
|
|
64
|
-
proc{@db.typecast_value(:ipaddr, '')}.must_raise(Sequel::InvalidValue)
|
|
65
|
-
proc{@db.typecast_value(:ipaddr, 1)}.must_raise(Sequel::InvalidValue)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should return correct results for Database#schema_type_class" do
|
|
69
|
-
@db.schema_type_class(:ipaddr).must_equal IPAddr
|
|
70
|
-
@db.schema_type_class(:integer).must_equal Integer
|
|
71
|
-
end
|
|
72
|
-
end
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require 'active_support/duration'
|
|
5
|
-
begin
|
|
6
|
-
require 'active_support/gem_version'
|
|
7
|
-
rescue LoadError
|
|
8
|
-
end
|
|
9
|
-
rescue LoadError
|
|
10
|
-
warn "Skipping test of pg_interval plugin: can't load active_support/duration"
|
|
11
|
-
else
|
|
12
|
-
describe "pg_interval extension" do
|
|
13
|
-
before do
|
|
14
|
-
@db = Sequel.connect('mock://postgres')
|
|
15
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
16
|
-
@db.extension(:pg_array, :pg_interval)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should literalize ActiveSupport::Duration instances to strings correctly" do
|
|
20
|
-
@db.literal(ActiveSupport::Duration.new(0, [])).must_equal "'0'::interval"
|
|
21
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 0]])).must_equal "'0'::interval"
|
|
22
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 10], [:minutes, 20], [:days, 3], [:months, 4], [:years, 6]])).must_equal "'6 years 4 months 3 days 20 minutes 10 seconds '::interval"
|
|
23
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 10], [:minutes, 20], [:hours, 8], [:days, 3], [:weeks, 2], [:months, 4], [:years, 6]])).must_equal "'6 years 4 months 2 weeks 3 days 8 hours 20 minutes 10 seconds '::interval"
|
|
24
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, -10.000001], [:minutes, -20], [:days, -3], [:months, -4], [:years, -6]])).must_equal "'-6 years -4 months -3 days -20 minutes -10.000001 seconds '::interval"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should literalize ActiveSupport::Duration instances with repeated parts correctly" do
|
|
28
|
-
if defined?(ActiveSupport::VERSION::STRING) && ActiveSupport::VERSION::STRING >= '5.1'
|
|
29
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 2], [:seconds, 1]])).must_equal "'1 seconds '::interval"
|
|
30
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 2], [:seconds, 1], [:days, 1], [:days, 4]])).must_equal "'4 days 1 seconds '::interval"
|
|
31
|
-
else
|
|
32
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 2], [:seconds, 1]])).must_equal "'3 seconds '::interval"
|
|
33
|
-
@db.literal(ActiveSupport::Duration.new(0, [[:seconds, 2], [:seconds, 1], [:days, 1], [:days, 4]])).must_equal "'5 days 3 seconds '::interval"
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should set up conversion procs correctly" do
|
|
38
|
-
cp = @db.conversion_procs
|
|
39
|
-
cp[1186].call("1 sec").must_equal ActiveSupport::Duration.new(1, [[:seconds, 1]])
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should set up conversion procs for arrays correctly" do
|
|
43
|
-
cp = @db.conversion_procs
|
|
44
|
-
cp[1187].call("{1 sec}").must_equal [ActiveSupport::Duration.new(1, [[:seconds, 1]])]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should not affect literalization of custom objects" do
|
|
48
|
-
o = Object.new
|
|
49
|
-
def o.sql_literal(ds) 'v' end
|
|
50
|
-
@db.literal(o).must_equal 'v'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should support using ActiveSupport::Duration instances as bound variables" do
|
|
54
|
-
@db.bound_variable_arg(1, nil).must_equal 1
|
|
55
|
-
@db.bound_variable_arg(ActiveSupport::Duration.new(0, [[:seconds, 0]]), nil).must_equal '0'
|
|
56
|
-
@db.bound_variable_arg(ActiveSupport::Duration.new(0, [[:seconds, -10.000001], [:minutes, -20], [:days, -3], [:months, -4], [:years, -6]]), nil).must_equal '-6 years -4 months -3 days -20 minutes -10.000001 seconds '
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "should support using ActiveSupport::Duration instances in array types in bound variables" do
|
|
60
|
-
@db.bound_variable_arg(Sequel.pg_array([ActiveSupport::Duration.new(0, [[:seconds, 0]])]), nil).must_equal '{"0"}'
|
|
61
|
-
@db.bound_variable_arg(Sequel.pg_array([ActiveSupport::Duration.new(0, [[:seconds, -10.000001], [:minutes, -20], [:days, -3], [:months, -4], [:years, -6]])]), nil).must_equal '{"-6 years -4 months -3 days -20 minutes -10.000001 seconds "}'
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should parse interval type from the schema correctly" do
|
|
65
|
-
@db.fetch = [{:name=>'id', :db_type=>'integer'}, {:name=>'i', :db_type=>'interval'}]
|
|
66
|
-
@db.schema(:items).map{|e| e[1][:type]}.must_equal [:integer, :interval]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "should set :ruby_default schema entries if default value is recognized" do
|
|
70
|
-
@db.fetch = [{:name=>'id', :db_type=>'integer', :default=>'1'}, {:name=>'t', :db_type=>'interval', :default=>"'3 days'::interval"}]
|
|
71
|
-
s = @db.schema(:items)
|
|
72
|
-
s[1][1][:ruby_default].must_equal ActiveSupport::Duration.new(3*86400, :days=>3)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should support typecasting for the interval type" do
|
|
76
|
-
d = ActiveSupport::Duration.new(31557600 + 2*86400*30 + 3*86400*7 + 4*86400 + 5*3600 + 6*60 + 7, [[:years, 1], [:months, 2], [:days, 25], [:seconds, 18367]])
|
|
77
|
-
@db.typecast_value(:interval, d).object_id.must_equal d.object_id
|
|
78
|
-
|
|
79
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 05:06:07").is_a?(ActiveSupport::Duration).must_equal true
|
|
80
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 05:06:07").must_equal d
|
|
81
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 05:06:07").parts.sort_by{|k,v| k.to_s}.must_equal d.parts.sort_by{|k,v| k.to_s}
|
|
82
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 05:06:07.0").parts.sort_by{|k,v| k.to_s}.must_equal d.parts.sort_by{|k,v| k.to_s}
|
|
83
|
-
|
|
84
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 5 hours 6 mins 7 secs").is_a?(ActiveSupport::Duration).must_equal true
|
|
85
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 5 hours 6 mins 7 secs").must_equal d
|
|
86
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 5 hours 6 mins 7 secs").parts.sort_by{|k,v| k.to_s}.must_equal d.parts.sort_by{|k,v| k.to_s}
|
|
87
|
-
@db.typecast_value(:interval, "1 year 2 mons 25 days 5 hours 6 mins 7.0 secs").parts.sort_by{|k,v| k.to_s}.must_equal d.parts.sort_by{|k,v| k.to_s}
|
|
88
|
-
|
|
89
|
-
d2 = ActiveSupport::Duration.new(1, [[:seconds, 1]])
|
|
90
|
-
@db.typecast_value(:interval, 1).is_a?(ActiveSupport::Duration).must_equal true
|
|
91
|
-
@db.typecast_value(:interval, 1).must_equal d2
|
|
92
|
-
@db.typecast_value(:interval, 1).parts.sort_by{|k,v| k.to_s}.must_equal d2.parts.sort_by{|k,v| k.to_s}
|
|
93
|
-
|
|
94
|
-
proc{@db.typecast_value(:interval, 'foo')}.must_raise(Sequel::InvalidValue)
|
|
95
|
-
proc{@db.typecast_value(:interval, Object.new)}.must_raise(Sequel::InvalidValue)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should return correct results for Database#schema_type_class" do
|
|
99
|
-
@db.schema_type_class(:interval).must_equal ActiveSupport::Duration
|
|
100
|
-
@db.schema_type_class(:integer).must_equal Integer
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :pg_array, :pg_array_ops, :pg_json, :pg_json_ops
|
|
4
|
-
|
|
5
|
-
describe "Sequel::Postgres::JSONOp" do
|
|
6
|
-
before do
|
|
7
|
-
@db = Sequel.connect('mock://postgres')
|
|
8
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
9
|
-
@j = Sequel.pg_json_op(:j)
|
|
10
|
-
@jb = Sequel.pg_jsonb_op(:j)
|
|
11
|
-
@l = proc{|o| @db.literal(o)}
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should have #[] get the element" do
|
|
15
|
-
@l[@j[1]].must_equal "(j -> 1)"
|
|
16
|
-
@l[@j['a']].must_equal "(j -> 'a')"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should have #[] accept an array" do
|
|
20
|
-
@l[@j[%w'a b']].must_equal "(j #> ARRAY['a','b'])"
|
|
21
|
-
@l[@j[Sequel.pg_array(%w'a b')]].must_equal "(j #> ARRAY['a','b'])"
|
|
22
|
-
@l[@j[Sequel.pg_array(:a)]].must_equal "(j #> a)"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should have #[] return an object of the same class" do
|
|
26
|
-
@l[@j[1].to_recordset].must_equal "json_to_recordset((j -> 1))"
|
|
27
|
-
@l[@j[%w'a b'][2]].must_equal "((j #> ARRAY['a','b']) -> 2)"
|
|
28
|
-
@l[@jb[1].to_recordset].must_equal "jsonb_to_recordset((j -> 1))"
|
|
29
|
-
@l[@jb[%w'a b'][2]].must_equal "((j #> ARRAY['a','b']) -> 2)"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should have #get be an alias to #[]" do
|
|
33
|
-
@l[@j.get(1)].must_equal "(j -> 1)"
|
|
34
|
-
@l[@j.get(%w'a b')].must_equal "(j #> ARRAY['a','b'])"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should have #get_text get the element as text" do
|
|
38
|
-
@l[@j.get_text(1)].must_equal "(j ->> 1)"
|
|
39
|
-
@l[@j.get_text('a')].must_equal "(j ->> 'a')"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should have #get_text accept an array" do
|
|
43
|
-
@l[@j.get_text(%w'a b')].must_equal "(j #>> ARRAY['a','b'])"
|
|
44
|
-
@l[@j.get_text(Sequel.pg_array(%w'a b'))].must_equal "(j #>> ARRAY['a','b'])"
|
|
45
|
-
@l[@j.get_text(Sequel.pg_array(:a))].must_equal "(j #>> a)"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should have #get_text return an SQL::StringExpression" do
|
|
49
|
-
@l[@j.get_text(1) + 'a'].must_equal "((j ->> 1) || 'a')"
|
|
50
|
-
@l[@j.get_text(%w'a b') + 'a'].must_equal "((j #>> ARRAY['a','b']) || 'a')"
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should have #array_length use the json_array_length function" do
|
|
54
|
-
@l[@j.array_length].must_equal "json_array_length(j)"
|
|
55
|
-
@l[@jb.array_length].must_equal "jsonb_array_length(j)"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should have #array_length return a numeric expression" do
|
|
59
|
-
@l[@j.array_length & 1].must_equal "(json_array_length(j) & 1)"
|
|
60
|
-
@l[@jb.array_length & 1].must_equal "(jsonb_array_length(j) & 1)"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "should have #each use the json_each function" do
|
|
64
|
-
@l[@j.each].must_equal "json_each(j)"
|
|
65
|
-
@l[@jb.each].must_equal "jsonb_each(j)"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should have #each_text use the json_each_text function" do
|
|
69
|
-
@l[@j.each_text].must_equal "json_each_text(j)"
|
|
70
|
-
@l[@jb.each_text].must_equal "jsonb_each_text(j)"
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should have #extract use the json_extract_path function" do
|
|
74
|
-
@l[@j.extract('a')].must_equal "json_extract_path(j, 'a')"
|
|
75
|
-
@l[@j.extract('a', 'b')].must_equal "json_extract_path(j, 'a', 'b')"
|
|
76
|
-
@l[@jb.extract('a')].must_equal "jsonb_extract_path(j, 'a')"
|
|
77
|
-
@l[@jb.extract('a', 'b')].must_equal "jsonb_extract_path(j, 'a', 'b')"
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should have #extract return a JSONOp" do
|
|
81
|
-
@l[@j.extract('a')[1]].must_equal "(json_extract_path(j, 'a') -> 1)"
|
|
82
|
-
@l[@jb.extract('a')[1]].must_equal "(jsonb_extract_path(j, 'a') -> 1)"
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should have #extract_text use the json_extract_path_text function" do
|
|
86
|
-
@l[@j.extract_text('a')].must_equal "json_extract_path_text(j, 'a')"
|
|
87
|
-
@l[@j.extract_text('a', 'b')].must_equal "json_extract_path_text(j, 'a', 'b')"
|
|
88
|
-
@l[@jb.extract_text('a')].must_equal "jsonb_extract_path_text(j, 'a')"
|
|
89
|
-
@l[@jb.extract_text('a', 'b')].must_equal "jsonb_extract_path_text(j, 'a', 'b')"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should have #extract_text return an SQL::StringExpression" do
|
|
93
|
-
@l[@j.extract_text('a') + 'a'].must_equal "(json_extract_path_text(j, 'a') || 'a')"
|
|
94
|
-
@l[@jb.extract_text('a') + 'a'].must_equal "(jsonb_extract_path_text(j, 'a') || 'a')"
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should have #keys use the json_object_keys function" do
|
|
98
|
-
@l[@j.keys].must_equal "json_object_keys(j)"
|
|
99
|
-
@l[@jb.keys].must_equal "jsonb_object_keys(j)"
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should have #array_elements use the json_array_elements function" do
|
|
103
|
-
@l[@j.array_elements].must_equal "json_array_elements(j)"
|
|
104
|
-
@l[@jb.array_elements].must_equal "jsonb_array_elements(j)"
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should have #array_elements use the json_array_elements_text function" do
|
|
108
|
-
@l[@j.array_elements_text].must_equal "json_array_elements_text(j)"
|
|
109
|
-
@l[@jb.array_elements_text].must_equal "jsonb_array_elements_text(j)"
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should have #strip_nulls use the json_strip_nulls function" do
|
|
113
|
-
@l[@j.strip_nulls].must_equal "json_strip_nulls(j)"
|
|
114
|
-
@l[@jb.strip_nulls].must_equal "jsonb_strip_nulls(j)"
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "should have #typeof use the json_typeof function" do
|
|
118
|
-
@l[@j.typeof].must_equal "json_typeof(j)"
|
|
119
|
-
@l[@jb.typeof].must_equal "jsonb_typeof(j)"
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should have #to_record use the json_to_record function" do
|
|
123
|
-
@l[@j.to_record].must_equal "json_to_record(j)"
|
|
124
|
-
@l[@jb.to_record].must_equal "jsonb_to_record(j)"
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
it "should have #to_recordset use the json_to_recordsetfunction" do
|
|
128
|
-
@l[@j.to_recordset].must_equal "json_to_recordset(j)"
|
|
129
|
-
@l[@jb.to_recordset].must_equal "jsonb_to_recordset(j)"
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "should have #populate use the json_populate_record function" do
|
|
133
|
-
@l[@j.populate(:a)].must_equal "json_populate_record(a, j)"
|
|
134
|
-
@l[@jb.populate(:a)].must_equal "jsonb_populate_record(a, j)"
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should have #populate_set use the json_populate_record function" do
|
|
138
|
-
@l[@j.populate_set(:a)].must_equal "json_populate_recordset(a, j)"
|
|
139
|
-
@l[@jb.populate_set(:a)].must_equal "jsonb_populate_recordset(a, j)"
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "#contain_all should use the ?& operator" do
|
|
143
|
-
@l[@jb.contain_all(:h1)].must_equal "(j ?& h1)"
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "#contain_all handle arrays" do
|
|
147
|
-
@l[@jb.contain_all(%w'h1')].must_equal "(j ?& ARRAY['h1'])"
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it "#contain_any should use the ?| operator" do
|
|
151
|
-
@l[@jb.contain_any(:h1)].must_equal "(j ?| h1)"
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it "#contain_any should handle arrays" do
|
|
155
|
-
@l[@jb.contain_any(%w'h1')].must_equal "(j ?| ARRAY['h1'])"
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
it "#contains should use the @> operator" do
|
|
159
|
-
@l[@jb.contains(:h1)].must_equal "(j @> h1)"
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
it "#contains should handle hashes" do
|
|
163
|
-
@l[@jb.contains('a'=>'b')].must_equal "(j @> '{\"a\":\"b\"}'::jsonb)"
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it "#contains should handle arrays" do
|
|
167
|
-
@l[@jb.contains([1, 2])].must_equal "(j @> '[1,2]'::jsonb)"
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
it "#contained_by should use the <@ operator" do
|
|
171
|
-
@l[@jb.contained_by(:h1)].must_equal "(j <@ h1)"
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
it "#contained_by should handle hashes" do
|
|
175
|
-
@l[@jb.contained_by('a'=>'b')].must_equal "(j <@ '{\"a\":\"b\"}'::jsonb)"
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it "#contained_by should handle arrays" do
|
|
179
|
-
@l[@jb.contained_by([1, 2])].must_equal "(j <@ '[1,2]'::jsonb)"
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
it "#concat should use the || operator" do
|
|
183
|
-
@l[@jb.concat(:h1)].must_equal "(j || h1)"
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "#concat should handle hashes" do
|
|
187
|
-
@l[@jb.concat('a'=>'b')].must_equal "(j || '{\"a\":\"b\"}'::jsonb)"
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "#concat should handle arrays" do
|
|
191
|
-
@l[@jb.concat([1, 2])].must_equal "(j || '[1,2]'::jsonb)"
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
it "#insert should use the jsonb_insert function" do
|
|
195
|
-
@l[@jb.insert(:a, :h)].must_equal "jsonb_insert(j, a, h, false)"
|
|
196
|
-
@l[@jb.insert(:a, :h, true)].must_equal "jsonb_insert(j, a, h, true)"
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "#insert should handle hashes" do
|
|
200
|
-
@l[@jb.insert(:a, 'a'=>'b')].must_equal "jsonb_insert(j, a, '{\"a\":\"b\"}'::jsonb, false)"
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
it "#insert should handle arrays" do
|
|
204
|
-
@l[@jb.insert(%w'a b', [1, 2])].must_equal "jsonb_insert(j, ARRAY['a','b'], '[1,2]'::jsonb, false)"
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "#set should use the jsonb_set function" do
|
|
208
|
-
@l[@jb.set(:a, :h)].must_equal "jsonb_set(j, a, h, true)"
|
|
209
|
-
@l[@jb.set(:a, :h, false)].must_equal "jsonb_set(j, a, h, false)"
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it "#set should handle hashes" do
|
|
213
|
-
@l[@jb.set(:a, 'a'=>'b')].must_equal "jsonb_set(j, a, '{\"a\":\"b\"}'::jsonb, true)"
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
it "#set should handle arrays" do
|
|
217
|
-
@l[@jb.set(%w'a b', [1, 2])].must_equal "jsonb_set(j, ARRAY['a','b'], '[1,2]'::jsonb, true)"
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it "#pretty should use the jsonb_pretty function" do
|
|
221
|
-
@l[@jb.pretty].must_equal "jsonb_pretty(j)"
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
it "#- should use the - operator" do
|
|
225
|
-
@l[@jb - 1].must_equal "(j - 1)"
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "#delete_path should use the #- operator" do
|
|
229
|
-
@l[@jb.delete_path(:a)].must_equal "(j #- a)"
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
it "#delete_path should handle arrays" do
|
|
233
|
-
@l[@jb.delete_path(['a'])].must_equal "(j #- ARRAY['a'])"
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
it "#has_key? and aliases should use the ? operator" do
|
|
237
|
-
@l[@jb.has_key?('a')].must_equal "(j ? 'a')"
|
|
238
|
-
@l[@jb.include?('a')].must_equal "(j ? 'a')"
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it "#pg_json should return self" do
|
|
242
|
-
@j.pg_json.must_be_same_as(@j)
|
|
243
|
-
@jb.pg_jsonb.must_be_same_as(@jb)
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
it "Sequel.pg_json_op should return arg for JSONOp" do
|
|
247
|
-
Sequel.pg_json_op(@j).must_be_same_as(@j)
|
|
248
|
-
Sequel.pg_jsonb_op(@jb).must_be_same_as(@jb)
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it "should be able to turn expressions into json ops using pg_json" do
|
|
252
|
-
@db.literal(Sequel.qualify(:b, :a).pg_json[1]).must_equal "(b.a -> 1)"
|
|
253
|
-
@db.literal(Sequel.function(:a, :b).pg_json[1]).must_equal "(a(b) -> 1)"
|
|
254
|
-
@db.literal(Sequel.qualify(:b, :a).pg_jsonb[1]).must_equal "(b.a -> 1)"
|
|
255
|
-
@db.literal(Sequel.function(:a, :b).pg_jsonb[1]).must_equal "(a(b) -> 1)"
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
it "should be able to turn literal strings into json ops using pg_json" do
|
|
259
|
-
@db.literal(Sequel.lit('a').pg_json[1]).must_equal "(a -> 1)"
|
|
260
|
-
@db.literal(Sequel.lit('a').pg_jsonb[1]).must_equal "(a -> 1)"
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
it "should be able to turn symbols into json ops using Sequel.pg_json_op" do
|
|
264
|
-
@db.literal(Sequel.pg_json_op(:a)[1]).must_equal "(a -> 1)"
|
|
265
|
-
@db.literal(Sequel.pg_jsonb_op(:a)[1]).must_equal "(a -> 1)"
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it "should be able to turn symbols into json ops using Sequel.pg_json" do
|
|
269
|
-
@db.literal(Sequel.pg_json(:a)[1]).must_equal "(a -> 1)"
|
|
270
|
-
@db.literal(Sequel.pg_jsonb(:a)[1]).must_equal "(a -> 1)"
|
|
271
|
-
@db.literal(Sequel.pg_jsonb(:a).contains('a'=>1)).must_equal "(a @> '{\"a\":1}'::jsonb)"
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
it "should allow transforming JSONArray instances into ArrayOp instances" do
|
|
275
|
-
@db.literal(Sequel.pg_json([1,2]).op[1]).must_equal "('[1,2]'::json -> 1)"
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
it "should allow transforming JSONHash instances into ArrayOp instances" do
|
|
279
|
-
@db.literal(Sequel.pg_json('a'=>1).op['a']).must_equal "('{\"a\":1}'::json -> 'a')"
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
it "should allow transforming JSONBArray instances into ArrayOp instances" do
|
|
283
|
-
@db.literal(Sequel.pg_jsonb([1,2]).op[1]).must_equal "('[1,2]'::jsonb -> 1)"
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
it "should allow transforming JSONBHash instances into ArrayOp instances" do
|
|
287
|
-
@db.literal(Sequel.pg_jsonb('a'=>1).op['a']).must_equal "('{\"a\":1}'::jsonb -> 'a')"
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
it "#path_exists should use the @? operator" do
|
|
291
|
-
@l[@jb.path_exists('$')].must_equal "(j @? '$')"
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
it "#path_exists result should be a boolean expression" do
|
|
295
|
-
@jb.path_exists('$').must_be_kind_of Sequel::SQL::BooleanExpression
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
it "#path_match should use the @@ operator" do
|
|
299
|
-
@l[@jb.path_match('$')].must_equal "(j @@ '$')"
|
|
300
|
-
end
|
|
301
|
-
|
|
302
|
-
it "#path_match result should be a boolean expression" do
|
|
303
|
-
@jb.path_match('$').must_be_kind_of Sequel::SQL::BooleanExpression
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
it "#path_exists! should use the jsonb_path_exists function" do
|
|
307
|
-
@l[@jb.path_exists!('$')].must_equal "jsonb_path_exists(j, '$')"
|
|
308
|
-
@l[@jb.path_exists!('$', '{"x":2}')].must_equal "jsonb_path_exists(j, '$', '{\"x\":2}')"
|
|
309
|
-
@l[@jb.path_exists!('$', x: 2)].must_equal "jsonb_path_exists(j, '$', '{\"x\":2}')"
|
|
310
|
-
@l[@jb.path_exists!('$', {x: 2}, true)].must_equal "jsonb_path_exists(j, '$', '{\"x\":2}', true)"
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
it "#path_exists! result should be a boolean expression" do
|
|
314
|
-
@jb.path_exists!('$').must_be_kind_of Sequel::SQL::BooleanExpression
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
it "#path_match! should use the jsonb_path_match function" do
|
|
318
|
-
@l[@jb.path_match!('$')].must_equal "jsonb_path_match(j, '$')"
|
|
319
|
-
@l[@jb.path_match!('$', '{"x":2}')].must_equal "jsonb_path_match(j, '$', '{\"x\":2}')"
|
|
320
|
-
@l[@jb.path_match!('$', x: 2)].must_equal "jsonb_path_match(j, '$', '{\"x\":2}')"
|
|
321
|
-
@l[@jb.path_match!('$', {x: 2}, true)].must_equal "jsonb_path_match(j, '$', '{\"x\":2}', true)"
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
it "#path_match! result should be a boolean expression" do
|
|
325
|
-
@jb.path_match!('$').must_be_kind_of Sequel::SQL::BooleanExpression
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
it "#path_query should use the jsonb_path_query function" do
|
|
329
|
-
@l[@jb.path_query('$')].must_equal "jsonb_path_query(j, '$')"
|
|
330
|
-
@l[@jb.path_query('$', '{"x":2}')].must_equal "jsonb_path_query(j, '$', '{\"x\":2}')"
|
|
331
|
-
@l[@jb.path_query('$', x: 2)].must_equal "jsonb_path_query(j, '$', '{\"x\":2}')"
|
|
332
|
-
@l[@jb.path_query('$', {x: 2}, true)].must_equal "jsonb_path_query(j, '$', '{\"x\":2}', true)"
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
it "#path_query_array should use the jsonb_path_query_array function" do
|
|
336
|
-
@l[@jb.path_query_array('$')].must_equal "jsonb_path_query_array(j, '$')"
|
|
337
|
-
@l[@jb.path_query_array('$', '{"x":2}')].must_equal "jsonb_path_query_array(j, '$', '{\"x\":2}')"
|
|
338
|
-
@l[@jb.path_query_array('$', x: 2)].must_equal "jsonb_path_query_array(j, '$', '{\"x\":2}')"
|
|
339
|
-
@l[@jb.path_query_array('$', {x: 2}, true)].must_equal "jsonb_path_query_array(j, '$', '{\"x\":2}', true)"
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
it "#path_query_array result should be a JSONBOp" do
|
|
343
|
-
@l[@jb.path_query_array('$').path_query_array('$')].must_equal "jsonb_path_query_array(jsonb_path_query_array(j, '$'), '$')"
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
it "#path_query_first should use the jsonb_path_query_first function" do
|
|
347
|
-
@l[@jb.path_query_first('$')].must_equal "jsonb_path_query_first(j, '$')"
|
|
348
|
-
@l[@jb.path_query_first('$', '{"x":2}')].must_equal "jsonb_path_query_first(j, '$', '{\"x\":2}')"
|
|
349
|
-
@l[@jb.path_query_first('$', x: 2)].must_equal "jsonb_path_query_first(j, '$', '{\"x\":2}')"
|
|
350
|
-
@l[@jb.path_query_first('$', {x: 2}, true)].must_equal "jsonb_path_query_first(j, '$', '{\"x\":2}', true)"
|
|
351
|
-
end
|
|
352
|
-
|
|
353
|
-
it "#path_query_first result should be a JSONBOp" do
|
|
354
|
-
@l[@jb.path_query_first('$').path_query_first('$')].must_equal "jsonb_path_query_first(jsonb_path_query_first(j, '$'), '$')"
|
|
355
|
-
end
|
|
356
|
-
end
|