sequel 4.36.0 → 5.61.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 +5 -5
- data/CHANGELOG +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- 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.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -203
- data/spec/core/schema_spec.rb +0 -1676
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -728
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -65
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -390
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -275
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -473
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -814
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/uuid_spec.rb +0 -106
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -554
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "sharding plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:numrows=>1, :autoid=>proc{1}, :servers=>{:s1=>{}, :s2=>{}, :s3=>{}, :s4=>{}})
|
|
6
|
-
@Artist = Class.new(Sequel::Model(@db[:artists]))
|
|
7
|
-
@Artist.class_eval do
|
|
8
|
-
instance_dataset._fetch = dataset._fetch = {:id=>2, :name=>'YJM'}
|
|
9
|
-
columns :id, :name
|
|
10
|
-
plugin :sharding
|
|
11
|
-
end
|
|
12
|
-
@Album = Class.new(Sequel::Model(@db[:albums]))
|
|
13
|
-
@Album.class_eval do
|
|
14
|
-
instance_dataset._fetch = dataset._fetch = {:id=>1, :name=>'RF', :artist_id=>2}
|
|
15
|
-
columns :id, :artist_id, :name
|
|
16
|
-
plugin :sharding
|
|
17
|
-
end
|
|
18
|
-
@Tag = Class.new(Sequel::Model(@db[:tags]))
|
|
19
|
-
@Tag.class_eval do
|
|
20
|
-
instance_dataset._fetch = dataset._fetch = {:id=>3, :name=>'M'}
|
|
21
|
-
columns :id, :name
|
|
22
|
-
plugin :sharding
|
|
23
|
-
end
|
|
24
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
25
|
-
@Album.many_to_one :artist, :class=>@Artist
|
|
26
|
-
@Album.many_to_many :tags, :class=>@Tag, :left_key=>:album_id, :right_key=>:tag_id, :join_table=>:albums_tags
|
|
27
|
-
@db.sqls
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should allow you to instantiate a new object for a specified shard" do
|
|
31
|
-
@Album.new_using_server(:s1, :name=>'RF').save
|
|
32
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
|
|
33
|
-
|
|
34
|
-
@Album.new_using_server(:s2){|o| o.name = 'MO'}.save
|
|
35
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should allow you to create and save a new object for a specified shard" do
|
|
39
|
-
@Album.create_using_server(:s1, :name=>'RF')
|
|
40
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
|
|
41
|
-
|
|
42
|
-
@Album.create_using_server(:s2){|o| o.name = 'MO'}
|
|
43
|
-
@db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should have objects retrieved from a specific shard update that shard" do
|
|
47
|
-
@Album.server(:s1).first.update(:name=>'MO')
|
|
48
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s1"]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should have objects retrieved from a specific shard delete from that shard" do
|
|
52
|
-
@Album.server(:s1).first.delete
|
|
53
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "DELETE FROM albums WHERE (id = 1) -- s1"]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should have objects retrieved from a specific shard reload from that shard" do
|
|
57
|
-
@Album.server(:s1).first.reload
|
|
58
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should use current dataset's shard when eager loading if eagerly loaded dataset doesn't have its own shard" do
|
|
62
|
-
albums = @Album.server(:s1).eager(:artist).all
|
|
63
|
-
@db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s1"]
|
|
64
|
-
albums.length.must_equal 1
|
|
65
|
-
albums.first.artist.save
|
|
66
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "should not use current dataset's shard when eager loading if eagerly loaded dataset has its own shard" do
|
|
70
|
-
@Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
|
|
71
|
-
albums = @Album.server(:s1).eager(:artist).all
|
|
72
|
-
@db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s2"]
|
|
73
|
-
albums.length.must_equal 1
|
|
74
|
-
albums.first.artist.save
|
|
75
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should use current dataset's shard when eager graphing if eagerly graphed dataset doesn't have its own shard" do
|
|
79
|
-
ds = @Album.server(:s1).eager_graph(:artist)
|
|
80
|
-
ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
|
|
81
|
-
albums = ds.all
|
|
82
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
|
|
83
|
-
albums.length.must_equal 1
|
|
84
|
-
albums.first.artist.save
|
|
85
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "should not use current dataset's shard when eager graphing if eagerly graphed dataset has its own shard" do
|
|
89
|
-
@Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
|
|
90
|
-
ds = @Album.server(:s1).eager_graph(:artist)
|
|
91
|
-
ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
|
|
92
|
-
albums = ds.all
|
|
93
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
|
|
94
|
-
albums.length.must_equal 1
|
|
95
|
-
albums.first.artist.save
|
|
96
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "should use eagerly graphed dataset shard for eagerly graphed objects even if current dataset does not have a shard" do
|
|
100
|
-
@Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
|
|
101
|
-
ds = @Album.eager_graph(:artist)
|
|
102
|
-
ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
|
|
103
|
-
albums = ds.all
|
|
104
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id)"]
|
|
105
|
-
albums.length.must_equal 1
|
|
106
|
-
albums.first.artist.save
|
|
107
|
-
@db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "should have objects retrieved from a specific shard use associated objects from that shard, with modifications to the associated objects using that shard" do
|
|
111
|
-
album = @Album.server(:s1).first
|
|
112
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1"]
|
|
113
|
-
album.artist.update(:name=>'AS')
|
|
114
|
-
@db.sqls.must_equal ["SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1 -- s1", "UPDATE artists SET name = 'AS' WHERE (id = 2) -- s1"]
|
|
115
|
-
album.tags.map{|a| a.update(:name=>'SR')}
|
|
116
|
-
@db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- s1", "UPDATE tags SET name = 'SR' WHERE (id = 3) -- s1"]
|
|
117
|
-
@Artist.server(:s2).first.albums.map{|a| a.update(:name=>'MO')}
|
|
118
|
-
@db.sqls.must_equal ["SELECT * FROM artists LIMIT 1 -- s2", "SELECT * FROM albums WHERE (albums.artist_id = 2) -- s2", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s2"]
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should have objects retrieved from a specific shard add associated objects to that shard" do
|
|
122
|
-
album = @Album.server(:s1).first
|
|
123
|
-
artist = @Artist.server(:s2).first
|
|
124
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
125
|
-
|
|
126
|
-
artist.add_album(:name=>'MO')
|
|
127
|
-
sqls = @db.sqls
|
|
128
|
-
["INSERT INTO albums (artist_id, name) VALUES (2, 'MO') -- s2", "INSERT INTO albums (name, artist_id) VALUES ('MO', 2) -- s2"].must_include(sqls.shift)
|
|
129
|
-
sqls.must_equal ["SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
130
|
-
|
|
131
|
-
album.add_tag(:name=>'SR')
|
|
132
|
-
sqls = @db.sqls
|
|
133
|
-
["INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3) -- s1", "INSERT INTO albums_tags (tag_id, album_id) VALUES (3, 1) -- s1"].must_include(sqls.pop)
|
|
134
|
-
sqls.must_equal ["INSERT INTO tags (name) VALUES ('SR') -- s1", "SELECT * FROM tags WHERE (id = 1) LIMIT 1 -- s1", ]
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should have objects retrieved from a specific shard remove associated objects from that shard" do
|
|
138
|
-
album = @Album.server(:s1).first
|
|
139
|
-
artist = @Artist.server(:s2).first
|
|
140
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
141
|
-
|
|
142
|
-
artist.remove_album(1)
|
|
143
|
-
sqls = @db.sqls
|
|
144
|
-
["UPDATE albums SET artist_id = NULL, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = NULL WHERE (id = 1) -- s2"].must_include(sqls.pop)
|
|
145
|
-
sqls.must_equal ["SELECT * FROM albums WHERE ((albums.artist_id = 2) AND (albums.id = 1)) LIMIT 1 -- s2"]
|
|
146
|
-
|
|
147
|
-
album.remove_tag(3)
|
|
148
|
-
@db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE ((albums_tags.album_id = 1) AND (tags.id = 3)) LIMIT 1 -- s1", "DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id = 3)) -- s1"]
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it "should have objects retrieved from a specific shard remove all associated objects from that shard" do
|
|
152
|
-
album = @Album.server(:s1).first
|
|
153
|
-
artist = @Artist.server(:s2).first
|
|
154
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
155
|
-
|
|
156
|
-
artist.remove_all_albums
|
|
157
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = NULL WHERE (artist_id = 2) -- s2"]
|
|
158
|
-
|
|
159
|
-
album.remove_all_tags
|
|
160
|
-
@db.sqls.must_equal ["DELETE FROM albums_tags WHERE (album_id = 1) -- s1"]
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should not override a server already set on an associated object" do
|
|
164
|
-
@Album.server(:s1).first
|
|
165
|
-
artist = @Artist.server(:s2).first
|
|
166
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
|
|
167
|
-
|
|
168
|
-
artist.add_album(@Album.load(:id=>4, :name=>'MO').set_server(:s3))
|
|
169
|
-
["UPDATE albums SET artist_id = 2, name = 'MO' WHERE (id = 4) -- s3", "UPDATE albums SET name = 'MO', artist_id = 2 WHERE (id = 4) -- s3"].must_include(@db.sqls.pop)
|
|
170
|
-
|
|
171
|
-
artist.remove_album(@Album.load(:id=>5, :name=>'T', :artist_id=>2).set_server(:s4))
|
|
172
|
-
# Should select from current object's shard to check existing association, but update associated object's shard
|
|
173
|
-
sqls = @db.sqls
|
|
174
|
-
["UPDATE albums SET artist_id = NULL, name = 'T' WHERE (id = 5) -- s4", "UPDATE albums SET name = 'T', artist_id = NULL WHERE (id = 5) -- s4"].must_include(sqls.pop)
|
|
175
|
-
sqls.must_equal ["SELECT 1 AS one FROM albums WHERE ((albums.artist_id = 2) AND (id = 5)) LIMIT 1 -- s2"]
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it "should be able to set a shard to use for any object using set_server" do
|
|
179
|
-
@Album.server(:s1).first.set_server(:s2).reload
|
|
180
|
-
@db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
it "should use transactions on the correct shard" do
|
|
184
|
-
@Album.use_transactions = true
|
|
185
|
-
@Album.server(:s2).first.save
|
|
186
|
-
sqls = @db.sqls
|
|
187
|
-
["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s2"].must_include(sqls.slice!(2))
|
|
188
|
-
sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s2", "COMMIT -- s2"]
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
it "should use override current shard when saving with given :server option" do
|
|
192
|
-
@Album.use_transactions = true
|
|
193
|
-
@Album.server(:s2).first.save(:server=>:s1)
|
|
194
|
-
sqls = @db.sqls
|
|
195
|
-
["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s1", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s1"].must_include(sqls.slice!(2))
|
|
196
|
-
sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s1", "COMMIT -- s1"]
|
|
197
|
-
end
|
|
198
|
-
end
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "Shared caching behavior" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock
|
|
6
|
-
|
|
7
|
-
class ::LookupModel < ::Sequel::Model(@db)
|
|
8
|
-
columns :id, :caching_model_id, :caching_model_id2
|
|
9
|
-
many_to_one :caching_model
|
|
10
|
-
many_to_one :caching_model2, :key=>[:caching_model_id, :caching_model_id2], :class=>:CachingModel
|
|
11
|
-
end
|
|
12
|
-
@c = LookupModel
|
|
13
|
-
|
|
14
|
-
class ::CachingModel < Sequel::Model(@db)
|
|
15
|
-
columns :id, :id2
|
|
16
|
-
end
|
|
17
|
-
@cc = CachingModel
|
|
18
|
-
end
|
|
19
|
-
after do
|
|
20
|
-
Object.send(:remove_const, :CachingModel)
|
|
21
|
-
Object.send(:remove_const, :LookupModel)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
many_to_one_cpk_specs = shared_description do
|
|
25
|
-
it "should use a simple primary key lookup when retrieving many_to_one associated records with a composite key" do
|
|
26
|
-
@db.sqls.must_equal []
|
|
27
|
-
@c.load(:id=>3, :caching_model_id=>1, :caching_model_id2=>2).caching_model2.must_be_same_as(@cm12)
|
|
28
|
-
@c.load(:id=>3, :caching_model_id=>2, :caching_model_id2=>1).caching_model2.must_be_same_as(@cm21)
|
|
29
|
-
@db.sqls.must_equal []
|
|
30
|
-
@db.fetch = []
|
|
31
|
-
@c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.must_equal nil
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
many_to_one_pk_specs = shared_description do
|
|
36
|
-
it "should use a simple primary key lookup when retrieving many_to_one associated records" do
|
|
37
|
-
@cc.set_primary_key([:id, :id2])
|
|
38
|
-
@db.sqls.must_equal []
|
|
39
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model.must_be_same_as(@cm1)
|
|
40
|
-
@c.load(:id=>4, :caching_model_id=>2).caching_model.must_be_same_as(@cm2)
|
|
41
|
-
@db.sqls.must_equal []
|
|
42
|
-
@db.fetch = []
|
|
43
|
-
@c.load(:id=>4, :caching_model_id=>3).caching_model.must_equal nil
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should not use a simple primary key lookup if the assocation has a nil :key option" do
|
|
47
|
-
@c.many_to_one :caching_model, :key=>nil, :dataset=>proc{CachingModel.filter(:caching_model_id=>caching_model_id)}
|
|
48
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
49
|
-
@db.sqls.wont_equal []
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should not use a simple primary key lookup if the assocation has a nil :key option" do
|
|
53
|
-
@c.many_to_one :caching_model, :many_to_one_pk_lookup=>false
|
|
54
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
55
|
-
@db.sqls.wont_equal []
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should not use a simple primary key lookup if the assocation's :primary_key option doesn't match the primary key of the associated class" do
|
|
59
|
-
@c.many_to_one :caching_model, :primary_key=>:id2
|
|
60
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
61
|
-
@db.sqls.wont_equal []
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should not use a simple primary key lookup if the assocation has :conditions" do
|
|
65
|
-
@c.many_to_one :caching_model, :conditions=>{:a=>1}
|
|
66
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
67
|
-
@db.sqls.wont_equal []
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should not use a simple primary key lookup if the assocation has :select" do
|
|
71
|
-
@c.many_to_one :caching_model, :select=>[:a, :b]
|
|
72
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
73
|
-
@db.sqls.wont_equal []
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should not use a simple primary key lookup if the assocation has a block" do
|
|
77
|
-
@c.many_to_one(:caching_model){|ds| ds.where{a > 1}}
|
|
78
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
79
|
-
@db.sqls.wont_equal []
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should not use a simple primary key lookup if the assocation has a non-default :dataset option" do
|
|
83
|
-
cc = @cc
|
|
84
|
-
@c.many_to_one :caching_model, :dataset=>proc{cc.where(:id=>caching_model_id)}
|
|
85
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
86
|
-
@db.sqls.wont_equal []
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should use a simple primary key lookup if explicitly set" do
|
|
90
|
-
@c.many_to_one :caching_model, :select=>[:a, :b], :many_to_one_pk_lookup=>true
|
|
91
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
92
|
-
@db.sqls.must_equal []
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should not use a simple primary key lookup if the prepared_statements_associations method is being used" do
|
|
96
|
-
c2 = Class.new(Sequel::Model(@db[:not_caching_model]))
|
|
97
|
-
c2.dataset._fetch = {:id=>1}
|
|
98
|
-
c = Class.new(Sequel::Model(@db[:lookup_model]))
|
|
99
|
-
c.class_eval do
|
|
100
|
-
plugin :prepared_statements_associations
|
|
101
|
-
columns :id, :caching_model_id
|
|
102
|
-
many_to_one :caching_model, :class=>c2
|
|
103
|
-
end
|
|
104
|
-
c.load(:id=>3, :caching_model_id=>1).caching_model.must_equal c2.load(:id=>1)
|
|
105
|
-
@db.sqls.wont_equal []
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "should use a simple primary key lookup if the prepared_statements_associations method is being used but associated model also uses caching" do
|
|
109
|
-
c = Class.new(Sequel::Model(:lookup_model))
|
|
110
|
-
c.class_eval do
|
|
111
|
-
plugin :prepared_statements_associations
|
|
112
|
-
columns :id, :caching_model_id
|
|
113
|
-
many_to_one :caching_model
|
|
114
|
-
end
|
|
115
|
-
c.load(:id=>3, :caching_model_id=>1).caching_model.must_be_same_as(@cm1)
|
|
116
|
-
@db.sqls.must_equal []
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
describe "With caching plugin" do
|
|
121
|
-
before do
|
|
122
|
-
@cache_class = Class.new(Hash) do
|
|
123
|
-
attr_accessor :ttl
|
|
124
|
-
def set(k, v, ttl); self[k] = v; @ttl = ttl; end
|
|
125
|
-
def get(k); self[k]; end
|
|
126
|
-
end
|
|
127
|
-
cache = @cache_class.new
|
|
128
|
-
@cache = cache
|
|
129
|
-
|
|
130
|
-
@cc.plugin :caching, @cache
|
|
131
|
-
@db.fetch = {:id=>1}
|
|
132
|
-
@cm1 = @cc[1]
|
|
133
|
-
@cm2 = @cc[2]
|
|
134
|
-
@cm12 = @cc[1, 2]
|
|
135
|
-
@cm21 = @cc[2, 1]
|
|
136
|
-
|
|
137
|
-
@db.sqls
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
include many_to_one_cpk_specs
|
|
141
|
-
include many_to_one_pk_specs
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
describe "With static_cache plugin with single key" do
|
|
145
|
-
before do
|
|
146
|
-
@db.fetch = [{:id=>1}, {:id=>2}]
|
|
147
|
-
@cc.plugin :static_cache
|
|
148
|
-
@cm1 = @cc[1]
|
|
149
|
-
@cm2 = @cc[2]
|
|
150
|
-
@db.sqls
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
include many_to_one_pk_specs
|
|
154
|
-
|
|
155
|
-
it "should not issue regular query if primary key lookup returns no rows" do
|
|
156
|
-
def @cc.primary_key_lookup(pk); end
|
|
157
|
-
@c.many_to_one :caching_model
|
|
158
|
-
@c.load(:id=>3, :caching_model_id=>1).caching_model
|
|
159
|
-
@db.sqls.must_equal []
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
describe "With static_cache plugin with composite key" do
|
|
164
|
-
before do
|
|
165
|
-
@cc.set_primary_key([:id, :id2])
|
|
166
|
-
@db.fetch = [{:id=>1, :id2=>2}, {:id=>2, :id2=>1}]
|
|
167
|
-
@cc.plugin :static_cache
|
|
168
|
-
@cm12 = @cc[[1, 2]]
|
|
169
|
-
@cm21 = @cc[[2, 1]]
|
|
170
|
-
@db.sqls
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
include many_to_one_cpk_specs
|
|
174
|
-
end
|
|
175
|
-
end
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe Sequel::Model, "single table inheritance plugin" do
|
|
4
|
-
before do
|
|
5
|
-
class ::StiTest < Sequel::Model
|
|
6
|
-
columns :id, :kind, :blah
|
|
7
|
-
plugin :single_table_inheritance, :kind
|
|
8
|
-
end
|
|
9
|
-
class ::StiTestSub1 < StiTest
|
|
10
|
-
end
|
|
11
|
-
class ::StiTestSub2 < StiTest
|
|
12
|
-
end
|
|
13
|
-
@ds = StiTest.dataset
|
|
14
|
-
DB.reset
|
|
15
|
-
end
|
|
16
|
-
after do
|
|
17
|
-
Object.send(:remove_const, :StiTestSub1)
|
|
18
|
-
Object.send(:remove_const, :StiTestSub2)
|
|
19
|
-
Object.send(:remove_const, :StiTest)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should have simple_table = nil" do
|
|
23
|
-
StiTest.simple_table.must_equal "sti_tests"
|
|
24
|
-
StiTestSub1.simple_table.must_equal nil
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should allow changing the inheritance column via a plugin :single_table_inheritance call" do
|
|
28
|
-
StiTest.plugin :single_table_inheritance, :blah
|
|
29
|
-
Object.send(:remove_const, :StiTestSub1)
|
|
30
|
-
Object.send(:remove_const, :StiTestSub2)
|
|
31
|
-
class ::StiTestSub1 < StiTest; end
|
|
32
|
-
class ::StiTestSub2 < StiTest; end
|
|
33
|
-
@ds._fetch = [{:blah=>'StiTest'}, {:blah=>'StiTestSub1'}, {:blah=>'StiTestSub2'}]
|
|
34
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTestSub1, StiTestSub2]
|
|
35
|
-
StiTest.dataset.sql.must_equal "SELECT * FROM sti_tests"
|
|
36
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.blah IN ('StiTestSub1'))"
|
|
37
|
-
StiTestSub2.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.blah IN ('StiTestSub2'))"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should return rows with the correct class based on the polymorphic_key value" do
|
|
41
|
-
@ds._fetch = [{:kind=>'StiTest'}, {:kind=>'StiTestSub1'}, {:kind=>'StiTestSub2'}]
|
|
42
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTestSub1, StiTestSub2]
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should return rows with the correct class based on the polymorphic_key value when retreiving by primary key" do
|
|
46
|
-
@ds._fetch = [{:kind=>'StiTestSub1'}]
|
|
47
|
-
StiTest[1].class.must_equal StiTestSub1
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should return rows with the correct class for subclasses based on the polymorphic_key value" do
|
|
51
|
-
class ::StiTestSub1Sub < StiTestSub1; end
|
|
52
|
-
StiTestSub1.dataset._fetch = [{:kind=>'StiTestSub1'}, {:kind=>'StiTestSub1Sub'}]
|
|
53
|
-
StiTestSub1.all.collect{|x| x.class}.must_equal [StiTestSub1, StiTestSub1Sub]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should fallback to the main class if the given class does not exist" do
|
|
57
|
-
@ds._fetch = {:kind=>'StiTestSub3'}
|
|
58
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest]
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should fallback to the main class if the sti_key field is empty or nil without calling constantize" do
|
|
62
|
-
called = false
|
|
63
|
-
StiTest.meta_def(:constantize) do |s|
|
|
64
|
-
called = true
|
|
65
|
-
Object
|
|
66
|
-
end
|
|
67
|
-
StiTest.plugin :single_table_inheritance, :kind
|
|
68
|
-
@ds._fetch = [{:kind=>''}, {:kind=>nil}]
|
|
69
|
-
StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTest]
|
|
70
|
-
called.must_equal false
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should set the model class name when saving" do
|
|
74
|
-
StiTest.new.save
|
|
75
|
-
StiTestSub1.new.save
|
|
76
|
-
StiTestSub2.new.save
|
|
77
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (kind) VALUES ('StiTest')", "SELECT * FROM sti_tests WHERE (id = 10) LIMIT 1", "INSERT INTO sti_tests (kind) VALUES ('StiTestSub1')", "SELECT * FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub1')) AND (id = 10)) LIMIT 1", "INSERT INTO sti_tests (kind) VALUES ('StiTestSub2')", "SELECT * FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub2')) AND (id = 10)) LIMIT 1"]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should destroy the model correctly" do
|
|
81
|
-
StiTest.load(:id=>1).destroy
|
|
82
|
-
StiTestSub1.load(:id=>1).destroy
|
|
83
|
-
StiTestSub2.load(:id=>1).destroy
|
|
84
|
-
DB.sqls.must_equal ["DELETE FROM sti_tests WHERE id = 1", "DELETE FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub1')) AND (id = 1))", "DELETE FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub2')) AND (id = 1))"]
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should handle validations on the type column field" do
|
|
88
|
-
o = StiTestSub1.new
|
|
89
|
-
def o.validate
|
|
90
|
-
errors.add(:kind, 'not present') unless kind
|
|
91
|
-
end
|
|
92
|
-
o.valid?.must_equal true
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should set type column field even if validations are skipped" do
|
|
96
|
-
StiTestSub1.new.save(:validate=>false)
|
|
97
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (kind) VALUES ('StiTestSub1')", "SELECT * FROM sti_tests WHERE ((sti_tests.kind IN ('StiTestSub1')) AND (id = 10)) LIMIT 1"]
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "should override an existing value in the class name field" do
|
|
101
|
-
StiTest.create(:kind=>'StiTestSub1')
|
|
102
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (kind) VALUES ('StiTestSub1')", "SELECT * FROM sti_tests WHERE (id = 10) LIMIT 1"]
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "should handle type column with the same name as existing method names" do
|
|
106
|
-
StiTest.plugin :single_table_inheritance, :type
|
|
107
|
-
StiTest.columns :id, :type
|
|
108
|
-
StiTest.create
|
|
109
|
-
DB.sqls.must_equal ["INSERT INTO sti_tests (type) VALUES ('StiTest')", "SELECT * FROM sti_tests WHERE (id = 10) LIMIT 1"]
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should add a filter to model datasets inside subclasses hook to only retreive objects with the matching key" do
|
|
113
|
-
StiTest.dataset.sql.must_equal "SELECT * FROM sti_tests"
|
|
114
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1'))"
|
|
115
|
-
StiTestSub2.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub2'))"
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should add a correct filter for multiple levels of subclasses" do
|
|
119
|
-
class ::StiTestSub1A < StiTestSub1; end
|
|
120
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1', 'StiTestSub1A'))"
|
|
121
|
-
StiTestSub1A.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1A'))"
|
|
122
|
-
class ::StiTestSub2A < StiTestSub2; end
|
|
123
|
-
StiTestSub2.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub2', 'StiTestSub2A'))"
|
|
124
|
-
StiTestSub2A.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub2A'))"
|
|
125
|
-
class ::StiTestSub1B < StiTestSub1A; end
|
|
126
|
-
StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1', 'StiTestSub1A', 'StiTestSub1B'))"
|
|
127
|
-
StiTestSub1A.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1A', 'StiTestSub1B'))"
|
|
128
|
-
StiTestSub1B.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.kind IN ('StiTestSub1B'))"
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it "should work correctly with the :caching plugin" do
|
|
132
|
-
cache_class = Class.new(Hash) do
|
|
133
|
-
attr_accessor :ttl
|
|
134
|
-
def set(k, v, ttl); self[k] = v; @ttl = ttl; end
|
|
135
|
-
def get(k); self[k]; end
|
|
136
|
-
end
|
|
137
|
-
cache = cache_class.new
|
|
138
|
-
|
|
139
|
-
StiTest.plugin :caching, cache
|
|
140
|
-
def StiTest.cache_key_prefix; "stitest" end
|
|
141
|
-
c2 = Class.new StiTest
|
|
142
|
-
c2.cache_key(:id).must_equal StiTest.cache_key(:id)
|
|
143
|
-
|
|
144
|
-
obj2 = c2.new
|
|
145
|
-
obj2.values[:x] = 2
|
|
146
|
-
obj2.save
|
|
147
|
-
c2[obj2.id]
|
|
148
|
-
c2.cache_get_pk(obj2.id).values.must_equal StiTest.cache_get_pk(obj2.id).values
|
|
149
|
-
obj2.save
|
|
150
|
-
c2.cache_get_pk(obj2.id).must_equal nil
|
|
151
|
-
StiTest.cache_get_pk(obj2.id).must_equal nil
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
describe "with custom options" do
|
|
155
|
-
before do
|
|
156
|
-
class ::StiTest2 < Sequel::Model
|
|
157
|
-
columns :id, :kind
|
|
158
|
-
def _save_refresh; end
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
after do
|
|
162
|
-
Object.send(:remove_const, :StiTest2)
|
|
163
|
-
Object.send(:remove_const, :StiTest3)
|
|
164
|
-
Object.send(:remove_const, :StiTest4)
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
it "should have working row_proc if using set_dataset in subclass to remove columns" do
|
|
168
|
-
StiTest2.plugin :single_table_inheritance, :kind
|
|
169
|
-
class ::StiTest3 < ::StiTest2
|
|
170
|
-
set_dataset(dataset.select(*(columns - [:blah])))
|
|
171
|
-
end
|
|
172
|
-
class ::StiTest4 < ::StiTest3; end
|
|
173
|
-
StiTest3.dataset._fetch = {:id=>1, :kind=>'StiTest4'}
|
|
174
|
-
StiTest3[1].must_equal StiTest4.load(:id=>1, :kind=>'StiTest4')
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it "should work with custom procs with strings" do
|
|
178
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>proc{|v| v == 1 ? 'StiTest3' : 'StiTest4'}, :key_map=>proc{|klass| klass.name == 'StiTest3' ? 1 : 2}
|
|
179
|
-
class ::StiTest3 < ::StiTest2; end
|
|
180
|
-
class ::StiTest4 < ::StiTest2; end
|
|
181
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest4)
|
|
182
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
183
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
184
|
-
|
|
185
|
-
StiTest2.create.kind.must_equal 2
|
|
186
|
-
StiTest3.create.kind.must_equal 1
|
|
187
|
-
StiTest4.create.kind.must_equal 2
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "should work with custom procs with symbols" do
|
|
191
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>proc{|v| v == 1 ? :StiTest3 : :StiTest4}, :key_map=>proc{|klass| klass.name == 'StiTest3' ? 1 : 2}
|
|
192
|
-
class ::StiTest3 < ::StiTest2; end
|
|
193
|
-
class ::StiTest4 < ::StiTest2; end
|
|
194
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest4)
|
|
195
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
196
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
197
|
-
|
|
198
|
-
StiTest2.create.kind.must_equal 2
|
|
199
|
-
StiTest3.create.kind.must_equal 1
|
|
200
|
-
StiTest4.create.kind.must_equal 2
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
it "should work with custom hashes" do
|
|
204
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>StiTest2, 1=>:StiTest3, 2=>'StiTest4'}, :key_map=>{StiTest2=>4, 'StiTest3'=>5, 'StiTest4'=>6}
|
|
205
|
-
class ::StiTest3 < ::StiTest2; end
|
|
206
|
-
class ::StiTest4 < ::StiTest2; end
|
|
207
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest2)
|
|
208
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
209
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
210
|
-
StiTest3.sti_model_map.must_equal StiTest2.sti_model_map
|
|
211
|
-
|
|
212
|
-
StiTest2.create.kind.must_equal 4
|
|
213
|
-
StiTest3.create.kind.must_equal 5
|
|
214
|
-
StiTest4.create.kind.must_equal 6
|
|
215
|
-
|
|
216
|
-
class ::StiTest5 < ::StiTest4; end
|
|
217
|
-
StiTest5.create.kind.must_equal nil
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it "should infer key_map from model_map if provided as a hash" do
|
|
221
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>StiTest2, 1=>'StiTest3', 2=>:StiTest4}
|
|
222
|
-
class ::StiTest3 < ::StiTest2; end
|
|
223
|
-
class ::StiTest4 < ::StiTest2; end
|
|
224
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest2)
|
|
225
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
226
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
227
|
-
|
|
228
|
-
StiTest2.create.kind.must_equal 0
|
|
229
|
-
StiTest3.create.kind.must_equal 1
|
|
230
|
-
StiTest4.create.kind.must_equal 2
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
it "should raise exceptions if a bad model value is used" do
|
|
234
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>1,1=>1.5, 2=>Date.today}
|
|
235
|
-
class ::StiTest3 < ::StiTest2; end
|
|
236
|
-
class ::StiTest4 < ::StiTest2; end
|
|
237
|
-
proc{StiTest2.dataset.row_proc.call(:kind=>0)}.must_raise(Sequel::Error)
|
|
238
|
-
proc{StiTest2.dataset.row_proc.call(:kind=>1)}.must_raise(Sequel::Error)
|
|
239
|
-
proc{StiTest2.dataset.row_proc.call(:kind=>2)}.must_raise(Sequel::Error)
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "should work with non-bijective mappings" do
|
|
243
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>'StiTest3', 1=>'StiTest3', 2=>'StiTest4'}
|
|
244
|
-
class ::StiTest3 < ::StiTest2; end
|
|
245
|
-
class ::StiTest4 < ::StiTest2; end
|
|
246
|
-
StiTest2.dataset.row_proc.call(:kind=>0).must_be_instance_of(StiTest3)
|
|
247
|
-
StiTest2.dataset.row_proc.call(:kind=>1).must_be_instance_of(StiTest3)
|
|
248
|
-
StiTest2.dataset.row_proc.call(:kind=>2).must_be_instance_of(StiTest4)
|
|
249
|
-
|
|
250
|
-
[0,1].must_include(StiTest3.create.kind)
|
|
251
|
-
StiTest4.create.kind.must_equal 2
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "should work with non-bijective mappings and key map procs" do
|
|
255
|
-
StiTest2.plugin :single_table_inheritance, :kind,
|
|
256
|
-
:key_map=>proc{|model| model.to_s == 'StiTest4' ? 2 : [0,1] }
|
|
257
|
-
class ::StiTest3 < ::StiTest2; end
|
|
258
|
-
class ::StiTest4 < ::StiTest2; end
|
|
259
|
-
|
|
260
|
-
StiTest2.dataset.sql.must_equal "SELECT * FROM sti_test2s"
|
|
261
|
-
StiTest3.dataset.sql.must_equal "SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (0, 1))"
|
|
262
|
-
StiTest4.dataset.sql.must_equal "SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (2))"
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
it "should create correct sql with non-bijective mappings" do
|
|
266
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{0=>'StiTest3', 1=>'StiTest3', 2=>'StiTest4'}
|
|
267
|
-
class ::StiTest3 < ::StiTest2; end
|
|
268
|
-
class ::StiTest4 < ::StiTest2; end
|
|
269
|
-
|
|
270
|
-
StiTest2.dataset.sql.must_equal "SELECT * FROM sti_test2s"
|
|
271
|
-
["SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (0, 1))",
|
|
272
|
-
"SELECT * FROM sti_test2s WHERE (sti_test2s.kind IN (1, 0))"].must_include(StiTest3.dataset.sql)
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "should destroy the model correctly" do
|
|
276
|
-
StiTest2.plugin :single_table_inheritance, :kind, :model_map=>{'sti3'=>'StiTest3', 'sti3b'=>'StiTest3', 'sti4'=>'StiTest4'}
|
|
277
|
-
class ::StiTest3 < ::StiTest2; end
|
|
278
|
-
class ::StiTest4 < ::StiTest2; end
|
|
279
|
-
StiTest2.load(:id=>1).destroy
|
|
280
|
-
StiTest3.load(:id=>1).destroy
|
|
281
|
-
sqls = DB.sqls
|
|
282
|
-
sqls.shift.must_equal "DELETE FROM sti_test2s WHERE id = 1"
|
|
283
|
-
["DELETE FROM sti_test2s WHERE ((sti_test2s.kind IN ('sti3', 'sti3b')) AND (id = 1))",
|
|
284
|
-
"DELETE FROM sti_test2s WHERE ((sti_test2s.kind IN ('sti3b', 'sti3')) AND (id = 1))"].must_include(sqls.pop)
|
|
285
|
-
sqls.must_equal []
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
it "should honor a :key_chooser" do
|
|
289
|
-
StiTest2.plugin :single_table_inheritance, :kind, :key_chooser => proc{|inst| inst.model.to_s.downcase }
|
|
290
|
-
class ::StiTest3 < ::StiTest2; end
|
|
291
|
-
class ::StiTest4 < ::StiTest2; end
|
|
292
|
-
|
|
293
|
-
StiTest3.create.kind.must_equal 'stitest3'
|
|
294
|
-
StiTest4.create.kind.must_equal 'stitest4'
|
|
295
|
-
end
|
|
296
|
-
end
|
|
297
|
-
end
|