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/model_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Model()" do
|
|
4
4
|
before do
|
|
@@ -109,14 +109,6 @@ describe "Sequel::Model()" do
|
|
|
109
109
|
Object.send(:remove_const, :Album) if defined?(::Album)
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
-
deprecated "Sequel.cache_anonymous_models should return value for Sequel::Model" do
|
|
113
|
-
Sequel.cache_anonymous_models.must_equal true
|
|
114
|
-
Sequel::Model.cache_anonymous_models = false
|
|
115
|
-
Sequel.cache_anonymous_models.must_equal false
|
|
116
|
-
Sequel.cache_anonymous_models = true
|
|
117
|
-
Sequel.cache_anonymous_models.must_equal true
|
|
118
|
-
end
|
|
119
|
-
|
|
120
112
|
it "should work without raising an exception with a symbol" do
|
|
121
113
|
class ::Album < Sequel::Model(:table); end
|
|
122
114
|
class ::Album < Sequel::Model(:table); end
|
|
@@ -185,12 +177,7 @@ end
|
|
|
185
177
|
describe "Sequel::Model.freeze" do
|
|
186
178
|
it "should freeze the model class and not allow any changes" do
|
|
187
179
|
model = Class.new(Sequel::Model(:items))
|
|
188
|
-
deprecated do
|
|
189
|
-
model.set_allowed_columns [:id]
|
|
190
|
-
model.finder(:name=>:f_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}
|
|
191
|
-
end
|
|
192
180
|
model.freeze
|
|
193
|
-
model.f_by_name(1)
|
|
194
181
|
|
|
195
182
|
model.frozen?.must_equal true
|
|
196
183
|
model.dataset.frozen?.must_equal true
|
|
@@ -201,11 +188,12 @@ describe "Sequel::Model.freeze" do
|
|
|
201
188
|
model.send(:overridable_methods_module).frozen?.must_equal true
|
|
202
189
|
model.default_set_fields_options.frozen?.must_equal true
|
|
203
190
|
|
|
204
|
-
proc{model.dataset_module{}}.must_raise RuntimeError
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
191
|
+
proc{model.dataset_module{}}.must_raise RuntimeError
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "should work if the model is already frozen" do
|
|
195
|
+
model = Class.new(Sequel::Model(:items))
|
|
196
|
+
model.freeze.freeze
|
|
209
197
|
end
|
|
210
198
|
|
|
211
199
|
it "should freeze a model class without a dataset without breaking" do
|
|
@@ -219,10 +207,7 @@ describe "Sequel::Model.freeze" do
|
|
|
219
207
|
model.send(:overridable_methods_module).frozen?.must_equal true
|
|
220
208
|
model.default_set_fields_options.frozen?.must_equal true
|
|
221
209
|
|
|
222
|
-
proc{model.dataset_module{}}.must_raise RuntimeError
|
|
223
|
-
deprecated do
|
|
224
|
-
proc{model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}}.must_raise RuntimeError, TypeError
|
|
225
|
-
end
|
|
210
|
+
proc{model.dataset_module{}}.must_raise RuntimeError
|
|
226
211
|
end
|
|
227
212
|
|
|
228
213
|
it "should allow subclasses of frozen model classes to work correctly" do
|
|
@@ -233,14 +218,8 @@ describe "Sequel::Model.freeze" do
|
|
|
233
218
|
|
|
234
219
|
model.dataset_module{}
|
|
235
220
|
model.plugin Module.new
|
|
236
|
-
deprecated do
|
|
237
|
-
model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}
|
|
238
|
-
end
|
|
239
|
-
model.first_by_name('a').values.must_equal(:id=>1, :x=>1)
|
|
240
|
-
model.dataset.frozen?.must_equal false
|
|
241
221
|
|
|
242
222
|
model.frozen?.must_equal false
|
|
243
|
-
model.dataset.frozen?.must_equal false
|
|
244
223
|
model.db_schema.frozen?.must_equal false
|
|
245
224
|
model.db_schema[:id].frozen?.must_equal false
|
|
246
225
|
model.setter_methods.frozen?.must_equal false
|
|
@@ -252,10 +231,8 @@ end
|
|
|
252
231
|
|
|
253
232
|
describe Sequel::Model do
|
|
254
233
|
it "should have class method aliased as model" do
|
|
255
|
-
Sequel::Model.instance_methods.collect{|x| x.to_s}.must_include("model")
|
|
256
|
-
|
|
257
234
|
model_a = Class.new(Sequel::Model(:items))
|
|
258
|
-
model_a.new.model.
|
|
235
|
+
model_a.new.model.must_be_same_as model_a
|
|
259
236
|
end
|
|
260
237
|
|
|
261
238
|
it "should be associated with a dataset" do
|
|
@@ -279,15 +256,10 @@ describe Sequel::Model do
|
|
|
279
256
|
DB.reset
|
|
280
257
|
end
|
|
281
258
|
|
|
282
|
-
deprecated "should allow dup/clone" do
|
|
283
|
-
@model.dup.must_be :<, @model.superclass
|
|
284
|
-
@model.clone.must_be :<, @model.superclass
|
|
285
|
-
end
|
|
286
|
-
|
|
287
259
|
it "should not allow dup/clone" do
|
|
288
|
-
proc{@model.dup}.must_raise
|
|
289
|
-
proc{@model.clone}.must_raise
|
|
290
|
-
end
|
|
260
|
+
proc{@model.dup}.must_raise NoMethodError
|
|
261
|
+
proc{@model.clone}.must_raise NoMethodError
|
|
262
|
+
end
|
|
291
263
|
|
|
292
264
|
it "has table_name return name of table" do
|
|
293
265
|
@model.table_name.must_equal :items
|
|
@@ -328,6 +300,13 @@ describe Sequel::Model do
|
|
|
328
300
|
proc{@model.set_dataset(Object.new)}.must_raise(Sequel::Error)
|
|
329
301
|
end
|
|
330
302
|
|
|
303
|
+
it "set_dataset should use a subquery for joined datasets" do
|
|
304
|
+
@model.set_dataset(DB.from(:foo, :bar))
|
|
305
|
+
@model.dataset.sql.must_equal 'SELECT * FROM (SELECT * FROM foo, bar) AS foo'
|
|
306
|
+
@model.set_dataset(DB[:foo].cross_join(:bar))
|
|
307
|
+
@model.dataset.sql.must_equal 'SELECT * FROM (SELECT * FROM foo CROSS JOIN bar) AS foo'
|
|
308
|
+
end
|
|
309
|
+
|
|
331
310
|
it "set_dataset should add the destroy method to the dataset that destroys each object" do
|
|
332
311
|
ds = DB[:foo]
|
|
333
312
|
ds.wont_respond_to(:destroy)
|
|
@@ -490,11 +469,10 @@ describe Sequel::Model, ".require_valid_table = true" do
|
|
|
490
469
|
c.columns.must_equal [:id]
|
|
491
470
|
end
|
|
492
471
|
|
|
493
|
-
|
|
472
|
+
it "should assume nil value is the same as false" do
|
|
494
473
|
c = Class.new(Sequel::Model)
|
|
495
474
|
c.require_valid_table = nil
|
|
496
|
-
ds = @db.dataset
|
|
497
|
-
def ds.columns; raise Sequel::Error; end
|
|
475
|
+
ds = @db.dataset.with_extend{def columns; raise Sequel::Error; end}
|
|
498
476
|
c.set_dataset(ds)
|
|
499
477
|
end
|
|
500
478
|
end
|
|
@@ -575,36 +553,6 @@ describe Sequel::Model, "new" do
|
|
|
575
553
|
end
|
|
576
554
|
end
|
|
577
555
|
|
|
578
|
-
describe Sequel::Model, ".subset" do
|
|
579
|
-
before do
|
|
580
|
-
@c = Class.new(Sequel::Model(:items))
|
|
581
|
-
DB.reset
|
|
582
|
-
end
|
|
583
|
-
|
|
584
|
-
deprecated "should create a filter on the underlying dataset" do
|
|
585
|
-
proc {@c.new_only}.must_raise(NoMethodError)
|
|
586
|
-
|
|
587
|
-
@c.subset(:new_only){age < 'new'}
|
|
588
|
-
|
|
589
|
-
@c.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
|
|
590
|
-
@c.dataset.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
|
|
591
|
-
|
|
592
|
-
@c.subset(:pricey){price > 100}
|
|
593
|
-
|
|
594
|
-
@c.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
|
|
595
|
-
@c.dataset.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
|
|
596
|
-
|
|
597
|
-
@c.pricey.new_only.sql.must_equal "SELECT * FROM items WHERE ((price > 100) AND (age < 'new'))"
|
|
598
|
-
@c.new_only.pricey.sql.must_equal "SELECT * FROM items WHERE ((age < 'new') AND (price > 100))"
|
|
599
|
-
end
|
|
600
|
-
|
|
601
|
-
deprecated "should not override existing model methods" do
|
|
602
|
-
def @c.active() true end
|
|
603
|
-
@c.subset(:active, :active)
|
|
604
|
-
@c.active.must_equal true
|
|
605
|
-
end
|
|
606
|
-
end
|
|
607
|
-
|
|
608
556
|
describe Sequel::Model, ".find" do
|
|
609
557
|
before do
|
|
610
558
|
@c = Class.new(Sequel::Model(:items))
|
|
@@ -629,242 +577,6 @@ describe Sequel::Model, ".find" do
|
|
|
629
577
|
end
|
|
630
578
|
end
|
|
631
579
|
|
|
632
|
-
describe Sequel::Model, ".first_where" do
|
|
633
|
-
deprecated "should take a condition and do a lookup" do
|
|
634
|
-
db = Sequel.mock(:fetch=>[])
|
|
635
|
-
c = Class.new(Sequel::Model(db[:items]))
|
|
636
|
-
db.sqls
|
|
637
|
-
c.first_where(:a)
|
|
638
|
-
db.sqls.must_equal ['SELECT * FROM items WHERE a LIMIT 1']
|
|
639
|
-
proc{c.first_where(1)}.must_raise Sequel::Error
|
|
640
|
-
end
|
|
641
|
-
end
|
|
642
|
-
|
|
643
|
-
describe Sequel::Model, ".finder" do
|
|
644
|
-
before do
|
|
645
|
-
@h = {:id=>1}
|
|
646
|
-
@db = Sequel.mock(:fetch=>@h)
|
|
647
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
|
648
|
-
@c.instance_eval do
|
|
649
|
-
def foo(a, b)
|
|
650
|
-
where(:bar=>a).order(b)
|
|
651
|
-
end
|
|
652
|
-
end
|
|
653
|
-
@o = @c.load(@h)
|
|
654
|
-
@db.sqls
|
|
655
|
-
end
|
|
656
|
-
|
|
657
|
-
deprecated "should create a method that calls the method given and returns the first instance" do
|
|
658
|
-
@c.finder :foo
|
|
659
|
-
@c.first_foo(1, 2).must_equal @o
|
|
660
|
-
@c.first_foo(3, 4).must_equal @o
|
|
661
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
|
662
|
-
end
|
|
663
|
-
|
|
664
|
-
deprecated "should work correctly when subclassing" do
|
|
665
|
-
@c.finder(:foo)
|
|
666
|
-
@sc = Class.new(@c)
|
|
667
|
-
@sc.set_dataset :foos
|
|
668
|
-
@db.sqls
|
|
669
|
-
@sc.first_foo(1, 2).must_equal @sc.load(@h)
|
|
670
|
-
@sc.first_foo(3, 4).must_equal @sc.load(@h)
|
|
671
|
-
@db.sqls.must_equal ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
|
672
|
-
end
|
|
673
|
-
|
|
674
|
-
deprecated "should work correctly when dataset is modified" do
|
|
675
|
-
@c.finder(:foo)
|
|
676
|
-
@c.first_foo(1, 2).must_equal @o
|
|
677
|
-
@c.set_dataset :foos
|
|
678
|
-
@c.first_foo(3, 4).must_equal @o
|
|
679
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
|
680
|
-
end
|
|
681
|
-
|
|
682
|
-
deprecated "should create a method based on the given block if no method symbol provided" do
|
|
683
|
-
@c.finder(:name=>:first_foo){|pl, ds| ds.where(pl.arg).limit(1)}
|
|
684
|
-
@c.first_foo(:id=>1).must_equal @o
|
|
685
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1"]
|
|
686
|
-
end
|
|
687
|
-
|
|
688
|
-
deprecated "should raise an error if both a block and method symbol given" do
|
|
689
|
-
proc{@c.finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
|
690
|
-
end
|
|
691
|
-
|
|
692
|
-
deprecated "should raise an error if two option hashes are provided" do
|
|
693
|
-
proc{@c.finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
|
694
|
-
end
|
|
695
|
-
|
|
696
|
-
deprecated "should support :type option" do
|
|
697
|
-
@c.finder :foo, :type=>:all
|
|
698
|
-
@c.finder :foo, :type=>:each
|
|
699
|
-
@c.finder :foo, :type=>:get
|
|
700
|
-
|
|
701
|
-
a = []
|
|
702
|
-
@c.all_foo(1, 2){|r| a << r}.must_equal [@o]
|
|
703
|
-
a.must_equal [@o]
|
|
704
|
-
|
|
705
|
-
a = []
|
|
706
|
-
@c.each_foo(3, 4){|r| a << r}
|
|
707
|
-
a.must_equal [@o]
|
|
708
|
-
|
|
709
|
-
@c.get_foo(5, 6).must_equal 1
|
|
710
|
-
|
|
711
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4", "SELECT * FROM items WHERE (bar = 5) ORDER BY 6 LIMIT 1"]
|
|
712
|
-
end
|
|
713
|
-
|
|
714
|
-
deprecated "should support :name option" do
|
|
715
|
-
@c.finder :foo, :name=>:find_foo
|
|
716
|
-
@c.find_foo(1, 2).must_equal @o
|
|
717
|
-
@c.find_foo(3, 4).must_equal @o
|
|
718
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
|
719
|
-
end
|
|
720
|
-
|
|
721
|
-
deprecated "should support :arity option" do
|
|
722
|
-
def @c.foobar(*b)
|
|
723
|
-
ds = dataset
|
|
724
|
-
b.each_with_index do |a, i|
|
|
725
|
-
ds = ds.where(i=>a)
|
|
726
|
-
end
|
|
727
|
-
ds
|
|
728
|
-
end
|
|
729
|
-
@c.finder :foobar, :arity=>1, :name=>:find_foobar_1
|
|
730
|
-
@c.finder :foobar, :arity=>2, :name=>:find_foobar_2
|
|
731
|
-
@c.find_foobar_1(:a)
|
|
732
|
-
@c.find_foobar_2(:a, :b)
|
|
733
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (0 = a) LIMIT 1", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1"]
|
|
734
|
-
end
|
|
735
|
-
|
|
736
|
-
deprecated "should support :mod option" do
|
|
737
|
-
m = Module.new
|
|
738
|
-
@c.finder :foo, :mod=>m
|
|
739
|
-
proc{@c.first_foo}.must_raise NoMethodError
|
|
740
|
-
@c.extend m
|
|
741
|
-
@c.first_foo(1, 2).must_equal @o
|
|
742
|
-
@c.first_foo(3, 4).must_equal @o
|
|
743
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
|
744
|
-
end
|
|
745
|
-
|
|
746
|
-
deprecated "should raise error when calling with the wrong arity" do
|
|
747
|
-
@c.finder :foo
|
|
748
|
-
proc{@c.first_foo(1)}.must_raise Sequel::Error
|
|
749
|
-
proc{@c.first_foo(1,2,3)}.must_raise Sequel::Error
|
|
750
|
-
end
|
|
751
|
-
end
|
|
752
|
-
|
|
753
|
-
describe Sequel::Model, ".prepared_finder" do
|
|
754
|
-
before do
|
|
755
|
-
@h = {:id=>1}
|
|
756
|
-
@db = Sequel.mock(:fetch=>@h)
|
|
757
|
-
@db.extend_datasets do
|
|
758
|
-
def select_sql
|
|
759
|
-
sql = super
|
|
760
|
-
sql << ' -- prepared' if is_a?(Sequel::Dataset::PreparedStatementMethods)
|
|
761
|
-
sql
|
|
762
|
-
end
|
|
763
|
-
end
|
|
764
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
|
765
|
-
@c.instance_eval do
|
|
766
|
-
def foo(a, b)
|
|
767
|
-
where(:bar=>a).order(b)
|
|
768
|
-
end
|
|
769
|
-
end
|
|
770
|
-
@o = @c.load(@h)
|
|
771
|
-
@db.sqls
|
|
772
|
-
end
|
|
773
|
-
|
|
774
|
-
deprecated "should create a method that calls the method given and returns the first instance" do
|
|
775
|
-
@c.prepared_finder :foo
|
|
776
|
-
@c.first_foo(1, 2).must_equal @o
|
|
777
|
-
@c.first_foo(3, 4).must_equal @o
|
|
778
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
|
779
|
-
end
|
|
780
|
-
|
|
781
|
-
deprecated "should work correctly when subclassing" do
|
|
782
|
-
@c.prepared_finder(:foo)
|
|
783
|
-
@sc = Class.new(@c)
|
|
784
|
-
@sc.set_dataset :foos
|
|
785
|
-
@db.sqls
|
|
786
|
-
@sc.first_foo(1, 2).must_equal @sc.load(@h)
|
|
787
|
-
@sc.first_foo(3, 4).must_equal @sc.load(@h)
|
|
788
|
-
@db.sqls.must_equal ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
|
789
|
-
end
|
|
790
|
-
|
|
791
|
-
deprecated "should work correctly when dataset is modified" do
|
|
792
|
-
@c.prepared_finder(:foo)
|
|
793
|
-
@c.first_foo(1, 2).must_equal @o
|
|
794
|
-
@c.set_dataset :foos
|
|
795
|
-
@c.first_foo(3, 4).must_equal @o
|
|
796
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
|
797
|
-
end
|
|
798
|
-
|
|
799
|
-
deprecated "should create a method based on the given block if no method symbol provided" do
|
|
800
|
-
@c.prepared_finder(:name=>:first_foo){|a1| where(:id=>a1).limit(1)}
|
|
801
|
-
@c.first_foo(1).must_equal @o
|
|
802
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1 -- prepared"]
|
|
803
|
-
end
|
|
804
|
-
|
|
805
|
-
deprecated "should raise an error if both a block and method symbol given" do
|
|
806
|
-
proc{@c.prepared_finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
|
807
|
-
end
|
|
808
|
-
|
|
809
|
-
deprecated "should raise an error if two option hashes are provided" do
|
|
810
|
-
proc{@c.prepared_finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
|
811
|
-
end
|
|
812
|
-
|
|
813
|
-
deprecated "should support :type option" do
|
|
814
|
-
@c.prepared_finder :foo, :type=>:all
|
|
815
|
-
@c.prepared_finder :foo, :type=>:each
|
|
816
|
-
|
|
817
|
-
a = []
|
|
818
|
-
@c.all_foo(1, 2){|r| a << r}.must_equal [@o]
|
|
819
|
-
a.must_equal [@o]
|
|
820
|
-
|
|
821
|
-
a = []
|
|
822
|
-
@c.each_foo(3, 4){|r| a << r}
|
|
823
|
-
a.must_equal [@o]
|
|
824
|
-
|
|
825
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 -- prepared"]
|
|
826
|
-
end
|
|
827
|
-
|
|
828
|
-
deprecated "should support :name option" do
|
|
829
|
-
@c.prepared_finder :foo, :name=>:find_foo
|
|
830
|
-
@c.find_foo(1, 2).must_equal @o
|
|
831
|
-
@c.find_foo(3, 4).must_equal @o
|
|
832
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
|
833
|
-
end
|
|
834
|
-
|
|
835
|
-
deprecated "should support :arity option" do
|
|
836
|
-
def @c.foobar(*b)
|
|
837
|
-
ds = dataset
|
|
838
|
-
b.each_with_index do |a, i|
|
|
839
|
-
ds = ds.where(i=>a)
|
|
840
|
-
end
|
|
841
|
-
ds
|
|
842
|
-
end
|
|
843
|
-
@c.prepared_finder :foobar, :arity=>1, :name=>:find_foobar_1
|
|
844
|
-
@c.prepared_finder :foobar, :arity=>2, :name=>:find_foobar_2
|
|
845
|
-
@c.find_foobar_1(:a)
|
|
846
|
-
@c.find_foobar_2(:a, :b)
|
|
847
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (0 = a) LIMIT 1 -- prepared", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1 -- prepared"]
|
|
848
|
-
end
|
|
849
|
-
|
|
850
|
-
deprecated "should support :mod option" do
|
|
851
|
-
m = Module.new
|
|
852
|
-
@c.prepared_finder :foo, :mod=>m
|
|
853
|
-
proc{@c.first_foo}.must_raise NoMethodError
|
|
854
|
-
@c.extend m
|
|
855
|
-
@c.first_foo(1, 2).must_equal @o
|
|
856
|
-
@c.first_foo(3, 4).must_equal @o
|
|
857
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
|
858
|
-
end
|
|
859
|
-
|
|
860
|
-
deprecated "should handle models with names" do
|
|
861
|
-
def @c.name; 'foobar' end
|
|
862
|
-
@c.prepared_finder :foo
|
|
863
|
-
@c.first_foo(1, 2).must_equal @o
|
|
864
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared"]
|
|
865
|
-
end
|
|
866
|
-
end
|
|
867
|
-
|
|
868
580
|
describe Sequel::Model, ".fetch" do
|
|
869
581
|
before do
|
|
870
582
|
DB.reset
|
|
@@ -912,10 +624,9 @@ describe Sequel::Model, ".find_or_create" do
|
|
|
912
624
|
@db.fetch = [[], {:x=>1, :id=>1}]
|
|
913
625
|
@db.autoid = 1
|
|
914
626
|
@c.find_or_create(:x => 1){|x| x[:y] = 2}.must_equal @c.load(:x=>1, :id=>1)
|
|
915
|
-
sqls =
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
sqls.last.must_equal "SELECT * FROM items WHERE id = 1"
|
|
627
|
+
@db.sqls.must_equal ["SELECT * FROM items WHERE (x = 1) LIMIT 1",
|
|
628
|
+
"INSERT INTO items (x, y) VALUES (1, 2)",
|
|
629
|
+
"SELECT * FROM items WHERE id = 1"]
|
|
919
630
|
end
|
|
920
631
|
end
|
|
921
632
|
|
|
@@ -973,17 +684,12 @@ describe Sequel::Model, "attribute accessors" do
|
|
|
973
684
|
end
|
|
974
685
|
|
|
975
686
|
it "should be created on set_dataset" do
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
end
|
|
687
|
+
a = [:x, :z, :x= ,:z=]
|
|
688
|
+
(a - @c.instance_methods).must_equal a
|
|
979
689
|
@c.set_dataset(@dataset)
|
|
980
|
-
|
|
981
|
-
@c.instance_methods.collect{|z| z.to_s}.must_include(x)
|
|
982
|
-
end
|
|
690
|
+
(a - @c.instance_methods).must_equal []
|
|
983
691
|
o = @c.new
|
|
984
|
-
|
|
985
|
-
o.methods.collect{|z| z.to_s}.must_include(x)
|
|
986
|
-
end
|
|
692
|
+
(a - o.methods).must_equal []
|
|
987
693
|
|
|
988
694
|
o.x.must_be_nil
|
|
989
695
|
o.x = 34
|
|
@@ -1046,12 +752,6 @@ describe Sequel::Model, ".[]" do
|
|
|
1046
752
|
DB.sqls.must_equal ["SELECT * FROM items WHERE name = 'sharon'"]
|
|
1047
753
|
end
|
|
1048
754
|
|
|
1049
|
-
deprecated "should use a qualified primary key if the dataset is joined" do
|
|
1050
|
-
@c.dataset = @c.dataset.cross_join(:a)
|
|
1051
|
-
@c[1].must_equal @c.load(:name => 'sharon', :id => 1)
|
|
1052
|
-
DB.sqls.must_equal ["SELECT * FROM items CROSS JOIN a WHERE (items.id = 1) LIMIT 1"]
|
|
1053
|
-
end
|
|
1054
|
-
|
|
1055
755
|
it "should handle a dataset that uses a subquery" do
|
|
1056
756
|
@c.dataset = @c.dataset.cross_join(:a).from_self(:alias=>:b)
|
|
1057
757
|
@c[1].must_equal @c.load(:name => 'sharon', :id => 1)
|
|
@@ -1061,9 +761,7 @@ describe Sequel::Model, ".[]" do
|
|
|
1061
761
|
it "should work correctly for composite primary key specified as array" do
|
|
1062
762
|
@c.set_primary_key [:node_id, :kind]
|
|
1063
763
|
@c[3921, 201].must_be_kind_of(@c)
|
|
1064
|
-
sqls =
|
|
1065
|
-
sqls.length.must_equal 1
|
|
1066
|
-
sqls.first.must_match(/^SELECT \* FROM items WHERE \((\(node_id = 3921\) AND \(kind = 201\))|(\(kind = 201\) AND \(node_id = 3921\))\) LIMIT 1$/)
|
|
764
|
+
DB.sqls.must_equal ['SELECT * FROM items WHERE ((node_id = 3921) AND (kind = 201)) LIMIT 1']
|
|
1067
765
|
end
|
|
1068
766
|
end
|
|
1069
767
|
|
|
@@ -1122,14 +820,6 @@ describe "Model.db_schema" do
|
|
|
1122
820
|
@c.db_schema.must_equal(:x=>{:type=>:integer}, :z=>{}, :y=>{:type=>:string})
|
|
1123
821
|
end
|
|
1124
822
|
|
|
1125
|
-
deprecated "should not raise error if setting dataset where getting schema and columns raises an error" do
|
|
1126
|
-
def @db.schema(table, opts={})
|
|
1127
|
-
raise Sequel::Error
|
|
1128
|
-
end
|
|
1129
|
-
@c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
|
|
1130
|
-
@c.db_schema.must_equal(:x=>{}, :id=>{})
|
|
1131
|
-
end
|
|
1132
|
-
|
|
1133
823
|
it "should not raise error if setting dataset where getting schema and columns raises an error and require_valid_table is false" do
|
|
1134
824
|
@c.require_valid_table = false
|
|
1135
825
|
def @db.schema(table, opts={})
|
data/spec/model/plugins_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, ".plugin" do
|
|
4
4
|
before do
|
|
@@ -307,7 +307,7 @@ describe "Sequel::Model.plugin" do
|
|
|
307
307
|
it "should try loading plugins from sequel/plugins/:plugin" do
|
|
308
308
|
a = []
|
|
309
309
|
m = Module.new
|
|
310
|
-
|
|
310
|
+
@c.define_singleton_method(:require) do |b|
|
|
311
311
|
a << b
|
|
312
312
|
Sequel::Plugins.const_set(:SomethingOrOther, m)
|
|
313
313
|
end
|
|
@@ -315,18 +315,4 @@ describe "Sequel::Model.plugin" do
|
|
|
315
315
|
@c.plugins.must_include m
|
|
316
316
|
a.must_equal ['sequel/plugins/something_or_other']
|
|
317
317
|
end
|
|
318
|
-
|
|
319
|
-
deprecated "should try loading plugins from sequel_plugin" do
|
|
320
|
-
proc{@c.plugin :something_or_other}.must_raise(LoadError)
|
|
321
|
-
a = []
|
|
322
|
-
m = Module.new
|
|
323
|
-
(class << @c; self end).send(:define_method, :require) do |b|
|
|
324
|
-
a << b
|
|
325
|
-
raise LoadError if b == 'sequel/plugins/something_or_other'
|
|
326
|
-
Sequel::Plugins.const_set(:SomethingOrOther, m)
|
|
327
|
-
end
|
|
328
|
-
@c.plugin :something_or_other
|
|
329
|
-
@c.plugins.must_include m
|
|
330
|
-
a.must_equal ['sequel/plugins/something_or_other', 'sequel_something_or_other']
|
|
331
|
-
end
|
|
332
318
|
end
|