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,172 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "pg_auto_constraint_validations plugin" do
|
|
4
|
-
def create_model(ds)
|
|
5
|
-
@ds = ds
|
|
6
|
-
@ds.send(:columns=, [:id, :i])
|
|
7
|
-
@db.fetch = @metadata_results.dup
|
|
8
|
-
c = Sequel::Model(@ds)
|
|
9
|
-
c.plugin :pg_auto_constraint_validations
|
|
10
|
-
c
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
before do
|
|
14
|
-
info = @info = {:schema=>'public', :table=>'items'}
|
|
15
|
-
@db = Sequel.mock(:host=>'postgres')
|
|
16
|
-
def @db.schema(*) [[:i, {}], [:id, {}]] end
|
|
17
|
-
@set_error = lambda{|ec, ei| @db.fetch = @db.autoid = @db.numrows = ec; info.merge!(ei)}
|
|
18
|
-
@db.define_singleton_method(:error_info){|e| info}
|
|
19
|
-
@metadata_results = [
|
|
20
|
-
[{:constraint=>'items_i_check', :column=>'i', :definition=>'CHECK i'}, {:constraint=>'items_i_id_check', :column=>'i', :definition=>'CHECK i + id < 20'}, {:constraint=>'items_i_id_check', :column=>'id', :definition=>'CHECK i + id < 20'}],
|
|
21
|
-
[{:name=>'items_i_uidx', :unique=>true, :column=>'i', :deferrable=>false}, {:name=>'items_i2_idx', :unique=>false, :column=>'i', :deferrable=>false}],
|
|
22
|
-
[{:name=>'items_i_fk', :column=>'i', :on_update=>'a', :on_delete=>'a', :table=>'items2', :refcolumn=>'id', :schema=>'public'}],
|
|
23
|
-
[{:name=>'items2_i_fk', :column=>'id', :on_update=>'a', :on_delete=>'a', :table=>'items2', :refcolumn=>'i', :schema=>'public'}],
|
|
24
|
-
[{:nspname=>'public', :relname=>'items'}]
|
|
25
|
-
]
|
|
26
|
-
@c = create_model(@db[:items])
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should handle check constraint failures as validation errors when creating" do
|
|
30
|
-
o = @c.new(:i=>12)
|
|
31
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check']
|
|
32
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
33
|
-
o.errors.must_equal(:i=>['is invalid'])
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should handle check constraint failures as validation errors when updating" do
|
|
37
|
-
o = @c.load(:i=>3)
|
|
38
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check']
|
|
39
|
-
proc{o.update(:i=>12)}.must_raise Sequel::ValidationFailed
|
|
40
|
-
o.errors.must_equal(:i=>['is invalid'])
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "should handle unique constraint failures as validation errors when creating" do
|
|
44
|
-
o = @c.new(:i=>2)
|
|
45
|
-
@set_error[Sequel::UniqueConstraintViolation, :constraint=>'items_i_uidx']
|
|
46
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
47
|
-
o.errors.must_equal(:i=>['is already taken'])
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should handle unique constraint failures as validation errors when updating" do
|
|
51
|
-
o = @c.load(:id=>5, :i=>3)
|
|
52
|
-
@set_error[Sequel::UniqueConstraintViolation, :constraint=>'items_i_uidx']
|
|
53
|
-
proc{o.update(:i=>2)}.must_raise Sequel::ValidationFailed
|
|
54
|
-
o.errors.must_equal(:i=>['is already taken'])
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should handle not null constraint failures as validation errors when creating" do
|
|
58
|
-
o = @c.new(:i=>5)
|
|
59
|
-
@set_error[Sequel::NotNullConstraintViolation, :column=>'i']
|
|
60
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
61
|
-
o.errors.must_equal(:i=>['is not present'])
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should handle not null constraint failures as validation errors when updating" do
|
|
65
|
-
o = @c.load(:i=>3)
|
|
66
|
-
@set_error[Sequel::NotNullConstraintViolation, :column=>'i']
|
|
67
|
-
proc{o.update(:i=>nil)}.must_raise Sequel::ValidationFailed
|
|
68
|
-
o.errors.must_equal(:i=>['is not present'])
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should handle foreign key constraint failures as validation errors when creating" do
|
|
72
|
-
o = @c.new(:i=>3)
|
|
73
|
-
@set_error[Sequel::ForeignKeyConstraintViolation, :constraint=>'items_i_fk', :message_primary=>'insert or']
|
|
74
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
75
|
-
o.errors.must_equal(:i=>['is invalid'])
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should handle foreign key constraint failures as validation errors when updating" do
|
|
79
|
-
o = @c.load(:i=>1)
|
|
80
|
-
@set_error[Sequel::ForeignKeyConstraintViolation, :constraint=>'items_i_fk', :message_primary=>'insert or']
|
|
81
|
-
proc{o.update(:i=>3)}.must_raise Sequel::ValidationFailed
|
|
82
|
-
o.errors.must_equal(:i=>['is invalid'])
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should handle foreign key constraint failures in other tables as validation errors when updating" do
|
|
86
|
-
o = @c.load(:i=>1)
|
|
87
|
-
@set_error[Sequel::ForeignKeyConstraintViolation, :constraint=>'items2_i_fk', :message_primary=>'update or', :schema=>'public', :table=>'items2']
|
|
88
|
-
proc{o.update(:i=>3)}.must_raise Sequel::ValidationFailed
|
|
89
|
-
o.errors.must_equal(:i=>['cannot be changed currently'])
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should handle symbol, string, and identifier table names" do
|
|
93
|
-
[@db[:items], @db.from('items'), @db.from{items}, @db.from{public[:items]}].each do |ds|
|
|
94
|
-
c = create_model(ds)
|
|
95
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check']
|
|
96
|
-
o = c.new(:i=>3)
|
|
97
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
98
|
-
o.errors.must_equal(:i=>['is invalid'])
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should skip handling of other table types such as subqueries and functions" do
|
|
103
|
-
[@db.from{foo(:bar)}, @db[:a, :b]].each do |ds|
|
|
104
|
-
@db.fetch = @metadata_results.dup
|
|
105
|
-
@c.dataset = ds
|
|
106
|
-
o = @c.new(:i=>3)
|
|
107
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check']
|
|
108
|
-
proc{o.save}.must_raise Sequel::CheckConstraintViolation
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should skip handling if the error_info method is not supported" do
|
|
113
|
-
@db.singleton_class.send(:remove_method, :error_info)
|
|
114
|
-
c = create_model(@db[:items])
|
|
115
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check']
|
|
116
|
-
o = c.new(:i=>3)
|
|
117
|
-
proc{o.save}.must_raise Sequel::CheckConstraintViolation
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should not handle constraint failures if they can't be converted" do
|
|
121
|
-
o = @c.new(:i=>12)
|
|
122
|
-
@set_error[Sequel::NotNullConstraintViolation, {}]
|
|
123
|
-
proc{o.save}.must_raise Sequel::NotNullConstraintViolation
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should reraise original exception if there is an error" do
|
|
127
|
-
o = @c.new(:i=>12)
|
|
128
|
-
def o.add_pg_constraint_validation_error; end
|
|
129
|
-
@set_error[Sequel::NotNullConstraintViolation, :column=>'i']
|
|
130
|
-
proc{o.save}.must_raise Sequel::NotNullConstraintViolation
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "should not handle constraint failures if schema or table do not match" do
|
|
134
|
-
o = @c.new(:i=>12)
|
|
135
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check', :schema=>'x']
|
|
136
|
-
proc{o.save}.must_raise Sequel::CheckConstraintViolation
|
|
137
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check', :schema=>'public', :table=>'x']
|
|
138
|
-
proc{o.save}.must_raise Sequel::CheckConstraintViolation
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
it "should handle constraint failures when disabling insert returning" do
|
|
142
|
-
c = create_model(@db[:items].disable_insert_returning)
|
|
143
|
-
o = c.new(:i=>12)
|
|
144
|
-
o.id = 1
|
|
145
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_check']
|
|
146
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
147
|
-
o.errors.must_equal(:i=>['is invalid'])
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it "should handle multi-column constraint failures as validation errors" do
|
|
151
|
-
o = @c.new(:i=>12)
|
|
152
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_id_check']
|
|
153
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
154
|
-
o.errors.must_equal([:i, :id]=>['is invalid'])
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "should handle multi-column constraint failures as validation errors when using the error_splitter plugin" do
|
|
158
|
-
@c.plugin :error_splitter
|
|
159
|
-
o = @c.new(:i=>12)
|
|
160
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_id_check']
|
|
161
|
-
proc{o.save}.must_raise Sequel::ValidationFailed
|
|
162
|
-
o.errors.must_equal(:i=>['is invalid'], :id=>['is invalid'])
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "should handle overridden constraint failures as validation errors when updating" do
|
|
166
|
-
o = @c.load(:i=>3)
|
|
167
|
-
@c.pg_auto_constraint_validation_override(:items_i_ocheck, :i, "foo bar")
|
|
168
|
-
@set_error[Sequel::CheckConstraintViolation, :constraint=>'items_i_ocheck']
|
|
169
|
-
proc{o.update(:i=>12)}.must_raise Sequel::ValidationFailed
|
|
170
|
-
o.errors.must_equal(:i=>['foo bar'])
|
|
171
|
-
end
|
|
172
|
-
end
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :migration
|
|
4
|
-
|
|
5
|
-
describe "pg_enum extension" do
|
|
6
|
-
before do
|
|
7
|
-
@db = Sequel.connect('mock://postgres')
|
|
8
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
9
|
-
@db.extend(Module.new do
|
|
10
|
-
def schema_parse_table(*)
|
|
11
|
-
[[:a, {:oid=>1}]]
|
|
12
|
-
end
|
|
13
|
-
def _metadata_dataset
|
|
14
|
-
super.with_fetch([[{:v=>1, :enumlabel=>'a'}, {:v=>1, :enumlabel=>'b'}, {:v=>1, :enumlabel=>'c'}], [{:typname=>'enum1', :v=>212389}]])
|
|
15
|
-
end
|
|
16
|
-
end)
|
|
17
|
-
@db.extension(:pg_array, :pg_enum)
|
|
18
|
-
@db.sqls
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should include enum information in the schema entry" do
|
|
22
|
-
@db.schema(:a).must_equal [[:a, {:oid=>1, :ruby_default=>nil, :type=>:enum, :enum_values=>%w'a b c'}]]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should typecast objects to string" do
|
|
26
|
-
@db.typecast_value(:enum, :a).must_equal 'a'
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should add array parsers for enum values" do
|
|
30
|
-
@db.conversion_procs[212389].call('{a,b,c}').must_equal %w'a b c'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should support #create_enum method for adding a new enum" do
|
|
34
|
-
@db.create_enum(:foo, [:a, :b, :c])
|
|
35
|
-
@db.sqls.first.must_equal "CREATE TYPE foo AS ENUM ('a', 'b', 'c')"
|
|
36
|
-
@db.create_enum(Sequel[:sch][:foo], %w'a b c')
|
|
37
|
-
@db.sqls.first.must_equal "CREATE TYPE sch.foo AS ENUM ('a', 'b', 'c')"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
with_symbol_splitting "should support #create_enum method for adding a new enum with qualified symbol" do
|
|
41
|
-
@db.create_enum(:sch__foo, %w'a b c')
|
|
42
|
-
@db.sqls.first.must_equal "CREATE TYPE sch.foo AS ENUM ('a', 'b', 'c')"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should support #rename_enum method for renameing an enum" do
|
|
46
|
-
@db.rename_enum(:foo, :bar)
|
|
47
|
-
@db.sqls.first.must_equal "ALTER TYPE foo RENAME TO bar"
|
|
48
|
-
@db.rename_enum(Sequel[:sch][:foo], Sequel[:sch][:bar])
|
|
49
|
-
@db.sqls.first.must_equal "ALTER TYPE sch.foo RENAME TO sch.bar"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should support #rename_enum_value method for renameing an enum value" do
|
|
53
|
-
@db.rename_enum_value(:foo, :b, :x)
|
|
54
|
-
@db.sqls.first.must_equal "ALTER TYPE foo RENAME VALUE 'b' TO 'x'"
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should support #drop_enum method for dropping an enum" do
|
|
58
|
-
@db.drop_enum(:foo)
|
|
59
|
-
@db.sqls.first.must_equal "DROP TYPE foo"
|
|
60
|
-
@db.drop_enum(Sequel[:sch][:foo], :if_exists=>true)
|
|
61
|
-
@db.sqls.first.must_equal "DROP TYPE IF EXISTS sch.foo"
|
|
62
|
-
@db.drop_enum('foo', :cascade=>true)
|
|
63
|
-
@db.sqls.first.must_equal "DROP TYPE foo CASCADE"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
with_symbol_splitting "should support #drop_enum method for dropping an enum with a splittable symbol" do
|
|
67
|
-
@db.drop_enum(:sch__foo, :if_exists=>true)
|
|
68
|
-
@db.sqls.first.must_equal "DROP TYPE IF EXISTS sch.foo"
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should support #add_enum_value method for adding value to an existing enum" do
|
|
72
|
-
@db.add_enum_value(:foo, :a)
|
|
73
|
-
@db.sqls.first.must_equal "ALTER TYPE foo ADD VALUE 'a'"
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should support :before option for #add_enum_value method for adding value before an existing enum value" do
|
|
77
|
-
@db.add_enum_value('foo', :a, :before=>:b)
|
|
78
|
-
@db.sqls.first.must_equal "ALTER TYPE foo ADD VALUE 'a' BEFORE 'b'"
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should support :after option for #add_enum_value method for adding value after an existing enum value" do
|
|
82
|
-
@db.add_enum_value(Sequel[:sch][:foo], :a, :after=>:b)
|
|
83
|
-
@db.sqls.first.must_equal "ALTER TYPE sch.foo ADD VALUE 'a' AFTER 'b'"
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
with_symbol_splitting "should support :after option for #add_enum_value method for adding value after an existing enum value with splittable symbol" do
|
|
87
|
-
@db.add_enum_value(:sch__foo, :a, :after=>:b)
|
|
88
|
-
@db.sqls.first.must_equal "ALTER TYPE sch.foo ADD VALUE 'a' AFTER 'b'"
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should support :if_not_exists option for #add_enum_value method for not adding the value if it exists" do
|
|
92
|
-
@db.add_enum_value(:foo, :a, :if_not_exists=>true)
|
|
93
|
-
@db.sqls.first.must_equal "ALTER TYPE foo ADD VALUE IF NOT EXISTS 'a'"
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "should reverse a create_enum directive in a migration" do
|
|
97
|
-
m = Sequel.migration{change{create_enum(:type_name, %w'value1 value2 value3')}}
|
|
98
|
-
m.apply(@db, :up)
|
|
99
|
-
@db.sqls.must_equal ["CREATE TYPE type_name AS ENUM ('value1', 'value2', 'value3')",
|
|
100
|
-
"SELECT CAST(enumtypid AS integer) AS v, enumlabel FROM pg_enum ORDER BY enumtypid, enumsortorder",
|
|
101
|
-
"SELECT typname, CAST(typarray AS integer) AS v FROM pg_type WHERE ((1 = 0) AND (typarray != 0))"]
|
|
102
|
-
m.apply(@db, :down)
|
|
103
|
-
@db.sqls.must_equal ["DROP TYPE type_name", "SELECT CAST(enumtypid AS integer) AS v, enumlabel FROM pg_enum ORDER BY enumtypid, enumsortorder",
|
|
104
|
-
"SELECT typname, CAST(typarray AS integer) AS v FROM pg_type WHERE ((1 = 0) AND (typarray != 0))"]
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should reverse a rename_enum directive in a migration" do
|
|
108
|
-
m = Sequel.migration{change{rename_enum(:old_type_name, :new_type_name)}}
|
|
109
|
-
m.apply(@db, :up)
|
|
110
|
-
@db.sqls.must_equal ["ALTER TYPE old_type_name RENAME TO new_type_name",
|
|
111
|
-
"SELECT CAST(enumtypid AS integer) AS v, enumlabel FROM pg_enum ORDER BY enumtypid, enumsortorder",
|
|
112
|
-
"SELECT typname, CAST(typarray AS integer) AS v FROM pg_type WHERE ((1 = 0) AND (typarray != 0))"]
|
|
113
|
-
m.apply(@db, :down)
|
|
114
|
-
@db.sqls.must_equal ["ALTER TYPE new_type_name RENAME TO old_type_name",
|
|
115
|
-
"SELECT CAST(enumtypid AS integer) AS v, enumlabel FROM pg_enum ORDER BY enumtypid, enumsortorder",
|
|
116
|
-
"SELECT typname, CAST(typarray AS integer) AS v FROM pg_type WHERE ((1 = 0) AND (typarray != 0))"]
|
|
117
|
-
end
|
|
118
|
-
end
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "pg_extended_date_support extension" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:host=>'postgres', :fetch=>{:v=>1}).extension(:pg_extended_date_support)
|
|
6
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
7
|
-
end
|
|
8
|
-
after do
|
|
9
|
-
Sequel.datetime_class = Time
|
|
10
|
-
Sequel.default_timezone = nil
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should convert infinite timestamps and dates as configured" do
|
|
14
|
-
cp = @db.conversion_procs
|
|
15
|
-
d = lambda{|v| cp[1082].call(v)}
|
|
16
|
-
t = lambda{|v| cp[1114].call(v)}
|
|
17
|
-
pi = 'infinity'
|
|
18
|
-
ni = '-infinity'
|
|
19
|
-
today = Date.today
|
|
20
|
-
now = Time.now
|
|
21
|
-
|
|
22
|
-
d.(today.to_s).must_equal today
|
|
23
|
-
t.(now.strftime("%Y-%m-%d %H:%M:%S.%N")).must_equal now
|
|
24
|
-
proc{@db.typecast_value(:date, pi)}.must_raise Sequel::InvalidValue
|
|
25
|
-
proc{@db.typecast_value(:datetime, pi)}.must_raise Sequel::InvalidValue
|
|
26
|
-
|
|
27
|
-
[:nil, 'nil'].each do |v|
|
|
28
|
-
@db.convert_infinite_timestamps = v
|
|
29
|
-
d.(pi).must_be_nil
|
|
30
|
-
t.(pi).must_be_nil
|
|
31
|
-
d.(ni).must_be_nil
|
|
32
|
-
t.(ni).must_be_nil
|
|
33
|
-
@db.typecast_value(:date, pi).must_equal pi
|
|
34
|
-
@db.typecast_value(:datetime, pi).must_equal pi
|
|
35
|
-
@db.typecast_value(:date, ni).must_equal ni
|
|
36
|
-
@db.typecast_value(:datetime, ni).must_equal ni
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
d.(today.to_s).must_equal today
|
|
40
|
-
t.(now.strftime("%Y-%m-%d %H:%M:%S.%N")).must_equal now
|
|
41
|
-
@db.typecast_value(:date, today.to_s).must_equal today
|
|
42
|
-
@db.typecast_value(:datetime, now.strftime("%Y-%m-%d %H:%M:%S.%N")).must_equal now
|
|
43
|
-
|
|
44
|
-
[:string, 'string'].each do |v|
|
|
45
|
-
@db.convert_infinite_timestamps = v
|
|
46
|
-
d.(pi).must_equal pi
|
|
47
|
-
t.(pi).must_equal pi
|
|
48
|
-
d.(ni).must_equal ni
|
|
49
|
-
t.(ni).must_equal ni
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
[:date, 'date'].each do |v|
|
|
53
|
-
@db.convert_infinite_timestamps = v
|
|
54
|
-
d.(pi).must_equal Date::Infinity.new
|
|
55
|
-
t.(pi).must_equal Date::Infinity.new
|
|
56
|
-
d.(ni).must_equal(-Date::Infinity.new)
|
|
57
|
-
t.(ni).must_equal(-Date::Infinity.new)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
[:float, 'float', 't', true].each do |v|
|
|
61
|
-
@db.convert_infinite_timestamps = v
|
|
62
|
-
d.(pi).must_equal 1.0/0.0
|
|
63
|
-
t.(pi).must_equal 1.0/0.0
|
|
64
|
-
d.(ni).must_equal(-1.0/0.0)
|
|
65
|
-
t.(ni).must_equal(-1.0/0.0)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
['f', false].each do |v|
|
|
69
|
-
@db.convert_infinite_timestamps = v
|
|
70
|
-
proc{d.(pi)}.must_raise ArgumentError, Sequel::InvalidValue
|
|
71
|
-
proc{t.(pi)}.must_raise ArgumentError, Sequel::InvalidValue
|
|
72
|
-
proc{d.(ni)}.must_raise ArgumentError, Sequel::InvalidValue
|
|
73
|
-
proc{t.(ni)}.must_raise ArgumentError, Sequel::InvalidValue
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "should handle parsing BC dates" do
|
|
78
|
-
@db.conversion_procs[1082].call("1092-10-20 BC").must_equal Date.new(-1091, 10, 20)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should handle parsing BC timestamps as Time values" do
|
|
82
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00 BC").must_equal Time.at(-100000000000).utc
|
|
83
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00 BC").must_equal Time.at(-100000000000).utc
|
|
84
|
-
Sequel.default_timezone = :utc
|
|
85
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20 BC").must_equal Time.at(-100000000000).utc
|
|
86
|
-
Sequel.default_timezone = nil
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should handle parsing BC timestamps as DateTime values" do
|
|
90
|
-
Sequel.datetime_class = DateTime
|
|
91
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00 BC").must_equal DateTime.new(-1199, 2, 15, 14, 13, 20)
|
|
92
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00 BC").must_equal DateTime.new(-1199, 2, 15, 14, 13, 20)
|
|
93
|
-
Sequel.default_timezone = :utc
|
|
94
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20 BC").must_equal DateTime.new(-1199, 2, 15, 14, 13, 20)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should handle parsing AD timestamps with offset seconds" do
|
|
98
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00").must_equal DateTime.new(1200, 2, 15, 14, 13, 20).to_time
|
|
99
|
-
Sequel.datetime_class = DateTime
|
|
100
|
-
@db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00").must_equal DateTime.new(1200, 2, 15, 14, 13, 20)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "should format Date::Infinity values" do
|
|
104
|
-
@db.literal(Date::Infinity.new).must_equal "'infinity'"
|
|
105
|
-
@db.literal(-Date::Infinity.new).must_equal "'-infinity'"
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "should raise errors for literalizing random Objects" do
|
|
109
|
-
proc{@db.literal(Object.new)}.must_raise Sequel::Error
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should format BC dates" do
|
|
113
|
-
@db.literal(Date.new(-1091, 10, 20)).must_equal "'1092-10-20 BC'"
|
|
114
|
-
@db.literal(Date.new(1092, 10, 20)).must_equal "'1092-10-20'"
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "should format BC datetimes" do
|
|
118
|
-
@db.literal(DateTime.new(-1199, 2, 15, 14, 13, 20)).must_equal "'1200-02-15 14:13:20.000000000+0000 BC'"
|
|
119
|
-
@db.literal(DateTime.new(1200, 2, 15, 14, 13, 20)).must_equal "'1200-02-15 14:13:20.000000+0000'"
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should format BC times" do
|
|
123
|
-
@db.literal(Time.at(-100000000000).utc).must_equal "'1200-02-15 14:13:20.000000000+0000 BC'"
|
|
124
|
-
@db.literal(Time.at(100000000000).utc).must_equal "'5138-11-16 09:46:40.000000+0000'"
|
|
125
|
-
end
|
|
126
|
-
end
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops
|
|
4
|
-
|
|
5
|
-
describe "Sequel::Postgres::HStoreOp" do
|
|
6
|
-
before do
|
|
7
|
-
@db = Sequel.connect('mock://postgres')
|
|
8
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
9
|
-
@ds = @db.dataset
|
|
10
|
-
@h = Sequel.hstore_op(:h)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "#- should use the - operator" do
|
|
14
|
-
@ds.literal(@h - :a).must_equal "(h - a)"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "#- should cast String argument to text when using - operator" do
|
|
18
|
-
@ds.literal(@h - 'a').must_equal "(h - CAST('a' AS text))"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "#- should not cast LiteralString argument to text when using - operator" do
|
|
22
|
-
@ds.literal(@h - Sequel.lit('a')).must_equal "(h - a)"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "#- should handle arrays" do
|
|
26
|
-
@ds.literal(@h - %w'a').must_equal "(h - ARRAY['a'])"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "#- should handle hashes" do
|
|
30
|
-
@ds.literal(@h - {'a'=>'b'}).must_equal "(h - '\"a\"=>\"b\"'::hstore)"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "#- should return an HStoreOp" do
|
|
34
|
-
@ds.literal((@h - :a)['a']).must_equal "((h - a) -> 'a')"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "#[] should use the -> operator" do
|
|
38
|
-
@ds.literal(@h['a']).must_equal "(h -> 'a')"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "#[] should handle arrays" do
|
|
42
|
-
@ds.literal(@h[%w'a']).must_equal "(h -> ARRAY['a'])"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "#[] should return a PGArrayOp if given an array" do
|
|
46
|
-
@ds.literal(@h[%w'a'][0]).must_equal "((h -> ARRAY['a']))[0]"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "#[] should not return a PGArrayOp if given an array but pg_array_op is not supported" do
|
|
50
|
-
begin
|
|
51
|
-
module Sequel::Postgres::HStoreOp::Sequel
|
|
52
|
-
SQL = ::Sequel::SQL
|
|
53
|
-
end
|
|
54
|
-
@ds.literal(@h[%w'a']).wont_be_kind_of(Sequel::Postgres::ArrayOp)
|
|
55
|
-
ensure
|
|
56
|
-
Sequel::Postgres::HStoreOp.send(:remove_const, :Sequel)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "#[] should return a PGArrayOp if given a PGArray" do
|
|
61
|
-
@ds.literal(@h[Sequel.pg_array(%w'a')][0]).must_equal "((h -> ARRAY['a']))[0]"
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "#[] should return a PGArrayOp if given a PGArrayOp" do
|
|
65
|
-
@ds.literal(@h[Sequel.pg_array_op(:a)][0]).must_equal "((h -> a))[0]"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "#[] should return a string expression" do
|
|
69
|
-
@ds.literal(@h['a'] + 'b').must_equal "((h -> 'a') || 'b')"
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "#concat and #merge should use the || operator" do
|
|
73
|
-
@ds.literal(@h.concat(:h1)).must_equal "(h || h1)"
|
|
74
|
-
@ds.literal(@h.merge(:h1)).must_equal "(h || h1)"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "#concat and #merge should handle hashes" do
|
|
78
|
-
@ds.literal(@h.concat('a'=>'b')).must_equal "(h || '\"a\"=>\"b\"'::hstore)"
|
|
79
|
-
@ds.literal(@h.merge('a'=>'b')).must_equal "(h || '\"a\"=>\"b\"'::hstore)"
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "#concat should return an HStoreOp" do
|
|
83
|
-
@ds.literal(@h.concat(:h1)['a']).must_equal "((h || h1) -> 'a')"
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "#contain_all should use the ?& operator" do
|
|
87
|
-
@ds.literal(@h.contain_all(:h1)).must_equal "(h ?& h1)"
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "#contain_all handle arrays" do
|
|
91
|
-
@ds.literal(@h.contain_all(%w'h1')).must_equal "(h ?& ARRAY['h1'])"
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it "#contain_any should use the ?| operator" do
|
|
95
|
-
@ds.literal(@h.contain_any(:h1)).must_equal "(h ?| h1)"
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "#contain_any should handle arrays" do
|
|
99
|
-
@ds.literal(@h.contain_any(%w'h1')).must_equal "(h ?| ARRAY['h1'])"
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "#contains should use the @> operator" do
|
|
103
|
-
@ds.literal(@h.contains(:h1)).must_equal "(h @> h1)"
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "#contains should handle hashes" do
|
|
107
|
-
@ds.literal(@h.contains('a'=>'b')).must_equal "(h @> '\"a\"=>\"b\"'::hstore)"
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "#contained_by should use the <@ operator" do
|
|
111
|
-
@ds.literal(@h.contained_by(:h1)).must_equal "(h <@ h1)"
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "#contained_by should handle hashes" do
|
|
115
|
-
@ds.literal(@h.contained_by('a'=>'b')).must_equal "(h <@ '\"a\"=>\"b\"'::hstore)"
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "#defined should use the defined function" do
|
|
119
|
-
@ds.literal(@h.defined('a')).must_equal "defined(h, 'a')"
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "#delete should use the delete function" do
|
|
123
|
-
@ds.literal(@h.delete('a')).must_equal "delete(h, 'a')"
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "#delete should handle arrays" do
|
|
127
|
-
@ds.literal(@h.delete(%w'a')).must_equal "delete(h, ARRAY['a'])"
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "#delete should handle hashes" do
|
|
131
|
-
@ds.literal(@h.delete('a'=>'b')).must_equal "delete(h, '\"a\"=>\"b\"'::hstore)"
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it "#delete should return an HStoreOp" do
|
|
135
|
-
@ds.literal(@h.delete('a')['a']).must_equal "(delete(h, 'a') -> 'a')"
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "#each should use the each function" do
|
|
139
|
-
@ds.literal(@h.each).must_equal "each(h)"
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "#has_key? and aliases should use the ? operator" do
|
|
143
|
-
@ds.literal(@h.has_key?('a')).must_equal "(h ? 'a')"
|
|
144
|
-
@ds.literal(@h.key?('a')).must_equal "(h ? 'a')"
|
|
145
|
-
@ds.literal(@h.member?('a')).must_equal "(h ? 'a')"
|
|
146
|
-
@ds.literal(@h.include?('a')).must_equal "(h ? 'a')"
|
|
147
|
-
@ds.literal(@h.exist?('a')).must_equal "(h ? 'a')"
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it "#hstore should return the receiver" do
|
|
151
|
-
@h.hstore.must_be_same_as(@h)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it "#keys and #akeys should use the akeys function" do
|
|
155
|
-
@ds.literal(@h.keys).must_equal "akeys(h)"
|
|
156
|
-
@ds.literal(@h.akeys).must_equal "akeys(h)"
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "#keys and #akeys should return PGArrayOps" do
|
|
160
|
-
@ds.literal(@h.keys[0]).must_equal "(akeys(h))[0]"
|
|
161
|
-
@ds.literal(@h.akeys[0]).must_equal "(akeys(h))[0]"
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it "#populate should use the populate_record function" do
|
|
165
|
-
@ds.literal(@h.populate(:a)).must_equal "populate_record(a, h)"
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
it "#record_set should use the #= operator" do
|
|
169
|
-
@ds.literal(@h.record_set(:a)).must_equal "(a #= h)"
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it "#skeys should use the skeys function" do
|
|
173
|
-
@ds.literal(@h.skeys).must_equal "skeys(h)"
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "#slice should should use the slice function" do
|
|
177
|
-
@ds.literal(@h.slice(:a)).must_equal "slice(h, a)"
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
it "#slice should handle arrays" do
|
|
181
|
-
@ds.literal(@h.slice(%w'a')).must_equal "slice(h, ARRAY['a'])"
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
it "#slice should return an HStoreOp" do
|
|
185
|
-
@ds.literal(@h.slice(:a)['a']).must_equal "(slice(h, a) -> 'a')"
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
it "#svals should use the svals function" do
|
|
189
|
-
@ds.literal(@h.svals).must_equal "svals(h)"
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
it "#to_array should use the hstore_to_array function" do
|
|
193
|
-
@ds.literal(@h.to_array).must_equal "hstore_to_array(h)"
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it "#to_array should return a PGArrayOp" do
|
|
197
|
-
@ds.literal(@h.to_array[0]).must_equal "(hstore_to_array(h))[0]"
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
it "#to_matrix should use the hstore_to_matrix function" do
|
|
201
|
-
@ds.literal(@h.to_matrix).must_equal "hstore_to_matrix(h)"
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
it "#to_matrix should return a PGArrayOp" do
|
|
205
|
-
@ds.literal(@h.to_matrix[0]).must_equal "(hstore_to_matrix(h))[0]"
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
it "#values and #avals should use the avals function" do
|
|
209
|
-
@ds.literal(@h.values).must_equal "avals(h)"
|
|
210
|
-
@ds.literal(@h.avals).must_equal "avals(h)"
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "#values and #avals should return PGArrayOps" do
|
|
214
|
-
@ds.literal(@h.values[0]).must_equal "(avals(h))[0]"
|
|
215
|
-
@ds.literal(@h.avals[0]).must_equal "(avals(h))[0]"
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
it "should have Sequel.hstore_op return HStoreOp instances as-is" do
|
|
219
|
-
Sequel.hstore_op(@h).must_be_same_as(@h)
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
it "should have Sequel.hstore return HStoreOp instances" do
|
|
223
|
-
Sequel.hstore(:h).must_equal @h
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
it "should be able to turn expressions into hstore ops using hstore" do
|
|
227
|
-
@ds.literal(Sequel.qualify(:b, :a).hstore['a']).must_equal "(b.a -> 'a')"
|
|
228
|
-
@ds.literal(Sequel.function(:a, :b).hstore['a']).must_equal "(a(b) -> 'a')"
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
it "should be able to turn literal strings into hstore ops using hstore" do
|
|
232
|
-
@ds.literal(Sequel.lit('a').hstore['a']).must_equal "(a -> 'a')"
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
it "should allow transforming HStore instances into HStoreOp instances" do
|
|
236
|
-
@ds.literal(Sequel.hstore('a'=>'b').op['a']).must_equal "('\"a\"=>\"b\"'::hstore -> 'a')"
|
|
237
|
-
end
|
|
238
|
-
end
|