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,402 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
model_class = proc do |klass, &block|
|
|
4
|
-
c = Class.new(klass)
|
|
5
|
-
c.plugin :hook_class_methods
|
|
6
|
-
c.class_eval(&block) if block
|
|
7
|
-
c
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
describe Sequel::Model, "hook_class_methods plugin" do
|
|
11
|
-
before do
|
|
12
|
-
DB.reset
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should freeze hooks when freezing model class" do
|
|
16
|
-
c = model_class.call Sequel::Model do
|
|
17
|
-
before_save{adds << 'hi'}
|
|
18
|
-
end
|
|
19
|
-
c.freeze
|
|
20
|
-
hooks = c.instance_variable_get(:@hooks)
|
|
21
|
-
hooks.frozen?.must_equal true
|
|
22
|
-
hooks.values.all?(&:frozen?).must_equal true
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
deprecated ".hook_blocks method should yield each hook block" do
|
|
26
|
-
c = model_class.call Sequel::Model
|
|
27
|
-
a = []
|
|
28
|
-
c.hook_blocks(:before_save){|b| a << b}
|
|
29
|
-
a.must_equal []
|
|
30
|
-
|
|
31
|
-
pr = proc{adds << 'hi'}
|
|
32
|
-
c.before_save(&pr)
|
|
33
|
-
a = []
|
|
34
|
-
c.hook_blocks(:before_save){|b| a << b}
|
|
35
|
-
a.must_equal [pr]
|
|
36
|
-
|
|
37
|
-
c.before_save(&pr)
|
|
38
|
-
a = []
|
|
39
|
-
c.hook_blocks(:before_save){|b| a << b}
|
|
40
|
-
a.must_equal [pr, pr]
|
|
41
|
-
|
|
42
|
-
a = []
|
|
43
|
-
c.hook_blocks(:after_save){|b| a << b}
|
|
44
|
-
a.must_equal []
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should be definable using a block" do
|
|
48
|
-
adds = []
|
|
49
|
-
c = model_class.call Sequel::Model do
|
|
50
|
-
before_save{adds << 'hi'}
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
c.new.before_save
|
|
54
|
-
adds.must_equal ['hi']
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should be definable using a method name" do
|
|
58
|
-
adds = []
|
|
59
|
-
c = model_class.call Sequel::Model do
|
|
60
|
-
define_method(:bye){adds << 'bye'}
|
|
61
|
-
before_save :bye
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
c.new.before_save
|
|
65
|
-
adds.must_equal ['bye']
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should be additive" do
|
|
69
|
-
adds = []
|
|
70
|
-
c = model_class.call Sequel::Model do
|
|
71
|
-
after_save{adds << 'hyiyie'}
|
|
72
|
-
after_save{adds << 'byiyie'}
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
c.new.after_save
|
|
76
|
-
adds.must_equal ['hyiyie', 'byiyie']
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "before hooks should run in reverse order" do
|
|
80
|
-
adds = []
|
|
81
|
-
c = model_class.call Sequel::Model do
|
|
82
|
-
before_save{adds << 'hyiyie'}
|
|
83
|
-
before_save{adds << 'byiyie'}
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
c.new.before_save
|
|
87
|
-
adds.must_equal ['byiyie', 'hyiyie']
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should not be additive if the method or tag already exists" do
|
|
91
|
-
adds = []
|
|
92
|
-
c = model_class.call Sequel::Model do
|
|
93
|
-
define_method(:bye){adds << 'bye'}
|
|
94
|
-
before_save :bye
|
|
95
|
-
before_save :bye
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
c.new.before_save
|
|
99
|
-
adds.must_equal ['bye']
|
|
100
|
-
|
|
101
|
-
adds = []
|
|
102
|
-
d = model_class.call Sequel::Model do
|
|
103
|
-
before_save(:bye){adds << 'hyiyie'}
|
|
104
|
-
before_save(:bye){adds << 'byiyie'}
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
d.new.before_save
|
|
108
|
-
adds.must_equal ['byiyie']
|
|
109
|
-
|
|
110
|
-
adds = []
|
|
111
|
-
e = model_class.call Sequel::Model do
|
|
112
|
-
define_method(:bye){adds << 'bye'}
|
|
113
|
-
before_save :bye
|
|
114
|
-
before_save(:bye){adds << 'byiyie'}
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
e.new.before_save
|
|
118
|
-
adds.must_equal ['byiyie']
|
|
119
|
-
|
|
120
|
-
adds = []
|
|
121
|
-
e = model_class.call Sequel::Model do
|
|
122
|
-
define_method(:bye){adds << 'bye'}
|
|
123
|
-
before_save(:bye){adds << 'byiyie'}
|
|
124
|
-
before_save :bye
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
e.new.before_save
|
|
128
|
-
adds.must_equal ['bye']
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it "should be inheritable" do
|
|
132
|
-
adds = []
|
|
133
|
-
a = model_class.call Sequel::Model do
|
|
134
|
-
after_save{adds << '123'}
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
b = Class.new(a)
|
|
138
|
-
b.class_eval do
|
|
139
|
-
after_save{adds << '456'}
|
|
140
|
-
after_save{adds << '789'}
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
b.new.after_save
|
|
144
|
-
adds.must_equal ['123', '456', '789']
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "should be overridable in descendant classes" do
|
|
148
|
-
adds = []
|
|
149
|
-
a = model_class.call Sequel::Model do
|
|
150
|
-
before_save{adds << '123'}
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
b = Class.new(a)
|
|
154
|
-
b.class_eval do
|
|
155
|
-
define_method(:before_save){adds << '456'}
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
a.new.before_save
|
|
159
|
-
adds.must_equal ['123']
|
|
160
|
-
adds = []
|
|
161
|
-
b.new.before_save
|
|
162
|
-
adds.must_equal ['456']
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "should stop processing if a before hook calls cancel_action" do
|
|
166
|
-
flag = true
|
|
167
|
-
adds = []
|
|
168
|
-
|
|
169
|
-
a = model_class.call Sequel::Model(:items) do
|
|
170
|
-
before_save{adds << 'cruel'; cancel_action if flag == false}
|
|
171
|
-
before_save{adds << 'blah'; cancel_action if flag == false}
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
a.raise_on_save_failure = false
|
|
175
|
-
a.new.save
|
|
176
|
-
adds.must_equal ['blah', 'cruel']
|
|
177
|
-
|
|
178
|
-
# chain should not break on nil
|
|
179
|
-
adds = []
|
|
180
|
-
flag = nil
|
|
181
|
-
a.new.save
|
|
182
|
-
adds.must_equal ['blah', 'cruel']
|
|
183
|
-
|
|
184
|
-
adds = []
|
|
185
|
-
flag = false
|
|
186
|
-
a.new.save
|
|
187
|
-
adds.must_equal ['blah']
|
|
188
|
-
|
|
189
|
-
b = Class.new(a)
|
|
190
|
-
b.class_eval do
|
|
191
|
-
before_save{adds << 'mau'}
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
adds = []
|
|
195
|
-
b.new.save
|
|
196
|
-
adds.must_equal ['mau', 'blah']
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
describe "Model#before_create && Model#after_create" do
|
|
201
|
-
before do
|
|
202
|
-
DB.reset
|
|
203
|
-
|
|
204
|
-
@c = model_class.call Sequel::Model(:items) do
|
|
205
|
-
columns :x
|
|
206
|
-
no_primary_key
|
|
207
|
-
|
|
208
|
-
after_create {DB << "BLAH after"}
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it "should be called around new record creation" do
|
|
213
|
-
@c.before_create {DB << "BLAH before"}
|
|
214
|
-
@c.create(:x => 2)
|
|
215
|
-
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
it ".create should cancel the save and raise an error if before_create calls cancel_action and raise_on_save_failure is true" do
|
|
219
|
-
@c.before_create{cancel_action}
|
|
220
|
-
proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
|
|
221
|
-
DB.sqls.must_equal []
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
it ".create should cancel the save and return nil if before_create calls cancel_action and raise_on_save_failure is false" do
|
|
225
|
-
@c.before_create{cancel_action}
|
|
226
|
-
@c.raise_on_save_failure = false
|
|
227
|
-
@c.create(:x => 2).must_be_nil
|
|
228
|
-
DB.sqls.must_equal []
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
describe "Model#before_update && Model#after_update" do
|
|
233
|
-
before do
|
|
234
|
-
DB.reset
|
|
235
|
-
|
|
236
|
-
@c = model_class.call(Sequel::Model(:items)) do
|
|
237
|
-
after_update {DB << "BLAH after"}
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it "should be called around record update" do
|
|
242
|
-
@c.before_update {DB << "BLAH before"}
|
|
243
|
-
m = @c.load(:id => 2233, :x=>123)
|
|
244
|
-
m.save
|
|
245
|
-
DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
it "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
|
|
249
|
-
@c.before_update{cancel_action}
|
|
250
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
251
|
-
DB.sqls.must_equal []
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
|
|
255
|
-
@c.before_update{cancel_action}
|
|
256
|
-
@c.raise_on_save_failure = false
|
|
257
|
-
@c.load(:id => 2233).save.must_be_nil
|
|
258
|
-
DB.sqls.must_equal []
|
|
259
|
-
end
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
describe "Model#before_save && Model#after_save" do
|
|
263
|
-
before do
|
|
264
|
-
DB.reset
|
|
265
|
-
|
|
266
|
-
@c = model_class.call(Sequel::Model(:items)) do
|
|
267
|
-
columns :x
|
|
268
|
-
after_save {DB << "BLAH after"}
|
|
269
|
-
end
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
it "should be called around record update" do
|
|
273
|
-
@c.before_save {DB << "BLAH before"}
|
|
274
|
-
m = @c.load(:id => 2233, :x=>123)
|
|
275
|
-
m.save
|
|
276
|
-
DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
it "should be called around record creation" do
|
|
280
|
-
@c.before_save {DB << "BLAH before"}
|
|
281
|
-
@c.no_primary_key
|
|
282
|
-
@c.create(:x => 2)
|
|
283
|
-
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
it "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_save_failure is true" do
|
|
287
|
-
@c.before_save{cancel_action}
|
|
288
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
289
|
-
DB.sqls.must_equal []
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
it "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
|
|
293
|
-
@c.before_save{cancel_action}
|
|
294
|
-
@c.raise_on_save_failure = false
|
|
295
|
-
@c.load(:id => 2233).save.must_be_nil
|
|
296
|
-
DB.sqls.must_equal []
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
describe "Model#before_destroy && Model#after_destroy" do
|
|
301
|
-
before do
|
|
302
|
-
DB.reset
|
|
303
|
-
|
|
304
|
-
@c = model_class.call(Sequel::Model(:items)) do
|
|
305
|
-
after_destroy {DB << "BLAH after"}
|
|
306
|
-
end
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
it "should be called around record destruction" do
|
|
310
|
-
@c.before_destroy {DB << "BLAH before"}
|
|
311
|
-
m = @c.load(:id => 2233)
|
|
312
|
-
m.destroy
|
|
313
|
-
DB.sqls.must_equal ['BLAH before', "DELETE FROM items WHERE id = 2233", 'BLAH after']
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
it "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
|
|
317
|
-
@c.before_destroy{cancel_action}
|
|
318
|
-
proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
|
|
319
|
-
DB.sqls.must_equal []
|
|
320
|
-
end
|
|
321
|
-
|
|
322
|
-
it "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
|
|
323
|
-
@c.before_destroy{cancel_action}
|
|
324
|
-
@c.raise_on_save_failure = false
|
|
325
|
-
@c.load(:id => 2233).destroy.must_be_nil
|
|
326
|
-
DB.sqls.must_equal []
|
|
327
|
-
end
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
describe "Model#before_validation && Model#after_validation" do
|
|
331
|
-
before do
|
|
332
|
-
DB.reset
|
|
333
|
-
|
|
334
|
-
@c = model_class.call(Sequel::Model(:items)) do
|
|
335
|
-
plugin :validation_class_methods
|
|
336
|
-
after_validation{DB << "BLAH after"}
|
|
337
|
-
|
|
338
|
-
def self.validate(o)
|
|
339
|
-
o.errors.add(:id, 'not valid') unless o[:id] == 2233
|
|
340
|
-
end
|
|
341
|
-
columns :id
|
|
342
|
-
end
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
it "should be called around validation" do
|
|
346
|
-
@c.before_validation{DB << "BLAH before"}
|
|
347
|
-
m = @c.load(:id => 2233)
|
|
348
|
-
m.must_be :valid?
|
|
349
|
-
DB.sqls.must_equal ['BLAH before', 'BLAH after']
|
|
350
|
-
|
|
351
|
-
DB.sqls.clear
|
|
352
|
-
m = @c.load(:id => 22)
|
|
353
|
-
m.wont_be :valid?
|
|
354
|
-
DB.sqls.must_equal ['BLAH before', 'BLAH after']
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
it "should be called when calling save" do
|
|
358
|
-
@c.before_validation{DB << "BLAH before"}
|
|
359
|
-
m = @c.load(:id => 2233, :x=>123)
|
|
360
|
-
m.save.must_equal m
|
|
361
|
-
DB.sqls.must_equal ['BLAH before', 'BLAH after', 'UPDATE items SET x = 123 WHERE (id = 2233)']
|
|
362
|
-
|
|
363
|
-
DB.sqls.clear
|
|
364
|
-
m = @c.load(:id => 22)
|
|
365
|
-
m.raise_on_save_failure = false
|
|
366
|
-
m.save.must_be_nil
|
|
367
|
-
DB.sqls.must_equal ['BLAH before', 'BLAH after']
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
it "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
|
|
371
|
-
@c.before_validation{cancel_action}
|
|
372
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
373
|
-
DB.sqls.must_equal []
|
|
374
|
-
end
|
|
375
|
-
|
|
376
|
-
it "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
|
|
377
|
-
@c.before_validation{cancel_action}
|
|
378
|
-
@c.raise_on_save_failure = false
|
|
379
|
-
@c.load(:id => 2233).save.must_be_nil
|
|
380
|
-
DB.sqls.must_equal []
|
|
381
|
-
end
|
|
382
|
-
end
|
|
383
|
-
|
|
384
|
-
describe "Model.has_hooks?" do
|
|
385
|
-
before do
|
|
386
|
-
@c = model_class.call(Sequel::Model(:items))
|
|
387
|
-
end
|
|
388
|
-
|
|
389
|
-
it "should return false if no hooks are defined" do
|
|
390
|
-
@c.has_hooks?(:before_save).must_equal false
|
|
391
|
-
end
|
|
392
|
-
|
|
393
|
-
it "should return true if hooks are defined" do
|
|
394
|
-
@c.before_save {'blah'}
|
|
395
|
-
@c.has_hooks?(:before_save).must_equal true
|
|
396
|
-
end
|
|
397
|
-
|
|
398
|
-
it "should return true if hooks are inherited" do
|
|
399
|
-
@d = Class.new(@c)
|
|
400
|
-
@d.has_hooks?(:before_save).must_equal false
|
|
401
|
-
end
|
|
402
|
-
end
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "identifier_mangling extension" do
|
|
4
|
-
it "should respect the :quote_identifiers option" do
|
|
5
|
-
db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
|
|
6
|
-
db.quote_identifiers?.must_equal false
|
|
7
|
-
db = Sequel::Database.new(:quote_identifiers=>true).extension(:identifier_mangling)
|
|
8
|
-
db.quote_identifiers?.must_equal true
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should respect the :quote_identifiers setting" do
|
|
12
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
13
|
-
db.quote_identifiers?.must_equal true
|
|
14
|
-
db.quote_identifiers = false
|
|
15
|
-
db.quote_identifiers?.must_equal false
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should upcase on input and downcase on output by default" do
|
|
19
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
20
|
-
db.send(:identifier_input_method_default).must_equal :upcase
|
|
21
|
-
db.send(:identifier_output_method_default).must_equal :downcase
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should respect the :identifier_input_method option" do
|
|
25
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
26
|
-
db.identifier_input_method.must_equal :upcase
|
|
27
|
-
db.identifier_input_method = nil
|
|
28
|
-
db.identifier_input_method.must_be_nil
|
|
29
|
-
db = Sequel::Database.new(:identifier_input_method=>nil).extension(:identifier_mangling)
|
|
30
|
-
db.identifier_input_method.must_be_nil
|
|
31
|
-
db.identifier_input_method = :downcase
|
|
32
|
-
db.identifier_input_method.must_equal :downcase
|
|
33
|
-
db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
|
|
34
|
-
db.identifier_input_method.must_equal :upcase
|
|
35
|
-
db.identifier_input_method = nil
|
|
36
|
-
db.identifier_input_method.must_be_nil
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should respect the :identifier_output_method option" do
|
|
40
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
41
|
-
db.identifier_output_method.must_equal :downcase
|
|
42
|
-
db.identifier_output_method = nil
|
|
43
|
-
db.identifier_output_method.must_be_nil
|
|
44
|
-
db = Sequel::Database.new(:identifier_output_method=>nil).extension(:identifier_mangling)
|
|
45
|
-
db.identifier_output_method.must_be_nil
|
|
46
|
-
db.identifier_output_method = :downcase
|
|
47
|
-
db.identifier_output_method.must_equal :downcase
|
|
48
|
-
db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
|
|
49
|
-
db.identifier_output_method.must_equal :upcase
|
|
50
|
-
db.identifier_output_method = nil
|
|
51
|
-
db.identifier_output_method.must_be_nil
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should respect the identifier_input_method_default method if Sequel.identifier_input_method is not called" do
|
|
55
|
-
class Sequel::Database
|
|
56
|
-
@identifier_input_method = nil
|
|
57
|
-
end
|
|
58
|
-
x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_input_method_default; :downcase end}
|
|
59
|
-
x.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
|
|
60
|
-
y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_input_method_default; :camelize end}
|
|
61
|
-
y.new.extension(:identifier_mangling).identifier_input_method.must_equal :camelize
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should respect the identifier_output_method_default method if Sequel.identifier_output_method is not called" do
|
|
65
|
-
class Sequel::Database
|
|
66
|
-
@identifier_output_method = nil
|
|
67
|
-
end
|
|
68
|
-
x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_output_method_default; :upcase end}
|
|
69
|
-
x.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
|
|
70
|
-
y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_output_method_default; :underscore end}
|
|
71
|
-
y.new.extension(:identifier_mangling).identifier_output_method.must_equal :underscore
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe "Database#input_identifier_meth" do
|
|
76
|
-
it "should be the input_identifer method of a default dataset for this database" do
|
|
77
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
78
|
-
db.identifier_input_method = nil
|
|
79
|
-
db.send(:input_identifier_meth).call(:a).must_equal 'a'
|
|
80
|
-
db.identifier_input_method = :upcase
|
|
81
|
-
db.send(:input_identifier_meth).call(:a).must_equal 'A'
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
describe "Database#output_identifier_meth" do
|
|
86
|
-
it "should be the output_identifer method of a default dataset for this database" do
|
|
87
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
88
|
-
db.identifier_output_method = nil
|
|
89
|
-
db.send(:output_identifier_meth).call('A').must_equal :A
|
|
90
|
-
db.identifier_output_method = :downcase
|
|
91
|
-
db.send(:output_identifier_meth).call('A').must_equal :a
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
describe "Database#metadata_dataset" do
|
|
96
|
-
it "should be a dataset with the default settings for identifier_mangling" do
|
|
97
|
-
ds = Sequel::Database.new.extension(:identifier_mangling).send(:metadata_dataset)
|
|
98
|
-
ds.literal(:a).must_equal "\"A\""
|
|
99
|
-
ds.send(:output_identifier, 'A').must_equal :a
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
describe "Dataset" do
|
|
104
|
-
before do
|
|
105
|
-
@dataset = Sequel.mock.extension(:identifier_mangling).dataset
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "should get quote_identifiers default from database" do
|
|
109
|
-
db = Sequel::Database.new(:quote_identifiers=>true).extension(:identifier_mangling)
|
|
110
|
-
db[:a].quote_identifiers?.must_equal true
|
|
111
|
-
db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
|
|
112
|
-
db[:a].quote_identifiers?.must_equal false
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should get identifier_input_method default from database" do
|
|
116
|
-
db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
|
|
117
|
-
db[:a].identifier_input_method.must_equal :upcase
|
|
118
|
-
db = Sequel::Database.new(:identifier_input_method=>:downcase).extension(:identifier_mangling)
|
|
119
|
-
db[:a].identifier_input_method.must_equal :downcase
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should get identifier_output_method default from database" do
|
|
123
|
-
db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
|
|
124
|
-
db[:a].identifier_output_method.must_equal :upcase
|
|
125
|
-
db = Sequel::Database.new(:identifier_output_method=>:downcase).extension(:identifier_mangling)
|
|
126
|
-
db[:a].identifier_output_method.must_equal :downcase
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "should have with_quote_identifiers method which returns cloned dataset with changed literalization of identifiers" do
|
|
130
|
-
@dataset.with_quote_identifiers(true).literal(:a).must_equal '"a"'
|
|
131
|
-
@dataset.with_quote_identifiers(false).literal(:a).must_equal 'a'
|
|
132
|
-
ds = @dataset.freeze.with_quote_identifiers(false)
|
|
133
|
-
ds.literal(:a).must_equal 'a'
|
|
134
|
-
ds.frozen?.must_equal true
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should have with_identifier_input_method method which returns cloned dataset with changed literalization of identifiers" do
|
|
138
|
-
@dataset.with_identifier_input_method(:upcase).literal(:a).must_equal 'A'
|
|
139
|
-
@dataset.with_identifier_input_method(:downcase).literal(:A).must_equal 'a'
|
|
140
|
-
@dataset.with_identifier_input_method(:reverse).literal(:at_b).must_equal 'b_ta'
|
|
141
|
-
ds = @dataset.freeze.with_identifier_input_method(:reverse)
|
|
142
|
-
ds.frozen?.must_equal true
|
|
143
|
-
ds.literal(:at_b).must_equal 'b_ta'
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should have with_identifier_output_method method which returns cloned dataset with changed identifiers returned from the database" do
|
|
147
|
-
@dataset.send(:output_identifier, "at_b_C").must_equal :at_b_C
|
|
148
|
-
@dataset.with_identifier_output_method(:upcase).send(:output_identifier, "at_b_C").must_equal :AT_B_C
|
|
149
|
-
@dataset.with_identifier_output_method(:downcase).send(:output_identifier, "at_b_C").must_equal :at_b_c
|
|
150
|
-
@dataset.with_identifier_output_method(:reverse).send(:output_identifier, "at_b_C").must_equal :C_b_ta
|
|
151
|
-
ds = @dataset.freeze.with_identifier_output_method(:reverse)
|
|
152
|
-
ds.send(:output_identifier, "at_b_C").must_equal :C_b_ta
|
|
153
|
-
ds.frozen?.must_equal true
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
it "should have output_identifier handle empty identifiers" do
|
|
157
|
-
@dataset.send(:output_identifier, "").must_equal :untitled
|
|
158
|
-
@dataset.with_identifier_output_method(:upcase).send(:output_identifier, "").must_equal :UNTITLED
|
|
159
|
-
@dataset.with_identifier_output_method(:downcase).send(:output_identifier, "").must_equal :untitled
|
|
160
|
-
@dataset.with_identifier_output_method(:reverse).send(:output_identifier, "").must_equal :deltitnu
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
describe "identifier_mangling extension" do
|
|
165
|
-
it "should be able to load dialects based on the database name" do
|
|
166
|
-
Sequel.mock(:host=>'access').select(Date.new(2011, 12, 13)).sql.must_equal 'SELECT #2011-12-13#'
|
|
167
|
-
Sequel.mock(:host=>'db2').select(1).sql.must_equal 'SELECT 1 FROM "SYSIBM"."SYSDUMMY1"'
|
|
168
|
-
Sequel.mock(:host=>'mssql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM [A] WHERE (CONTAINS ([B], 'c'))"
|
|
169
|
-
Sequel.mock(:host=>'mysql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM `a` WHERE (MATCH (`b`) AGAINST ('c'))"
|
|
170
|
-
Sequel.mock(:host=>'oracle')[:a].limit(1).sql.must_equal 'SELECT * FROM (SELECT * FROM "A") "T1" WHERE (ROWNUM <= 1)'
|
|
171
|
-
Sequel.mock(:host=>'postgres')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM \"a\" WHERE (to_tsvector(CAST('simple' AS regconfig), (COALESCE(\"b\", ''))) @@ to_tsquery(CAST('simple' AS regconfig), 'c'))"
|
|
172
|
-
Sequel.mock(:host=>'sqlanywhere').from(:a).offset(1).sql.must_equal 'SELECT TOP 2147483647 START AT (1 + 1) * FROM "A"'
|
|
173
|
-
Sequel.mock(:host=>'sqlite')[Sequel[:a].as(:b)].sql.must_equal "SELECT * FROM `a` AS 'b'"
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
describe Sequel::Model, ".[] optimization" do
|
|
178
|
-
before do
|
|
179
|
-
@db = Sequel.mock(:quote_identifiers=>true).extension(:identifier_mangling)
|
|
180
|
-
def @db.schema(*) [[:id, {:primary_key=>true}]] end
|
|
181
|
-
def @db.supports_schema_parsing?() true end
|
|
182
|
-
@c = Class.new(Sequel::Model(@db))
|
|
183
|
-
@ds = @db.dataset.with_quote_identifiers(true)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "should have simple_pk and simple_table respect dataset's identifier input methods" do
|
|
187
|
-
ds = @db.from(:ab).with_identifier_input_method(:reverse)
|
|
188
|
-
@c.set_dataset ds
|
|
189
|
-
@c.simple_table.must_equal '"ba"'
|
|
190
|
-
@c.set_primary_key :cd
|
|
191
|
-
@c.simple_pk.must_equal '"dc"'
|
|
192
|
-
@c.set_dataset ds.from(Sequel[:ef][:gh])
|
|
193
|
-
@c.simple_table.must_equal '"fe"."hg"'
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
with_symbol_splitting "should have simple_pk and simple_table respect dataset's identifier input methods when using splittable symbols" do
|
|
197
|
-
ds = @db.from(:ab).with_identifier_input_method(:reverse)
|
|
198
|
-
@c.set_dataset ds.from(:ef__gh)
|
|
199
|
-
@c.simple_table.must_equal '"fe"."hg"'
|
|
200
|
-
end
|
|
201
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Dataset::ImplicitSubquery" do
|
|
4
|
-
it "should implicitly use a subquery for most dataset query methods" do
|
|
5
|
-
db = Sequel.mock
|
|
6
|
-
db.extend_datasets{def supports_cte?; true end}
|
|
7
|
-
ds = db["SELECT * FROM table"].extension(:implicit_subquery)
|
|
8
|
-
ds.columns(:id, :a)
|
|
9
|
-
ods = db[:c]
|
|
10
|
-
ods.columns(:id, :b)
|
|
11
|
-
|
|
12
|
-
ds.cross_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 CROSS JOIN c"
|
|
13
|
-
ds.distinct.sql.must_equal "SELECT DISTINCT * FROM (SELECT * FROM table) AS t1"
|
|
14
|
-
ds.except(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 EXCEPT SELECT * FROM c) AS t1"
|
|
15
|
-
ds.exclude(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE NOT c"
|
|
16
|
-
ds.exclude_having(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 HAVING NOT c"
|
|
17
|
-
ds.filter(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE c"
|
|
18
|
-
ds.for_update.sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FOR UPDATE"
|
|
19
|
-
ds.full_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FULL JOIN c"
|
|
20
|
-
ds.full_outer_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FULL OUTER JOIN c"
|
|
21
|
-
ds.graph(ods).sql.must_equal "SELECT t1.id, t1.a, c.id AS c_id, c.b FROM (SELECT * FROM table) AS t1 LEFT OUTER JOIN c"
|
|
22
|
-
ds.grep(:c, 'a').sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE ((c LIKE 'a' ESCAPE '\\'))"
|
|
23
|
-
ds.group(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
24
|
-
ds.group_append(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
25
|
-
ds.group_and_count(:c).sql.must_equal "SELECT c, count(*) AS count FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
26
|
-
ds.group_by(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
27
|
-
ds.having(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 HAVING c"
|
|
28
|
-
ds.inner_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 INNER JOIN c USING (d)"
|
|
29
|
-
ds.intersect(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 INTERSECT SELECT * FROM c) AS t1"
|
|
30
|
-
ds.invert.sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE 'f'"
|
|
31
|
-
ds.join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 INNER JOIN c USING (d)"
|
|
32
|
-
ds.join_table(:inner, :c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 INNER JOIN c USING (d)"
|
|
33
|
-
ds.left_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 LEFT JOIN c USING (d)"
|
|
34
|
-
ds.left_outer_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 LEFT OUTER JOIN c USING (d)"
|
|
35
|
-
ds.limit(1).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 LIMIT 1"
|
|
36
|
-
ds.lock_style('FOR UPDATE').sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FOR UPDATE"
|
|
37
|
-
ds.natural_full_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL FULL JOIN c"
|
|
38
|
-
ds.natural_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL JOIN c"
|
|
39
|
-
ds.natural_left_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL LEFT JOIN c"
|
|
40
|
-
ds.natural_right_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL RIGHT JOIN c"
|
|
41
|
-
ds.offset(1).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 OFFSET 1"
|
|
42
|
-
ds.order(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
43
|
-
ds.order_append(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
44
|
-
ds.order_by(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
45
|
-
ds.order_more(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
46
|
-
ds.order_prepend(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
47
|
-
ds.right_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 RIGHT JOIN c USING (d)"
|
|
48
|
-
ds.right_outer_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 RIGHT OUTER JOIN c USING (d)"
|
|
49
|
-
ds.select(:c).sql.must_equal "SELECT c FROM (SELECT * FROM table) AS t1"
|
|
50
|
-
ds.select_append(:c).sql.must_equal "SELECT *, c FROM (SELECT * FROM table) AS t1"
|
|
51
|
-
ds.select_group(:c).sql.must_equal "SELECT c FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
52
|
-
ds.select_more(:c).sql.must_equal "SELECT *, c FROM (SELECT * FROM table) AS t1"
|
|
53
|
-
ds.union(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 UNION SELECT * FROM c) AS t1"
|
|
54
|
-
ds.where(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE c"
|
|
55
|
-
ds.with(:d, ods).sql.must_equal "WITH d AS (SELECT * FROM c) SELECT * FROM (SELECT * FROM table) AS t1"
|
|
56
|
-
ds.with_recursive(:d, ods, ods).sql.must_equal "WITH d AS (SELECT * FROM c UNION ALL SELECT * FROM c) SELECT * FROM (SELECT * FROM table) AS t1"
|
|
57
|
-
end
|
|
58
|
-
end
|