sequel 4.49.0 → 5.3.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 +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- 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/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -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/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- 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 +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- 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 +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- 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/jdbc.rb +18 -74
- 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/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/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- 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 +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -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 +4 -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/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/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- 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 +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -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 +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- 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 +27 -43
- 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_extended_date_support.rb +230 -0
- 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 +3 -16
- 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/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- 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/model.rb +27 -62
- 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 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- 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 +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- 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 +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -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 +88 -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 +30 -92
- 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 +53 -1118
- 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 +8 -30
- 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 +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -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 +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- 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_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- 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 +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- 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 +43 -32
- 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 +5 -17
- 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/synchronize_sql_spec.rb +124 -0
- 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 +5 -7
- 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 +12 -16
- 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 -13
- 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 +8 -13
- 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 +12 -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 +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -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 +43 -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 +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- 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/do.rb +0 -166
- 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/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/swift.rb +0 -169
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "InstanceHooks plugin" do
|
|
4
4
|
def r(x=nil)
|
|
@@ -25,17 +25,6 @@ describe "InstanceHooks plugin" do
|
|
|
25
25
|
@r.must_equal [4, 2, 1, 3]
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
deprecated "should cancel the save if before_create_hook block returns false" do
|
|
29
|
-
@o.after_create_hook{r 1}
|
|
30
|
-
@o.before_create_hook{r false}
|
|
31
|
-
@o.before_create_hook{r 4}
|
|
32
|
-
@o.save.must_be_nil
|
|
33
|
-
@r.must_equal [4, false]
|
|
34
|
-
@r.clear
|
|
35
|
-
@o.save.must_be_nil
|
|
36
|
-
@r.must_equal [4, false]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
28
|
it "should cancel the save if before_create_hook block calls cancel_action" do
|
|
40
29
|
@o.after_create_hook{r 1}
|
|
41
30
|
@o.before_create_hook{r{@o.cancel_action}}
|
|
@@ -58,17 +47,6 @@ describe "InstanceHooks plugin" do
|
|
|
58
47
|
@r.must_equal [4, 2, 1, 3]
|
|
59
48
|
end
|
|
60
49
|
|
|
61
|
-
deprecated "should cancel the save if before_update_hook block returns false" do
|
|
62
|
-
@x.after_update_hook{r 1}
|
|
63
|
-
@x.before_update_hook{r false}
|
|
64
|
-
@x.before_update_hook{r 4}
|
|
65
|
-
@x.save.must_be_nil
|
|
66
|
-
@r.must_equal [4, false]
|
|
67
|
-
@r.clear
|
|
68
|
-
@x.save.must_be_nil
|
|
69
|
-
@r.must_equal [4, false]
|
|
70
|
-
end
|
|
71
|
-
|
|
72
50
|
it "should cancel the save if before_update_hook block calls cancel_action" do
|
|
73
51
|
@x.after_update_hook{r 1}
|
|
74
52
|
@x.before_update_hook{r{@x.cancel_action}}
|
|
@@ -99,24 +77,6 @@ describe "InstanceHooks plugin" do
|
|
|
99
77
|
@r.must_equal [4, 2, 1, 3]
|
|
100
78
|
end
|
|
101
79
|
|
|
102
|
-
deprecated "should cancel the save if before_save_hook block returns false" do
|
|
103
|
-
@x.after_save_hook{r 1}
|
|
104
|
-
@x.before_save_hook{r false}
|
|
105
|
-
@x.before_save_hook{r 4}
|
|
106
|
-
@x.save.must_be_nil
|
|
107
|
-
@r.must_equal [4, false]
|
|
108
|
-
@r.clear
|
|
109
|
-
|
|
110
|
-
@x.after_save_hook{r 1}
|
|
111
|
-
@x.before_save_hook{r false}
|
|
112
|
-
@x.before_save_hook{r 4}
|
|
113
|
-
@x.save.must_be_nil
|
|
114
|
-
@r.must_equal [4, false]
|
|
115
|
-
@r.clear
|
|
116
|
-
@x.save.must_be_nil
|
|
117
|
-
@r.must_equal [4, false]
|
|
118
|
-
end
|
|
119
|
-
|
|
120
80
|
it "should cancel the save if before_save_hook block calls cancel_action" do
|
|
121
81
|
@x.after_save_hook{r 1}
|
|
122
82
|
@x.before_save_hook{r{@x.cancel_action}}
|
|
@@ -144,14 +104,6 @@ describe "InstanceHooks plugin" do
|
|
|
144
104
|
@r.must_equal [4, 2, 1, 3]
|
|
145
105
|
end
|
|
146
106
|
|
|
147
|
-
deprecated "should cancel the destroy if before_destroy_hook block returns false" do
|
|
148
|
-
@x.after_destroy_hook{r 1}
|
|
149
|
-
@x.before_destroy_hook{r false}
|
|
150
|
-
@x.before_destroy_hook{r 4}
|
|
151
|
-
@x.destroy.must_be_nil
|
|
152
|
-
@r.must_equal [4, false]
|
|
153
|
-
end
|
|
154
|
-
|
|
155
107
|
it "should cancel the destroy if before_destroy_hook block calls cancel_action" do
|
|
156
108
|
@x.after_destroy_hook{r 1}
|
|
157
109
|
@x.before_destroy_hook{r{@x.cancel_action}}
|
|
@@ -169,17 +121,6 @@ describe "InstanceHooks plugin" do
|
|
|
169
121
|
@r.must_equal [4, 2, 1, 3]
|
|
170
122
|
end
|
|
171
123
|
|
|
172
|
-
deprecated "should cancel the save if before_validation_hook block returns false" do
|
|
173
|
-
@o.after_validation_hook{r 1}
|
|
174
|
-
@o.before_validation_hook{r false}
|
|
175
|
-
@o.before_validation_hook{r 4}
|
|
176
|
-
@o.valid?.must_equal false
|
|
177
|
-
@r.must_equal [4, false]
|
|
178
|
-
@r.clear
|
|
179
|
-
@o.valid?.must_equal false
|
|
180
|
-
@r.must_equal [4, false]
|
|
181
|
-
end
|
|
182
|
-
|
|
183
124
|
it "should cancel the save if before_validation_hook block calls cancel_action" do
|
|
184
125
|
@o.after_validation_hook{r 1}
|
|
185
126
|
@o.before_validation_hook{r{@o.cancel_action}}
|
|
@@ -289,34 +230,6 @@ describe "InstanceHooks plugin with transactions" do
|
|
|
289
230
|
@db.sqls
|
|
290
231
|
end
|
|
291
232
|
|
|
292
|
-
deprecated "should support after_commit_hook" do
|
|
293
|
-
@o.after_commit_hook{@db.execute('ac1')}
|
|
294
|
-
@o.after_commit_hook{@db.execute('ac2')}
|
|
295
|
-
@o.save.wont_equal nil
|
|
296
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac1', 'ac2']
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
deprecated "should support after_rollback_hook" do
|
|
300
|
-
@or.after_rollback_hook{@db.execute('ar1')}
|
|
301
|
-
@or.after_rollback_hook{@db.execute('ar2')}
|
|
302
|
-
@or.save.must_be_nil
|
|
303
|
-
@db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar1', 'ar2']
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
deprecated "should support after_destroy_commit_hook" do
|
|
307
|
-
@o.after_destroy_commit_hook{@db.execute('adc1')}
|
|
308
|
-
@o.after_destroy_commit_hook{@db.execute('adc2')}
|
|
309
|
-
@o.destroy.wont_equal nil
|
|
310
|
-
@db.sqls.must_equal ['BEGIN', "DELETE FROM items WHERE (id = 1)", 'ad', 'COMMIT', 'adc1', 'adc2']
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
deprecated "should support after_destroy_rollback_hook" do
|
|
314
|
-
@or.after_destroy_rollback_hook{@db.execute('adr1')}
|
|
315
|
-
@or.after_destroy_rollback_hook{@db.execute('adr2')}
|
|
316
|
-
@or.destroy.must_be_nil
|
|
317
|
-
@db.sqls.must_equal ['BEGIN', "DELETE FROM items WHERE (id = 1)", 'ad', 'ROLLBACK', 'adr1', 'adr2']
|
|
318
|
-
end
|
|
319
|
-
|
|
320
233
|
it "should have *_hook methods return self "do
|
|
321
234
|
@o.before_destroy_hook{r 1}.must_be_same_as(@o)
|
|
322
235
|
@o.before_validation_hook{r 1}.must_be_same_as(@o)
|
|
@@ -329,12 +242,5 @@ describe "InstanceHooks plugin with transactions" do
|
|
|
329
242
|
@o.after_save_hook{r 1}.must_be_same_as(@o)
|
|
330
243
|
@o.after_update_hook{r 1}.must_be_same_as(@o)
|
|
331
244
|
@o.after_create_hook{r 1}.must_be_same_as(@o)
|
|
332
|
-
deprecated do
|
|
333
|
-
@o.after_commit_hook{r 1}.must_be_same_as(@o)
|
|
334
|
-
@o.after_rollback_hook{r 1}.must_be_same_as(@o)
|
|
335
|
-
@o.after_destroy_commit_hook{r 1}.must_be_same_as(@o)
|
|
336
|
-
@o.after_destroy_rollback_hook{r 1}.must_be_same_as(@o)
|
|
337
|
-
end
|
|
338
245
|
end
|
|
339
|
-
|
|
340
246
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
require 'yaml'
|
|
3
3
|
|
|
4
4
|
describe "Sequel::Plugins::LazyAttributes" do
|
|
@@ -42,12 +42,6 @@ describe "Sequel::Plugins::LazyAttributes" do
|
|
|
42
42
|
Object.send(:remove_const, :LazyAttributesModel)
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
deprecated "should allow access to lazy_attributes_module" do
|
|
46
|
-
@c.lazy_attributes_module.must_be_kind_of Module
|
|
47
|
-
@c.lazy_attributes_module = v = Module.new
|
|
48
|
-
@c.lazy_attributes_module.must_equal v
|
|
49
|
-
end
|
|
50
|
-
|
|
51
45
|
it "should allowing adding additional lazy attributes via plugin :lazy_attributes" do
|
|
52
46
|
@c.set_dataset(@ds.select(:id, :blah))
|
|
53
47
|
@c.dataset.sql.must_equal 'SELECT id, blah FROM la'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "List plugin" do
|
|
4
4
|
def klass(opts={})
|
|
@@ -92,15 +92,14 @@ describe "List plugin" do
|
|
|
92
92
|
@sc.create(:scope_id=>1).values.must_equal(:id=>1, :scope_id=>1, :position=>1)
|
|
93
93
|
@sc.create(:scope_id=>1).values.must_equal(:id=>2, :scope_id=>1, :position=>2)
|
|
94
94
|
@sc.create(:scope_id=>2).values.must_equal(:id=>3, :scope_id=>2, :position=>1)
|
|
95
|
-
sqls =
|
|
96
|
-
|
|
97
|
-
sqls.slice!(4).must_match(/INSERT INTO items \((scope_id|position), (scope_id|position)\) VALUES \([12], [12]\)/)
|
|
98
|
-
sqls.slice!(1).must_match(/INSERT INTO items \((scope_id|position), (scope_id|position)\) VALUES \(1, 1\)/)
|
|
99
|
-
sqls.must_equal ["SELECT max(position) AS max FROM items WHERE (scope_id = 1) LIMIT 1",
|
|
95
|
+
@db.sqls.must_equal ["SELECT max(position) AS max FROM items WHERE (scope_id = 1) LIMIT 1",
|
|
96
|
+
'INSERT INTO items (scope_id, position) VALUES (1, 1)',
|
|
100
97
|
"SELECT * FROM items WHERE (id = 1) ORDER BY scope_id, position LIMIT 1",
|
|
101
98
|
"SELECT max(position) AS max FROM items WHERE (scope_id = 1) LIMIT 1",
|
|
99
|
+
'INSERT INTO items (scope_id, position) VALUES (1, 2)',
|
|
102
100
|
"SELECT * FROM items WHERE (id = 2) ORDER BY scope_id, position LIMIT 1",
|
|
103
101
|
"SELECT max(position) AS max FROM items WHERE (scope_id = 2) LIMIT 1",
|
|
102
|
+
'INSERT INTO items (scope_id, position) VALUES (2, 1)',
|
|
104
103
|
"SELECT * FROM items WHERE (id = 3) ORDER BY scope_id, position LIMIT 1"]
|
|
105
104
|
end
|
|
106
105
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "many_through_many" do
|
|
4
4
|
before do
|
|
@@ -462,12 +462,12 @@ describe Sequel::Model, "many_through_many" do
|
|
|
462
462
|
|
|
463
463
|
it "should not add associations methods directly to class" do
|
|
464
464
|
@c1.many_through_many :tags, [[:albums_artists, :artist_id, :album_id], [:albums, :id, :id], [:albums_tags, :album_id, :tag_id]]
|
|
465
|
-
im = @c1.instance_methods
|
|
466
|
-
im.must_include(
|
|
467
|
-
im.must_include(
|
|
468
|
-
im2 = @c1.instance_methods(false)
|
|
469
|
-
im2.wont_include(
|
|
470
|
-
im2.wont_include(
|
|
465
|
+
im = @c1.instance_methods
|
|
466
|
+
im.must_include(:tags)
|
|
467
|
+
im.must_include(:tags_dataset)
|
|
468
|
+
im2 = @c1.instance_methods(false)
|
|
469
|
+
im2.wont_include(:tags)
|
|
470
|
+
im2.wont_include(:tags_dataset)
|
|
471
471
|
end
|
|
472
472
|
|
|
473
473
|
it "should support after_load association callback" do
|
|
@@ -603,11 +603,9 @@ describe "many_through_many eager loading methods" do
|
|
|
603
603
|
it "should eagerly load multiple associations in a single call" do
|
|
604
604
|
a = @c1.eager(:tags, :albums).all
|
|
605
605
|
a.must_equal [@c1.load(:id=>1)]
|
|
606
|
-
sqls
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
610
|
-
sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
606
|
+
DB.sqls.must_equal ['SELECT * FROM artists',
|
|
607
|
+
'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
|
|
608
|
+
'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
|
|
611
609
|
a = a.first
|
|
612
610
|
a.tags.must_equal [Tag.load(:id=>2)]
|
|
613
611
|
a.albums.must_equal [Album.load(:id=>3)]
|
|
@@ -617,11 +615,9 @@ describe "many_through_many eager loading methods" do
|
|
|
617
615
|
it "should eagerly load multiple associations in separate" do
|
|
618
616
|
a = @c1.eager(:tags).eager(:albums).all
|
|
619
617
|
a.must_equal [@c1.load(:id=>1)]
|
|
620
|
-
sqls
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
624
|
-
sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
618
|
+
DB.sqls.must_equal ['SELECT * FROM artists',
|
|
619
|
+
'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
|
|
620
|
+
'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
|
|
625
621
|
a = a.first
|
|
626
622
|
a.tags.must_equal [Tag.load(:id=>2)]
|
|
627
623
|
a.albums.must_equal [Album.load(:id=>3)]
|
|
@@ -1585,12 +1581,12 @@ describe Sequel::Model, "one_through_many" do
|
|
|
1585
1581
|
|
|
1586
1582
|
it "should not add associations methods directly to class" do
|
|
1587
1583
|
@c1.one_through_many :tag, [[:albums_artists, :artist_id, :album_id], [:albums, :id, :id], [:albums_tags, :album_id, :tag_id]]
|
|
1588
|
-
im = @c1.instance_methods
|
|
1589
|
-
im.must_include(
|
|
1590
|
-
im.must_include(
|
|
1591
|
-
im2 = @c1.instance_methods(false)
|
|
1592
|
-
im2.wont_include(
|
|
1593
|
-
im2.wont_include(
|
|
1584
|
+
im = @c1.instance_methods
|
|
1585
|
+
im.must_include(:tag)
|
|
1586
|
+
im.must_include(:tag_dataset)
|
|
1587
|
+
im2 = @c1.instance_methods(false)
|
|
1588
|
+
im2.wont_include(:tag)
|
|
1589
|
+
im2.wont_include(:tag_dataset)
|
|
1594
1590
|
end
|
|
1595
1591
|
|
|
1596
1592
|
it "should support after_load association callback" do
|
|
@@ -1681,11 +1677,9 @@ describe "one_through_many eager loading methods" do
|
|
|
1681
1677
|
it "should eagerly load multiple associations in a single call" do
|
|
1682
1678
|
a = @c1.eager(:tag, :album).all
|
|
1683
1679
|
a.must_equal [@c1.load(:id=>1)]
|
|
1684
|
-
sqls
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
1688
|
-
sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
1680
|
+
DB.sqls.must_equal ['SELECT * FROM artists',
|
|
1681
|
+
'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
|
|
1682
|
+
'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
|
|
1689
1683
|
a = a.first
|
|
1690
1684
|
a.tag.must_equal Tag.load(:id=>2)
|
|
1691
1685
|
a.album.must_equal Album.load(:id=>3)
|
|
@@ -1695,11 +1689,9 @@ describe "one_through_many eager loading methods" do
|
|
|
1695
1689
|
it "should eagerly load multiple associations in separate" do
|
|
1696
1690
|
a = @c1.eager(:tag).eager(:album).all
|
|
1697
1691
|
a.must_equal [@c1.load(:id=>1)]
|
|
1698
|
-
sqls
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
1702
|
-
sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
|
|
1692
|
+
DB.sqls.must_equal ['SELECT * FROM artists',
|
|
1693
|
+
'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
|
|
1694
|
+
'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
|
|
1703
1695
|
a = a.first
|
|
1704
1696
|
a.tag.must_equal Tag.load(:id=>2)
|
|
1705
1697
|
a.album.must_equal Album.load(:id=>3)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
Sequel.extension :migration
|
|
4
4
|
|
|
@@ -62,7 +62,7 @@ describe "Migration.apply" do
|
|
|
62
62
|
m = Sequel::Migration.new(Sequel.mock)
|
|
63
63
|
m.respond_to?(:foo).must_equal false
|
|
64
64
|
m.respond_to?(:execute).must_equal true
|
|
65
|
-
end
|
|
65
|
+
end
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
describe "SimpleMigration#apply" do
|
|
@@ -195,6 +195,16 @@ describe "Reversible Migrations with Sequel.migration{change{}}" do
|
|
|
195
195
|
[:drop_table, :a, {:foo=>:bar}]]
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
+
it "should reverse add_foreign_key with :foreign_key_constraint_name option" do
|
|
199
|
+
Sequel.migration{change{alter_table(:t){add_foreign_key :b, :c, :foreign_key_constraint_name=>:f}}}.apply(@db, :down)
|
|
200
|
+
actions = @db.actions
|
|
201
|
+
actions.must_equal [[:alter_table, [[:drop_foreign_key, :b, {:foreign_key_constraint_name=>:f}]]]]
|
|
202
|
+
@db.sqls
|
|
203
|
+
db = Sequel.mock
|
|
204
|
+
db.alter_table(:t){send(*actions[0][1][0])}
|
|
205
|
+
db.sqls.must_equal ["ALTER TABLE t DROP CONSTRAINT f", "ALTER TABLE t DROP COLUMN b"]
|
|
206
|
+
end
|
|
207
|
+
|
|
198
208
|
it "should raise in the down direction if migration uses unsupported method" do
|
|
199
209
|
m = Sequel.migration{change{run 'SQL'}}
|
|
200
210
|
m.apply(@db, :up)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
begin
|
|
4
4
|
require 'tzinfo'
|
|
5
|
-
rescue LoadError
|
|
6
|
-
|
|
5
|
+
rescue LoadError
|
|
6
|
+
warn "Skipping test of named_timezones extension: can't load tzinfo"
|
|
7
7
|
else
|
|
8
8
|
Sequel.extension :thread_local_timezones
|
|
9
9
|
Sequel.extension :named_timezones
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "NestedAttributes plugin" do
|
|
4
4
|
def check_sqls(should, is)
|
|
@@ -49,12 +49,6 @@ describe "NestedAttributes plugin" do
|
|
|
49
49
|
@db.sqls
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
deprecated "should allow access to nested_attributes_module" do
|
|
53
|
-
@Artist.nested_attributes_module.must_be_kind_of Module
|
|
54
|
-
@Artist.nested_attributes_module = v = Module.new
|
|
55
|
-
@Artist.nested_attributes_module.must_equal v
|
|
56
|
-
end
|
|
57
|
-
|
|
58
52
|
it "should support creating new many_to_one objects" do
|
|
59
53
|
a = @Album.new({:name=>'Al', :artist_attributes=>{:name=>'Ar'}})
|
|
60
54
|
@db.sqls.must_equal []
|
|
@@ -462,17 +456,6 @@ describe "NestedAttributes plugin" do
|
|
|
462
456
|
ar.set(:albums_attributes=>[{:id=>10, :_delete=>'t'}])
|
|
463
457
|
end
|
|
464
458
|
|
|
465
|
-
deprecated "should not raise an Error if an unmatched primary key is given, if the :strict=>false option is used" do
|
|
466
|
-
@Artist.nested_attributes :albums, :strict=>false
|
|
467
|
-
al = @Album.load(:id=>10, :name=>'Al')
|
|
468
|
-
ar = @Artist.load(:id=>20, :name=>'Ar')
|
|
469
|
-
ar.associations[:albums] = [al]
|
|
470
|
-
ar.set(:albums_attributes=>[{:id=>30, :_delete=>'t'}])
|
|
471
|
-
@db.sqls.must_equal []
|
|
472
|
-
ar.save
|
|
473
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'Ar' WHERE (id = 20)"]
|
|
474
|
-
end
|
|
475
|
-
|
|
476
459
|
it "should not raise an Error if an unmatched primary key is given, if the :unmatched_pk=>:ignore option is used" do
|
|
477
460
|
@Artist.nested_attributes :albums, :unmatched_pk=>:ignore
|
|
478
461
|
al = @Album.load(:id=>10, :name=>'Al')
|
|
@@ -492,17 +475,6 @@ describe "NestedAttributes plugin" do
|
|
|
492
475
|
ar.set(:concerts_attributes=>[{:tour=>'To', :date=>'2004-04-05', :_delete=>'t'}])
|
|
493
476
|
end
|
|
494
477
|
|
|
495
|
-
deprecated "should not raise an Error if an unmatched composite primary key is given, if the :strict=>false option is used" do
|
|
496
|
-
@Artist.nested_attributes :concerts, :strict=>false
|
|
497
|
-
ar = @Artist.load(:id=>10, :name=>'Ar')
|
|
498
|
-
co = @Concert.load(:tour=>'To', :date=>'2004-04-05', :playlist=>'Pl')
|
|
499
|
-
ar.associations[:concerts] = [co]
|
|
500
|
-
ar.set(:concerts_attributes=>[{:tour=>'To', :date=>'2004-04-06', :_delete=>'t'}])
|
|
501
|
-
@db.sqls.must_equal []
|
|
502
|
-
ar.save
|
|
503
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'Ar' WHERE (id = 10)"]
|
|
504
|
-
end
|
|
505
|
-
|
|
506
478
|
it "should not raise an Error if an unmatched composite primary key is given, if the :unmatched_pk=>:ignore option is used" do
|
|
507
479
|
@Artist.nested_attributes :concerts, :unmatched_pk=>:ignore
|
|
508
480
|
ar = @Artist.load(:id=>10, :name=>'Ar')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "null_dataset extension" do
|
|
4
4
|
before do
|
|
@@ -73,16 +73,6 @@ describe "null_dataset extension" do
|
|
|
73
73
|
@i.must_equal 1
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
deprecated "should have nullify! method modify receiver" do
|
|
77
|
-
ds = @db[:table]
|
|
78
|
-
# SEQUEL5: Remove
|
|
79
|
-
unless ds.frozen?
|
|
80
|
-
ds.nullify!.must_be_same_as(ds)
|
|
81
|
-
ds.each(&@pr)
|
|
82
|
-
@i.must_equal 0
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
76
|
it "should work with method chaining" do
|
|
87
77
|
@ds.where(:a=>1).select(:b).each(&@pr)
|
|
88
78
|
@i.must_equal 0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "optimistic_locking plugin" do
|
|
4
4
|
before do
|
|
@@ -105,7 +105,7 @@ describe "optimistic_locking plugin" do
|
|
|
105
105
|
@c.db.sqls
|
|
106
106
|
p2.update(:name=>'Bob')
|
|
107
107
|
end
|
|
108
|
-
@c.db.sqls.
|
|
108
|
+
@c.db.sqls.must_equal ["UPDATE people SET name = 'Bob', lock_version = 4 WHERE ((id = 1) AND (lock_version = 3))"]
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
it "should increment the lock column when #modified! even if no columns are changed" do
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "pg_array_associations" do
|
|
4
4
|
before do
|
|
@@ -248,9 +248,8 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
248
248
|
it "should eagerly load correctly" do
|
|
249
249
|
a = @c1.eager(:tags).all
|
|
250
250
|
a.must_equal [@o1]
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
sqls.must_equal ["SELECT * FROM artists"]
|
|
251
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
252
|
+
'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
|
|
254
253
|
a.first.tags.must_equal [@o2]
|
|
255
254
|
@db.sqls.must_equal []
|
|
256
255
|
|
|
@@ -268,9 +267,8 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
268
267
|
|
|
269
268
|
a = @c1.eager(:tags).all
|
|
270
269
|
a.must_equal [@o1]
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
sqls.must_equal ["SELECT * FROM artists"]
|
|
270
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
271
|
+
'SELECT * FROM tags WHERE ((tags.id * 3) IN (3, 6, 9))']
|
|
274
272
|
a.first.tags.must_equal [@o2]
|
|
275
273
|
@db.sqls.must_equal []
|
|
276
274
|
|
|
@@ -284,9 +282,9 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
284
282
|
it "should allow cascading of eager loading for associations of associated models" do
|
|
285
283
|
a = @c1.eager(:tags=>:artists).all
|
|
286
284
|
a.must_equal [@o1]
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
285
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
286
|
+
'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))',
|
|
287
|
+
"SELECT * FROM artists WHERE (artists.tag_ids && ARRAY[2]::integer[])"]
|
|
290
288
|
a.first.tags.must_equal [@o2]
|
|
291
289
|
a.first.tags.first.artists.must_equal [@o1]
|
|
292
290
|
@db.sqls.must_equal []
|
|
@@ -302,9 +300,8 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
302
300
|
@db.sqls.must_equal []
|
|
303
301
|
|
|
304
302
|
@o2.artists2.must_equal [@o1]
|
|
305
|
-
sqls
|
|
306
|
-
|
|
307
|
-
sqls.must_equal ["SELECT * FROM artists WHERE (artists.tag_ids @> ARRAY[2]::integer[])"]
|
|
303
|
+
@db.sqls.must_equal ["SELECT * FROM artists WHERE (artists.tag_ids @> ARRAY[2]::integer[])",
|
|
304
|
+
'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
|
|
308
305
|
@o2.artists2.first.tags.must_equal [@o2]
|
|
309
306
|
@db.sqls.must_equal []
|
|
310
307
|
end
|
|
@@ -318,7 +315,7 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
318
315
|
@db.sqls
|
|
319
316
|
|
|
320
317
|
@o1.tags2.must_equal [@o2]
|
|
321
|
-
@db.sqls.
|
|
318
|
+
@db.sqls.must_equal ['SELECT tags.id, artists.id AS artists_id, artists.tag_ids FROM tags LEFT OUTER JOIN artists ON (artists.tag_ids @> ARRAY[tags.id]) WHERE (tags.id IN (1, 2, 3))']
|
|
322
319
|
@o1.tags2.first.artists.must_equal [@o1]
|
|
323
320
|
@db.sqls.must_equal []
|
|
324
321
|
|
|
@@ -332,9 +329,8 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
332
329
|
@db.sqls
|
|
333
330
|
|
|
334
331
|
a = @c1.eager(:tags2).all
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
sqls.must_equal ["SELECT * FROM artists"]
|
|
332
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
333
|
+
'SELECT tags.id, artists.id AS artists_id, artists.tag_ids FROM tags LEFT OUTER JOIN artists ON (artists.tag_ids @> ARRAY[tags.id]) WHERE (tags.id IN (1, 2, 3))']
|
|
338
334
|
a.must_equal [@o1]
|
|
339
335
|
a.first.tags2.must_equal [@o2]
|
|
340
336
|
a.first.tags2.first.artists.must_equal [@o1]
|
|
@@ -359,27 +355,24 @@ describe Sequel::Model, "pg_array_associations" do
|
|
|
359
355
|
@c1.pg_array_to_many :tags, :clone=>:tags, :limit=>2
|
|
360
356
|
a = @c1.eager(:tags).all
|
|
361
357
|
a.must_equal [@o1]
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
sqls.must_equal ["SELECT * FROM artists"]
|
|
358
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
359
|
+
'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
|
|
365
360
|
a.first.tags.must_equal [@c2.load(:id=>1), @c2.load(:id=>2)]
|
|
366
361
|
@db.sqls.must_equal []
|
|
367
362
|
|
|
368
363
|
@c1.pg_array_to_many :tags, :clone=>:tags, :limit=>[1, 1]
|
|
369
364
|
a = @c1.eager(:tags).all
|
|
370
365
|
a.must_equal [@o1]
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
sqls.must_equal ["SELECT * FROM artists"]
|
|
366
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
367
|
+
'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
|
|
374
368
|
a.first.tags.must_equal [@c2.load(:id=>2)]
|
|
375
369
|
@db.sqls.must_equal []
|
|
376
370
|
|
|
377
371
|
@c1.pg_array_to_many :tags, :clone=>:tags, :limit=>[nil, 1]
|
|
378
372
|
a = @c1.eager(:tags).all
|
|
379
373
|
a.must_equal [@o1]
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
sqls.must_equal ["SELECT * FROM artists"]
|
|
374
|
+
@db.sqls.must_equal ["SELECT * FROM artists",
|
|
375
|
+
'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
|
|
383
376
|
a.first.tags.must_equal [@c2.load(:id=>2), @c2.load(:id=>3)]
|
|
384
377
|
@db.sqls.length.must_equal 0
|
|
385
378
|
|
|
@@ -748,6 +741,9 @@ end
|
|
|
748
741
|
describe "Sequel::Model.finalize_associations" do
|
|
749
742
|
before do
|
|
750
743
|
@db = Sequel.mock(:host=>'postgres', :numrows=>1)
|
|
744
|
+
@db.extend_datasets do
|
|
745
|
+
def quote_identifiers?; false end
|
|
746
|
+
end
|
|
751
747
|
class ::Foo < Sequel::Model(@db)
|
|
752
748
|
plugin :pg_array_associations
|
|
753
749
|
many_to_pg_array :items
|