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,347 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe Sequel::Model, "single table inheritance plugin" do
|
|
4
|
-
before do
|
|
5
|
-
class ::StiTest < Sequel::Model
|
|
6
|
-
columns :id, :kind, :blah
|
|
7
|
-
plugin :single_table_inheritance, :kind
|
|
8
|
-
end
|
|
9
|
-
class ::StiTestSub1 < StiTest
|
|
10
|
-
end
|
|
11
|
-
class ::StiTestSub2 < StiTest
|
|
12
|
-
end
|
|
13
|
-
@ds = StiTest.dataset
|
|
14
|
-
DB.reset
|
|
15
|
-
end
|
|
16
|
-
after do
|
|
17
|
-
Object.send(:remove_const, :StiTestSub1)
|
|
18
|
-
Object.send(:remove_const, :StiTestSub2)
|
|
19
|
-
Object.send(:remove_const, :StiTest)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe ".sti_load" do
|
|
23
|
-
it "should load instances of the correct type" do
|
|
24
|
-
StiTest.sti_load(:id => 3).must_be_instance_of StiTest
|
|
25
|
-
StiTest.sti_load(:id => 3, :kind => 'StiTestSub1').must_be_instance_of StiTestSub1
|
|
26
|
-
StiTest.sti_load(:id => 3, :kind => 'StiTestSub2').must_be_instance_of StiTestSub2
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
describe ".sti_class_from_sti_key" do
|
|
31
|
-
it "should load the correct subclass based on the key" do
|
|
32
|
-
StiTest.sti_class_from_sti_key('StiTest').must_equal StiTest
|
|
33
|
-
StiTest.sti_class_from_sti_key('StiTestSub1').must_equal StiTestSub1
|
|
34
|
-
StiTest.sti_class_from_sti_key('StiTestSub2').must_equal StiTestSub2
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should freeze sti metadata when freezing model class" do
|
|
39
|
-
StiTest.freeze
|
|
40
|
-
StiTest.sti_dataset.frozen?.must_equal true
|
|
41
|
-
|
|
42
|
-
StiTestSub1.freeze
|
|
43
|
-
StiTestSub1.sti_key_array.frozen?.must_equal true
|
|
44
|
-
|
|
45
|
-
proc{class ::StiTestSub1Sub1 < StiTestSub1; end}.must_raise RuntimeError, TypeError
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should have simple_table = nil" do
|
|
49
|
-
StiTest.simple_table.must_equal "sti_tests"
|
|
50
|
-
StiTestSub1.simple_table.must_be_nil
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should allow changing the inheritance column via a plugin :single_table_inheritance call" do
|
|
54
|
-
StiTest.plugin :single_table_inheritance, :blah
|
|
55
|
-
Object.send(:remove_const, :StiTestSub1)
|
|
56
|
-
Object.send(:remove_const, :StiTestSub2)
|
|
57
|
-
class ::StiTestSub1 < StiTest; end
|
|
58
|
-
class ::StiTestSub2 < StiTest; end
|
|
59
|
-
StiTest.dataset = StiTest.dataset.with_fetch([{:blah=>'StiTest'}, {:blah=>'StiTestSub1'}, {:blah=>'StiTestSub2'}])
|
|
60
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTestSub1, StiTestSub2]
|
|
61
|
-
StiTest.dataset.sql.must_equal "SELECT * FROM sti_tests"
|
|
62
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.blah IN ('StiTestSub1'))"
|
|
63
|
-
StiTestSub2.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.blah IN ('StiTestSub2'))"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "should return rows with the correct class based on the polymorphic_key value" do
|
|
67
|
-
StiTest.dataset = StiTest.dataset.with_fetch([{:kind=>'StiTest'}, {:kind=>'StiTestSub1'}, {:kind=>'StiTestSub2'}])
|
|
68
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTestSub1, StiTestSub2]
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should return rows with the correct class based on the polymorphic_key value when retreiving by primary key" do
|
|
72
|
-
StiTest.dataset = StiTest.dataset.with_fetch([{:kind=>'StiTestSub1'}])
|
|
73
|
-
StiTest[1].class.must_equal StiTestSub1
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should return rows with the correct class for subclasses based on the polymorphic_key value" do
|
|
77
|
-
class ::StiTestSub1Sub < StiTestSub1; end
|
|
78
|
-
StiTestSub1.dataset = StiTestSub1.dataset.with_fetch([{:kind=>'StiTestSub1'}, {:kind=>'StiTestSub1Sub'}])
|
|
79
|
-
StiTestSub1.all.collect{|x| x.class}.must_equal [StiTestSub1, StiTestSub1Sub]
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should fallback to the main class if the given class does not exist" do
|
|
83
|
-
StiTest.dataset = StiTest.dataset.with_fetch(:kind=>'StiTestSub3')
|
|
84
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest]
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should inherit dataset_modules correctly in subclass" do
|
|
88
|
-
StiTest.dataset_module{def foo; 1; end}
|
|
89
|
-
Object.send(:remove_const, :StiTestSub1)
|
|
90
|
-
Object.send(:remove_const, :StiTestSub2)
|
|
91
|
-
class ::StiTestSub1 < StiTest; end
|
|
92
|
-
StiTestSub1.dataset_module{def bar; 2; end}
|
|
93
|
-
class ::StiTestSub2 < StiTestSub1; end
|
|
94
|
-
StiTestSub2.dataset_module{def baz; 3; end}
|
|
95
|
-
|
|
96
|
-
StiTest.dataset.foo.must_equal 1
|
|
97
|
-
proc{StiTest.dataset.bar}.must_raise NoMethodError
|
|
98
|
-
proc{StiTest.dataset.baz}.must_raise NoMethodError
|
|
99
|
-
StiTestSub1.dataset.foo.must_equal 1
|
|
100
|
-
StiTestSub1.dataset.bar.must_equal 2
|
|
101
|
-
proc{StiTestSub1.dataset.baz}.must_raise NoMethodError
|
|
102
|
-
StiTestSub2.dataset.foo.must_equal 1
|
|
103
|
-
StiTestSub2.dataset.bar.must_equal 2
|
|
104
|
-
StiTestSub2.dataset.baz.must_equal 3
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should fallback to the main class if the sti_key field is empty or nil without calling constantize" do
|
|
108
|
-
called = false
|
|
109
|
-
StiTest.define_singleton_method(:constantize){|_| called = true}
|
|
110
|
-
StiTest.plugin :single_table_inheritance, :kind
|
|
111
|
-
StiTest.dataset = StiTest.dataset.with_fetch([{:kind=>''}, {:kind=>nil}])
|
|
112
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTest]
|
|
113
|
-
called.must_equal false
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "should set the model class name when saving" do
|
|
117
|
-
StiTest.new.save
|
|
118
|
-
StiTestSub1.new.save
|
|
119
|
-
StiTestSub2.new.save
|
|
120
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (kind) VALUES ('StiTest')", "SELECT * FROM sti_tests WHERE id = 10", "INSERT INTO sti_tests (kind) VALUES ('StiTestSub1')", "SELECT * FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub1')) AND (id = 10)) LIMIT 1", "INSERT INTO sti_tests (kind) VALUES ('StiTestSub2')", "SELECT * FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub2')) AND (id = 10)) LIMIT 1"]
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
it "should destroy the model correctly" do
|
|
124
|
-
StiTest.load(:id=>1).destroy
|
|
125
|
-
StiTestSub1.load(:id=>1).destroy
|
|
126
|
-
StiTestSub2.load(:id=>1).destroy
|
|
127
|
-
DB.sqls.must_equal ["DELETE FROM sti_tests WHERE id = 1", "DELETE FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub1')) AND (id = 1))", "DELETE FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub2')) AND (id = 1))"]
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "should handle validations on the type column field" do
|
|
131
|
-
o = StiTestSub1.new
|
|
132
|
-
def o.validate
|
|
133
|
-
errors.add(:kind, 'not present') unless kind
|
|
134
|
-
end
|
|
135
|
-
o.valid?.must_equal true
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should set type column field even if validations are skipped" do
|
|
139
|
-
StiTestSub1.new.save(:validate=>false)
|
|
140
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (kind) VALUES ('StiTestSub1')", "SELECT * FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub1')) AND (id = 10)) LIMIT 1"]
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
it "should override an existing value in the class name field" do
|
|
144
|
-
StiTest.create(:kind=>'StiTestSub1')
|
|
145
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (kind) VALUES ('StiTestSub1')", "SELECT * FROM sti_tests WHERE id = 10"]
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it "should handle type column with the same name as existing method names" do
|
|
149
|
-
StiTest.plugin :single_table_inheritance, :type
|
|
150
|
-
StiTest.columns :id, :type
|
|
151
|
-
StiTest.create
|
|
152
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (type) VALUES ('StiTest')", "SELECT * FROM sti_tests WHERE id = 10"]
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
it "should add a filter to model datasets inside subclasses hook to only retreive objects with the matching key" do
|
|
156
|
-
StiTest.dataset.sql.must_equal "SELECT * FROM sti_tests"
|
|
157
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1'))"
|
|
158
|
-
StiTestSub2.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub2'))"
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "should add a correct filter for multiple levels of subclasses" do
|
|
162
|
-
class ::StiTestSub1A < StiTestSub1; end
|
|
163
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1', 'StiTestSub1A'))"
|
|
164
|
-
StiTestSub1A.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1A'))"
|
|
165
|
-
class ::StiTestSub2A < StiTestSub2; end
|
|
166
|
-
StiTestSub2.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub2', 'StiTestSub2A'))"
|
|
167
|
-
StiTestSub2A.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub2A'))"
|
|
168
|
-
class ::StiTestSub1B < StiTestSub1A; end
|
|
169
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1', 'StiTestSub1A', 'StiTestSub1B'))"
|
|
170
|
-
StiTestSub1A.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1A', 'StiTestSub1B'))"
|
|
171
|
-
StiTestSub1B.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1B'))"
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
it "should work correctly with the :caching plugin" do
|
|
175
|
-
cache_class = Class.new(Hash) do
|
|
176
|
-
attr_accessor :ttl
|
|
177
|
-
def set(k, v, ttl); self[k] = v; @ttl = ttl; end
|
|
178
|
-
def get(k); self[k]; end
|
|
179
|
-
end
|
|
180
|
-
cache = cache_class.new
|
|
181
|
-
|
|
182
|
-
StiTest.plugin :caching, cache
|
|
183
|
-
def StiTest.cache_key_prefix; "stitest" end
|
|
184
|
-
c2 = Class.new StiTest
|
|
185
|
-
c2.cache_key(:id).must_equal StiTest.cache_key(:id)
|
|
186
|
-
|
|
187
|
-
obj2 = c2.new
|
|
188
|
-
obj2.values[:x] = 2
|
|
189
|
-
obj2.save
|
|
190
|
-
c2[obj2.id]
|
|
191
|
-
c2.cache_get_pk(obj2.id).values.must_equal StiTest.cache_get_pk(obj2.id).values
|
|
192
|
-
obj2.save
|
|
193
|
-
c2.cache_get_pk(obj2.id).must_be_nil
|
|
194
|
-
StiTest.cache_get_pk(obj2.id).must_be_nil
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
describe "with custom options" do
|
|
198
|
-
before do
|
|
199
|
-
class ::StiTest2 < Sequel::Model
|
|
200
|
-
columns :id, :kind
|
|
201
|
-
def _save_refresh; end
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
after do
|
|
205
|
-
Object.send(:remove_const, :StiTest2)
|
|
206
|
-
Object.send(:remove_const, :StiTest3) if defined?(StiTest3)
|
|
207
|
-
Object.send(:remove_const, :StiTest4) if defined?(StiTest4)
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
it "should freeze sti key and model map if given as hashes when freezing model class" do
|
|
211
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>StiTest2, 1=>:StiTest3, 2=>'StiTest4'}, :key_map=>{StiTest2=>4, 'StiTest3'=>5, 'StiTest4'=>6}
|
|
212
|
-
StiTest2.freeze
|
|
213
|
-
StiTest2.sti_key_map.frozen?.must_equal true
|
|
214
|
-
StiTest2.sti_model_map.frozen?.must_equal true
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
it "should have working row_proc if using set_dataset in subclass to remove columns" do
|
|
218
|
-
StiTest2.plugin :single_table_inheritance, :kind
|
|
219
|
-
class ::StiTest3 < ::StiTest2
|
|
220
|
-
set_dataset(dataset.select(*(columns - [:blah])))
|
|
221
|
-
end
|
|
222
|
-
class ::StiTest4 < ::StiTest3; end
|
|
223
|
-
StiTest3.dataset = StiTest3.dataset.with_fetch(:id=>1, :kind=>'StiTest4')
|
|
224
|
-
StiTest3[1].must_equal StiTest4.load(:id=>1, :kind=>'StiTest4')
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
it "should work with custom procs with strings" do
|
|
228
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>proc{|v| v == 1 ? 'StiTest3' : 'StiTest4'}, :key_map=>proc{|klass| klass.name == 'StiTest3' ? 1 : 2}
|
|
229
|
-
class ::StiTest3 < ::StiTest2; end
|
|
230
|
-
class ::StiTest4 < ::StiTest2; end
|
|
231
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest4)
|
|
232
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
233
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
234
|
-
|
|
235
|
-
StiTest2.create.kind.must_equal 2
|
|
236
|
-
StiTest3.create.kind.must_equal 1
|
|
237
|
-
StiTest4.create.kind.must_equal 2
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
it "should work with custom procs with symbols" do
|
|
241
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>proc{|v| v == 1 ? :StiTest3 : :StiTest4}, :key_map=>proc{|klass| klass.name == 'StiTest3' ? 1 : 2}
|
|
242
|
-
class ::StiTest3 < ::StiTest2; end
|
|
243
|
-
class ::StiTest4 < ::StiTest2; end
|
|
244
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest4)
|
|
245
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
246
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
247
|
-
|
|
248
|
-
StiTest2.create.kind.must_equal 2
|
|
249
|
-
StiTest3.create.kind.must_equal 1
|
|
250
|
-
StiTest4.create.kind.must_equal 2
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it "should work with custom hashes" do
|
|
254
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>StiTest2, 1=>:StiTest3, 2=>'StiTest4'}, :key_map=>{StiTest2=>4, 'StiTest3'=>5, 'StiTest4'=>6}
|
|
255
|
-
class ::StiTest3 < ::StiTest2; end
|
|
256
|
-
class ::StiTest4 < ::StiTest2; end
|
|
257
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest2)
|
|
258
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
259
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
260
|
-
StiTest3.sti_model_map.must_equal StiTest2.sti_model_map
|
|
261
|
-
|
|
262
|
-
StiTest2.create.kind.must_equal 4
|
|
263
|
-
StiTest3.create.kind.must_equal 5
|
|
264
|
-
StiTest4.create.kind.must_equal 6
|
|
265
|
-
|
|
266
|
-
class ::StiTest5 < ::StiTest4; end
|
|
267
|
-
StiTest5.create.kind.must_be_nil
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
it "should infer key_map from model_map if provided as a hash" do
|
|
271
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>StiTest2, 1=>'StiTest3', 2=>:StiTest4}
|
|
272
|
-
class ::StiTest3 < ::StiTest2; end
|
|
273
|
-
class ::StiTest4 < ::StiTest2; end
|
|
274
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest2)
|
|
275
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
276
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
277
|
-
|
|
278
|
-
StiTest2.create.kind.must_equal 0
|
|
279
|
-
StiTest3.create.kind.must_equal 1
|
|
280
|
-
StiTest4.create.kind.must_equal 2
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
it "should raise exceptions if a bad model value is used" do
|
|
284
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>1,1=>1.5, 2=>Date.today}
|
|
285
|
-
class ::StiTest3 < ::StiTest2; end
|
|
286
|
-
class ::StiTest4 < ::StiTest2; end
|
|
287
|
-
proc{StiTest2.dataset.row_proc.call(:kind=>0)}.must_raise(Sequel::Error)
|
|
288
|
-
proc{StiTest2.dataset.row_proc.call(:kind=>1)}.must_raise(Sequel::Error)
|
|
289
|
-
proc{StiTest2.dataset.row_proc.call(:kind=>2)}.must_raise(Sequel::Error)
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
it "should work with non-bijective mappings" do
|
|
293
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>'StiTest3', 1=>'StiTest3', 2=>'StiTest4'}
|
|
294
|
-
class ::StiTest3 < ::StiTest2; end
|
|
295
|
-
class ::StiTest4 < ::StiTest2; end
|
|
296
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest3)
|
|
297
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
298
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
299
|
-
|
|
300
|
-
[0,1].must_include(StiTest3.create.kind)
|
|
301
|
-
StiTest4.create.kind.must_equal 2
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
it "should work with non-bijective mappings and key map procs" do
|
|
305
|
-
StiTest2.plugin :single_table_inheritance, :kind,
|
|
306
|
-
:key_map=>proc{|model| model.to_s == 'StiTest4' ? 2 : [0,1] }
|
|
307
|
-
class ::StiTest3 < ::StiTest2; end
|
|
308
|
-
class ::StiTest4 < ::StiTest2; end
|
|
309
|
-
|
|
310
|
-
StiTest2.dataset.sql.must_equal "SELECT * FROM sti_test2s"
|
|
311
|
-
StiTest3.dataset.sql.must_equal "SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (0, 1))"
|
|
312
|
-
StiTest4.dataset.sql.must_equal "SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (2))"
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it "should create correct sql with non-bijective mappings" do
|
|
316
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>'StiTest3', 1=>'StiTest3', 2=>'StiTest4'}
|
|
317
|
-
class ::StiTest3 < ::StiTest2; end
|
|
318
|
-
class ::StiTest4 < ::StiTest2; end
|
|
319
|
-
|
|
320
|
-
StiTest2.dataset.sql.must_equal "SELECT * FROM sti_test2s"
|
|
321
|
-
["SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (0, 1))",
|
|
322
|
-
"SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (1, 0))"].must_include(StiTest3.dataset.sql)
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
it "should destroy the model correctly" do
|
|
326
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{'sti3'=>'StiTest3', 'sti3b'=>'StiTest3', 'sti4'=>'StiTest4'}
|
|
327
|
-
class ::StiTest3 < ::StiTest2; end
|
|
328
|
-
class ::StiTest4 < ::StiTest2; end
|
|
329
|
-
StiTest2.load(:id=>1).destroy
|
|
330
|
-
StiTest3.load(:id=>1).destroy
|
|
331
|
-
sqls = DB.sqls
|
|
332
|
-
sqls.shift.must_equal "DELETE FROM sti_test2s WHERE id = 1"
|
|
333
|
-
["DELETE FROM sti_test2s WHERE ((sti_test2s.kind IN ('sti3', 'sti3b')) AND (id = 1))",
|
|
334
|
-
"DELETE FROM sti_test2s WHERE ((sti_test2s.kind IN ('sti3b', 'sti3')) AND (id = 1))"].must_include(sqls.pop)
|
|
335
|
-
sqls.must_equal []
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
it "should honor a :key_chooser" do
|
|
339
|
-
StiTest2.plugin :single_table_inheritance, :kind, :key_chooser => proc{|inst| inst.model.to_s.downcase }
|
|
340
|
-
class ::StiTest3 < ::StiTest2; end
|
|
341
|
-
class ::StiTest4 < ::StiTest2; end
|
|
342
|
-
|
|
343
|
-
StiTest3.create.kind.must_equal 'stitest3'
|
|
344
|
-
StiTest4.create.kind.must_equal 'stitest4'
|
|
345
|
-
end
|
|
346
|
-
end
|
|
347
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::SingularTableNames" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model)
|
|
6
|
-
@c.plugin :singular_table_names
|
|
7
|
-
end
|
|
8
|
-
after do
|
|
9
|
-
Object.send(:remove_const, :Foo)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should not used the pluralized table name" do
|
|
13
|
-
class ::Foo < @c; end
|
|
14
|
-
Foo.table_name.must_equal :foo
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should handle nested moedls name" do
|
|
18
|
-
module ::Foo; end
|
|
19
|
-
class Foo::Bar < @c; end
|
|
20
|
-
Foo::Bar.table_name.must_equal :bar
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::SkipCreateRefresh" do
|
|
4
|
-
it "should skip the refresh after saving a new object" do
|
|
5
|
-
c = Class.new(Sequel::Model(:a))
|
|
6
|
-
c.columns :id, :x
|
|
7
|
-
c.dataset = c.dataset.with_autoid(2)
|
|
8
|
-
c.db.reset
|
|
9
|
-
c.create(:x=>1)
|
|
10
|
-
c.db.sqls.must_equal ['INSERT INTO a (x) VALUES (1)', 'SELECT * FROM a WHERE id = 2']
|
|
11
|
-
|
|
12
|
-
c.dataset = c.dataset.with_autoid(2)
|
|
13
|
-
c.plugin :skip_create_refresh
|
|
14
|
-
c.db.reset
|
|
15
|
-
c.create(:x=>3).values.must_equal(:id=>2, :x=>3)
|
|
16
|
-
c.db.sqls.must_equal ['INSERT INTO a (x) VALUES (3)']
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
require_relative "../sequel_warning"
|
|
2
|
-
|
|
3
|
-
if ENV['COVERAGE']
|
|
4
|
-
require_relative "../sequel_coverage"
|
|
5
|
-
SimpleCov.sequel_coverage(:filter=>%r{lib/sequel/(extensions|plugins)/\w+\.rb\z})
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
ENV['MT_NO_PLUGINS'] = '1' # Work around stupid autoloading of plugins
|
|
9
|
-
gem 'minitest'
|
|
10
|
-
require 'minitest/autorun'
|
|
11
|
-
require 'minitest/hooks/default'
|
|
12
|
-
require 'minitest/shared_description'
|
|
13
|
-
|
|
14
|
-
$:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
|
|
15
|
-
require_relative "../../lib/sequel"
|
|
16
|
-
|
|
17
|
-
require_relative '../deprecation_helper'
|
|
18
|
-
|
|
19
|
-
begin
|
|
20
|
-
# Attempt to load ActiveSupport blank extension and inflector first, so Sequel
|
|
21
|
-
# can override them.
|
|
22
|
-
require 'active_support/core_ext/object/blank'
|
|
23
|
-
require 'active_support/inflector'
|
|
24
|
-
require 'active_support/core_ext/string/inflections'
|
|
25
|
-
rescue LoadError
|
|
26
|
-
nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
Sequel.extension :core_refinements if RUBY_VERSION >= '2.0.0' && RUBY_ENGINE == 'ruby'
|
|
30
|
-
|
|
31
|
-
class << Sequel::Model
|
|
32
|
-
attr_writer :db_schema
|
|
33
|
-
alias orig_columns columns
|
|
34
|
-
def columns(*cols)
|
|
35
|
-
return super if cols.empty?
|
|
36
|
-
define_method(:columns){cols}
|
|
37
|
-
@dataset.send(:columns=, cols) if @dataset
|
|
38
|
-
def_column_accessor(*cols)
|
|
39
|
-
@columns = cols
|
|
40
|
-
@db_schema = {}
|
|
41
|
-
cols.each{|c| @db_schema[c] = {}}
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
Sequel::DB = nil
|
|
46
|
-
Sequel::Model.use_transactions = false
|
|
47
|
-
Sequel::Model.cache_anonymous_models = false
|
|
48
|
-
|
|
49
|
-
db = Sequel.mock(:fetch=>{:id => 1, :x => 1}, :numrows=>1, :autoid=>proc{|sql| 10})
|
|
50
|
-
def db.schema(*) [[:id, {:primary_key=>true}]] end
|
|
51
|
-
def db.reset() sqls end
|
|
52
|
-
def db.supports_schema_parsing?() true end
|
|
53
|
-
Sequel::Model.db = DB = db
|
|
54
|
-
|
|
55
|
-
if ENV['SEQUEL_COLUMNS_INTROSPECTION']
|
|
56
|
-
Sequel.extension :columns_introspection
|
|
57
|
-
Sequel::Database.extension :columns_introspection
|
|
58
|
-
Sequel::Mock::Dataset.send(:include, Sequel::ColumnsIntrospection)
|
|
59
|
-
end
|
|
60
|
-
if ENV['SEQUEL_NO_CACHE_ASSOCIATIONS']
|
|
61
|
-
Sequel::Model.cache_associations = false
|
|
62
|
-
end
|
|
63
|
-
Sequel::Model.plugin :throw_failures if ENV['SEQUEL_MODEL_THROW_FAILURES']
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "split_array_nil extension" do
|
|
4
|
-
before do
|
|
5
|
-
@ds = Sequel.mock[:table].extension(:split_array_nil)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should split IN with nil in array into separate OR IS NULL clause" do
|
|
9
|
-
@ds.filter(:a=>[1, nil]).sql.must_equal "SELECT * FROM table WHERE ((a IN (1)) OR (a IS NULL))"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should split NOT IN with nil in array into separate AND IS NOT NULL clause" do
|
|
13
|
-
@ds.exclude(:a=>[1, nil]).sql.must_equal "SELECT * FROM table WHERE ((a NOT IN (1)) AND (a IS NOT NULL))"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should not affect other IN/NOT in clauses" do
|
|
17
|
-
@ds.filter(:a=>[1, 2]).sql.must_equal "SELECT * FROM table WHERE (a IN (1, 2))"
|
|
18
|
-
@ds.exclude(:a=>[1, 2]).sql.must_equal "SELECT * FROM table WHERE (a NOT IN (1, 2))"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should not affect other types of filters clauses" do
|
|
22
|
-
@ds.filter(:a=>1).sql.must_equal "SELECT * FROM table WHERE (a = 1)"
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::SplitValues" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:a))
|
|
6
|
-
@c.columns :id, :x
|
|
7
|
-
@c.plugin :split_values
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "stores non-columns in a separate hash" do
|
|
11
|
-
@c.dataset = @c.dataset.with_fetch(:id=>1, :x=>2, :y=>3)
|
|
12
|
-
o = @c.first
|
|
13
|
-
@c.db.reset
|
|
14
|
-
|
|
15
|
-
o.must_equal @c.load(:id=>1, :x=>2)
|
|
16
|
-
o[:id].must_equal 1
|
|
17
|
-
o[:x].must_equal 2
|
|
18
|
-
o[:y].must_equal 3
|
|
19
|
-
{@c.load(:id=>1, :x=>2)=>4}[o].must_equal 4
|
|
20
|
-
o.values.must_equal(:id=>1, :x=>2)
|
|
21
|
-
|
|
22
|
-
o.save
|
|
23
|
-
@c.db.sqls.must_equal ["UPDATE a SET x = 2 WHERE (id = 1)"]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "handles false values" do
|
|
27
|
-
@c.dataset = @c.dataset.with_fetch(:id=>1, :x=>false, :y=>3)
|
|
28
|
-
o = @c.first
|
|
29
|
-
@c.db.reset
|
|
30
|
-
|
|
31
|
-
o.must_equal @c.load(:id=>1, :x=>false)
|
|
32
|
-
o[:id].must_equal 1
|
|
33
|
-
o[:x].must_equal false
|
|
34
|
-
o[:y].must_equal 3
|
|
35
|
-
{@c.load(:id=>1, :x=>false)=>4}[o].must_equal 4
|
|
36
|
-
o.values.must_equal(:id=>1, :x=>false)
|
|
37
|
-
|
|
38
|
-
o.save
|
|
39
|
-
@c.db.sqls.must_equal ["UPDATE a SET x = 'f' WHERE (id = 1)"]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "handles nil values" do
|
|
43
|
-
@c.dataset = @c.dataset.with_fetch(:id=>1, :x=>nil, :y=>3)
|
|
44
|
-
o = @c.first
|
|
45
|
-
@c.db.reset
|
|
46
|
-
|
|
47
|
-
o.must_equal @c.load(:id=>1, :x=>nil)
|
|
48
|
-
o[:id].must_equal 1
|
|
49
|
-
o[:x].must_be_nil
|
|
50
|
-
o[:y].must_equal 3
|
|
51
|
-
{@c.load(:id=>1, :x=>nil)=>4}[o].must_equal 4
|
|
52
|
-
o.values.must_equal(:id=>1, :x=>nil)
|
|
53
|
-
|
|
54
|
-
o.save
|
|
55
|
-
@c.db.sqls.must_equal ["UPDATE a SET x = NULL WHERE (id = 1)"]
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "sql_comments extension" do
|
|
4
|
-
before do
|
|
5
|
-
@ds = Sequel.mock[:t].extension(:sql_comments)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should not add a comment if one is not set for the dataset" do
|
|
9
|
-
@ds.select_sql.must_equal 'SELECT * FROM t'
|
|
10
|
-
@ds.insert_sql(:a=>1).must_equal 'INSERT INTO t (a) VALUES (1)'
|
|
11
|
-
@ds.delete_sql.must_equal 'DELETE FROM t'
|
|
12
|
-
@ds.update_sql(:a=>1).must_equal 'UPDATE t SET a = 1'
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should add a comment if one is set for the dataset" do
|
|
16
|
-
ds = @ds.comment("Some\nComment\r\n Here")
|
|
17
|
-
ds.select_sql.must_equal "SELECT * FROM t -- Some Comment Here\n"
|
|
18
|
-
ds.insert_sql(:a=>1).must_equal "INSERT INTO t (a) VALUES (1) -- Some Comment Here\n"
|
|
19
|
-
ds.delete_sql.must_equal "DELETE FROM t -- Some Comment Here\n"
|
|
20
|
-
ds.update_sql(:a=>1).must_equal "UPDATE t SET a = 1 -- Some Comment Here\n"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should handle comments used in nested datasets" do
|
|
24
|
-
ds = @ds.comment("Some\nComment\r\n Here")
|
|
25
|
-
ds.where(:id=>ds).select_sql.must_equal "SELECT * FROM t WHERE (id IN (SELECT * FROM t -- Some Comment Here\n)) -- Some Comment Here\n"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should handle frozen SQL strings" do
|
|
29
|
-
@ds = Sequel.mock[:t].with_extend{def select_sql; super.freeze; end}.extension(:sql_comments)
|
|
30
|
-
ds = @ds.comment("Some\nComment\r\n Here")
|
|
31
|
-
ds.select_sql.must_equal "SELECT * FROM t -- Some Comment Here\n"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :sql_expr
|
|
4
|
-
|
|
5
|
-
describe "Sequel sql_expr extension" do
|
|
6
|
-
before do
|
|
7
|
-
@ds = Sequel.mock.dataset
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "Object#sql_expr should wrap the object in a GenericComplexExpression" do
|
|
11
|
-
o = Object.new
|
|
12
|
-
def o.sql_literal(ds) 'foo' end
|
|
13
|
-
s = o.sql_expr
|
|
14
|
-
@ds.literal(s).must_equal "foo"
|
|
15
|
-
@ds.literal(s+1).must_equal "(foo + 1)"
|
|
16
|
-
@ds.literal(s & true).must_equal "(foo AND 't')"
|
|
17
|
-
@ds.literal(s < 1).must_equal "(foo < 1)"
|
|
18
|
-
@ds.literal(s.sql_subscript(1)).must_equal "(foo)[1]"
|
|
19
|
-
@ds.literal(s.like('a')).must_equal "(foo LIKE 'a' ESCAPE '\\')"
|
|
20
|
-
@ds.literal(s.as(:a)).must_equal "foo AS a"
|
|
21
|
-
@ds.literal(s.cast(Integer)).must_equal "CAST(foo AS integer)"
|
|
22
|
-
@ds.literal(s.desc).must_equal "foo DESC"
|
|
23
|
-
@ds.literal(s.sql_string + '1').must_equal "(foo || '1')"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "Numeric#sql_expr should wrap the object in a NumericExpression" do
|
|
27
|
-
[1, 2.0, 2^70, BigDecimal('1.0')].each do |o|
|
|
28
|
-
@ds.literal(o.sql_expr).must_equal @ds.literal(o)
|
|
29
|
-
@ds.literal(o.sql_expr + 1).must_equal "(#{@ds.literal(o)} + 1)"
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "String#sql_expr should wrap the object in a StringExpression" do
|
|
34
|
-
@ds.literal("".sql_expr).must_equal "''"
|
|
35
|
-
@ds.literal("".sql_expr + :a).must_equal "('' || a)"
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "NilClass, TrueClass, and FalseClass#sql_expr should wrap the object in a BooleanExpression" do
|
|
39
|
-
[nil, true, false].each do |o|
|
|
40
|
-
@ds.literal(o.sql_expr).must_equal @ds.literal(o)
|
|
41
|
-
@ds.literal(o.sql_expr & :a).must_equal "(#{@ds.literal(o)} AND a)"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "Proc#sql_expr should should treat the object as a virtual row block" do
|
|
46
|
-
@ds.literal(proc{a}.sql_expr).must_equal "a"
|
|
47
|
-
@ds.literal(proc{a(b)}.sql_expr).must_equal "a(b)"
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "Proc#sql_expr should should wrap the object in a GenericComplexExpression if the object is not already an expression" do
|
|
51
|
-
@ds.literal(proc{1}.sql_expr).must_equal "1"
|
|
52
|
-
@ds.literal(proc{1}.sql_expr + 2).must_equal "(1 + 2)"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "Proc#sql_expr should should convert a hash or array of two element arrays to a BooleanExpression" do
|
|
56
|
-
@ds.literal(proc{{a=>b}}.sql_expr).must_equal "(a = b)"
|
|
57
|
-
@ds.literal(proc{[[a, b]]}.sql_expr & :a).must_equal "((a = b) AND a)"
|
|
58
|
-
end
|
|
59
|
-
end
|