sequel 4.26.0 → 5.37.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 +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- 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/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- 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 +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- 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.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -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 +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- 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 +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -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 +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -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 +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- 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 +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -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/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -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 +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -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/error_splitter.rb +19 -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 +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- 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.3.0.txt +0 -40
- 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 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- 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 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- 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 -179
- data/spec/core/schema_spec.rb +0 -1659
- 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/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- 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 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- 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/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- 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_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- 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 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- 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 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- 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 -712
- 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/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 -395
- 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 -229
- 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 -404
- 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 -789
- 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/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_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- 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/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- 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/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- 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/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/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/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 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
with_server_specs = shared_description do
|
|
4
|
-
it "should set the default server to use in the block" do
|
|
5
|
-
@db.with_server(:a){@db[:t].all}
|
|
6
|
-
@db.sqls.must_equal ["SELECT * FROM t -- a"]
|
|
7
|
-
@db.with_server(:b){@db[:t].all}
|
|
8
|
-
@db.sqls.must_equal ["SELECT * FROM t -- b"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should have no affect after the block" do
|
|
12
|
-
@db.with_server(:a){@db[:t].all}
|
|
13
|
-
@db.sqls.must_equal ["SELECT * FROM t -- a"]
|
|
14
|
-
@db[:t].all
|
|
15
|
-
@db.sqls.must_equal ["SELECT * FROM t"]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should not override specific server inside the block" do
|
|
19
|
-
@db.with_server(:a){@db[:t].server(:b).all}
|
|
20
|
-
@db.sqls.must_equal ["SELECT * FROM t -- b"]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should work correctly when blocks are nested" do
|
|
24
|
-
@db[:t].all
|
|
25
|
-
@db.with_server(:a) do
|
|
26
|
-
@db[:t].all
|
|
27
|
-
@db.with_server(:b){@db[:t].all}
|
|
28
|
-
@db[:t].all
|
|
29
|
-
end
|
|
30
|
-
@db[:t].all
|
|
31
|
-
@db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t"]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should work correctly for inserts/updates/deletes" do
|
|
35
|
-
@db.with_server(:a) do
|
|
36
|
-
@db[:t].insert
|
|
37
|
-
@db[:t].update(:a=>1)
|
|
38
|
-
@db[:t].delete
|
|
39
|
-
end
|
|
40
|
-
@db.sqls.must_equal ["INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe "Database#with_server single threaded" do
|
|
45
|
-
before do
|
|
46
|
-
@db = Sequel.mock(:single_threaded=>true, :servers=>{:a=>{}, :b=>{}})
|
|
47
|
-
@db.extension :server_block
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
include with_server_specs
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
describe "Database#with_server multi threaded" do
|
|
54
|
-
before do
|
|
55
|
-
@db = Sequel.mock(:servers=>{:a=>{}, :b=>{}, :c=>{}, :d=>{}})
|
|
56
|
-
@db.extension :server_block
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
include with_server_specs
|
|
60
|
-
|
|
61
|
-
it "should respect multithreaded access" do
|
|
62
|
-
q, q1 = Queue.new, Queue.new
|
|
63
|
-
|
|
64
|
-
t = nil
|
|
65
|
-
@db[:t].all
|
|
66
|
-
@db.with_server(:a) do
|
|
67
|
-
@db[:t].all
|
|
68
|
-
t = Thread.new do
|
|
69
|
-
@db[:t].all
|
|
70
|
-
@db.with_server(:c) do
|
|
71
|
-
@db[:t].all
|
|
72
|
-
@db.with_server(:d){@db[:t].all}
|
|
73
|
-
q.push nil
|
|
74
|
-
q1.pop
|
|
75
|
-
@db[:t].all
|
|
76
|
-
end
|
|
77
|
-
@db[:t].all
|
|
78
|
-
end
|
|
79
|
-
q.pop
|
|
80
|
-
@db.with_server(:b){@db[:t].all}
|
|
81
|
-
@db[:t].all
|
|
82
|
-
end
|
|
83
|
-
@db[:t].all
|
|
84
|
-
q1.push nil
|
|
85
|
-
t.join
|
|
86
|
-
@db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t -- d",
|
|
87
|
-
"SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t"]
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Dataset #set_defaults" do
|
|
4
|
-
before do
|
|
5
|
-
@ds = Sequel.mock.dataset.from(:items).extension(:set_overrides).set_defaults(:x=>1)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should set the default values for inserts" do
|
|
9
|
-
@ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
|
|
10
|
-
@ds.insert_sql(:x=>2).must_equal "INSERT INTO items (x) VALUES (2)"
|
|
11
|
-
@ds.insert_sql(:y=>2).must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
|
|
12
|
-
@ds.set_defaults(:y=>2).insert_sql.must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
|
|
13
|
-
@ds.set_defaults(:x=>2).insert_sql.must_equal "INSERT INTO items (x) VALUES (2)"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should set the default values for updates" do
|
|
17
|
-
@ds.update_sql.must_equal "UPDATE items SET x = 1"
|
|
18
|
-
@ds.update_sql(:x=>2).must_equal "UPDATE items SET x = 2"
|
|
19
|
-
@ds.update_sql(:y=>2).must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
|
|
20
|
-
@ds.set_defaults(:y=>2).update_sql.must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
|
|
21
|
-
@ds.set_defaults(:x=>2).update_sql.must_equal "UPDATE items SET x = 2"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should not affect String update arguments" do
|
|
25
|
-
@ds.update_sql('y = 2').must_equal "UPDATE items SET y = 2"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should have working mutation method" do
|
|
29
|
-
@ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
|
|
30
|
-
@ds.set_defaults!(:x=>1)
|
|
31
|
-
@ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
describe "Sequel::Dataset #set_overrides" do
|
|
36
|
-
before do
|
|
37
|
-
@ds = Sequel.mock.dataset.from(:items).extension(:set_overrides).set_overrides(:x=>1)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should override the given values for inserts" do
|
|
41
|
-
@ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
|
|
42
|
-
@ds.insert_sql(:x=>2).must_equal "INSERT INTO items (x) VALUES (1)"
|
|
43
|
-
@ds.insert_sql(:y=>2).must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
|
|
44
|
-
@ds.set_overrides(:y=>2).insert_sql.must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
|
|
45
|
-
@ds.set_overrides(:x=>2).insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should override the given values for updates" do
|
|
49
|
-
@ds.update_sql.must_equal "UPDATE items SET x = 1"
|
|
50
|
-
@ds.update_sql(:x=>2).must_equal "UPDATE items SET x = 1"
|
|
51
|
-
@ds.update_sql(:y=>2).must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
|
|
52
|
-
@ds.set_overrides(:y=>2).update_sql.must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
|
|
53
|
-
@ds.set_overrides(:x=>2).update_sql.must_equal "UPDATE items SET x = 1"
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should have working mutation method" do
|
|
57
|
-
@ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
|
|
58
|
-
@ds.set_overrides!(:x=>1)
|
|
59
|
-
@ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -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
|