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,51 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "accessed_columns plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:name=>'a', :b=>'c'}, :numrows=>1)
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:test]))
|
|
7
|
-
@c.columns :name, :b
|
|
8
|
-
@c.plugin :accessed_columns
|
|
9
|
-
@o = @c.new
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should record columns accessed" do
|
|
13
|
-
@o.accessed_columns.must_equal []
|
|
14
|
-
@o.name
|
|
15
|
-
@o.accessed_columns.must_equal [:name]
|
|
16
|
-
@o.name
|
|
17
|
-
@o.accessed_columns.must_equal [:name]
|
|
18
|
-
@o.b
|
|
19
|
-
@o.accessed_columns.sort_by{|s| s.to_s}.must_equal [:b, :name]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should clear accessed columns when refreshing" do
|
|
23
|
-
@o.name
|
|
24
|
-
@o.refresh
|
|
25
|
-
@o.accessed_columns.must_equal []
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should clear accessed columns when saving" do
|
|
29
|
-
@o.name
|
|
30
|
-
@o.save
|
|
31
|
-
@o.accessed_columns.must_equal []
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should work when duping and cloning instances" do
|
|
35
|
-
@o.name
|
|
36
|
-
o = @o.dup
|
|
37
|
-
@o.accessed_columns.must_equal [:name]
|
|
38
|
-
@o.b
|
|
39
|
-
@o.accessed_columns.sort_by{|s| s.to_s}.must_equal [:b, :name]
|
|
40
|
-
o.accessed_columns.must_equal [:name]
|
|
41
|
-
o2 = o.clone
|
|
42
|
-
o2.refresh
|
|
43
|
-
o.accessed_columns.must_equal [:name]
|
|
44
|
-
o2.accessed_columns.must_equal []
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should not raise exceptions when object is frozen" do
|
|
48
|
-
@o.freeze
|
|
49
|
-
@o.name
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require 'active_model'
|
|
5
|
-
begin
|
|
6
|
-
require 'minitest'
|
|
7
|
-
if defined?(MiniTest::Unit)
|
|
8
|
-
class << MiniTest::Unit
|
|
9
|
-
def autorun; end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
if defined?(MiniTest::Test)
|
|
13
|
-
test_class = MiniTest::Test
|
|
14
|
-
end
|
|
15
|
-
rescue
|
|
16
|
-
require 'test/unit'
|
|
17
|
-
test_class = Test::Unit::TestCase
|
|
18
|
-
if Test::Unit.respond_to?(:run=)
|
|
19
|
-
Test::Unit.run = false
|
|
20
|
-
require 'test/unit/testresult'
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
rescue LoadError => e
|
|
24
|
-
skip_warn "active_model plugin: can't load active_model (#{e.class}: #{e})"
|
|
25
|
-
else
|
|
26
|
-
describe "ActiveModel plugin" do
|
|
27
|
-
it "should be compliant to the ActiveModel spec" do
|
|
28
|
-
tc = Class.new(test_class)
|
|
29
|
-
tc.class_eval do
|
|
30
|
-
define_method(:setup) do
|
|
31
|
-
class ::AMLintTest < Sequel::Model
|
|
32
|
-
set_primary_key :id
|
|
33
|
-
columns :id, :id2
|
|
34
|
-
def delete; end
|
|
35
|
-
end
|
|
36
|
-
module ::Blog
|
|
37
|
-
class Post < Sequel::Model
|
|
38
|
-
plugin :active_model
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
@c = AMLintTest
|
|
42
|
-
@c.plugin :active_model
|
|
43
|
-
@m = @model = @c.new
|
|
44
|
-
@o = @c.load({})
|
|
45
|
-
super()
|
|
46
|
-
end
|
|
47
|
-
def teardown
|
|
48
|
-
super
|
|
49
|
-
Object.send(:remove_const, :AMLintTest)
|
|
50
|
-
Object.send(:remove_const, :Blog)
|
|
51
|
-
end
|
|
52
|
-
include ActiveModel::Lint::Tests
|
|
53
|
-
|
|
54
|
-
# Should return self, not a proxy object
|
|
55
|
-
def test__to_model
|
|
56
|
-
assert_equal @m.to_model.object_id, @m.object_id
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test__to_key
|
|
60
|
-
assert_equal nil, @m.to_key
|
|
61
|
-
@o.id = 1
|
|
62
|
-
assert_equal [1], @o.to_key
|
|
63
|
-
@o.id = nil
|
|
64
|
-
assert_equal nil, @o.to_key
|
|
65
|
-
|
|
66
|
-
@c.set_primary_key [:id2, :id]
|
|
67
|
-
assert_equal nil, @o.to_key
|
|
68
|
-
@o.id = 1
|
|
69
|
-
@o.id2 = 2
|
|
70
|
-
assert_equal [2, 1], @o.to_key
|
|
71
|
-
@o.destroy
|
|
72
|
-
assert_equal [2, 1], @o.to_key
|
|
73
|
-
@o.id = nil
|
|
74
|
-
assert_equal nil, @o.to_key
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def test__to_param
|
|
78
|
-
assert_equal nil, @m.to_param
|
|
79
|
-
@o.id = 1
|
|
80
|
-
assert_equal '1', @o.to_param
|
|
81
|
-
@c.set_primary_key [:id2, :id]
|
|
82
|
-
@o.id2 = 2
|
|
83
|
-
assert_equal '2-1', @o.to_param
|
|
84
|
-
@o.meta_def(:to_param_joiner){'|'}
|
|
85
|
-
assert_equal '2|1', @o.to_param
|
|
86
|
-
@o.destroy
|
|
87
|
-
assert_equal nil, @o.to_param
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def test__persisted?
|
|
91
|
-
assert_equal false, @m.persisted?
|
|
92
|
-
assert_equal true, @o.persisted?
|
|
93
|
-
@m.destroy
|
|
94
|
-
@o.destroy
|
|
95
|
-
assert_equal false, @m.persisted?
|
|
96
|
-
assert_equal false, @o.persisted?
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Should return self, not a proxy object
|
|
100
|
-
def test__to_partial_path
|
|
101
|
-
assert_equal 'am_lint_tests/am_lint_test', @m.to_partial_path
|
|
102
|
-
assert_equal 'blog/posts/post', Blog::Post.new.to_partial_path
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
end
|
|
106
|
-
if defined?(MiniTest::Test) || defined?(MiniTest::Unit)
|
|
107
|
-
tc.instance_methods.map{|x| x.to_s}.reject{|n| n !~ /\Atest_/}.each do |m|
|
|
108
|
-
i = tc.new(m)
|
|
109
|
-
i.setup
|
|
110
|
-
i.send(m)
|
|
111
|
-
i.teardown
|
|
112
|
-
end
|
|
113
|
-
else
|
|
114
|
-
res = ::Test::Unit::TestResult.new
|
|
115
|
-
tc.suite.run(res){}
|
|
116
|
-
if res.failure_count > 0
|
|
117
|
-
puts res.instance_variable_get(:@failures)
|
|
118
|
-
end
|
|
119
|
-
res.failure_count.must_equal 0
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::AfterInitialize" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:host=>'mysql', :numrows=>1)
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:test]))
|
|
7
|
-
@c.class_eval do
|
|
8
|
-
columns :id, :name
|
|
9
|
-
plugin :after_initialize
|
|
10
|
-
def after_initialize
|
|
11
|
-
self.name *= 2
|
|
12
|
-
self.id *= 3 if id
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should have after_initialize hook be called for new objects" do
|
|
18
|
-
@c.new(:name=>'foo').values.must_equal(:name=>'foofoo')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should have after_initialize hook be called for objects loaded from the database" do
|
|
22
|
-
@c.call(:id=>1, :name=>'foo').values.must_equal(:id=>3, :name=>'foofoo')
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "arbtirary servers" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:servers=>{})
|
|
6
|
-
@db.extension :arbitrary_servers
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should allow arbitrary server options using a hash" do
|
|
10
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
11
|
-
c.opts[:host].must_equal 'host1'
|
|
12
|
-
c.opts[:database].must_equal 'db1'
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should not cache connections to arbitrary servers" do
|
|
17
|
-
x = nil
|
|
18
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
19
|
-
x = c
|
|
20
|
-
end
|
|
21
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
22
|
-
c2.wont_be_same_as(x)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should yield same connection correctly when nesting" do
|
|
27
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
28
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
29
|
-
c2.must_be_same_as(c)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should disconnect when connection is finished" do
|
|
35
|
-
x, x1 = nil, nil
|
|
36
|
-
@db.meta_def(:disconnect_connection){|c| x = c}
|
|
37
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
38
|
-
x1 = c
|
|
39
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
40
|
-
c2.must_be_same_as(c)
|
|
41
|
-
end
|
|
42
|
-
x.must_be_same_as(nil)
|
|
43
|
-
end
|
|
44
|
-
x.must_be_same_as(x1)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should yield different connection correctly when nesting" do
|
|
48
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
49
|
-
c.opts[:host].must_equal 'host1'
|
|
50
|
-
@db.synchronize(:host=>'host2', :database=>'db1') do |c2|
|
|
51
|
-
c2.opts[:host].must_equal 'host2'
|
|
52
|
-
c2.wont_be_same_as(c)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should respect multithreaded access" do
|
|
58
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
59
|
-
Thread.new do
|
|
60
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
61
|
-
_(c2).wont_be_same_as(c)
|
|
62
|
-
end
|
|
63
|
-
end.join
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should work correctly with server_block plugin" do
|
|
68
|
-
@db.extension :server_block
|
|
69
|
-
@db.with_server(:host=>'host1', :database=>'db1') do
|
|
70
|
-
@db.synchronize do |c|
|
|
71
|
-
c.opts[:host].must_equal 'host1'
|
|
72
|
-
c.opts[:database].must_equal 'db1'
|
|
73
|
-
@db.synchronize do |c2|
|
|
74
|
-
c2.must_be_same_as(c)
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should respect multithreaded access with server block plugin" do
|
|
81
|
-
@db.extension :server_block
|
|
82
|
-
q, q1 = Queue.new, Queue.new
|
|
83
|
-
|
|
84
|
-
t = nil
|
|
85
|
-
@db[:t].all
|
|
86
|
-
@db.with_server(:host=>'a') do
|
|
87
|
-
@db[:t].all
|
|
88
|
-
t = Thread.new do
|
|
89
|
-
@db[:t].all
|
|
90
|
-
@db.with_server(:host=>'c') do
|
|
91
|
-
@db[:t].all
|
|
92
|
-
@db.with_server(:host=>'d'){@db[:t].all}
|
|
93
|
-
q.push nil
|
|
94
|
-
q1.pop
|
|
95
|
-
@db[:t].all
|
|
96
|
-
end
|
|
97
|
-
@db[:t].all
|
|
98
|
-
end
|
|
99
|
-
q.pop
|
|
100
|
-
@db.with_server(:host=>'b'){@db[:t].all}
|
|
101
|
-
@db[:t].all
|
|
102
|
-
end
|
|
103
|
-
@db[:t].all
|
|
104
|
-
q1.push nil
|
|
105
|
-
t.join
|
|
106
|
-
@db.sqls.must_equal ['SELECT * FROM t', 'SELECT * FROM t -- {:host=>"a"}', 'SELECT * FROM t', 'SELECT * FROM t -- {:host=>"c"}', 'SELECT * FROM t -- {:host=>"d"}',
|
|
107
|
-
'SELECT * FROM t -- {:host=>"b"}', 'SELECT * FROM t -- {:host=>"a"}', 'SELECT * FROM t', 'SELECT * FROM t -- {:host=>"c"}', 'SELECT * FROM t']
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "AssociationDependencies plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@mods = []
|
|
6
|
-
@c = Class.new(Sequel::Model)
|
|
7
|
-
@c.plugin :association_dependencies
|
|
8
|
-
@Artist = Class.new(@c).set_dataset(:artists)
|
|
9
|
-
@Artist.dataset._fetch = {:id=>2, :name=>'Ar'}
|
|
10
|
-
@Album = Class.new(@c).set_dataset(:albums)
|
|
11
|
-
@Album.dataset._fetch = {:id=>1, :name=>'Al', :artist_id=>2}
|
|
12
|
-
@Artist.columns :id, :name
|
|
13
|
-
@Album.columns :id, :name, :artist_id
|
|
14
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
15
|
-
@Artist.one_to_one :first_album, :class=>@Album, :key=>:artist_id, :conditions=>{:position=>1}
|
|
16
|
-
@Artist.many_to_many :other_artists, :class=>@Artist, :join_table=>:aoa, :left_key=>:l, :right_key=>:r
|
|
17
|
-
@Album.many_to_one :artist, :class=>@Artist
|
|
18
|
-
DB.reset
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should allow destroying associated many_to_one associated object" do
|
|
22
|
-
@Album.add_association_dependencies :artist=>:destroy
|
|
23
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
24
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should allow deleting associated many_to_one associated object" do
|
|
28
|
-
@Album.add_association_dependencies :artist=>:delete
|
|
29
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
30
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE (artists.id = 2)']
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should allow destroying associated one_to_one associated object" do
|
|
34
|
-
@Artist.add_association_dependencies :first_album=>:destroy
|
|
35
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
36
|
-
DB.sqls.must_equal ['SELECT * FROM albums WHERE ((position = 1) AND (albums.artist_id = 2)) LIMIT 1', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should allow deleting associated one_to_one associated object" do
|
|
40
|
-
@Artist.add_association_dependencies :first_album=>:delete
|
|
41
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
42
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE ((position = 1) AND (albums.artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should allow destroying associated one_to_many objects" do
|
|
46
|
-
@Artist.add_association_dependencies :albums=>:destroy
|
|
47
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
48
|
-
DB.sqls.must_equal ['SELECT * FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should allow deleting associated one_to_many objects" do
|
|
52
|
-
@Artist.add_association_dependencies :albums=>:delete
|
|
53
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
54
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should allow nullifying associated one_to_one objects" do
|
|
58
|
-
@Artist.add_association_dependencies :first_album=>:nullify
|
|
59
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
60
|
-
DB.sqls.must_equal ['UPDATE albums SET artist_id = NULL WHERE ((position = 1) AND (artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "should allow nullifying associated one_to_many objects" do
|
|
64
|
-
@Artist.add_association_dependencies :albums=>:nullify
|
|
65
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
66
|
-
DB.sqls.must_equal ['UPDATE albums SET artist_id = NULL WHERE (artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "should allow nullifying associated many_to_many associations" do
|
|
70
|
-
@Artist.add_association_dependencies :other_artists=>:nullify
|
|
71
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
72
|
-
DB.sqls.must_equal ['DELETE FROM aoa WHERE (l = 2)', 'DELETE FROM artists WHERE id = 2']
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should raise an error if attempting to nullify a many_to_one association" do
|
|
76
|
-
proc{@Album.add_association_dependencies :artist=>:nullify}.must_raise(Sequel::Error)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should raise an error if using an unrecognized dependence action" do
|
|
80
|
-
proc{@Album.add_association_dependencies :artist=>:blah}.must_raise(Sequel::Error)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should raise an error if a nonexistent association is used" do
|
|
84
|
-
proc{@Album.add_association_dependencies :blah=>:delete}.must_raise(Sequel::Error)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should raise an error if a invalid association type is used" do
|
|
88
|
-
@Artist.plugin :many_through_many
|
|
89
|
-
@Artist.many_through_many :other_albums, [[:id, :id, :id]]
|
|
90
|
-
proc{@Artist.add_association_dependencies :other_albums=>:nullify}.must_raise(Sequel::Error)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should raise an error if using a many_to_many association type without nullify" do
|
|
94
|
-
proc{@Artist.add_association_dependencies :other_artists=>:delete}.must_raise(Sequel::Error)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should allow specifying association dependencies in the plugin call" do
|
|
98
|
-
@Album.plugin :association_dependencies, :artist=>:destroy
|
|
99
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
100
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "should work with subclasses" do
|
|
104
|
-
c = Class.new(@Album)
|
|
105
|
-
c.add_association_dependencies :artist=>:destroy
|
|
106
|
-
c.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
107
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
108
|
-
|
|
109
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
110
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1']
|
|
111
|
-
|
|
112
|
-
@Album.add_association_dependencies :artist=>:destroy
|
|
113
|
-
c2 = Class.new(@Album)
|
|
114
|
-
c2.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
115
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
116
|
-
end
|
|
117
|
-
end
|
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::AssociationPks" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:autoid=>1, :fetch=>proc do |sql|
|
|
6
|
-
case sql
|
|
7
|
-
when /SELECT \* FROM (?:artists|albums) WHERE \(id = (\d+)\) LIMIT 1/
|
|
8
|
-
{:id=>$1.to_i}
|
|
9
|
-
when "SELECT id FROM albums WHERE (albums.artist_id = 1)"
|
|
10
|
-
[{:id=>1}, {:id=>2}, {:id=>3}]
|
|
11
|
-
when /SELECT tag_id FROM albums_tags WHERE \(album_id = (\d)\)/
|
|
12
|
-
a = []
|
|
13
|
-
a << {:tag_id=>1} if $1 == '1'
|
|
14
|
-
a << {:tag_id=>2} if $1 != '3'
|
|
15
|
-
a << {:tag_id=>3} if $1 == '2'
|
|
16
|
-
a
|
|
17
|
-
when "SELECT first, last FROM vocalists WHERE (vocalists.album_id = 1)"
|
|
18
|
-
[{:first=>"F1", :last=>"L1"}, {:first=>"F2", :last=>"L2"}]
|
|
19
|
-
when /SELECT first, last FROM albums_vocalists WHERE \(album_id = (\d)\)/
|
|
20
|
-
a = []
|
|
21
|
-
a << {:first=>"F1", :last=>"L1"} if $1 == '1'
|
|
22
|
-
a << {:first=>"F2", :last=>"L2"} if $1 != '3'
|
|
23
|
-
a << {:first=>"F3", :last=>"L3"} if $1 == '2'
|
|
24
|
-
a
|
|
25
|
-
when "SELECT id FROM instruments WHERE ((instruments.first = 'F1') AND (instruments.last = 'L1'))"
|
|
26
|
-
[{:id=>1}, {:id=>2}]
|
|
27
|
-
when /SELECT instrument_id FROM vocalists_instruments WHERE \(\((?:first|last) = '?[FL1](\d)/
|
|
28
|
-
a = []
|
|
29
|
-
a << {:instrument_id=>1} if $1 == "1"
|
|
30
|
-
a << {:instrument_id=>2} if $1 != "3"
|
|
31
|
-
a << {:instrument_id=>3} if $1 == "2"
|
|
32
|
-
a
|
|
33
|
-
when "SELECT year, week FROM hits WHERE ((hits.first = 'F1') AND (hits.last = 'L1'))"
|
|
34
|
-
[{:year=>1997, :week=>1}, {:year=>1997, :week=>2}]
|
|
35
|
-
when /SELECT year, week FROM vocalists_hits WHERE \(\((?:first|last) = '?[FL1](\d)/
|
|
36
|
-
a = []
|
|
37
|
-
a << {:year=>1997, :week=>1} if $1 == "1"
|
|
38
|
-
a << {:year=>1997, :week=>2} if $1 != "3"
|
|
39
|
-
a << {:year=>1997, :week=>3} if $1 == "2"
|
|
40
|
-
a
|
|
41
|
-
end
|
|
42
|
-
end)
|
|
43
|
-
@Artist = Class.new(Sequel::Model(@db[:artists]))
|
|
44
|
-
@Artist.columns :id
|
|
45
|
-
@Album = Class.new(Sequel::Model(@db[:albums]))
|
|
46
|
-
@Album.columns :id, :artist_id
|
|
47
|
-
@Tag = Class.new(Sequel::Model(@db[:tags]))
|
|
48
|
-
@Tag.columns :id
|
|
49
|
-
@Vocalist = Class.new(Sequel::Model(@db[:vocalists]))
|
|
50
|
-
@Vocalist.columns :first, :last, :album_id
|
|
51
|
-
@Vocalist.set_primary_key [:first, :last]
|
|
52
|
-
@Instrument = Class.new(Sequel::Model(@db[:instruments]))
|
|
53
|
-
@Instrument.columns :id, :first, :last
|
|
54
|
-
@Hit = Class.new(Sequel::Model(@db[:hits]))
|
|
55
|
-
@Hit.columns :year, :week, :first, :last
|
|
56
|
-
@Hit.set_primary_key [:year, :week]
|
|
57
|
-
@Artist.plugin :association_pks
|
|
58
|
-
@Album.plugin :association_pks
|
|
59
|
-
@Vocalist.plugin :association_pks
|
|
60
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
61
|
-
@Album.many_to_many :tags, :class=>@Tag, :join_table=>:albums_tags, :left_key=>:album_id
|
|
62
|
-
@db.sqls
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should return correct associated pks for one_to_many associations" do
|
|
66
|
-
@Artist.load(:id=>1).album_pks.must_equal [1,2,3]
|
|
67
|
-
@Artist.load(:id=>2).album_pks.must_equal []
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should return correct associated pks for many_to_many associations" do
|
|
71
|
-
@Album.load(:id=>1).tag_pks.must_equal [1, 2]
|
|
72
|
-
@Album.load(:id=>2).tag_pks.must_equal [2, 3]
|
|
73
|
-
@Album.load(:id=>3).tag_pks.must_equal []
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should set associated pks correctly for a one_to_many association" do
|
|
77
|
-
@Artist.load(:id=>1).album_pks = [1, 2]
|
|
78
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
79
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))"]
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should use associated class's primary key for a one_to_many association" do
|
|
83
|
-
@Album.set_primary_key :foo
|
|
84
|
-
@Artist.load(:id=>1).album_pks = [1, 2]
|
|
85
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (foo IN (1, 2))",
|
|
86
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (foo NOT IN (1, 2)))"]
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should set associated pks correctly for a many_to_many association" do
|
|
90
|
-
@Album.load(:id=>2).tag_pks = [1, 3]
|
|
91
|
-
sqls = @db.sqls
|
|
92
|
-
sqls[0].must_equal "DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))"
|
|
93
|
-
sqls[1].must_equal 'SELECT tag_id FROM albums_tags WHERE (album_id = 2)'
|
|
94
|
-
sqls[2].must_equal 'BEGIN'
|
|
95
|
-
sqls[3].must_match(/INSERT INTO albums_tags \((album_id, tag_id|tag_id, album_id)\) VALUES \((2, 1|1, 2)\)/)
|
|
96
|
-
sqls[4].must_equal 'COMMIT'
|
|
97
|
-
sqls.length.must_equal 5
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "should return correct right-side associated cpks for one_to_many associations" do
|
|
101
|
-
@Album.one_to_many :vocalists, :class=>@Vocalist, :key=>:album_id
|
|
102
|
-
@Album.load(:id=>1).vocalist_pks.must_equal [["F1", "L1"], ["F2", "L2"]]
|
|
103
|
-
@Album.load(:id=>2).vocalist_pks.must_equal []
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should return correct right-side associated cpks for many_to_many associations" do
|
|
107
|
-
@Album.many_to_many :vocalists, :class=>@Vocalist, :join_table=>:albums_vocalists, :left_key=>:album_id, :right_key=>[:first, :last]
|
|
108
|
-
@Album.load(:id=>1).vocalist_pks.must_equal [["F1", "L1"], ["F2", "L2"]]
|
|
109
|
-
@Album.load(:id=>2).vocalist_pks.must_equal [["F2", "L2"], ["F3", "L3"]]
|
|
110
|
-
@Album.load(:id=>3).vocalist_pks.must_equal []
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it "should set associated right-side cpks correctly for a one_to_many association" do
|
|
114
|
-
@Album.one_to_many :vocalists, :class=>@Vocalist, :key=>:album_id
|
|
115
|
-
@Album.load(:id=>1).vocalist_pks = [["F1", "L1"], ["F2", "L2"]]
|
|
116
|
-
@db.sqls.must_equal ["UPDATE vocalists SET album_id = 1 WHERE ((first, last) IN (('F1', 'L1'), ('F2', 'L2')))",
|
|
117
|
-
"UPDATE vocalists SET album_id = NULL WHERE ((vocalists.album_id = 1) AND ((first, last) NOT IN (('F1', 'L1'), ('F2', 'L2'))))"]
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should set associated right-side cpks correctly for a many_to_many association" do
|
|
121
|
-
@Album.many_to_many :vocalists, :class=>@Vocalist, :join_table=>:albums_vocalists, :left_key=>:album_id, :right_key=>[:first, :last]
|
|
122
|
-
@Album.load(:id=>2).vocalist_pks = [["F1", "L1"], ["F2", "L2"]]
|
|
123
|
-
sqls = @db.sqls
|
|
124
|
-
sqls[0].must_equal "DELETE FROM albums_vocalists WHERE ((album_id = 2) AND ((first, last) NOT IN (('F1', 'L1'), ('F2', 'L2'))))"
|
|
125
|
-
sqls[1].must_equal 'SELECT first, last FROM albums_vocalists WHERE (album_id = 2)'
|
|
126
|
-
match = sqls[3].match(/INSERT INTO albums_vocalists \((.*)\) VALUES \((.*)\)/)
|
|
127
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F1'", "last"=>"'L1'", "album_id"=>"2")
|
|
128
|
-
sqls.length.must_equal 5
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it "should return correct associated pks for left-side cpks for one_to_many associations" do
|
|
132
|
-
@Vocalist.one_to_many :instruments, :class=>@Instrument, :key=>[:first, :last]
|
|
133
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks.must_equal [1, 2]
|
|
134
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').instrument_pks.must_equal []
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should return correct associated pks for left-side cpks for many_to_many associations" do
|
|
138
|
-
@Vocalist.many_to_many :instruments, :class=>@Instrument, :join_table=>:vocalists_instruments, :left_key=>[:first, :last]
|
|
139
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks.must_equal [1, 2]
|
|
140
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').instrument_pks.must_equal [2, 3]
|
|
141
|
-
@Vocalist.load(:first=>'F3', :last=>'L3').instrument_pks.must_equal []
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "should set associated pks correctly for left-side cpks for a one_to_many association" do
|
|
145
|
-
@Vocalist.one_to_many :instruments, :class=>@Instrument, :key=>[:first, :last]
|
|
146
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').instrument_pks = [1, 2]
|
|
147
|
-
sqls = @db.sqls
|
|
148
|
-
sqls[0].must_match(/UPDATE instruments SET (first = 'F1', last = 'L1'|last = 'L1', first = 'F1') WHERE \(id IN \(1, 2\)\)/)
|
|
149
|
-
sqls[1].must_match(/UPDATE instruments SET (first = NULL, last = NULL|last = NULL, first = NULL) WHERE \(\(instruments.first = 'F1'\) AND \(instruments.last = 'L1'\) AND \(id NOT IN \(1, 2\)\)\)/)
|
|
150
|
-
sqls.length.must_equal 2
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "should set associated pks correctly for left-side cpks for a many_to_many association" do
|
|
154
|
-
@Vocalist.many_to_many :instruments, :class=>@Instrument, :join_table=>:vocalists_instruments, :left_key=>[:first, :last]
|
|
155
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').instrument_pks = [1, 2]
|
|
156
|
-
sqls = @db.sqls
|
|
157
|
-
sqls[0].must_equal "DELETE FROM vocalists_instruments WHERE ((first = 'F2') AND (last = 'L2') AND (instrument_id NOT IN (1, 2)))"
|
|
158
|
-
sqls[1].must_equal "SELECT instrument_id FROM vocalists_instruments WHERE ((first = 'F2') AND (last = 'L2'))"
|
|
159
|
-
match = sqls[3].match(/INSERT INTO vocalists_instruments \((.*)\) VALUES \((.*)\)/)
|
|
160
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F2'", "last"=>"'L2'", "instrument_id"=>"1")
|
|
161
|
-
sqls.length.must_equal 5
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it "should return correct right-side associated cpks for left-side cpks for one_to_many associations" do
|
|
165
|
-
@Vocalist.one_to_many :hits, :class=>@Hit, :key=>[:first, :last]
|
|
166
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks.must_equal [[1997, 1], [1997, 2]]
|
|
167
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks.must_equal []
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
it "should return correct right-side associated cpks for left-side cpks for many_to_many associations" do
|
|
171
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week]
|
|
172
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks.must_equal [[1997, 1], [1997, 2]]
|
|
173
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks.must_equal [[1997, 2], [1997, 3]]
|
|
174
|
-
@Vocalist.load(:first=>'F3', :last=>'L3').hit_pks.must_equal []
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it "should set associated right-side cpks correctly for left-side cpks for a one_to_many association" do
|
|
178
|
-
@Vocalist.one_to_many :hits, :class=>@Hit, :key=>[:first, :last], :order=>:week
|
|
179
|
-
@Vocalist.load(:first=>'F1', :last=>'L1').hit_pks = [[1997, 1], [1997, 2]]
|
|
180
|
-
sqls = @db.sqls
|
|
181
|
-
sqls[0].must_match(/UPDATE hits SET (first = 'F1', last = 'L1'|last = 'L1', first = 'F1') WHERE \(\(year, week\) IN \(\(1997, 1\), \(1997, 2\)\)\)/)
|
|
182
|
-
sqls[1].must_match(/UPDATE hits SET (first = NULL, last = NULL|last = NULL, first = NULL) WHERE \(\(hits.first = 'F1'\) AND \(hits.last = 'L1'\) AND \(\(year, week\) NOT IN \(\(1997, 1\), \(1997, 2\)\)\)\)/)
|
|
183
|
-
sqls.length.must_equal 2
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "should set associated right-side cpks correctly for left-side cpks for a many_to_many association" do
|
|
187
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week]
|
|
188
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks = [[1997, 1], [1997, 2]]
|
|
189
|
-
sqls = @db.sqls
|
|
190
|
-
sqls[0].must_equal "DELETE FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2') AND ((year, week) NOT IN ((1997, 1), (1997, 2))))"
|
|
191
|
-
sqls[1].must_equal "SELECT year, week FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2'))"
|
|
192
|
-
match = sqls[3].match(/INSERT INTO vocalists_hits \((.*)\) VALUES \((.*)\)/)
|
|
193
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F2'", "last"=>"'L2'", "year"=>"1997", "week"=>"1")
|
|
194
|
-
sqls.length.must_equal 5
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
it "should use transactions if the object is configured to use transactions" do
|
|
198
|
-
artist = @Artist.load(:id=>1)
|
|
199
|
-
artist.use_transactions = true
|
|
200
|
-
artist.album_pks = [1, 2]
|
|
201
|
-
@db.sqls.must_equal ["BEGIN",
|
|
202
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
203
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))",
|
|
204
|
-
"COMMIT"]
|
|
205
|
-
|
|
206
|
-
album = @Album.load(:id=>2)
|
|
207
|
-
album.use_transactions = true
|
|
208
|
-
album.tag_pks = [1, 3]
|
|
209
|
-
sqls = @db.sqls
|
|
210
|
-
sqls[0].must_equal "BEGIN"
|
|
211
|
-
sqls[1].must_equal "DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))"
|
|
212
|
-
sqls[2].must_equal 'SELECT tag_id FROM albums_tags WHERE (album_id = 2)'
|
|
213
|
-
sqls[3].must_match(/INSERT INTO albums_tags \((album_id, tag_id|tag_id, album_id)\) VALUES \((2, 1|1, 2)\)/)
|
|
214
|
-
sqls[4].must_equal "COMMIT"
|
|
215
|
-
sqls.length.must_equal 5
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
it "should automatically convert keys to numbers if the primary key is an integer for one_to_many associations" do
|
|
219
|
-
@Album.db_schema[:id][:type] = :integer
|
|
220
|
-
@Artist.load(:id=>1).album_pks = %w'1 2'
|
|
221
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2))",
|
|
222
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2)))"]
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
it "should not automatically convert keys if the primary key is not an integer for one_to_many associations" do
|
|
226
|
-
@Album.db_schema[:id][:type] = :string
|
|
227
|
-
@Artist.load(:id=>1).album_pks = %w'1 2'
|
|
228
|
-
@db.sqls.must_equal ["UPDATE albums SET artist_id = 1 WHERE (id IN ('1', '2'))",
|
|
229
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN ('1', '2')))"]
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
it "should automatically convert keys to numbers if the primary key is an integer for many_to_many associations" do
|
|
233
|
-
@Tag.db_schema[:id][:type] = :integer
|
|
234
|
-
@Album.load(:id=>2).tag_pks = %w'1 3'
|
|
235
|
-
sqls = @db.sqls
|
|
236
|
-
sqls[0].must_equal "DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 3)))"
|
|
237
|
-
sqls[1].must_equal 'SELECT tag_id FROM albums_tags WHERE (album_id = 2)'
|
|
238
|
-
sqls[3].must_match(/INSERT INTO albums_tags \((album_id, tag_id|tag_id, album_id)\) VALUES \((2, 1|1, 2)\)/)
|
|
239
|
-
sqls.length.must_equal 5
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "should not automatically convert keys to numbers if the primary key is an integer for many_to_many associations" do
|
|
243
|
-
@Tag.db_schema[:id][:type] = :string
|
|
244
|
-
@Album.load(:id=>2).tag_pks = %w'1 3'
|
|
245
|
-
sqls = @db.sqls
|
|
246
|
-
sqls[0].must_equal "DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN ('1', '3')))"
|
|
247
|
-
sqls[1].must_equal 'SELECT tag_id FROM albums_tags WHERE (album_id = 2)'
|
|
248
|
-
sqls[3].must_match(/INSERT INTO albums_tags \((album_id, tag_id|tag_id, album_id)\) VALUES \((2, '1'|'1', 2)\)/)
|
|
249
|
-
sqls[4].must_match(/INSERT INTO albums_tags \((album_id, tag_id|tag_id, album_id)\) VALUES \((2, '3'|'3', 2)\)/)
|
|
250
|
-
sqls.length.must_equal 6
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it "should automatically convert keys to numbers for appropriate integer primary key for composite key associations" do
|
|
254
|
-
@Hit.db_schema[:year][:type] = :integer
|
|
255
|
-
@Hit.db_schema[:week][:type] = :integer
|
|
256
|
-
@Vocalist.many_to_many :hits, :class=>@Hit, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week]
|
|
257
|
-
@Vocalist.load(:first=>'F2', :last=>'L2').hit_pks = [['1997', '1'], ['1997', '2']]
|
|
258
|
-
sqls = @db.sqls
|
|
259
|
-
sqls[0].must_equal "DELETE FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2') AND ((year, week) NOT IN ((1997, 1), (1997, 2))))"
|
|
260
|
-
sqls[1].must_equal "SELECT year, week FROM vocalists_hits WHERE ((first = 'F2') AND (last = 'L2'))"
|
|
261
|
-
match = sqls[3].match(/INSERT INTO vocalists_hits \((.*)\) VALUES \((.*)\)/)
|
|
262
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"'F2'", "last"=>"'L2'", "year"=>"1997", "week"=>"1")
|
|
263
|
-
sqls.length.must_equal 5
|
|
264
|
-
|
|
265
|
-
@Vocalist.db_schema[:first][:type] = :integer
|
|
266
|
-
@Vocalist.db_schema[:last][:type] = :integer
|
|
267
|
-
@Album.one_to_many :vocalists, :class=>@Vocalist, :key=>:album_id
|
|
268
|
-
@Album.load(:id=>1).vocalist_pks = [["11", "11"], ["12", "12"]]
|
|
269
|
-
@db.sqls.must_equal ["UPDATE vocalists SET album_id = 1 WHERE ((first, last) IN ((11, 11), (12, 12)))",
|
|
270
|
-
"UPDATE vocalists SET album_id = NULL WHERE ((vocalists.album_id = 1) AND ((first, last) NOT IN ((11, 11), (12, 12))))"]
|
|
271
|
-
|
|
272
|
-
@Album.many_to_many :vocalists, :class=>@Vocalist, :join_table=>:albums_vocalists, :left_key=>:album_id, :right_key=>[:first, :last]
|
|
273
|
-
@Album.load(:id=>2).vocalist_pks = [["11", "11"], ["12", "12"]]
|
|
274
|
-
sqls = @db.sqls
|
|
275
|
-
sqls[0].must_equal "DELETE FROM albums_vocalists WHERE ((album_id = 2) AND ((first, last) NOT IN ((11, 11), (12, 12))))"
|
|
276
|
-
sqls[1].must_equal 'SELECT first, last FROM albums_vocalists WHERE (album_id = 2)'
|
|
277
|
-
match = sqls[3].match(/INSERT INTO albums_vocalists \((.*)\) VALUES \((.*)\)/)
|
|
278
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"11", "last"=>"11", "album_id"=>"2")
|
|
279
|
-
match = sqls[4].match(/INSERT INTO albums_vocalists \((.*)\) VALUES \((.*)\)/)
|
|
280
|
-
Hash[match[1].split(', ').zip(match[2].split(', '))].must_equal("first"=>"12", "last"=>"12", "album_id"=>"2")
|
|
281
|
-
sqls.length.must_equal 6
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
it "should handle delaying setting of association pks until after saving for new objects, if :delay plugin option is used" do
|
|
285
|
-
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>true
|
|
286
|
-
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>true
|
|
287
|
-
|
|
288
|
-
ar = @Artist.new
|
|
289
|
-
ar.album_pks.must_equal []
|
|
290
|
-
ar.album_pks = [1,2,3]
|
|
291
|
-
ar.album_pks.must_equal [1,2,3]
|
|
292
|
-
@db.sqls.must_equal []
|
|
293
|
-
|
|
294
|
-
ar.save
|
|
295
|
-
@db.sqls.must_equal [
|
|
296
|
-
"INSERT INTO artists DEFAULT VALUES",
|
|
297
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (1, 2, 3))",
|
|
298
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (1, 2, 3)))",
|
|
299
|
-
"SELECT * FROM artists WHERE (id = 1) LIMIT 1",
|
|
300
|
-
]
|
|
301
|
-
|
|
302
|
-
al = @Album.new
|
|
303
|
-
al.tag_pks.must_equal []
|
|
304
|
-
al.tag_pks = [1,2]
|
|
305
|
-
al.tag_pks.must_equal [1, 2]
|
|
306
|
-
@db.sqls.must_equal []
|
|
307
|
-
|
|
308
|
-
al.save
|
|
309
|
-
@db.sqls.must_equal [
|
|
310
|
-
"INSERT INTO albums DEFAULT VALUES",
|
|
311
|
-
"DELETE FROM albums_tags WHERE ((album_id = 2) AND (tag_id NOT IN (1, 2)))",
|
|
312
|
-
"SELECT tag_id FROM albums_tags WHERE (album_id = 2)",
|
|
313
|
-
"BEGIN",
|
|
314
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (2, 1)",
|
|
315
|
-
"COMMIT",
|
|
316
|
-
"SELECT * FROM albums WHERE (id = 2) LIMIT 1"
|
|
317
|
-
]
|
|
318
|
-
end
|
|
319
|
-
|
|
320
|
-
it "should handle delaying setting of association pks until after saving for existing objects, if :delay=>:all plugin option is used" do
|
|
321
|
-
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>:always
|
|
322
|
-
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>:always
|
|
323
|
-
|
|
324
|
-
ar = @Artist.load(:id=>1)
|
|
325
|
-
ar.album_pks.must_equal [1,2,3]
|
|
326
|
-
@db.sqls
|
|
327
|
-
ar.album_pks = [2,4]
|
|
328
|
-
ar.album_pks.must_equal [2,4]
|
|
329
|
-
@db.sqls.must_equal []
|
|
330
|
-
|
|
331
|
-
ar.save_changes
|
|
332
|
-
@db.sqls.must_equal [
|
|
333
|
-
"UPDATE albums SET artist_id = 1 WHERE (id IN (2, 4))",
|
|
334
|
-
"UPDATE albums SET artist_id = NULL WHERE ((albums.artist_id = 1) AND (id NOT IN (2, 4)))"
|
|
335
|
-
]
|
|
336
|
-
|
|
337
|
-
al = @Album.load(:id=>1)
|
|
338
|
-
al.tag_pks.must_equal [1,2]
|
|
339
|
-
@db.sqls
|
|
340
|
-
al.tag_pks = [2,3]
|
|
341
|
-
al.tag_pks.must_equal [2,3]
|
|
342
|
-
@db.sqls.must_equal []
|
|
343
|
-
|
|
344
|
-
al.save_changes
|
|
345
|
-
@db.sqls.must_equal [
|
|
346
|
-
"DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id NOT IN (2, 3)))",
|
|
347
|
-
"SELECT tag_id FROM albums_tags WHERE (album_id = 1)",
|
|
348
|
-
"BEGIN",
|
|
349
|
-
"INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3)",
|
|
350
|
-
"COMMIT",
|
|
351
|
-
]
|
|
352
|
-
end
|
|
353
|
-
|
|
354
|
-
it "should clear delayed associated pks if refreshing, if :delay plugin option is used" do
|
|
355
|
-
@Artist.one_to_many :albums, :clone=>:albums, :delay_pks=>:always
|
|
356
|
-
@Album.many_to_many :tags, :clone=>:tags, :delay_pks=>:always
|
|
357
|
-
|
|
358
|
-
ar = @Artist.load(:id=>1)
|
|
359
|
-
ar.album_pks.must_equal [1,2,3]
|
|
360
|
-
ar.album_pks = [2,4]
|
|
361
|
-
ar.album_pks.must_equal [2,4]
|
|
362
|
-
ar.refresh
|
|
363
|
-
ar.album_pks.must_equal [1,2,3]
|
|
364
|
-
end
|
|
365
|
-
end
|