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
data/spec/model/base_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Model attribute setters" do
|
|
4
4
|
before do
|
|
@@ -118,72 +118,6 @@ describe Sequel::Model, "implicit table names" do
|
|
|
118
118
|
end
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
-
describe Sequel::Model, ".def_dataset_method" do
|
|
122
|
-
before do
|
|
123
|
-
@c = Class.new(Sequel::Model(:items))
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
deprecated "should add a method to the dataset and model if called with a block argument" do
|
|
127
|
-
@c.def_dataset_method(:return_3){3}
|
|
128
|
-
@c.return_3.must_equal 3
|
|
129
|
-
@c.dataset.return_3.must_equal 3
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
deprecated "should handle weird method names" do
|
|
133
|
-
@c.def_dataset_method(:"return 3"){3}
|
|
134
|
-
@c.send(:"return 3").must_equal 3
|
|
135
|
-
@c.dataset.send(:"return 3").must_equal 3
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
deprecated "should not add a model method if the model already responds to the method" do
|
|
139
|
-
@c.instance_eval do
|
|
140
|
-
def foo
|
|
141
|
-
1
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
private
|
|
145
|
-
|
|
146
|
-
def bar
|
|
147
|
-
2
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def_dataset_method(:foo){3}
|
|
151
|
-
def_dataset_method(:bar){4}
|
|
152
|
-
end
|
|
153
|
-
@c.foo.must_equal 1
|
|
154
|
-
@c.dataset.foo.must_equal 3
|
|
155
|
-
@c.send(:bar).must_equal 2
|
|
156
|
-
@c.dataset.bar.must_equal 4
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
deprecated "should add all passed methods to the model if called without a block argument" do
|
|
160
|
-
@c.def_dataset_method(:return_3, :return_4)
|
|
161
|
-
proc{@c.return_3}.must_raise(NoMethodError)
|
|
162
|
-
proc{@c.return_4}.must_raise(NoMethodError)
|
|
163
|
-
@c.dataset = @c.dataset.with_extend do
|
|
164
|
-
def return_3; 3; end
|
|
165
|
-
def return_4; 4; end
|
|
166
|
-
end
|
|
167
|
-
@c.return_3.must_equal 3
|
|
168
|
-
@c.return_4.must_equal 4
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
deprecated "should cache calls and readd methods if set_dataset is used" do
|
|
172
|
-
@c.def_dataset_method(:return_3){3}
|
|
173
|
-
@c.set_dataset :items
|
|
174
|
-
@c.return_3.must_equal 3
|
|
175
|
-
@c.dataset.return_3.must_equal 3
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
deprecated "should readd methods to subclasses, if set_dataset is used in a subclass" do
|
|
179
|
-
@c.def_dataset_method(:return_3){3}
|
|
180
|
-
c = Class.new(@c)
|
|
181
|
-
c.set_dataset :items
|
|
182
|
-
c.return_3.must_equal 3
|
|
183
|
-
c.dataset.return_3.must_equal 3
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
121
|
describe Sequel::Model, ".dataset_module" do
|
|
188
122
|
before do
|
|
189
123
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -209,6 +143,11 @@ describe Sequel::Model, ".dataset_module" do
|
|
|
209
143
|
@c.return_3.must_equal 3
|
|
210
144
|
end
|
|
211
145
|
|
|
146
|
+
it "should add methods that can't be called with normal method syntax as class methods" do
|
|
147
|
+
@c.dataset_module.module_eval{define_method(:'return 3'){3}}
|
|
148
|
+
@c.send(:'return 3').must_equal 3
|
|
149
|
+
end
|
|
150
|
+
|
|
212
151
|
it "should not add private or protected methods defined in the module to the class" do
|
|
213
152
|
@c.dataset_module{private; def return_3() 3 end}
|
|
214
153
|
@c.dataset_module{protected; def return_4() 4 end}
|
|
@@ -377,6 +316,12 @@ describe Sequel::Model, ".dataset_module" do
|
|
|
377
316
|
@c.order(:bar).foo.sql.must_equal 'SELECT * FROM items ORDER BY baz, bar'
|
|
378
317
|
end
|
|
379
318
|
|
|
319
|
+
it "should have dataset_module support a reverse method" do
|
|
320
|
+
@c.dataset_module{reverse(:foo){:baz}}
|
|
321
|
+
@c.foo.sql.must_equal 'SELECT * FROM items ORDER BY baz DESC'
|
|
322
|
+
@c.where(:bar).foo.sql.must_equal 'SELECT * FROM items WHERE bar ORDER BY baz DESC'
|
|
323
|
+
end
|
|
324
|
+
|
|
380
325
|
it "should have dataset_module support a select method" do
|
|
381
326
|
@c.dataset_module{select :foo, :baz}
|
|
382
327
|
@c.foo.sql.must_equal 'SELECT baz FROM items'
|
|
@@ -442,6 +387,25 @@ describe "A model inheriting from a model" do
|
|
|
442
387
|
end
|
|
443
388
|
end
|
|
444
389
|
|
|
390
|
+
describe "A model inheriting from a custom base that sets @dataset" do
|
|
391
|
+
before do
|
|
392
|
+
::Feline = Class.new(Sequel::Model)
|
|
393
|
+
def Feline.inherited(subclass)
|
|
394
|
+
subclass.instance_variable_set(:@dataset, nil)
|
|
395
|
+
superclass.inherited(subclass)
|
|
396
|
+
end
|
|
397
|
+
class ::Leopard < Feline; end
|
|
398
|
+
end
|
|
399
|
+
after do
|
|
400
|
+
Object.send(:remove_const, :Leopard)
|
|
401
|
+
Object.send(:remove_const, :Feline)
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
it "should not infer the dataset of the subclass" do
|
|
405
|
+
proc{Leopard.dataset}.must_raise(Sequel::Error)
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
445
409
|
describe "Model.primary_key" do
|
|
446
410
|
before do
|
|
447
411
|
@c = Class.new(Sequel::Model)
|
|
@@ -565,59 +529,21 @@ describe "Model.db=" do
|
|
|
565
529
|
before do
|
|
566
530
|
@db1 = Sequel.mock
|
|
567
531
|
@db2 = Sequel.mock
|
|
568
|
-
|
|
569
|
-
@m = Class.new(Sequel::Model(@db1[:blue].filter(:x=>1)))
|
|
532
|
+
@m = Class.new(Sequel::Model(@db1))
|
|
570
533
|
end
|
|
571
534
|
|
|
572
|
-
|
|
535
|
+
it "should change database for model" do
|
|
573
536
|
@m.db = @db2
|
|
574
|
-
|
|
575
|
-
@m.dataset.db.must_equal @db2
|
|
576
|
-
@m.dataset.db.wont_equal @db1
|
|
537
|
+
@m.db.must_equal @db2
|
|
577
538
|
end
|
|
578
539
|
|
|
579
|
-
|
|
580
|
-
@m.
|
|
581
|
-
@m.
|
|
540
|
+
it "should raise Error for model with existing dataset" do
|
|
541
|
+
@m.dataset = :table
|
|
542
|
+
proc{@m.db = @db2}.must_raise Sequel::Error
|
|
582
543
|
end
|
|
583
544
|
|
|
584
545
|
it "should use the database for subclasses" do
|
|
585
|
-
|
|
586
|
-
@m.db = @db2
|
|
587
|
-
Class.new(@m).db.must_equal @db2
|
|
588
|
-
end
|
|
589
|
-
end
|
|
590
|
-
|
|
591
|
-
describe Sequel::Model, ".allowed_columns " do
|
|
592
|
-
before do
|
|
593
|
-
@c = Class.new(Sequel::Model(:blahblah)) do
|
|
594
|
-
columns :x, :y, :z
|
|
595
|
-
end
|
|
596
|
-
@c.strict_param_setting = false
|
|
597
|
-
@c.instance_variable_set(:@columns, [:x, :y, :z])
|
|
598
|
-
DB.reset
|
|
599
|
-
end
|
|
600
|
-
|
|
601
|
-
deprecated "should set the allowed columns correctly" do
|
|
602
|
-
@c.allowed_columns.must_be_nil
|
|
603
|
-
@c.set_allowed_columns :x
|
|
604
|
-
@c.allowed_columns.must_equal [:x]
|
|
605
|
-
@c.set_allowed_columns :x, :y
|
|
606
|
-
@c.allowed_columns.must_equal [:x, :y]
|
|
607
|
-
end
|
|
608
|
-
|
|
609
|
-
deprecated "should only set allowed columns by default" do
|
|
610
|
-
@c.set_allowed_columns :x, :y
|
|
611
|
-
i = @c.new(:x => 1, :y => 2, :z => 3)
|
|
612
|
-
i.values.must_equal(:x => 1, :y => 2)
|
|
613
|
-
i.set(:x => 4, :y => 5, :z => 6)
|
|
614
|
-
i.values.must_equal(:x => 4, :y => 5)
|
|
615
|
-
|
|
616
|
-
@c.dataset = @c.dataset.with_fetch(:x => 7)
|
|
617
|
-
i = @c.new
|
|
618
|
-
i.update(:x => 7, :z => 9)
|
|
619
|
-
i.values.must_equal(:x => 7)
|
|
620
|
-
DB.sqls.must_equal ["INSERT INTO blahblah (x) VALUES (7)", "SELECT * FROM blahblah WHERE id = 10"]
|
|
546
|
+
Class.new(@m).db.must_equal @db1
|
|
621
547
|
end
|
|
622
548
|
end
|
|
623
549
|
|
|
@@ -676,13 +602,6 @@ describe Sequel::Model, ".strict_param_setting" do
|
|
|
676
602
|
c = @c.new
|
|
677
603
|
proc{c.set(:a=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
678
604
|
proc{c.update(:a=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
679
|
-
deprecated do
|
|
680
|
-
@c.set_allowed_columns :x, :y
|
|
681
|
-
proc{c.set_all(:use_after_commit_rollback => false)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
682
|
-
proc{c.set_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
683
|
-
proc{c.update_all(:use_after_commit_rollback=>false)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
684
|
-
proc{c.update_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
685
|
-
end
|
|
686
605
|
end
|
|
687
606
|
|
|
688
607
|
it "should be disabled by strict_param_setting = false" do
|
|
@@ -835,16 +754,10 @@ describe "Model datasets #with_pk with #with_pk!" do
|
|
|
835
754
|
it "should handle an array for composite primary keys" do
|
|
836
755
|
@c.set_primary_key [:id1, :id2]
|
|
837
756
|
@ds.with_pk([1, 2])
|
|
838
|
-
sqls =
|
|
839
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
|
840
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
|
841
|
-
sqls.must_equal []
|
|
757
|
+
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
|
|
842
758
|
|
|
843
759
|
@ds.with_pk!([1, 2])
|
|
844
|
-
sqls =
|
|
845
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
|
846
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
|
847
|
-
sqls.must_equal []
|
|
760
|
+
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
|
|
848
761
|
end
|
|
849
762
|
|
|
850
763
|
it "should work with composite primary keys when called repeatedly on a frozen dataset with" do
|
|
@@ -852,10 +765,7 @@ describe "Model datasets #with_pk with #with_pk!" do
|
|
|
852
765
|
@ds.freeze
|
|
853
766
|
5.times do
|
|
854
767
|
@ds.with_pk([1,2])
|
|
855
|
-
sqls =
|
|
856
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
|
857
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
|
858
|
-
sqls.must_equal []
|
|
768
|
+
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
|
|
859
769
|
end
|
|
860
770
|
end
|
|
861
771
|
|
|
@@ -880,11 +790,6 @@ describe "Model datasets #with_pk with #with_pk!" do
|
|
|
880
790
|
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
|
881
791
|
end
|
|
882
792
|
|
|
883
|
-
deprecated "should not have #[] consider a string as a primary key lookup" do
|
|
884
|
-
@ds['foo'].must_equal @c.load(:id=>1)
|
|
885
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
|
|
886
|
-
end
|
|
887
|
-
|
|
888
793
|
it "should not have #[] consider a literal string as a primary key lookup" do
|
|
889
794
|
@ds[Sequel.lit('foo')].must_equal @c.load(:id=>1)
|
|
890
795
|
DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
|
|
@@ -906,6 +811,7 @@ describe "Model::include" do
|
|
|
906
811
|
including_class = Class.new(Sequel::Model(:items)) do
|
|
907
812
|
include(mod1, mod2)
|
|
908
813
|
end
|
|
909
|
-
including_class.included_modules.must_include(mod1
|
|
814
|
+
including_class.included_modules.must_include(mod1)
|
|
815
|
+
including_class.included_modules.must_include(mod2)
|
|
910
816
|
end
|
|
911
817
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "class dataset methods" do
|
|
4
4
|
before do
|
|
@@ -9,10 +9,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it "should call the dataset method of the same name with the same args" do
|
|
12
|
-
deprecated do
|
|
13
|
-
@c.<<({}).must_equal @d
|
|
14
|
-
end
|
|
15
|
-
@db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
|
|
16
12
|
@c.all.must_equal [@c.load(:id=>1)]
|
|
17
13
|
@db.sqls.must_equal ["SELECT * FROM items"]
|
|
18
14
|
@c.avg(:id).must_equal 1
|
|
@@ -29,9 +25,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
29
25
|
@c.except(@d, :from_self=>false).sql.must_equal "SELECT * FROM items EXCEPT SELECT * FROM items"
|
|
30
26
|
@c.exclude(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
|
|
31
27
|
@c.exclude_having(:a).sql.must_equal "SELECT * FROM items HAVING NOT a"
|
|
32
|
-
deprecated do
|
|
33
|
-
@c.exclude_where(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
|
|
34
|
-
end
|
|
35
28
|
@c.fetch_rows("S"){|r| r.must_equal(:id=>1)}
|
|
36
29
|
@db.sqls.must_equal ["S"]
|
|
37
30
|
@c.filter(:a).sql.must_equal "SELECT * FROM items WHERE a"
|
|
@@ -57,13 +50,9 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
57
50
|
@c.import([:id], [[1]])
|
|
58
51
|
@db.sqls.must_equal ["BEGIN", "INSERT INTO items (id) VALUES (1)", "COMMIT"]
|
|
59
52
|
@c.inner_join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
|
60
|
-
@c.insert.must_equal
|
|
53
|
+
@c.insert.must_equal 1
|
|
61
54
|
@db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
|
|
62
55
|
@c.intersect(@d, :from_self=>false).sql.must_equal "SELECT * FROM items INTERSECT SELECT * FROM items"
|
|
63
|
-
deprecated do
|
|
64
|
-
@c.interval(:id).must_equal 1
|
|
65
|
-
end
|
|
66
|
-
@db.sqls.must_equal ["SELECT (max(id) - min(id)) AS interval FROM items LIMIT 1"]
|
|
67
56
|
@c.join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
|
68
57
|
@c.join_table(:inner, @c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
|
69
58
|
@c.last.must_equal @c.load(:id=>1)
|
|
@@ -109,9 +98,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
109
98
|
@c.select_order_map(:id).must_equal [1]
|
|
110
99
|
@db.sqls.must_equal ["SELECT id FROM items ORDER BY id"]
|
|
111
100
|
@c.server(:a).opts[:server].must_equal :a
|
|
112
|
-
deprecated do
|
|
113
|
-
@c.set_graph_aliases(:a=>:b).opts[:graph_aliases].must_equal(:a=>[:b, :a])
|
|
114
|
-
end
|
|
115
101
|
@c.single_record.must_equal @c.load(:id=>1)
|
|
116
102
|
@db.sqls.must_equal ["SELECT * FROM items LIMIT 1"]
|
|
117
103
|
@c.single_record!.must_equal @c.load(:id=>1)
|
|
@@ -148,10 +134,6 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
148
134
|
sc.invert.sql.must_equal 'SELECT a FROM items WHERE NOT a GROUP BY a ORDER BY a LIMIT 2'
|
|
149
135
|
sc.dataset = sc.dataset.with_fetch(:v1=>1, :v2=>2)
|
|
150
136
|
@db.sqls
|
|
151
|
-
deprecated do
|
|
152
|
-
sc.range(:a).must_equal(1..2)
|
|
153
|
-
end
|
|
154
|
-
@db.sqls.must_equal ["SELECT min(a) AS v1, max(a) AS v2 FROM (SELECT a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2) AS t1 LIMIT 1"]
|
|
155
137
|
sc.reverse.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
|
|
156
138
|
sc.reverse_order.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
|
|
157
139
|
sc.select_more(:a).sql.must_equal 'SELECT a, a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model::DatasetMethods, "#destroy" do
|
|
4
4
|
before do
|
|
@@ -86,24 +86,6 @@ describe Sequel::Model::DatasetMethods do
|
|
|
86
86
|
@c.db.reset
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
-
deprecated "#join_table should allow use to use a model class when joining" do
|
|
90
|
-
@c.join(Class.new(Sequel::Model(:categories)), :item_id => :id).sql.must_equal 'SELECT * FROM items INNER JOIN categories ON (categories.item_id = items.id)'
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
deprecated "#join_table should handle model classes that aren't simple selects using a subselect" do
|
|
94
|
-
@c.join(Class.new(Sequel::Model(DB[:categories].where(:foo=>1))), :item_id => :id).sql.must_equal 'SELECT * FROM items INNER JOIN (SELECT * FROM categories WHERE (foo = 1)) AS t1 ON (t1.item_id = items.id)'
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
deprecated "#graph should allow use to use a model class when joining" do
|
|
98
|
-
c = Class.new(Sequel::Model(:categories))
|
|
99
|
-
c.columns :id
|
|
100
|
-
@c.graph(c, :item_id => :id).sql.must_equal 'SELECT items.id, categories.id AS categories_id FROM items LEFT OUTER JOIN categories ON (categories.item_id = items.id)'
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
deprecated "#insert_sql should handle a single model instance as an argument" do
|
|
104
|
-
@c.dataset.insert_sql(@c.load(:id=>1)).must_equal 'INSERT INTO items (id) VALUES (1)'
|
|
105
|
-
end
|
|
106
|
-
|
|
107
89
|
it "#first should handle no primary key" do
|
|
108
90
|
@c.no_primary_key
|
|
109
91
|
@c.first.must_be_kind_of(@c)
|
|
@@ -209,7 +191,6 @@ describe Sequel::Model::DatasetMethods, "#where_single_value" do
|
|
|
209
191
|
|
|
210
192
|
it "should return single value" do
|
|
211
193
|
5.times do
|
|
212
|
-
a = []
|
|
213
194
|
@c.only_id.where_single_value(:id=>1).must_equal 1
|
|
214
195
|
@c.db.sqls.must_equal ['SELECT id FROM items WHERE (id = 1) LIMIT 1']
|
|
215
196
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "#eager" do
|
|
4
4
|
before do
|
|
@@ -222,6 +222,31 @@ describe Sequel::Model, "#eager" do
|
|
|
222
222
|
DB.sqls.must_equal []
|
|
223
223
|
end
|
|
224
224
|
|
|
225
|
+
it "should eagerly load a single one_to_one association using the :window_function strategy on MySQL" do
|
|
226
|
+
odb = DB
|
|
227
|
+
db = Class.new do
|
|
228
|
+
def database_type; :mysql; end
|
|
229
|
+
define_method(:method_missing) do |*args, &block|
|
|
230
|
+
odb.send(*args, &block)
|
|
231
|
+
end
|
|
232
|
+
end.new
|
|
233
|
+
|
|
234
|
+
begin
|
|
235
|
+
EagerTrack.dataset = EagerTrack.dataset.with_extend do
|
|
236
|
+
def supports_window_functions?; true end
|
|
237
|
+
define_method(:db){db}
|
|
238
|
+
end
|
|
239
|
+
EagerAlbum.one_to_one :track, :class=>'EagerTrack', :key=>:album_id, :order=>:name, :eager_limit_strategy=>:window_function
|
|
240
|
+
a = EagerAlbum.eager(:track).all
|
|
241
|
+
a.must_equal [EagerAlbum.load(:id => 1, :band_id => 2)]
|
|
242
|
+
DB.sqls.must_equal ['SELECT * FROM albums', 'SELECT * FROM (SELECT *, row_number() OVER (PARTITION BY tracks.album_id ORDER BY name) AS x_sequel_row_number_x FROM tracks WHERE (tracks.album_id IN (1))) AS t1 WHERE (x_sequel_row_number_x = 1) ORDER BY x_sequel_row_number_x']
|
|
243
|
+
a.first.track.must_equal EagerTrack.load(:id => 3, :album_id=>1)
|
|
244
|
+
DB.sqls.must_equal []
|
|
245
|
+
ensure
|
|
246
|
+
db = DB
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
225
250
|
it "should automatically use an eager limit stategy if the association has an offset" do
|
|
226
251
|
EagerAlbum.one_to_one :track, :class=>'EagerTrack', :key=>:album_id, :limit=>[1,1]
|
|
227
252
|
EagerTrack.dataset = EagerTrack.dataset.with_fetch([{:id => 4, :album_id=>1}])
|
|
@@ -675,9 +700,9 @@ describe Sequel::Model, "#eager" do
|
|
|
675
700
|
it "should cache the negative lookup when eagerly loading a *_to_many associations" do
|
|
676
701
|
a = EagerBand.eager(:albums).where{id > 100}.all
|
|
677
702
|
a.must_equal [EagerBand.load(:id => 101), EagerBand.load(:id =>102)]
|
|
678
|
-
sqls
|
|
679
|
-
|
|
680
|
-
|
|
703
|
+
DB.sqls.must_equal ['SELECT * FROM bands WHERE (id > 100)',
|
|
704
|
+
'SELECT * FROM albums WHERE (albums.band_id IN (101, 102))',
|
|
705
|
+
"SELECT * FROM tracks WHERE (tracks.album_id IN (101))"]
|
|
681
706
|
a.map{|b| b.associations[:albums]}.must_equal [[EagerAlbum.load({:band_id=>101, :id=>101})], []]
|
|
682
707
|
DB.sqls.must_equal []
|
|
683
708
|
end
|
|
@@ -1100,9 +1125,9 @@ describe Sequel::Model, "#eager" do
|
|
|
1100
1125
|
EagerTrack.dataset = EagerTrack.dataset.with_fetch([{:id=>3, :album_id=>1}])
|
|
1101
1126
|
a = EagerBand.eager(:top_10_albums=>{proc{|ds| ds.select(:id, :name)}=>:tracks}).all
|
|
1102
1127
|
a.must_equal [EagerBand.load(:id => 2)]
|
|
1103
|
-
sqls
|
|
1104
|
-
|
|
1105
|
-
|
|
1128
|
+
DB.sqls.must_equal ['SELECT * FROM bands',
|
|
1129
|
+
'SELECT id, name FROM albums WHERE (albums.band_id IN (2))',
|
|
1130
|
+
'SELECT * FROM tracks WHERE (tracks.album_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11))']
|
|
1106
1131
|
a = a.first
|
|
1107
1132
|
a.top_10_albums.must_equal((1..10).map{|i| EagerAlbum.load(:band_id=>2, :id=>i)})
|
|
1108
1133
|
a.top_10_albums.map{|x| x.tracks}.must_equal [[EagerTrack.load(:id => 3, :album_id=>1)]] + ([[]] * 9)
|
|
@@ -1483,20 +1508,26 @@ describe Sequel::Model, "#eager_graph" do
|
|
|
1483
1508
|
a.first.lgenre.must_equal sub.load(:id => 4)
|
|
1484
1509
|
end
|
|
1485
1510
|
|
|
1486
|
-
it "should correctly handle an aliased join table in many_to_many and one_through_one with
|
|
1511
|
+
it "should correctly handle an aliased join table in many_to_many and one_through_one with graph_conditions or graph_block" do
|
|
1487
1512
|
c = Class.new(GraphAlbum)
|
|
1488
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :
|
|
1489
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ga.genre_id)'
|
|
1490
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :
|
|
1491
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND \'t\')'
|
|
1513
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :graph_conditions=>{:a=>:b}
|
|
1514
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b))'
|
|
1515
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :graph_block => proc{true}
|
|
1516
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b) AND \'t\')'
|
|
1492
1517
|
end
|
|
1493
1518
|
|
|
1494
|
-
with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one with
|
|
1519
|
+
with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one with graph_conditions or graph_block" do
|
|
1495
1520
|
c = Class.new(GraphAlbum)
|
|
1496
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :
|
|
1497
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ga.genre_id)'
|
|
1498
|
-
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :
|
|
1499
|
-
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND \'t\')'
|
|
1521
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :graph_conditions=>{:a=>:b}
|
|
1522
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b))'
|
|
1523
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :graph_block => proc{true}
|
|
1524
|
+
c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b) AND \'t\')'
|
|
1525
|
+
end
|
|
1526
|
+
|
|
1527
|
+
it "should raise Error when using eager_graph with :conditions option that isn't a conditions specifier" do
|
|
1528
|
+
c = Class.new(GraphAlbum)
|
|
1529
|
+
c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :conditions=>'true'
|
|
1530
|
+
proc{c.eager_graph(:genres)}.must_raise Sequel::Error
|
|
1500
1531
|
end
|
|
1501
1532
|
|
|
1502
1533
|
with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one" do
|