sequel 4.49.0 → 5.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|