sequel 4.49.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/jdbc.rb +18 -74
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +27 -43
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +3 -16
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +88 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +30 -92
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +8 -30
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +43 -32
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +5 -17
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/synchronize_sql_spec.rb +124 -0
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +5 -7
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +12 -16
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -13
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +8 -13
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +12 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +43 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
model_class = proc do |klass, &block|
|
|
4
4
|
c = Class.new(klass)
|
|
@@ -158,7 +158,7 @@ describe Sequel::Model do
|
|
|
158
158
|
c.must_equal false
|
|
159
159
|
@c.validates{c = respond_to?(:length_of)}
|
|
160
160
|
c.must_equal true
|
|
161
|
-
end
|
|
161
|
+
end
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
describe Sequel::Model do
|
|
@@ -197,7 +197,7 @@ describe "Sequel::Plugins::ValidationClassMethods::ClassMethods::Generator" do
|
|
|
197
197
|
@testit = testit = []
|
|
198
198
|
|
|
199
199
|
@c = model_class.call Sequel::Model do
|
|
200
|
-
|
|
200
|
+
singleton_class.send(:define_method, :validates_blah) do
|
|
201
201
|
testit << 1324
|
|
202
202
|
end
|
|
203
203
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Plugins::ValidationHelpers" do
|
|
4
4
|
before do
|
|
@@ -19,9 +19,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
19
19
|
@m.value = '1_1'
|
|
20
20
|
@m.must_be :valid?
|
|
21
21
|
o = String.new
|
|
22
|
-
|
|
23
|
-
undef_method :blank?
|
|
24
|
-
end
|
|
22
|
+
o.singleton_class.send(:undef_method, :blank?)
|
|
25
23
|
@m.value = o
|
|
26
24
|
@m.must_be :valid?
|
|
27
25
|
o = Object.new
|
|
@@ -86,38 +84,6 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
86
84
|
@m.must_be :valid?
|
|
87
85
|
end
|
|
88
86
|
|
|
89
|
-
deprecated "should support modifying default options for all models" do
|
|
90
|
-
@c.set_validations{validates_presence(:value)}
|
|
91
|
-
@m.wont_be :valid?
|
|
92
|
-
@m.errors.must_equal(:value=>['is not present'])
|
|
93
|
-
o = Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence].dup
|
|
94
|
-
Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence][:message] = lambda{"was not entered"}
|
|
95
|
-
@m.wont_be :valid?
|
|
96
|
-
@m.errors.must_equal(:value=>["was not entered"])
|
|
97
|
-
@m.value = 1
|
|
98
|
-
@m.must_be :valid?
|
|
99
|
-
|
|
100
|
-
@m.values.clear
|
|
101
|
-
Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence][:allow_missing] = true
|
|
102
|
-
@m.must_be :valid?
|
|
103
|
-
@m.value = nil
|
|
104
|
-
@m.wont_be :valid?
|
|
105
|
-
@m.errors.must_equal(:value=>["was not entered"])
|
|
106
|
-
|
|
107
|
-
c = Class.new(Sequel::Model)
|
|
108
|
-
c.class_eval do
|
|
109
|
-
plugin :validation_helpers
|
|
110
|
-
set_columns([:value])
|
|
111
|
-
def validate
|
|
112
|
-
validates_presence(:value)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
m = c.new(:value=>nil)
|
|
116
|
-
m.wont_be :valid?
|
|
117
|
-
m.errors.must_equal(:value=>["was not entered"])
|
|
118
|
-
Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence] = o
|
|
119
|
-
end
|
|
120
|
-
|
|
121
87
|
it "should support modifying default validation options for a particular model" do
|
|
122
88
|
@c.set_validations{validates_presence(:value)}
|
|
123
89
|
@m.wont_be :valid?
|
|
@@ -369,7 +335,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
369
335
|
it "should support validates_unique with a single attribute" do
|
|
370
336
|
@c.columns(:id, :username, :password)
|
|
371
337
|
@c.set_dataset DB[:items]
|
|
372
|
-
@c.set_validations{validates_unique(:username)}
|
|
338
|
+
@c.set_validations{validates_unique(:username, :only_if_modified=>false)}
|
|
373
339
|
@c.dataset = @c.dataset.with_fetch(proc do |sql|
|
|
374
340
|
case sql
|
|
375
341
|
when /count.*username = '0records'/
|
|
@@ -407,7 +373,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
407
373
|
it "should support validates_unique with multiple attributes" do
|
|
408
374
|
@c.columns(:id, :username, :password)
|
|
409
375
|
@c.set_dataset DB[:items]
|
|
410
|
-
@c.set_validations{validates_unique([:username, :password])}
|
|
376
|
+
@c.set_validations{validates_unique([:username, :password], :only_if_modified=>false)}
|
|
411
377
|
@c.dataset = @c.dataset.with_fetch(proc do |sql|
|
|
412
378
|
case sql
|
|
413
379
|
when /count.*username = '0records'/
|
|
@@ -452,7 +418,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
452
418
|
it "should support validates_unique with a block" do
|
|
453
419
|
@c.columns(:id, :username, :password)
|
|
454
420
|
@c.set_dataset DB[:items]
|
|
455
|
-
@c.set_validations{validates_unique(:username){|ds| ds.filter(:active)}}
|
|
421
|
+
@c.set_validations{validates_unique(:username, :only_if_modified=>false){|ds| ds.filter(:active)}}
|
|
456
422
|
@c.dataset = @c.dataset.with_fetch(:v=>0)
|
|
457
423
|
|
|
458
424
|
DB.reset
|
|
@@ -465,7 +431,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
465
431
|
it "should support validates_unique with :where option" do
|
|
466
432
|
@c.columns(:id, :username, :password)
|
|
467
433
|
@c.set_dataset DB[:items]
|
|
468
|
-
@c.set_validations{validates_unique(:username, :where=>proc{|ds, obj, cols| ds.where(cols.map{|c| [Sequel.function(:lower, c), obj.send(c).downcase]})})}
|
|
434
|
+
@c.set_validations{validates_unique(:username, :only_if_modified=>false, :where=>proc{|ds, obj, cols| ds.where(cols.map{|c| [Sequel.function(:lower, c), obj.send(c).downcase]})})}
|
|
469
435
|
@c.dataset = @c.dataset.with_fetch(:v=>0)
|
|
470
436
|
|
|
471
437
|
DB.reset
|
|
@@ -479,7 +445,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
479
445
|
@c.columns(:id, :username, :password)
|
|
480
446
|
@c.set_dataset DB[:items]
|
|
481
447
|
c = @c
|
|
482
|
-
@c.set_validations{validates_unique(:username, :dataset=>c.where(:a=>[1,2,3]))}
|
|
448
|
+
@c.set_validations{validates_unique(:username, :only_if_modified=>false, :dataset=>c.where(:a=>[1,2,3]))}
|
|
483
449
|
@c.dataset = @c.dataset.with_fetch(:v=>0)
|
|
484
450
|
|
|
485
451
|
DB.reset
|
|
@@ -493,7 +459,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
493
459
|
@c.columns(:id, :username, :password)
|
|
494
460
|
@c.set_dataset DB[:items]
|
|
495
461
|
c = @c
|
|
496
|
-
@c.set_validations{validates_unique(:username, :dataset=>c.cross_join(:a))}
|
|
462
|
+
@c.set_validations{validates_unique(:username, :only_if_modified=>false, :dataset=>c.cross_join(:a))}
|
|
497
463
|
@c.dataset = @c.dataset.with_fetch(:v=>0)
|
|
498
464
|
|
|
499
465
|
DB.reset
|
|
@@ -503,10 +469,10 @@ describe "Sequel::Plugins::ValidationHelpers" do
|
|
|
503
469
|
"SELECT count(*) AS count FROM items CROSS JOIN a WHERE ((username = '0records') AND (items.id != 3)) LIMIT 1"]
|
|
504
470
|
end
|
|
505
471
|
|
|
506
|
-
it "should
|
|
472
|
+
it "should not have validates_unique check uniqueness for existing records if values haven't changed" do
|
|
507
473
|
@c.columns(:id, :username, :password)
|
|
508
474
|
@c.set_dataset DB[:items]
|
|
509
|
-
@c.set_validations{validates_unique([:username, :password]
|
|
475
|
+
@c.set_validations{validates_unique([:username, :password])}
|
|
510
476
|
@c.dataset = @c.dataset.with_fetch(:v=>0)
|
|
511
477
|
|
|
512
478
|
DB.reset
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "#(set|update)_(all|only)" do
|
|
4
4
|
before do
|
|
@@ -16,7 +16,7 @@ describe Sequel::Model, "#(set|update)_(all|only)" do
|
|
|
16
16
|
it "should raise errors if not all hash fields can be set and strict_param_setting is true" do
|
|
17
17
|
@c.strict_param_setting = true
|
|
18
18
|
|
|
19
|
-
proc{@c.new.set_all(:x => 1, :y => 2, :z=>3, :
|
|
19
|
+
proc{@c.new.set_all(:x => 1, :y => 2, :z=>3, :use_transactions => false)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
20
20
|
(o = @c.new).set_all(:x => 1, :y => 2, :z=>3)
|
|
21
21
|
o.values.must_equal(:x => 1, :y => 2, :z=>3)
|
|
22
22
|
|
|
@@ -32,9 +32,9 @@ describe Sequel::Model, "#(set|update)_(all|only)" do
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
it "#set_all should set not set restricted fields" do
|
|
35
|
-
@o1.
|
|
36
|
-
@o1.set_all(:x => 1, :
|
|
37
|
-
@o1.
|
|
35
|
+
@o1.use_transactions.must_equal false
|
|
36
|
+
@o1.set_all(:x => 1, :use_transactions => true)
|
|
37
|
+
@o1.use_transactions.must_equal false
|
|
38
38
|
@o1.values.must_equal(:x => 1)
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
begin
|
|
4
4
|
require 'nokogiri'
|
|
5
|
-
rescue LoadError
|
|
6
|
-
|
|
5
|
+
rescue LoadError
|
|
6
|
+
warn "Skipping test of xml_serializer plugin: can't load nokogiri"
|
|
7
7
|
else
|
|
8
8
|
describe "Sequel::Plugins::XmlSerializer" do
|
|
9
9
|
before do
|
|
@@ -125,30 +125,25 @@ describe "Sequel::Plugins::XmlSerializer" do
|
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
it "should support an :encoding option when serializing" do
|
|
128
|
-
|
|
129
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><name>YJM</name><id>2</id></artist>"].must_include(@artist.to_xml(:encoding=>'UTF-8').gsub(/\n */m, ''))
|
|
128
|
+
@artist.to_xml(:encoding=>'UTF-8').gsub(/\n */m, '').must_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>"
|
|
130
129
|
end
|
|
131
130
|
|
|
132
131
|
it "should support a :builder_opts option when serializing" do
|
|
133
|
-
|
|
134
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><name>YJM</name><id>2</id></artist>"].must_include(@artist.to_xml(:builder_opts=>{:encoding=>'UTF-8'}).gsub(/\n */m, ''))
|
|
132
|
+
@artist.to_xml(:builder_opts=>{:encoding=>'UTF-8'}).gsub(/\n */m, '').must_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>"
|
|
135
133
|
end
|
|
136
134
|
|
|
137
135
|
it "should support an :types option when serializing" do
|
|
138
|
-
|
|
139
|
-
"<?xml version=\"1.0\"?><artist><name type=\"string\">YJM</name><id type=\"integer\">2</id></artist>"].must_include(@artist.to_xml(:types=>true).gsub(/\n */m, ''))
|
|
136
|
+
@artist.to_xml(:types=>true).gsub(/\n */m, '').must_equal "<?xml version=\"1.0\"?><artist><id type=\"integer\">2</id><name type=\"string\">YJM</name></artist>"
|
|
140
137
|
end
|
|
141
138
|
|
|
142
139
|
it "should support an :root_name option when serializing" do
|
|
143
|
-
|
|
144
|
-
"<?xml version=\"1.0\"?><ar><name>YJM</name><id>2</id></ar>"].must_include(@artist.to_xml(:root_name=>'ar').gsub(/\n */m, ''))
|
|
140
|
+
@artist.to_xml(:root_name=>'ar').gsub(/\n */m, '').must_equal "<?xml version=\"1.0\"?><ar><id>2</id><name>YJM</name></ar>"
|
|
145
141
|
end
|
|
146
142
|
|
|
147
143
|
it "should support an :array_root_name option when serializing arrays" do
|
|
148
144
|
artist = @artist
|
|
149
145
|
Artist.dataset = Artist.dataset.with_extend{define_method(:all){[artist]}}
|
|
150
|
-
|
|
151
|
-
"<?xml version=\"1.0\"?><ars><ar><name>YJM</name><id>2</id></ar></ars>"].must_include(Artist.to_xml(:array_root_name=>'ars', :root_name=>'ar').gsub(/\n */m, ''))
|
|
146
|
+
Artist.to_xml(:array_root_name=>'ars', :root_name=>'ar').gsub(/\n */m, '').must_equal "<?xml version=\"1.0\"?><ars><ar><id>2</id><name>YJM</name></ar></ars>"
|
|
152
147
|
end
|
|
153
148
|
|
|
154
149
|
it "should raise an exception for xml tags that aren't associations, columns, or setter methods" do
|
data/spec/guards_helper.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'minitest/autorun'
|
|
|
3
3
|
require 'minitest/hooks/default'
|
|
4
4
|
require 'minitest/shared_description'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
require_relative "deprecation_helper"
|
|
7
7
|
|
|
8
8
|
def Sequel.guarded?(*checked)
|
|
9
9
|
unless ENV['SEQUEL_NO_PENDING']
|
|
@@ -36,6 +36,7 @@ module Minitest::Spec::DSL
|
|
|
36
36
|
def cspecify(message, *checked, &block)
|
|
37
37
|
if pending = Sequel.guarded?(*checked)
|
|
38
38
|
it(message) do
|
|
39
|
+
proc{instance_exec(&block)}.must_raise(Exception) if ENV['SEQUEL_CHECK_PENDING']
|
|
39
40
|
skip "Not yet working on #{Array(pending).map{|x| x.is_a?(Proc) ? :proc : x}.join(', ')}"
|
|
40
41
|
end
|
|
41
42
|
else
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
OneToOneEagerLimitStrategies = shared_description do
|
|
4
4
|
it "eager loading one_to_one associations should work correctly" do
|
|
@@ -1587,28 +1587,6 @@ BasicRegularAndCompositeKeyAssociations = shared_description do
|
|
|
1587
1587
|
@album.reload.alias_tags.must_equal []
|
|
1588
1588
|
end
|
|
1589
1589
|
|
|
1590
|
-
it "should work correctly with prepared_statements_association plugin" do
|
|
1591
|
-
deprecated do
|
|
1592
|
-
@album.update(:artist => @artist)
|
|
1593
|
-
@album.add_tag(@tag)
|
|
1594
|
-
|
|
1595
|
-
@album.reload
|
|
1596
|
-
@artist.reload
|
|
1597
|
-
@tag.reload
|
|
1598
|
-
|
|
1599
|
-
[Tag, Album, Artist].each{|x| x.plugin :prepared_statements_associations}
|
|
1600
|
-
@album.artist.must_equal @artist
|
|
1601
|
-
@artist.first_album.must_equal @album
|
|
1602
|
-
@artist.albums.must_equal [@album]
|
|
1603
|
-
@album.tags.must_equal [@tag]
|
|
1604
|
-
@album.alias_tags.must_equal [@tag]
|
|
1605
|
-
@tag.albums.must_equal [@album]
|
|
1606
|
-
unless @no_many_through_many
|
|
1607
|
-
@album.first_tag.must_equal @tag
|
|
1608
|
-
end
|
|
1609
|
-
end
|
|
1610
|
-
end
|
|
1611
|
-
|
|
1612
1590
|
it "should have working dataset associations" do
|
|
1613
1591
|
album, artist, tag = @pr.call
|
|
1614
1592
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Database do
|
|
4
4
|
before do
|
|
@@ -37,7 +37,7 @@ describe Sequel::Database do
|
|
|
37
37
|
@db.drop_table?(:test2, :test)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated", [:jdbc, :sqlite]
|
|
40
|
+
cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated", [:jdbc, :sqlite] do
|
|
41
41
|
@db.create_table!(:test){String :a, :unique=>true, :null=>false}
|
|
42
42
|
@db[:test].insert('1')
|
|
43
43
|
proc{@db[:test].insert('1')}.must_raise(Sequel::UniqueConstraintViolation)
|
|
@@ -45,7 +45,7 @@ describe Sequel::Database do
|
|
|
45
45
|
proc{@db[:test].update(:a=>'1')}.must_raise(Sequel::UniqueConstraintViolation)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated for composite primary keys", [:jdbc, :sqlite]
|
|
48
|
+
cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated for composite primary keys", [:jdbc, :sqlite] do
|
|
49
49
|
@db.create_table!(:test){String :a; String :b; primary_key [:a, :b]}
|
|
50
50
|
@db[:test].insert(:a=>'1', :b=>'2')
|
|
51
51
|
proc{@db[:test].insert(:a=>'1', :b=>'2')}.must_raise(Sequel::UniqueConstraintViolation)
|
|
@@ -53,14 +53,14 @@ describe Sequel::Database do
|
|
|
53
53
|
proc{@db[:test].update(:a=>'1', :b=>'2')}.must_raise(Sequel::UniqueConstraintViolation)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
cspecify "should raise Sequel::CheckConstraintViolation when a check constraint is violated",
|
|
56
|
+
cspecify "should raise Sequel::CheckConstraintViolation when a check constraint is violated", [proc{|db| !db.mariadb? || db.server_version <= 100200}, :mysql], [proc{|db| db.sqlite_version < 30802}, :sqlite] do
|
|
57
57
|
@db.create_table!(:test){String :a; check Sequel.~(:a=>'1')}
|
|
58
58
|
proc{@db[:test].insert('1')}.must_raise(Sequel::CheckConstraintViolation)
|
|
59
59
|
@db[:test].insert('2')
|
|
60
60
|
proc{@db[:test].insert('1')}.must_raise(Sequel::CheckConstraintViolation)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
cspecify "should raise Sequel::ForeignKeyConstraintViolation when a foreign key constraint is violated", [:jdbc, :sqlite]
|
|
63
|
+
cspecify "should raise Sequel::ForeignKeyConstraintViolation when a foreign key constraint is violated", [:jdbc, :sqlite] do
|
|
64
64
|
@db.create_table!(:test, :engine=>:InnoDB){primary_key :id}
|
|
65
65
|
@db.create_table!(:test2, :engine=>:InnoDB){foreign_key :tid, :test}
|
|
66
66
|
proc{@db[:test2].insert(:tid=>1)}.must_raise(Sequel::ForeignKeyConstraintViolation)
|
|
@@ -70,7 +70,7 @@ describe Sequel::Database do
|
|
|
70
70
|
proc{@db[:test].where(:id=>1).delete}.must_raise(Sequel::ForeignKeyConstraintViolation)
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
cspecify "should raise Sequel::NotNullConstraintViolation when a not null constraint is violated", [:jdbc, :sqlite]
|
|
73
|
+
cspecify "should raise Sequel::NotNullConstraintViolation when a not null constraint is violated", [:jdbc, :sqlite] do
|
|
74
74
|
@db.create_table!(:test){Integer :a, :null=>false}
|
|
75
75
|
proc{@db[:test].insert(:a=>nil)}.must_raise(Sequel::NotNullConstraintViolation)
|
|
76
76
|
unless @db.database_type == :mysql
|
|
@@ -104,7 +104,7 @@ describe Sequel::Database do
|
|
|
104
104
|
@db.disconnect_connection(conn)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
it "should provide ability to check connections for validity" do
|
|
108
108
|
conn = @db.synchronize{|c| c}
|
|
109
109
|
@db.valid_connection?(conn).must_equal true
|
|
110
110
|
@db.disconnect
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Simple Dataset operations" do
|
|
4
4
|
before do
|
|
@@ -49,12 +49,6 @@ describe "Simple Dataset operations" do
|
|
|
49
49
|
@ds.filter(:id=>2).first[:number].must_equal 20
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
deprecated "should have insert_multiple return primary key values" do
|
|
53
|
-
@ds.extension(:sequel_3_dataset_methods).insert_multiple([{:number=>20}, {:number=>30}]).must_equal [2, 3]
|
|
54
|
-
@ds.filter(:id=>2).get(:number).must_equal 20
|
|
55
|
-
@ds.filter(:id=>3).get(:number).must_equal 30
|
|
56
|
-
end
|
|
57
|
-
|
|
58
52
|
it "should join correctly" do
|
|
59
53
|
@ds.join(Sequel[:items].as(:b), :id=>:id).select_all(:items).all.must_equal [{:id=>1, :number=>10}]
|
|
60
54
|
end
|
|
@@ -108,7 +102,7 @@ describe "Simple Dataset operations" do
|
|
|
108
102
|
@ds.all.must_equal [{:id=>1, :number=>11}]
|
|
109
103
|
end
|
|
110
104
|
|
|
111
|
-
|
|
105
|
+
it "should have update return the number of matched rows" do
|
|
112
106
|
@ds.update(:number=>:number).must_equal 1
|
|
113
107
|
@ds.filter(:id=>1).update(:number=>:number).must_equal 1
|
|
114
108
|
@ds.filter(:id=>2).update(:number=>:number).must_equal 0
|
|
@@ -171,7 +165,7 @@ describe "Simple Dataset operations" do
|
|
|
171
165
|
@ds.all.must_equal [{:id=>1, :number=>10}]
|
|
172
166
|
end
|
|
173
167
|
|
|
174
|
-
|
|
168
|
+
it "should skip locked rows correctly" do
|
|
175
169
|
@ds.insert(:number=>10)
|
|
176
170
|
q1 = Queue.new
|
|
177
171
|
q2 = Queue.new
|
|
@@ -777,6 +771,13 @@ if DB.dataset.supports_cte?(:update) # Assume INSERT and DELETE support as well
|
|
|
777
771
|
@ds2.filter(:id=>@db[:t].select{max(id)}).delete
|
|
778
772
|
@ds.select_order_map(:id).must_equal [1, 1]
|
|
779
773
|
end
|
|
774
|
+
|
|
775
|
+
it "should support a subselect in an subquery used for INSERT" do
|
|
776
|
+
@db.transaction(:rollback=>:always) do
|
|
777
|
+
@ds.insert([:id], @db[:foo].with(:foo, @ds.select{(id + 10).as(:id)}))
|
|
778
|
+
@ds.select_order_map(:id).must_equal [1,2,11,12]
|
|
779
|
+
end
|
|
780
|
+
end
|
|
780
781
|
end
|
|
781
782
|
end
|
|
782
783
|
|
|
@@ -927,13 +928,13 @@ describe Sequel::SQL::Constants do
|
|
|
927
928
|
(Time.now - @c[@ds.get(:t)]).must_be_close_to 0, 60
|
|
928
929
|
end
|
|
929
930
|
|
|
930
|
-
cspecify "should have working CURRENT_TIMESTAMP", [:jdbc, :sqlite]
|
|
931
|
+
cspecify "should have working CURRENT_TIMESTAMP", [:jdbc, :sqlite] do
|
|
931
932
|
@db.create_table!(:constants){DateTime :ts}
|
|
932
933
|
@ds.insert(:ts=>Sequel::CURRENT_TIMESTAMP)
|
|
933
934
|
(Time.now - @c[@ds.get(:ts)]).must_be_close_to 0, 60
|
|
934
935
|
end
|
|
935
936
|
|
|
936
|
-
cspecify "should have working CURRENT_TIMESTAMP when used as a column default", [:jdbc, :sqlite]
|
|
937
|
+
cspecify "should have working CURRENT_TIMESTAMP when used as a column default", [:jdbc, :sqlite] do
|
|
937
938
|
@db.create_table!(:constants){DateTime :ts, :default=>Sequel::CURRENT_TIMESTAMP}
|
|
938
939
|
@ds.insert
|
|
939
940
|
(Time.now - @c[@ds.get(:ts)]).must_be_close_to 0, 60
|
|
@@ -1055,12 +1056,6 @@ describe "Sequel::Dataset convenience methods" do
|
|
|
1055
1056
|
@db.drop_table?(:a)
|
|
1056
1057
|
end
|
|
1057
1058
|
|
|
1058
|
-
deprecated "#[]= should update matching rows" do
|
|
1059
|
-
@ds.insert(20, 10)
|
|
1060
|
-
@ds.extension(:sequel_3_dataset_methods)[:a=>20] = {:b=>30}
|
|
1061
|
-
@ds.all.must_equal [{:a=>20, :b=>30}]
|
|
1062
|
-
end
|
|
1063
|
-
|
|
1064
1059
|
it "#empty? should return whether the dataset returns no rows" do
|
|
1065
1060
|
@ds.empty?.must_equal true
|
|
1066
1061
|
@ds.insert(20, 10)
|
|
@@ -1751,36 +1746,6 @@ describe "Dataset identifier methods" do
|
|
|
1751
1746
|
end
|
|
1752
1747
|
end if IDENTIFIER_MANGLING
|
|
1753
1748
|
|
|
1754
|
-
describe "Dataset defaults and overrides" do
|
|
1755
|
-
before(:all) do
|
|
1756
|
-
@db = DB
|
|
1757
|
-
@db.create_table!(:a){Integer :a}
|
|
1758
|
-
deprecated do
|
|
1759
|
-
@ds = @db[:a].order(:a).extension(:set_overrides)
|
|
1760
|
-
end
|
|
1761
|
-
end
|
|
1762
|
-
before do
|
|
1763
|
-
@ds.delete
|
|
1764
|
-
end
|
|
1765
|
-
after(:all) do
|
|
1766
|
-
@db.drop_table?(:a)
|
|
1767
|
-
end
|
|
1768
|
-
|
|
1769
|
-
it "#set_defaults should set defaults that can be overridden" do
|
|
1770
|
-
@ds = @ds.set_defaults(:a=>10)
|
|
1771
|
-
@ds.insert
|
|
1772
|
-
@ds.insert(:a=>20)
|
|
1773
|
-
@ds.all.must_equal [{:a=>10}, {:a=>20}]
|
|
1774
|
-
end
|
|
1775
|
-
|
|
1776
|
-
it "#set_overrides should set defaults that cannot be overridden" do
|
|
1777
|
-
@ds = @ds.set_overrides(:a=>10)
|
|
1778
|
-
@ds.insert
|
|
1779
|
-
@ds.insert(:a=>20)
|
|
1780
|
-
@ds.all.must_equal [{:a=>10}, {:a=>10}]
|
|
1781
|
-
end
|
|
1782
|
-
end
|
|
1783
|
-
|
|
1784
1749
|
if DB.dataset.supports_modifying_joins?
|
|
1785
1750
|
describe "Modifying joined datasets" do
|
|
1786
1751
|
before do
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Model basic support" do
|
|
4
4
|
before do
|
|
@@ -49,20 +49,9 @@ describe "Sequel::Model basic support" do
|
|
|
49
49
|
Item.all.must_equal [Item.load(:id=>1, :name=>'J')]
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
class ::Item::Thing < Sequel::Model(@db)
|
|
54
|
-
set_dataset :items
|
|
55
|
-
end
|
|
56
|
-
Item.create(:name=>'J')
|
|
57
|
-
Item::Thing.first.must_equal Item::Thing.load(:id=>1, :name=>'J')
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should raise an error if the implied database table doesn't exist if require_valid_table is true" do
|
|
52
|
+
it "should raise an error if the implied database table doesn't exist" do
|
|
61
53
|
proc do
|
|
62
|
-
|
|
63
|
-
c.require_valid_table = true
|
|
64
|
-
class ::Item::Thing < c
|
|
65
|
-
set_dataset :items
|
|
54
|
+
class ::Item::Thing < Sequel::Model
|
|
66
55
|
end
|
|
67
56
|
end.must_raise Sequel::Error
|
|
68
57
|
end
|
|
@@ -108,59 +97,6 @@ describe "Sequel::Model basic support" do
|
|
|
108
97
|
i.save.must_be_nil
|
|
109
98
|
end
|
|
110
99
|
|
|
111
|
-
deprecated "#should respect after_commit, after_rollback, after_destroy_commit, and after_destroy_rollback hooks" do
|
|
112
|
-
i = Item.create(:name=>'J')
|
|
113
|
-
i.use_transactions = true
|
|
114
|
-
def i.hooks
|
|
115
|
-
@hooks
|
|
116
|
-
end
|
|
117
|
-
def i.rb=(x)
|
|
118
|
-
@hooks = []
|
|
119
|
-
@rb = x
|
|
120
|
-
end
|
|
121
|
-
def i.after_save
|
|
122
|
-
@hooks << :as
|
|
123
|
-
raise Sequel::Rollback if @rb
|
|
124
|
-
end
|
|
125
|
-
def i.after_destroy
|
|
126
|
-
@hooks << :ad
|
|
127
|
-
raise Sequel::Rollback if @rb
|
|
128
|
-
end
|
|
129
|
-
def i.after_commit
|
|
130
|
-
@hooks << :ac
|
|
131
|
-
end
|
|
132
|
-
def i.after_rollback
|
|
133
|
-
@hooks << :ar
|
|
134
|
-
end
|
|
135
|
-
def i.after_destroy_commit
|
|
136
|
-
@hooks << :adc
|
|
137
|
-
end
|
|
138
|
-
def i.after_destroy_rollback
|
|
139
|
-
@hooks << :adr
|
|
140
|
-
end
|
|
141
|
-
i.name = 'K'
|
|
142
|
-
i.rb = true
|
|
143
|
-
i.save.must_be_nil
|
|
144
|
-
i.reload.name.must_equal 'J'
|
|
145
|
-
i.hooks.must_equal [:as, :ar]
|
|
146
|
-
|
|
147
|
-
i.rb = true
|
|
148
|
-
i.destroy.must_be_nil
|
|
149
|
-
i.exists?.must_equal true
|
|
150
|
-
i.hooks.must_equal [:ad, :adr]
|
|
151
|
-
|
|
152
|
-
i.name = 'K'
|
|
153
|
-
i.rb = false
|
|
154
|
-
i.save.wont_equal nil
|
|
155
|
-
i.reload.name.must_equal 'K'
|
|
156
|
-
i.hooks.must_equal [:as, :ac]
|
|
157
|
-
|
|
158
|
-
i.rb = false
|
|
159
|
-
i.destroy.wont_equal nil
|
|
160
|
-
i.exists?.must_equal false
|
|
161
|
-
i.hooks.must_equal [:ad, :adc]
|
|
162
|
-
end
|
|
163
|
-
|
|
164
100
|
it "#exists? should return whether the item is still in the database" do
|
|
165
101
|
i = Item.create(:name=>'J')
|
|
166
102
|
i.exists?.must_equal true
|
|
@@ -239,27 +175,13 @@ describe "Sequel::Model basic support" do
|
|
|
239
175
|
end
|
|
240
176
|
|
|
241
177
|
describe "Sequel::Model with no existing table" do
|
|
242
|
-
|
|
243
|
-
db = DB
|
|
244
|
-
db.drop_table?(:items)
|
|
245
|
-
c = Class.new(Sequel::Model)
|
|
246
|
-
c.set_dataset(db[:items])
|
|
247
|
-
db.transaction do
|
|
248
|
-
c = Class.new(Sequel::Model(db[:items]))
|
|
249
|
-
db.get(Sequel.cast(1, Integer)).must_equal 1
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it "should not raise an error when setting the dataset when require_valid_table is true" do
|
|
178
|
+
it "should not raise an error when setting the dataset" do
|
|
254
179
|
db = DB
|
|
255
180
|
db.drop_table?(:items)
|
|
256
|
-
c1 = Sequel::Model(db);
|
|
257
181
|
c = Class.new(Sequel::Model)
|
|
258
|
-
c.require_valid_table = true
|
|
259
182
|
proc{c.set_dataset(db[:items])}.must_raise Sequel::Error
|
|
260
183
|
db.transaction do
|
|
261
184
|
c = Class.new(Sequel::Model)
|
|
262
|
-
c.require_valid_table = true
|
|
263
185
|
proc{c.dataset = db[:items]}.must_raise Sequel::Error
|
|
264
186
|
db.get(Sequel.cast(1, Integer)).must_equal 1
|
|
265
187
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Class Table Inheritance Plugin" do
|
|
4
4
|
before(:all) do
|
|
@@ -26,7 +26,7 @@ describe "Class Table Inheritance Plugin" do
|
|
|
26
26
|
before do
|
|
27
27
|
[:staff, :executives, :managers, :employees].each{|t| @db[t].delete}
|
|
28
28
|
class ::Employee < Sequel::Model(@db)
|
|
29
|
-
plugin :class_table_inheritance, :key=>:kind, :table_map=>{:Staff=>:staff}
|
|
29
|
+
plugin :class_table_inheritance, :key=>:kind, :table_map=>{:Staff=>:staff}
|
|
30
30
|
end
|
|
31
31
|
class ::Manager < Employee
|
|
32
32
|
one_to_many :staff_members, :class=>:Staff
|
|
@@ -570,7 +570,7 @@ describe "Touch plugin" do
|
|
|
570
570
|
@album.updated_at.to_i.must_be_close_to Time.now.to_i, 2
|
|
571
571
|
end
|
|
572
572
|
|
|
573
|
-
cspecify "should update the timestamp column for many_to_one associated records when the record is updated or destroyed", [:
|
|
573
|
+
cspecify "should update the timestamp column for many_to_one associated records when the record is updated or destroyed", [:jdbc, :sqlite] do
|
|
574
574
|
Album.many_to_one :artist
|
|
575
575
|
Album.plugin :touch, :associations=>:artist
|
|
576
576
|
@artist.updated_at.must_be_nil
|
|
@@ -590,7 +590,7 @@ describe "Touch plugin" do
|
|
|
590
590
|
end
|
|
591
591
|
end
|
|
592
592
|
|
|
593
|
-
cspecify "should update the timestamp column for one_to_many associated records when the record is updated", [:
|
|
593
|
+
cspecify "should update the timestamp column for one_to_many associated records when the record is updated", [:jdbc, :sqlite] do
|
|
594
594
|
Artist.one_to_many :albums
|
|
595
595
|
Artist.plugin :touch, :associations=>:albums
|
|
596
596
|
@album.updated_at.must_be_nil
|
|
@@ -603,7 +603,7 @@ describe "Touch plugin" do
|
|
|
603
603
|
end
|
|
604
604
|
end
|
|
605
605
|
|
|
606
|
-
cspecify "should update the timestamp column for many_to_many associated records when the record is updated", [:
|
|
606
|
+
cspecify "should update the timestamp column for many_to_many associated records when the record is updated", [:jdbc, :sqlite] do
|
|
607
607
|
Artist.many_to_many :albums
|
|
608
608
|
Artist.plugin :touch, :associations=>:albums
|
|
609
609
|
@artist.add_album(@album)
|
|
@@ -1315,25 +1315,9 @@ describe "AssociationPks plugin" do
|
|
|
1315
1315
|
Vocalist.order(:first, :last).all.map{|a| a.hit_pks.sort}.must_equal [[@h1, @h2, @h3], [@h2], []]
|
|
1316
1316
|
end
|
|
1317
1317
|
|
|
1318
|
-
|
|
1318
|
+
it "should default to delaying association_pks setter method changes until saving" do
|
|
1319
1319
|
album_class = Class.new(Album)
|
|
1320
1320
|
album_class.many_to_many :tags, :clone=>:tags, :delay_pks=>true, :join_table=>:albums_tags, :left_key=>:album_id
|
|
1321
|
-
album = album_class.new(:name=>'test album')
|
|
1322
|
-
album.tag_pks.must_equal []
|
|
1323
|
-
album.tag_pks = [@t1, @t2]
|
|
1324
|
-
album.tag_pks.must_equal [@t1, @t2]
|
|
1325
|
-
album.save
|
|
1326
|
-
album_class.with_pk!(album.pk).tag_pks.sort.must_equal [@t1, @t2]
|
|
1327
|
-
|
|
1328
|
-
album.tag_pks = []
|
|
1329
|
-
album.tag_pks.must_equal []
|
|
1330
|
-
album.save
|
|
1331
|
-
album_class.with_pk!(album.pk).tag_pks.sort.must_equal []
|
|
1332
|
-
end
|
|
1333
|
-
|
|
1334
|
-
it "should handle :delay_pks=>:always association option for existing instances" do
|
|
1335
|
-
album_class = Class.new(Album)
|
|
1336
|
-
album_class.many_to_many :tags, :clone=>:tags, :delay_pks=>:always, :join_table=>:albums_tags, :left_key=>:album_id
|
|
1337
1321
|
album = album_class.with_pk!(@al1)
|
|
1338
1322
|
album.tag_pks.sort.must_equal [@t1, @t2, @t3]
|
|
1339
1323
|
album.tag_pks = [@t1, @t2]
|
|
@@ -2059,7 +2043,7 @@ describe "Sequel::Plugins::ConstraintValidations" do
|
|
|
2059
2043
|
end
|
|
2060
2044
|
|
|
2061
2045
|
ConstraintValidationsSpecs = shared_description do
|
|
2062
|
-
cspecify "should set up constraints that work even outside the model", :mysql do
|
|
2046
|
+
cspecify "should set up constraints that work even outside the model", [proc{|db| !db.mariadb? || db.server_version <= 100200}, :mysql] do
|
|
2063
2047
|
@ds.insert(@valid_row)
|
|
2064
2048
|
|
|
2065
2049
|
# Test for unique constraint
|