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,29 +1,14 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
|
|
3
1
|
if ENV['COVERAGE']
|
|
4
|
-
|
|
2
|
+
require_relative "sequel_coverage"
|
|
5
3
|
SimpleCov.sequel_coverage(:filter=>%r{lib/sequel/extensions/core_extensions\.rb\z})
|
|
6
4
|
end
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
require 'sequel'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# SEQUEL5: Remove
|
|
14
|
-
output = Sequel::Deprecation.output
|
|
15
|
-
Sequel::Deprecation.output = nil
|
|
16
|
-
Sequel.quote_identifiers = false
|
|
17
|
-
Sequel.identifier_input_method = nil
|
|
18
|
-
Sequel.identifier_output_method = nil
|
|
19
|
-
Sequel::Deprecation.output = output
|
|
6
|
+
$:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../lib/"))
|
|
7
|
+
require_relative '../lib/sequel'
|
|
20
8
|
|
|
21
9
|
Regexp.send(:include, Sequel::SQL::StringMethods)
|
|
22
10
|
String.send(:include, Sequel::SQL::StringMethods)
|
|
23
11
|
Sequel.extension :core_extensions
|
|
24
|
-
if RUBY_VERSION < '1.9.0'
|
|
25
|
-
Sequel.extension :ruby18_symbol_extensions
|
|
26
|
-
end
|
|
27
12
|
Sequel.extension :symbol_aref
|
|
28
13
|
Sequel.extension :virtual_row_method_block
|
|
29
14
|
|
|
@@ -31,7 +16,7 @@ gem 'minitest'
|
|
|
31
16
|
require 'minitest/autorun'
|
|
32
17
|
require 'minitest/hooks/default'
|
|
33
18
|
|
|
34
|
-
|
|
19
|
+
require_relative "deprecation_helper.rb"
|
|
35
20
|
|
|
36
21
|
describe "Sequel core extensions" do
|
|
37
22
|
it "should have Sequel.core_extensions? be true if enabled" do
|
|
@@ -53,45 +38,6 @@ describe "Core extensions" do
|
|
|
53
38
|
end
|
|
54
39
|
end
|
|
55
40
|
|
|
56
|
-
if RUBY_VERSION < '1.9.0'
|
|
57
|
-
it "should not allow inequality operations on true, false, or nil" do
|
|
58
|
-
@d.lit(:x > 1).must_equal "(x > 1)"
|
|
59
|
-
@d.lit(:x < true).must_equal "(x < 't')"
|
|
60
|
-
@d.lit(:x >= false).must_equal "(x >= 'f')"
|
|
61
|
-
@d.lit(:x <= nil).must_equal "(x <= NULL)"
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should not allow inequality operations on boolean complex expressions" do
|
|
65
|
-
@d.lit(:x > (:y > 5)).must_equal "(x > (y > 5))"
|
|
66
|
-
@d.lit(:x < (:y < 5)).must_equal "(x < (y < 5))"
|
|
67
|
-
@d.lit(:x >= (:y >= 5)).must_equal "(x >= (y >= 5))"
|
|
68
|
-
@d.lit(:x <= (:y <= 5)).must_equal "(x <= (y <= 5))"
|
|
69
|
-
@d.lit(:x > {:y => nil}).must_equal "(x > (y IS NULL))"
|
|
70
|
-
@d.lit(:x < ~{:y => nil}).must_equal "(x < (y IS NOT NULL))"
|
|
71
|
-
@d.lit(:x >= {:y => 5}).must_equal "(x >= (y = 5))"
|
|
72
|
-
@d.lit(:x <= ~{:y => 5}).must_equal "(x <= (y != 5))"
|
|
73
|
-
@d.lit(:x >= {:y => [1,2,3]}).must_equal "(x >= (y IN (1, 2, 3)))"
|
|
74
|
-
@d.lit(:x <= ~{:y => [1,2,3]}).must_equal "(x <= (y NOT IN (1, 2, 3)))"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "should support >, <, >=, and <= via Symbol#>,<,>=,<=" do
|
|
78
|
-
@d.l(:x > 100).must_equal '(x > 100)'
|
|
79
|
-
@d.l(:x < 100.01).must_equal '(x < 100.01)'
|
|
80
|
-
@d.l(:x >= 100000000000000000000000000000000000).must_equal '(x >= 100000000000000000000000000000000000)'
|
|
81
|
-
@d.l(:x <= 100).must_equal '(x <= 100)'
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should support negation of >, <, >=, and <= via Symbol#~" do
|
|
85
|
-
@d.l(~(:x > 100)).must_equal '(x <= 100)'
|
|
86
|
-
@d.l(~(:x < 100.01)).must_equal '(x >= 100.01)'
|
|
87
|
-
@d.l(~(:x >= 100000000000000000000000000000000000)).must_equal '(x < 100000000000000000000000000000000000)'
|
|
88
|
-
@d.l(~(:x <= 100)).must_equal '(x > 100)'
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should support double negation via ~" do
|
|
92
|
-
@d.l(~~(:x > 100)).must_equal '(x > 100)'
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
41
|
it "should support NOT via Symbol#~" do
|
|
96
42
|
@d.l(~:x).must_equal 'NOT x'
|
|
97
43
|
end
|
|
@@ -284,8 +230,7 @@ describe "Array#case and Hash#case" do
|
|
|
284
230
|
it "should return SQL CASE expression" do
|
|
285
231
|
@d.literal({:x=>:y}.case(:z)).must_equal '(CASE WHEN x THEN y ELSE z END)'
|
|
286
232
|
@d.literal({:x=>:y}.case(:z, :exp)).must_equal '(CASE exp WHEN x THEN y ELSE z END)'
|
|
287
|
-
|
|
288
|
-
'(CASE WHEN a THEN b WHEN x THEN y ELSE z END)'].must_include(@d.literal({:x=>:y, :a=>:b}.case(:z)))
|
|
233
|
+
@d.literal({:x=>:y, :a=>:b}.case(:z)).must_equal '(CASE WHEN x THEN y WHEN a THEN b ELSE z END)'
|
|
289
234
|
@d.literal([[:x, :y]].case(:z)).must_equal '(CASE WHEN x THEN y ELSE z END)'
|
|
290
235
|
@d.literal([[:x, :y], [:a, :b]].case(:z)).must_equal '(CASE WHEN x THEN y WHEN a THEN b ELSE z END)'
|
|
291
236
|
@d.literal([[:x, :y], [:a, :b]].case(:z, :exp)).must_equal '(CASE exp WHEN x THEN y WHEN a THEN b ELSE z END)'
|
|
@@ -308,7 +253,7 @@ describe "Array#case and Hash#case" do
|
|
|
308
253
|
end
|
|
309
254
|
end
|
|
310
255
|
|
|
311
|
-
describe "Array#sql_value_list
|
|
256
|
+
describe "Array#sql_value_list" do
|
|
312
257
|
before do
|
|
313
258
|
@d = Sequel.mock.dataset
|
|
314
259
|
end
|
|
@@ -316,17 +261,11 @@ describe "Array#sql_value_list and #sql_array" do
|
|
|
316
261
|
it "should treat the array as an SQL value list instead of conditions when used as a placeholder value" do
|
|
317
262
|
@d.filter(Sequel.lit("(a, b) IN ?", [[:x, 1], [:y, 2]])).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x = 1) AND (y = 2)))'
|
|
318
263
|
@d.filter(Sequel.lit("(a, b) IN ?", [[:x, 1], [:y, 2]].sql_value_list)).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
|
|
319
|
-
deprecated do
|
|
320
|
-
@d.filter(Sequel.lit("(a, b) IN ?", [[:x, 1], [:y, 2]].sql_array)).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
|
|
321
|
-
end
|
|
322
264
|
end
|
|
323
265
|
|
|
324
266
|
it "should be no difference when used as a hash value" do
|
|
325
267
|
@d.filter([:a, :b]=>[[:x, 1], [:y, 2]]).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
|
|
326
268
|
@d.filter([:a, :b]=>[[:x, 1], [:y, 2]].sql_value_list).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
|
|
327
|
-
deprecated do
|
|
328
|
-
@d.filter([:a, :b]=>[[:x, 1], [:y, 2]].sql_array).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
|
|
329
|
-
end
|
|
330
269
|
end
|
|
331
270
|
end
|
|
332
271
|
|
|
@@ -504,17 +443,6 @@ describe "Blob" do
|
|
|
504
443
|
end
|
|
505
444
|
end
|
|
506
445
|
|
|
507
|
-
if RUBY_VERSION < '1.9.0'
|
|
508
|
-
describe "Symbol#[]" do
|
|
509
|
-
it "should format an SQL Function" do
|
|
510
|
-
ds = Sequel.mock.dataset
|
|
511
|
-
ds.literal(:xyz[]).must_equal 'xyz()'
|
|
512
|
-
ds.literal(:xyz[1]).must_equal 'xyz(1)'
|
|
513
|
-
ds.literal(:xyz[1, 2, :abc[3]]).must_equal 'xyz(1, 2, abc(3))'
|
|
514
|
-
end
|
|
515
|
-
end
|
|
516
|
-
end
|
|
517
|
-
|
|
518
446
|
describe "Symbol#*" do
|
|
519
447
|
before do
|
|
520
448
|
@ds = Sequel.mock.dataset
|
|
@@ -740,11 +668,7 @@ describe "symbol_aref extensions" do
|
|
|
740
668
|
end
|
|
741
669
|
|
|
742
670
|
it "should not affect other arguments to Symbol#[]" do
|
|
743
|
-
|
|
744
|
-
:x[0].must_equal "x"
|
|
745
|
-
else
|
|
746
|
-
@db.literal(:x[0]).must_equal "x(0)"
|
|
747
|
-
end
|
|
671
|
+
:x[0].must_equal "x"
|
|
748
672
|
end
|
|
749
673
|
end
|
|
750
674
|
|
data/spec/core_model_spec.rb
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
require_relative 'core_spec'
|
|
2
|
+
require_relative 'model_spec'
|
data/spec/deprecation_helper.rb
CHANGED
|
@@ -16,27 +16,15 @@ class Minitest::HooksSpec
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def self.with_symbol_splitting(a, &block)
|
|
19
|
-
it(a) do
|
|
19
|
+
it("#{a}, with symbol splitting enabled") do
|
|
20
20
|
with_symbol_splitting{instance_exec(&block)}
|
|
21
21
|
end
|
|
22
|
-
it("#{a}, except when symbol_splitting disabled") do
|
|
23
|
-
without_symbol_splitting{instance_exec(&block)}
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def without_symbol_splitting
|
|
28
|
-
Sequel.split_symbols = false
|
|
29
|
-
DB.send(:reset_default_dataset) if defined?(DB)
|
|
30
|
-
proc{yield}.must_raise Minitest::Assertion
|
|
31
|
-
ensure
|
|
32
|
-
Sequel.split_symbols = :deprecated
|
|
33
|
-
DB.send(:reset_default_dataset) if defined?(DB)
|
|
34
22
|
end
|
|
35
23
|
|
|
36
24
|
def with_symbol_splitting
|
|
37
25
|
Sequel.split_symbols = true
|
|
38
26
|
yield
|
|
39
27
|
ensure
|
|
40
|
-
Sequel.split_symbols =
|
|
28
|
+
Sequel.split_symbols = false
|
|
41
29
|
end
|
|
42
30
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
begin
|
|
4
4
|
require 'active_model'
|
|
5
|
-
rescue LoadError
|
|
6
|
-
|
|
5
|
+
rescue LoadError
|
|
6
|
+
warn "Skipping test of active_model plugin: can't load active_model"
|
|
7
7
|
else
|
|
8
8
|
describe "ActiveModel plugin" do
|
|
9
9
|
before do
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "arbtirary servers" do
|
|
4
4
|
before do
|
|
@@ -33,7 +33,7 @@ describe "arbtirary servers" do
|
|
|
33
33
|
|
|
34
34
|
it "should disconnect when connection is finished" do
|
|
35
35
|
x, x1 = nil, nil
|
|
36
|
-
|
|
36
|
+
@db.define_singleton_method(:disconnect_connection){|c| x = c}
|
|
37
37
|
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
38
38
|
x1 = c
|
|
39
39
|
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Plugins::AssociationPks" do
|
|
4
4
|
before do
|
|
@@ -90,13 +90,6 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
90
90
|
@db.sqls.must_equal ["SELECT tags.id FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 3)"]
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
-
deprecated "should set associated pks correctly for a one_to_many association when :delay_pks is not set" do
|
|
94
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
95
|
-
@Artist.load(:id=>1).album_pks = [1, 2]
|
|
96
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
97
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))"]
|
|
98
|
-
end
|
|
99
|
-
|
|
100
93
|
it "should set associated pks correctly for a one_to_many association" do
|
|
101
94
|
@Artist.load(:id=>1).album_pks = [1, 2]
|
|
102
95
|
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
@@ -112,13 +105,11 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
112
105
|
|
|
113
106
|
it "should set associated pks correctly for a many_to_many association" do
|
|
114
107
|
@Album.load(:id=>2).tag_pks = [1, 3]
|
|
115
|
-
sqls =
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
sqls[4].must_equal 'COMMIT'
|
|
121
|
-
sqls.length.must_equal 5
|
|
108
|
+
@db.sqls.must_equal ["DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))",
|
|
109
|
+
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
110
|
+
'BEGIN',
|
|
111
|
+
'INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)',
|
|
112
|
+
'COMMIT']
|
|
122
113
|
end
|
|
123
114
|
|
|
124
115
|
it "should return correct right-side associated cpks for one_to_many associations" do
|
|
@@ -168,10 +159,8 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
168
159
|
it "should set associated pks correctly for left-side cpks for a one_to_many association" do
|
|
169
160
|
@Vocalist.one_to_many :instruments, :class=>@Instrument, :key=>[:first, :last], :delay_pks=>false
|
|
170
161
|
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks = [1, 2]
|
|
171
|
-
sqls =
|
|
172
|
-
|
|
173
|
-
sqls[1].must_match(/UPDATE instruments SET (first = NULL, last = NULL|last = NULL, first = NULL) WHERE \(\(instruments.first = 'F1'\) AND \(instruments.last = 'L1'\) AND \(id NOT IN \(1, 2\)\)\)/)
|
|
174
|
-
sqls.length.must_equal 2
|
|
162
|
+
@db.sqls.must_equal ["UPDATE instruments SET first = 'F1', last = 'L1' WHERE (id IN (1, 2))",
|
|
163
|
+
"UPDATE instruments SET first = NULL, last = NULL WHERE ((instruments.first = 'F1') AND (instruments.last = 'L1') AND (id NOT IN (1, 2)))"]
|
|
175
164
|
end
|
|
176
165
|
|
|
177
166
|
it "should set associated pks correctly for left-side cpks for a many_to_many association" do
|
|
@@ -216,10 +205,8 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
216
205
|
it "should set associated right-side cpks correctly for left-side cpks for a one_to_many association" do
|
|
217
206
|
@Vocalist.one_to_many :hits, :class=>@Hit, :key=>[:first, :last], :order=>:week, :delay_pks=>false
|
|
218
207
|
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks = [[1997, 1], [1997, 2]]
|
|
219
|
-
sqls =
|
|
220
|
-
|
|
221
|
-
sqls[1].must_match(/UPDATE hits SET (first = NULL, last = NULL|last = NULL, first = NULL) WHERE \(\(hits.first = 'F1'\) AND \(hits.last = 'L1'\) AND \(\(year, week\) NOT IN \(\(1997, 1\), \(1997, 2\)\)\)\)/)
|
|
222
|
-
sqls.length.must_equal 2
|
|
208
|
+
@db.sqls.must_equal ["UPDATE hits SET first = 'F1', last = 'L1' WHERE ((year, week) IN ((1997, 1), (1997, 2)))",
|
|
209
|
+
"UPDATE hits SET first = NULL, last = NULL WHERE ((hits.first = 'F1') AND (hits.last = 'L1') AND ((year, week) NOT IN ((1997, 1), (1997, 2))))"]
|
|
223
210
|
end
|
|
224
211
|
|
|
225
212
|
it "should set associated right-side cpks correctly for left-side cpks for a many_to_many association" do
|
|
@@ -245,13 +232,11 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
245
232
|
album = @Album.load(:id=>2)
|
|
246
233
|
album.use_transactions = true
|
|
247
234
|
album.tag_pks = [1, 3]
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
sqls[4].must_equal "COMMIT"
|
|
254
|
-
sqls.length.must_equal 5
|
|
235
|
+
@db.sqls.must_equal ["BEGIN",
|
|
236
|
+
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))",
|
|
237
|
+
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
238
|
+
'INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)',
|
|
239
|
+
"COMMIT"]
|
|
255
240
|
end
|
|
256
241
|
|
|
257
242
|
it "should automatically convert keys to numbers if the primary key is an integer for one_to_many associations" do
|
|
@@ -271,22 +256,23 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
271
256
|
it "should automatically convert keys to numbers if the primary key is an integer for many_to_many associations" do
|
|
272
257
|
@Tag.db_schema[:id][:type] = :integer
|
|
273
258
|
@Album.load(:id=>2).tag_pks = %w'1 3'
|
|
274
|
-
sqls =
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
259
|
+
@db.sqls.must_equal ["DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))",
|
|
260
|
+
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
261
|
+
'BEGIN',
|
|
262
|
+
'INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)',
|
|
263
|
+
'COMMIT']
|
|
279
264
|
end
|
|
280
265
|
|
|
281
266
|
it "should not automatically convert keys to numbers if the primary key is an integer for many_to_many associations" do
|
|
282
267
|
@Tag.db_schema[:id][:type] = :string
|
|
283
268
|
@Album.load(:id=>2).tag_pks = %w'1 3'
|
|
284
|
-
sqls = @db.sqls
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
269
|
+
sqls = @db.sqls.must_equal [
|
|
270
|
+
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN ('1', '3')))",
|
|
271
|
+
'SELECT tag_id FROM albums_tags WHERE (album_id = 2)',
|
|
272
|
+
'BEGIN',
|
|
273
|
+
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, '1')",
|
|
274
|
+
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, '3')",
|
|
275
|
+
'COMMIT']
|
|
290
276
|
end
|
|
291
277
|
|
|
292
278
|
it "should automatically convert keys to numbers for appropriate integer primary key for composite key associations" do
|
|
@@ -320,54 +306,6 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
320
306
|
sqls.length.must_equal 6
|
|
321
307
|
end
|
|
322
308
|
|
|
323
|
-
deprecated "should handle delaying setting of association pks until after saving for new objects, if :delay_pks=>true association option is used" do
|
|
324
|
-
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>true
|
|
325
|
-
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>true
|
|
326
|
-
@Album.db_schema[:id][:type] = :integer
|
|
327
|
-
|
|
328
|
-
ar = @Artist.new
|
|
329
|
-
ar.album_pks.must_equal []
|
|
330
|
-
ar.album_pks = ["1","2","3"]
|
|
331
|
-
ar.album_pks.must_equal [1,2,3]
|
|
332
|
-
@db.sqls.must_equal []
|
|
333
|
-
|
|
334
|
-
ar.save
|
|
335
|
-
@db.sqls.must_equal [
|
|
336
|
-
"INSERT INTO artists DEFAULT VALUES",
|
|
337
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2, 3))",
|
|
338
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2, 3)))",
|
|
339
|
-
"SELECT * FROM artists WHERE (id = 1) LIMIT 1",
|
|
340
|
-
]
|
|
341
|
-
|
|
342
|
-
al = @Album.new
|
|
343
|
-
al.tag_pks.must_equal []
|
|
344
|
-
al.tag_pks = [1,2]
|
|
345
|
-
al.tag_pks.must_equal [1, 2]
|
|
346
|
-
@db.sqls.must_equal []
|
|
347
|
-
|
|
348
|
-
al.save
|
|
349
|
-
@db.sqls.must_equal [
|
|
350
|
-
"INSERT INTO albums DEFAULT VALUES",
|
|
351
|
-
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 2)))",
|
|
352
|
-
"SELECT tag_id FROM albums_tags WHERE (album_id = 2)",
|
|
353
|
-
"BEGIN",
|
|
354
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)",
|
|
355
|
-
"COMMIT",
|
|
356
|
-
"SELECT * FROM albums WHERE (id = 2) LIMIT 1"
|
|
357
|
-
]
|
|
358
|
-
|
|
359
|
-
al = @Album.load(:id=>1)
|
|
360
|
-
al.tag_pks = [2,3]
|
|
361
|
-
@db.sqls.must_equal [
|
|
362
|
-
"DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id NOT IN (2, 3)))",
|
|
363
|
-
"SELECT tag_id FROM albums_tags WHERE (album_id = 1)",
|
|
364
|
-
"BEGIN",
|
|
365
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3)",
|
|
366
|
-
"COMMIT"
|
|
367
|
-
]
|
|
368
|
-
al.tag_pks.must_equal [1, 2]
|
|
369
|
-
end
|
|
370
|
-
|
|
371
309
|
it "should handle delaying setting of association pks until after saving for existing objects, if :delay_pks=>:always association option is used" do
|
|
372
310
|
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>:always
|
|
373
311
|
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>:always
|
|
@@ -382,9 +320,9 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
382
320
|
ar.save
|
|
383
321
|
@db.sqls.must_equal [
|
|
384
322
|
"INSERT INTO artists DEFAULT VALUES",
|
|
323
|
+
"SELECT * FROM artists WHERE (id = 1) LIMIT 1",
|
|
385
324
|
"UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2, 3))",
|
|
386
325
|
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2, 3)))",
|
|
387
|
-
"SELECT * FROM artists WHERE (id = 1) LIMIT 1",
|
|
388
326
|
]
|
|
389
327
|
|
|
390
328
|
al = @Album.new
|
|
@@ -396,12 +334,12 @@ describe "Sequel::Plugins::AssociationPks" do
|
|
|
396
334
|
al.save
|
|
397
335
|
@db.sqls.must_equal [
|
|
398
336
|
"INSERT INTO albums DEFAULT VALUES",
|
|
337
|
+
"SELECT * FROM albums WHERE (id = 2) LIMIT 1",
|
|
399
338
|
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 2)))",
|
|
400
339
|
"SELECT tag_id FROM albums_tags WHERE (album_id = 2)",
|
|
401
340
|
"BEGIN",
|
|
402
341
|
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)",
|
|
403
|
-
"COMMIT"
|
|
404
|
-
"SELECT * FROM albums WHERE (id = 2) LIMIT 1"
|
|
342
|
+
"COMMIT"
|
|
405
343
|
]
|
|
406
344
|
ar = @Artist.load(:id=>1)
|
|
407
345
|
ar.album_pks.must_equal [1,2,3]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Dataset#where" do
|
|
4
4
|
before do
|
|
@@ -112,17 +112,6 @@ describe "Dataset#exclude" do
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
describe "Dataset#and" do
|
|
116
|
-
before do
|
|
117
|
-
@dataset = Sequel.mock.dataset.from(:test).extension(:auto_literal_strings)
|
|
118
|
-
@d1 = @dataset.where(:x => 1)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
deprecated "should accept string filters with placeholders" do
|
|
122
|
-
@d1.and('y > ?', 2).sql.must_equal 'SELECT * FROM test WHERE ((x = 1) AND (y > 2))'
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
115
|
describe "Dataset#or" do
|
|
127
116
|
before do
|
|
128
117
|
@dataset = Sequel.mock.dataset.from(:test).extension(:auto_literal_strings)
|