sequel 4.49.0 → 5.0.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 +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
data/spec/model/base_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe "Model attribute setters" do
|
4
4
|
before do
|
@@ -118,72 +118,6 @@ describe Sequel::Model, "implicit table names" do
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
describe Sequel::Model, ".def_dataset_method" do
|
122
|
-
before do
|
123
|
-
@c = Class.new(Sequel::Model(:items))
|
124
|
-
end
|
125
|
-
|
126
|
-
deprecated "should add a method to the dataset and model if called with a block argument" do
|
127
|
-
@c.def_dataset_method(:return_3){3}
|
128
|
-
@c.return_3.must_equal 3
|
129
|
-
@c.dataset.return_3.must_equal 3
|
130
|
-
end
|
131
|
-
|
132
|
-
deprecated "should handle weird method names" do
|
133
|
-
@c.def_dataset_method(:"return 3"){3}
|
134
|
-
@c.send(:"return 3").must_equal 3
|
135
|
-
@c.dataset.send(:"return 3").must_equal 3
|
136
|
-
end
|
137
|
-
|
138
|
-
deprecated "should not add a model method if the model already responds to the method" do
|
139
|
-
@c.instance_eval do
|
140
|
-
def foo
|
141
|
-
1
|
142
|
-
end
|
143
|
-
|
144
|
-
private
|
145
|
-
|
146
|
-
def bar
|
147
|
-
2
|
148
|
-
end
|
149
|
-
|
150
|
-
def_dataset_method(:foo){3}
|
151
|
-
def_dataset_method(:bar){4}
|
152
|
-
end
|
153
|
-
@c.foo.must_equal 1
|
154
|
-
@c.dataset.foo.must_equal 3
|
155
|
-
@c.send(:bar).must_equal 2
|
156
|
-
@c.dataset.bar.must_equal 4
|
157
|
-
end
|
158
|
-
|
159
|
-
deprecated "should add all passed methods to the model if called without a block argument" do
|
160
|
-
@c.def_dataset_method(:return_3, :return_4)
|
161
|
-
proc{@c.return_3}.must_raise(NoMethodError)
|
162
|
-
proc{@c.return_4}.must_raise(NoMethodError)
|
163
|
-
@c.dataset = @c.dataset.with_extend do
|
164
|
-
def return_3; 3; end
|
165
|
-
def return_4; 4; end
|
166
|
-
end
|
167
|
-
@c.return_3.must_equal 3
|
168
|
-
@c.return_4.must_equal 4
|
169
|
-
end
|
170
|
-
|
171
|
-
deprecated "should cache calls and readd methods if set_dataset is used" do
|
172
|
-
@c.def_dataset_method(:return_3){3}
|
173
|
-
@c.set_dataset :items
|
174
|
-
@c.return_3.must_equal 3
|
175
|
-
@c.dataset.return_3.must_equal 3
|
176
|
-
end
|
177
|
-
|
178
|
-
deprecated "should readd methods to subclasses, if set_dataset is used in a subclass" do
|
179
|
-
@c.def_dataset_method(:return_3){3}
|
180
|
-
c = Class.new(@c)
|
181
|
-
c.set_dataset :items
|
182
|
-
c.return_3.must_equal 3
|
183
|
-
c.dataset.return_3.must_equal 3
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
121
|
describe Sequel::Model, ".dataset_module" do
|
188
122
|
before do
|
189
123
|
@c = Class.new(Sequel::Model(:items))
|
@@ -209,6 +143,11 @@ describe Sequel::Model, ".dataset_module" do
|
|
209
143
|
@c.return_3.must_equal 3
|
210
144
|
end
|
211
145
|
|
146
|
+
it "should add methods that can't be called with normal method syntax as class methods" do
|
147
|
+
@c.dataset_module.module_eval{define_method(:'return 3'){3}}
|
148
|
+
@c.send(:'return 3').must_equal 3
|
149
|
+
end
|
150
|
+
|
212
151
|
it "should not add private or protected methods defined in the module to the class" do
|
213
152
|
@c.dataset_module{private; def return_3() 3 end}
|
214
153
|
@c.dataset_module{protected; def return_4() 4 end}
|
@@ -565,59 +504,21 @@ describe "Model.db=" do
|
|
565
504
|
before do
|
566
505
|
@db1 = Sequel.mock
|
567
506
|
@db2 = Sequel.mock
|
568
|
-
|
569
|
-
@m = Class.new(Sequel::Model(@db1[:blue].filter(:x=>1)))
|
507
|
+
@m = Class.new(Sequel::Model(@db1))
|
570
508
|
end
|
571
509
|
|
572
|
-
|
510
|
+
it "should change database for model" do
|
573
511
|
@m.db = @db2
|
574
|
-
|
575
|
-
@m.dataset.db.must_equal @db2
|
576
|
-
@m.dataset.db.wont_equal @db1
|
512
|
+
@m.db.must_equal @db2
|
577
513
|
end
|
578
514
|
|
579
|
-
|
580
|
-
@m.
|
581
|
-
@m.
|
515
|
+
it "should raise Error for model with existing dataset" do
|
516
|
+
@m.dataset = :table
|
517
|
+
proc{@m.db = @db2}.must_raise Sequel::Error
|
582
518
|
end
|
583
519
|
|
584
520
|
it "should use the database for subclasses" do
|
585
|
-
|
586
|
-
@m.db = @db2
|
587
|
-
Class.new(@m).db.must_equal @db2
|
588
|
-
end
|
589
|
-
end
|
590
|
-
|
591
|
-
describe Sequel::Model, ".allowed_columns " do
|
592
|
-
before do
|
593
|
-
@c = Class.new(Sequel::Model(:blahblah)) do
|
594
|
-
columns :x, :y, :z
|
595
|
-
end
|
596
|
-
@c.strict_param_setting = false
|
597
|
-
@c.instance_variable_set(:@columns, [:x, :y, :z])
|
598
|
-
DB.reset
|
599
|
-
end
|
600
|
-
|
601
|
-
deprecated "should set the allowed columns correctly" do
|
602
|
-
@c.allowed_columns.must_be_nil
|
603
|
-
@c.set_allowed_columns :x
|
604
|
-
@c.allowed_columns.must_equal [:x]
|
605
|
-
@c.set_allowed_columns :x, :y
|
606
|
-
@c.allowed_columns.must_equal [:x, :y]
|
607
|
-
end
|
608
|
-
|
609
|
-
deprecated "should only set allowed columns by default" do
|
610
|
-
@c.set_allowed_columns :x, :y
|
611
|
-
i = @c.new(:x => 1, :y => 2, :z => 3)
|
612
|
-
i.values.must_equal(:x => 1, :y => 2)
|
613
|
-
i.set(:x => 4, :y => 5, :z => 6)
|
614
|
-
i.values.must_equal(:x => 4, :y => 5)
|
615
|
-
|
616
|
-
@c.dataset = @c.dataset.with_fetch(:x => 7)
|
617
|
-
i = @c.new
|
618
|
-
i.update(:x => 7, :z => 9)
|
619
|
-
i.values.must_equal(:x => 7)
|
620
|
-
DB.sqls.must_equal ["INSERT INTO blahblah (x) VALUES (7)", "SELECT * FROM blahblah WHERE id = 10"]
|
521
|
+
Class.new(@m).db.must_equal @db1
|
621
522
|
end
|
622
523
|
end
|
623
524
|
|
@@ -676,13 +577,6 @@ describe Sequel::Model, ".strict_param_setting" do
|
|
676
577
|
c = @c.new
|
677
578
|
proc{c.set(:a=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
678
579
|
proc{c.update(:a=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
679
|
-
deprecated do
|
680
|
-
@c.set_allowed_columns :x, :y
|
681
|
-
proc{c.set_all(:use_after_commit_rollback => false)}.must_raise(Sequel::MassAssignmentRestriction)
|
682
|
-
proc{c.set_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
683
|
-
proc{c.update_all(:use_after_commit_rollback=>false)}.must_raise(Sequel::MassAssignmentRestriction)
|
684
|
-
proc{c.update_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
685
|
-
end
|
686
580
|
end
|
687
581
|
|
688
582
|
it "should be disabled by strict_param_setting = false" do
|
@@ -835,16 +729,10 @@ describe "Model datasets #with_pk with #with_pk!" do
|
|
835
729
|
it "should handle an array for composite primary keys" do
|
836
730
|
@c.set_primary_key [:id1, :id2]
|
837
731
|
@ds.with_pk([1, 2])
|
838
|
-
sqls =
|
839
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
840
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
841
|
-
sqls.must_equal []
|
732
|
+
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
|
842
733
|
|
843
734
|
@ds.with_pk!([1, 2])
|
844
|
-
sqls =
|
845
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
846
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
847
|
-
sqls.must_equal []
|
735
|
+
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
|
848
736
|
end
|
849
737
|
|
850
738
|
it "should work with composite primary keys when called repeatedly on a frozen dataset with" do
|
@@ -852,10 +740,7 @@ describe "Model datasets #with_pk with #with_pk!" do
|
|
852
740
|
@ds.freeze
|
853
741
|
5.times do
|
854
742
|
@ds.with_pk([1,2])
|
855
|
-
sqls =
|
856
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
857
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
858
|
-
sqls.must_equal []
|
743
|
+
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
|
859
744
|
end
|
860
745
|
end
|
861
746
|
|
@@ -880,11 +765,6 @@ describe "Model datasets #with_pk with #with_pk!" do
|
|
880
765
|
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
881
766
|
end
|
882
767
|
|
883
|
-
deprecated "should not have #[] consider a string as a primary key lookup" do
|
884
|
-
@ds['foo'].must_equal @c.load(:id=>1)
|
885
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
|
886
|
-
end
|
887
|
-
|
888
768
|
it "should not have #[] consider a literal string as a primary key lookup" do
|
889
769
|
@ds[Sequel.lit('foo')].must_equal @c.load(:id=>1)
|
890
770
|
DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
|
@@ -906,6 +786,7 @@ describe "Model::include" do
|
|
906
786
|
including_class = Class.new(Sequel::Model(:items)) do
|
907
787
|
include(mod1, mod2)
|
908
788
|
end
|
909
|
-
including_class.included_modules.must_include(mod1
|
789
|
+
including_class.included_modules.must_include(mod1)
|
790
|
+
including_class.included_modules.must_include(mod2)
|
910
791
|
end
|
911
792
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe Sequel::Model, "class dataset methods" do
|
4
4
|
before do
|
@@ -9,10 +9,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should call the dataset method of the same name with the same args" do
|
12
|
-
deprecated do
|
13
|
-
@c.<<({}).must_equal @d
|
14
|
-
end
|
15
|
-
@db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
|
16
12
|
@c.all.must_equal [@c.load(:id=>1)]
|
17
13
|
@db.sqls.must_equal ["SELECT * FROM items"]
|
18
14
|
@c.avg(:id).must_equal 1
|
@@ -29,9 +25,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
29
25
|
@c.except(@d, :from_self=>false).sql.must_equal "SELECT * FROM items EXCEPT SELECT * FROM items"
|
30
26
|
@c.exclude(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
|
31
27
|
@c.exclude_having(:a).sql.must_equal "SELECT * FROM items HAVING NOT a"
|
32
|
-
deprecated do
|
33
|
-
@c.exclude_where(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
|
34
|
-
end
|
35
28
|
@c.fetch_rows("S"){|r| r.must_equal(:id=>1)}
|
36
29
|
@db.sqls.must_equal ["S"]
|
37
30
|
@c.filter(:a).sql.must_equal "SELECT * FROM items WHERE a"
|
@@ -57,13 +50,9 @@ describe Sequel::Model, "class dataset methods" do
|
|
57
50
|
@c.import([:id], [[1]])
|
58
51
|
@db.sqls.must_equal ["BEGIN", "INSERT INTO items (id) VALUES (1)", "COMMIT"]
|
59
52
|
@c.inner_join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
60
|
-
@c.insert.must_equal
|
53
|
+
@c.insert.must_equal 1
|
61
54
|
@db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
|
62
55
|
@c.intersect(@d, :from_self=>false).sql.must_equal "SELECT * FROM items INTERSECT SELECT * FROM items"
|
63
|
-
deprecated do
|
64
|
-
@c.interval(:id).must_equal 1
|
65
|
-
end
|
66
|
-
@db.sqls.must_equal ["SELECT (max(id) - min(id)) AS interval FROM items LIMIT 1"]
|
67
56
|
@c.join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
68
57
|
@c.join_table(:inner, @c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
69
58
|
@c.last.must_equal @c.load(:id=>1)
|
@@ -109,9 +98,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
109
98
|
@c.select_order_map(:id).must_equal [1]
|
110
99
|
@db.sqls.must_equal ["SELECT id FROM items ORDER BY id"]
|
111
100
|
@c.server(:a).opts[:server].must_equal :a
|
112
|
-
deprecated do
|
113
|
-
@c.set_graph_aliases(:a=>:b).opts[:graph_aliases].must_equal(:a=>[:b, :a])
|
114
|
-
end
|
115
101
|
@c.single_record.must_equal @c.load(:id=>1)
|
116
102
|
@db.sqls.must_equal ["SELECT * FROM items LIMIT 1"]
|
117
103
|
@c.single_record!.must_equal @c.load(:id=>1)
|
@@ -148,10 +134,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
148
134
|
sc.invert.sql.must_equal 'SELECT a FROM items WHERE NOT a GROUP BY a ORDER BY a LIMIT 2'
|
149
135
|
sc.dataset = sc.dataset.with_fetch(:v1=>1, :v2=>2)
|
150
136
|
@db.sqls
|
151
|
-
deprecated do
|
152
|
-
sc.range(:a).must_equal(1..2)
|
153
|
-
end
|
154
|
-
@db.sqls.must_equal ["SELECT min(a) AS v1, max(a) AS v2 FROM (SELECT a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2) AS t1 LIMIT 1"]
|
155
137
|
sc.reverse.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
|
156
138
|
sc.reverse_order.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
|
157
139
|
sc.select_more(:a).sql.must_equal 'SELECT a, a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe Sequel::Model::DatasetMethods, "#destroy" do
|
4
4
|
before do
|
@@ -86,24 +86,6 @@ describe Sequel::Model::DatasetMethods do
|
|
86
86
|
@c.db.reset
|
87
87
|
end
|
88
88
|
|
89
|
-
deprecated "#join_table should allow use to use a model class when joining" do
|
90
|
-
@c.join(Class.new(Sequel::Model(:categories)), :item_id => :id).sql.must_equal 'SELECT * FROM items INNER JOIN categories ON (categories.item_id = items.id)'
|
91
|
-
end
|
92
|
-
|
93
|
-
deprecated "#join_table should handle model classes that aren't simple selects using a subselect" do
|
94
|
-
@c.join(Class.new(Sequel::Model(DB[:categories].where(:foo=>1))), :item_id => :id).sql.must_equal 'SELECT * FROM items INNER JOIN (SELECT * FROM categories WHERE (foo = 1)) AS t1 ON (t1.item_id = items.id)'
|
95
|
-
end
|
96
|
-
|
97
|
-
deprecated "#graph should allow use to use a model class when joining" do
|
98
|
-
c = Class.new(Sequel::Model(:categories))
|
99
|
-
c.columns :id
|
100
|
-
@c.graph(c, :item_id => :id).sql.must_equal 'SELECT items.id, categories.id AS categories_id FROM items LEFT OUTER JOIN categories ON (categories.item_id = items.id)'
|
101
|
-
end
|
102
|
-
|
103
|
-
deprecated "#insert_sql should handle a single model instance as an argument" do
|
104
|
-
@c.dataset.insert_sql(@c.load(:id=>1)).must_equal 'INSERT INTO items (id) VALUES (1)'
|
105
|
-
end
|
106
|
-
|
107
89
|
it "#first should handle no primary key" do
|
108
90
|
@c.no_primary_key
|
109
91
|
@c.first.must_be_kind_of(@c)
|
@@ -209,7 +191,6 @@ describe Sequel::Model::DatasetMethods, "#where_single_value" do
|
|
209
191
|
|
210
192
|
it "should return single value" do
|
211
193
|
5.times do
|
212
|
-
a = []
|
213
194
|
@c.only_id.where_single_value(:id=>1).must_equal 1
|
214
195
|
@c.db.sqls.must_equal ['SELECT id FROM items WHERE (id = 1) LIMIT 1']
|
215
196
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe Sequel::Model, "#eager" do
|
4
4
|
before do
|
@@ -1483,20 +1483,26 @@ describe Sequel::Model, "#eager_graph" do
|
|
1483
1483
|
a.first.lgenre.must_equal sub.load(:id => 4)
|
1484
1484
|
end
|
1485
1485
|
|
1486
|
-
it "should correctly handle an aliased join table in many_to_many and one_through_one with
|
1486
|
+
it "should correctly handle an aliased join table in many_to_many and one_through_one with graph_conditions or graph_block" do
|
1487
1487
|
c = Class.new(GraphAlbum)
|
1488
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :
|
1489
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ga.genre_id)'
|
1490
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :
|
1491
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND \'t\')'
|
1488
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :graph_conditions=>{:a=>:b}
|
1489
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b))'
|
1490
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :graph_block => proc{true}
|
1491
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b) AND \'t\')'
|
1492
1492
|
end
|
1493
1493
|
|
1494
|
-
with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one with
|
1494
|
+
with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one with graph_conditions or graph_block" do
|
1495
1495
|
c = Class.new(GraphAlbum)
|
1496
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :
|
1497
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ga.genre_id)'
|
1498
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :
|
1499
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND \'t\')'
|
1496
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :graph_conditions=>{:a=>:b}
|
1497
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b))'
|
1498
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :graph_block => proc{true}
|
1499
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b) AND \'t\')'
|
1500
|
+
end
|
1501
|
+
|
1502
|
+
it "should raise Error when using eager_graph with :conditions option that isn't a conditions specifier" do
|
1503
|
+
c = Class.new(GraphAlbum)
|
1504
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :conditions=>'true'
|
1505
|
+
proc{c.eager_graph(:genres)}.must_raise Sequel::Error
|
1500
1506
|
end
|
1501
1507
|
|
1502
1508
|
with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one" do
|
data/spec/model/hooks_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe "Model#before_create && Model#after_create" do
|
4
4
|
before do
|
@@ -17,14 +17,7 @@ describe "Model#before_create && Model#after_create" do
|
|
17
17
|
it "should be called around new record creation" do
|
18
18
|
@c.send(:define_method, :before_create){DB << "BLAH before"}
|
19
19
|
@c.create(:x => 2)
|
20
|
-
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', '
|
21
|
-
end
|
22
|
-
|
23
|
-
deprecated ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
|
24
|
-
@c.send(:define_method, :before_create){false}
|
25
|
-
proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
|
26
|
-
DB.sqls.must_equal []
|
27
|
-
@c.load(:id => 2233).save
|
20
|
+
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'SELECT * FROM items WHERE x = 2', 'BLAH after']
|
28
21
|
end
|
29
22
|
|
30
23
|
it ".create should cancel the save and raise an error if before_create calls cancel_action and raise_on_save_failure is true" do
|
@@ -34,13 +27,6 @@ describe "Model#before_create && Model#after_create" do
|
|
34
27
|
@c.load(:id => 2233).save
|
35
28
|
end
|
36
29
|
|
37
|
-
deprecated ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
|
38
|
-
@c.send(:define_method, :before_create){false}
|
39
|
-
@c.raise_on_save_failure = false
|
40
|
-
@c.create(:x => 2).must_be_nil
|
41
|
-
DB.sqls.must_equal []
|
42
|
-
end
|
43
|
-
|
44
30
|
it ".create should cancel the save and return nil if before_create calls cancel_action and raise_on_save_failure is false" do
|
45
31
|
@c.send(:define_method, :before_create){cancel_action}
|
46
32
|
@c.raise_on_save_failure = false
|
@@ -67,32 +53,12 @@ describe "Model#before_update && Model#after_update" do
|
|
67
53
|
DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
|
68
54
|
end
|
69
55
|
|
70
|
-
deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
|
71
|
-
@c.send(:define_method, :before_update){false}
|
72
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
73
|
-
DB.sqls.must_equal []
|
74
|
-
end
|
75
|
-
|
76
56
|
it "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
|
77
57
|
@c.send(:define_method, :before_update){cancel_action}
|
78
58
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
79
59
|
DB.sqls.must_equal []
|
80
60
|
end
|
81
61
|
|
82
|
-
deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_failure option is true" do
|
83
|
-
@c.send(:define_method, :before_update){false}
|
84
|
-
@c.raise_on_save_failure = false
|
85
|
-
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
86
|
-
DB.sqls.must_equal []
|
87
|
-
end
|
88
|
-
|
89
|
-
deprecated "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
|
90
|
-
@c.send(:define_method, :before_update){false}
|
91
|
-
@c.raise_on_save_failure = false
|
92
|
-
@c.load(:id => 2233).save.must_be_nil
|
93
|
-
DB.sqls.must_equal []
|
94
|
-
end
|
95
|
-
|
96
62
|
it "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
|
97
63
|
@c.send(:define_method, :before_update){cancel_action}
|
98
64
|
@c.raise_on_save_failure = false
|
@@ -124,20 +90,7 @@ describe "Model#before_save && Model#after_save" do
|
|
124
90
|
@c.set_primary_key :x
|
125
91
|
@c.unrestrict_primary_key
|
126
92
|
@c.create(:x => 2)
|
127
|
-
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', '
|
128
|
-
end
|
129
|
-
|
130
|
-
deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
|
131
|
-
@c.send(:define_method, :before_save){false}
|
132
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
133
|
-
DB.sqls.must_equal []
|
134
|
-
end
|
135
|
-
|
136
|
-
deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_failure option is true" do
|
137
|
-
@c.send(:define_method, :before_save){false}
|
138
|
-
@c.raise_on_save_failure = false
|
139
|
-
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
140
|
-
DB.sqls.must_equal []
|
93
|
+
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'SELECT * FROM items WHERE x = 2', 'BLAH after']
|
141
94
|
end
|
142
95
|
|
143
96
|
it "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_failure option is true" do
|
@@ -147,13 +100,6 @@ describe "Model#before_save && Model#after_save" do
|
|
147
100
|
DB.sqls.must_equal []
|
148
101
|
end
|
149
102
|
|
150
|
-
deprecated "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
|
151
|
-
@c.send(:define_method, :before_save){false}
|
152
|
-
@c.raise_on_save_failure = false
|
153
|
-
@c.load(:id => 2233).save.must_be_nil
|
154
|
-
DB.sqls.must_equal []
|
155
|
-
end
|
156
|
-
|
157
103
|
it "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
|
158
104
|
@c.send(:define_method, :before_save){cancel_action}
|
159
105
|
@c.raise_on_save_failure = false
|
@@ -185,32 +131,12 @@ describe "Model#before_destroy && Model#after_destroy" do
|
|
185
131
|
DB.sqls.must_equal ['BLAH before', 'DELETE FROM items WHERE id = 2233', 'BLAH after']
|
186
132
|
end
|
187
133
|
|
188
|
-
deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
|
189
|
-
@c.send(:define_method, :before_destroy){false}
|
190
|
-
proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
|
191
|
-
DB.sqls.must_equal []
|
192
|
-
end
|
193
|
-
|
194
134
|
it "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
|
195
135
|
@c.send(:define_method, :before_destroy){cancel_action; true}
|
196
136
|
proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
|
197
137
|
DB.sqls.must_equal []
|
198
138
|
end
|
199
139
|
|
200
|
-
deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_failure option is true" do
|
201
|
-
@c.send(:define_method, :before_destroy){false}
|
202
|
-
@c.raise_on_save_failure = false
|
203
|
-
proc{@c.load(:id => 2233).destroy(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
204
|
-
DB.sqls.must_equal []
|
205
|
-
end
|
206
|
-
|
207
|
-
deprecated "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
|
208
|
-
@c.send(:define_method, :before_destroy){false}
|
209
|
-
@c.raise_on_save_failure = false
|
210
|
-
@c.load(:id => 2233).destroy.must_be_nil
|
211
|
-
DB.sqls.must_equal []
|
212
|
-
end
|
213
|
-
|
214
140
|
it "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
|
215
141
|
@c.send(:define_method, :before_destroy){cancel_action; true}
|
216
142
|
@c.raise_on_save_failure = false
|
@@ -257,32 +183,12 @@ describe "Model#before_validation && Model#after_validation" do
|
|
257
183
|
DB.sqls.must_equal ['BLAH before', 'BLAH after']
|
258
184
|
end
|
259
185
|
|
260
|
-
deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
|
261
|
-
@c.send(:define_method, :before_validation){false}
|
262
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
263
|
-
DB.sqls.must_equal []
|
264
|
-
end
|
265
|
-
|
266
|
-
deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_failure option is true" do
|
267
|
-
@c.send(:define_method, :before_validation){false}
|
268
|
-
@c.raise_on_save_failure = false
|
269
|
-
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
|
270
|
-
DB.sqls.must_equal []
|
271
|
-
end
|
272
|
-
|
273
186
|
it "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
|
274
187
|
@c.send(:define_method, :before_validation){cancel_action}
|
275
188
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
276
189
|
DB.sqls.must_equal []
|
277
190
|
end
|
278
191
|
|
279
|
-
deprecated "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
|
280
|
-
@c.send(:define_method, :before_validation){false}
|
281
|
-
@c.raise_on_save_failure = false
|
282
|
-
@c.load(:id => 2233).save.must_be_nil
|
283
|
-
DB.sqls.must_equal []
|
284
|
-
end
|
285
|
-
|
286
192
|
it "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
|
287
193
|
@c.send(:define_method, :before_validation){cancel_action}
|
288
194
|
@c.raise_on_save_failure = false
|
@@ -294,11 +200,6 @@ describe "Model#before_validation && Model#after_validation" do
|
|
294
200
|
@c.send(:define_method, :before_validation){cancel_action}
|
295
201
|
@c.load(:id => 2233).valid?.must_equal false
|
296
202
|
end
|
297
|
-
|
298
|
-
deprecated "#valid? should return false if before_validation returns false" do
|
299
|
-
@c.send(:define_method, :before_validation){false}
|
300
|
-
@c.load(:id => 2233).valid?.must_equal false
|
301
|
-
end
|
302
203
|
end
|
303
204
|
|
304
205
|
describe "Model around filters" do
|
@@ -318,7 +219,7 @@ describe "Model around filters" do
|
|
318
219
|
end
|
319
220
|
end
|
320
221
|
@c.create(:x => 2)
|
321
|
-
DB.sqls.must_equal ['ac_before', 'INSERT INTO items (x) VALUES (2)',
|
222
|
+
DB.sqls.must_equal ['ac_before', 'INSERT INTO items (x) VALUES (2)', "SELECT * FROM items WHERE id = 10", 'ac_after']
|
322
223
|
end
|
323
224
|
|
324
225
|
it "around_delete should be called around record destruction" do
|
@@ -364,7 +265,7 @@ describe "Model around filters" do
|
|
364
265
|
end
|
365
266
|
end
|
366
267
|
@c.create(:x => 2)
|
367
|
-
DB.sqls.must_equal ['as_before', 'ac_before', 'INSERT INTO items (x) VALUES (2)',
|
268
|
+
DB.sqls.must_equal ['as_before', 'ac_before', 'INSERT INTO items (x) VALUES (2)', "SELECT * FROM items WHERE id = 10", 'ac_after', 'as_after']
|
368
269
|
@c.load(:id=>1, :x => 2).save
|
369
270
|
DB.sqls.must_equal ['as_before', 'au_before', 'UPDATE items SET x = 2 WHERE (id = 1)', 'au_after', 'as_after']
|
370
271
|
end
|
@@ -467,199 +368,3 @@ describe "Model around filters" do
|
|
467
368
|
o.save.must_be_nil
|
468
369
|
end
|
469
370
|
end
|
470
|
-
|
471
|
-
describe "Model#after_commit and #after_rollback" do
|
472
|
-
before do
|
473
|
-
@db = Sequel.mock(:servers=>{:test=>{}})
|
474
|
-
@m = Class.new(Sequel::Model(@db[:items])) do
|
475
|
-
attr_accessor :rb
|
476
|
-
def _delete
|
477
|
-
end
|
478
|
-
def after_save
|
479
|
-
db.execute('as')
|
480
|
-
raise Sequel::Rollback if rb
|
481
|
-
end
|
482
|
-
def after_commit
|
483
|
-
db.execute('ac')
|
484
|
-
end
|
485
|
-
def after_rollback
|
486
|
-
db.execute('ar')
|
487
|
-
end
|
488
|
-
def after_destroy
|
489
|
-
db.execute('ad')
|
490
|
-
raise Sequel::Rollback if rb
|
491
|
-
end
|
492
|
-
def after_destroy_commit
|
493
|
-
db.execute('adc')
|
494
|
-
end
|
495
|
-
def after_destroy_rollback
|
496
|
-
db.execute('adr')
|
497
|
-
end
|
498
|
-
end
|
499
|
-
@m.use_transactions = true
|
500
|
-
@o = @m.load({})
|
501
|
-
@db.sqls
|
502
|
-
end
|
503
|
-
|
504
|
-
deprecated "should call after_commit for save after the transaction commits if it commits" do
|
505
|
-
@o.save
|
506
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac']
|
507
|
-
end
|
508
|
-
|
509
|
-
deprecated "should call after_rollback for save after the transaction rolls back if it rolls back" do
|
510
|
-
@o.rb = true
|
511
|
-
@o.save
|
512
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar']
|
513
|
-
end
|
514
|
-
|
515
|
-
deprecated "should have after_commit respect any surrounding transactions" do
|
516
|
-
@db.transaction do
|
517
|
-
@o.save
|
518
|
-
end
|
519
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac']
|
520
|
-
end
|
521
|
-
|
522
|
-
deprecated "should have after_rollback respect any surrounding transactions" do
|
523
|
-
@db.transaction do
|
524
|
-
@o.rb = true
|
525
|
-
@o.save
|
526
|
-
end
|
527
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar']
|
528
|
-
end
|
529
|
-
|
530
|
-
deprecated "should have after_commit work with surrounding transactions and sharding" do
|
531
|
-
@db.transaction(:server=>:test) do
|
532
|
-
@o.save
|
533
|
-
end
|
534
|
-
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'as', 'COMMIT', 'ac', 'COMMIT -- test']
|
535
|
-
end
|
536
|
-
|
537
|
-
deprecated "should have after_rollback work with surrounding transactions and sharding" do
|
538
|
-
@db.transaction(:server=>:test) do
|
539
|
-
@o.rb = true
|
540
|
-
@o.save
|
541
|
-
end
|
542
|
-
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'as', 'ROLLBACK', 'ar', 'COMMIT -- test']
|
543
|
-
end
|
544
|
-
|
545
|
-
deprecated "should call after_destroy_commit for destroy after the transaction commits if it commits" do
|
546
|
-
@o.destroy
|
547
|
-
@db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT', 'adc']
|
548
|
-
end
|
549
|
-
|
550
|
-
deprecated "should call after_destroy_rollback for destroy after the transaction rolls back if it rolls back" do
|
551
|
-
@o.rb = true
|
552
|
-
@o.destroy
|
553
|
-
@db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK', 'adr']
|
554
|
-
end
|
555
|
-
|
556
|
-
deprecated "should have after_destroy_commit respect any surrounding transactions" do
|
557
|
-
@db.transaction do
|
558
|
-
@o.destroy
|
559
|
-
end
|
560
|
-
@db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT', 'adc']
|
561
|
-
end
|
562
|
-
|
563
|
-
deprecated "should have after_destroy_rollback respect any surrounding transactions" do
|
564
|
-
@db.transaction do
|
565
|
-
@o.rb = true
|
566
|
-
@o.destroy
|
567
|
-
end
|
568
|
-
@db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK', 'adr']
|
569
|
-
end
|
570
|
-
|
571
|
-
deprecated "should have after_destroy commit work with surrounding transactions and sharding" do
|
572
|
-
@db.transaction(:server=>:test) do
|
573
|
-
@o.destroy
|
574
|
-
end
|
575
|
-
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'ad', 'COMMIT', 'adc', 'COMMIT -- test']
|
576
|
-
end
|
577
|
-
|
578
|
-
deprecated "should have after_destroy_rollback work with surrounding transactions and sharding" do
|
579
|
-
@db.transaction(:server=>:test) do
|
580
|
-
@o.rb = true
|
581
|
-
@o.destroy
|
582
|
-
end
|
583
|
-
@db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'ad', 'ROLLBACK', 'adr', 'COMMIT -- test']
|
584
|
-
end
|
585
|
-
|
586
|
-
deprecated "should not call after_commit if use_after_commit_rollback is false" do
|
587
|
-
@o.use_after_commit_rollback = false
|
588
|
-
@o.save
|
589
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
|
590
|
-
end
|
591
|
-
|
592
|
-
deprecated "should not call after_rollback if use_after_commit_rollback is false" do
|
593
|
-
@o.use_after_commit_rollback = false
|
594
|
-
@o.rb = true
|
595
|
-
@o.save
|
596
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK']
|
597
|
-
end
|
598
|
-
|
599
|
-
deprecated "should not call after_destroy_commit if use_after_commit_rollback is false" do
|
600
|
-
@o.use_after_commit_rollback = false
|
601
|
-
@o.destroy
|
602
|
-
@db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT']
|
603
|
-
end
|
604
|
-
|
605
|
-
deprecated "should not call after_destroy_rollback for save if use_after_commit_rollback is false" do
|
606
|
-
@o.use_after_commit_rollback = false
|
607
|
-
@o.rb = true
|
608
|
-
@o.destroy
|
609
|
-
@db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK']
|
610
|
-
end
|
611
|
-
|
612
|
-
deprecated "should handle use_after_commit_rollback at the class level" do
|
613
|
-
@m.use_after_commit_rollback = false
|
614
|
-
@o.save
|
615
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
|
616
|
-
end
|
617
|
-
|
618
|
-
deprecated "should handle use_after_commit_rollback when subclassing" do
|
619
|
-
@m.use_after_commit_rollback = false
|
620
|
-
o = Class.new(@m).load({})
|
621
|
-
@db.sqls
|
622
|
-
o.save
|
623
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
|
624
|
-
end
|
625
|
-
|
626
|
-
deprecated "should handle use_after_commit_rollback when subclassing after loading" do
|
627
|
-
@m = Class.new(Sequel::Model(@db[:items]))
|
628
|
-
@m.use_transactions = true
|
629
|
-
o = @m.load({})
|
630
|
-
@db.sqls
|
631
|
-
o.save
|
632
|
-
@db.sqls.must_equal ['BEGIN', 'COMMIT']
|
633
|
-
|
634
|
-
c = Class.new(@m)
|
635
|
-
o = c.load({})
|
636
|
-
def o.after_commit; db.execute 'ac' end
|
637
|
-
@db.sqls
|
638
|
-
o.save
|
639
|
-
@db.sqls.must_equal ['BEGIN', 'COMMIT', 'ac']
|
640
|
-
|
641
|
-
o = c.load({})
|
642
|
-
@db.sqls
|
643
|
-
o.save
|
644
|
-
@db.sqls.must_equal ['BEGIN', 'COMMIT']
|
645
|
-
|
646
|
-
c.send(:define_method, :after_commit){db.execute 'ac'}
|
647
|
-
o = c.load({})
|
648
|
-
@db.sqls
|
649
|
-
o.save
|
650
|
-
@db.sqls.must_equal ['BEGIN', 'COMMIT', 'ac']
|
651
|
-
|
652
|
-
c = Class.new(@m)
|
653
|
-
c.send(:include, Module.new{def after_commit; db.execute 'ac'; end})
|
654
|
-
o = c.load({})
|
655
|
-
@db.sqls
|
656
|
-
o.save
|
657
|
-
@db.sqls.must_equal ['BEGIN', 'COMMIT', 'ac']
|
658
|
-
|
659
|
-
c.use_after_commit_rollback = false
|
660
|
-
o = c.load({})
|
661
|
-
@db.sqls
|
662
|
-
o.save
|
663
|
-
@db.sqls.must_equal ['BEGIN', 'COMMIT']
|
664
|
-
end
|
665
|
-
end
|