sequel 4.36.0 → 5.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -203
- data/spec/core/schema_spec.rb +0 -1676
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -728
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -65
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -390
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -275
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -473
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -814
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/uuid_spec.rb +0 -106
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -554
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -19,8 +19,16 @@ module Sequel
|
|
|
19
19
|
# raise an exception for a missing record, so if you use memcached, you will
|
|
20
20
|
# want to use this option.
|
|
21
21
|
#
|
|
22
|
-
# Note that only
|
|
23
|
-
#
|
|
22
|
+
# Note that only lookups by primary key are cached using this plugin. The following
|
|
23
|
+
# methods use a lookup by primary key:
|
|
24
|
+
#
|
|
25
|
+
# * Model.with_pk
|
|
26
|
+
# * Model.with_pk!
|
|
27
|
+
# * Model.[] # when argument is not hash or nil
|
|
28
|
+
# * many_to_one association method # without dynamic callback, when primary key matches
|
|
29
|
+
#
|
|
30
|
+
# You should not use this plugin if you are using sharding and there are different
|
|
31
|
+
# rows for the same primary key on different shards.
|
|
24
32
|
#
|
|
25
33
|
# Usage:
|
|
26
34
|
#
|
|
@@ -29,15 +37,15 @@ module Sequel
|
|
|
29
37
|
# Sequel::Model.plugin :caching, CACHE
|
|
30
38
|
#
|
|
31
39
|
# # Make the Album class use the cache with a 30 minute time-to-live
|
|
32
|
-
# Album.plugin :caching, CACHE, :
|
|
40
|
+
# Album.plugin :caching, CACHE, ttl: 1800
|
|
33
41
|
#
|
|
34
42
|
# # Make the Artist class use a cache with the memcached protocol
|
|
35
|
-
# Artist.plugin :caching, MEMCACHED_CACHE, :
|
|
43
|
+
# Artist.plugin :caching, MEMCACHED_CACHE, ignore_exceptions: true
|
|
36
44
|
module Caching
|
|
37
45
|
# Set the cache_store and cache_ttl attributes for the given model.
|
|
38
46
|
# If the :ttl option is not given, 3600 seconds is the default.
|
|
39
47
|
def self.configure(model, store, opts=OPTS)
|
|
40
|
-
model.
|
|
48
|
+
model.instance_exec do
|
|
41
49
|
@cache_store = store
|
|
42
50
|
@cache_ttl = opts[:ttl] || 3600
|
|
43
51
|
@cache_ignore_exceptions = opts[:ignore_exceptions]
|
|
@@ -68,7 +76,7 @@ module Sequel
|
|
|
68
76
|
|
|
69
77
|
# Returns the prefix used to namespace this class in the cache.
|
|
70
78
|
def cache_key_prefix
|
|
71
|
-
|
|
79
|
+
to_s
|
|
72
80
|
end
|
|
73
81
|
|
|
74
82
|
# Return a key string for the given primary key.
|
|
@@ -86,26 +94,27 @@ module Sequel
|
|
|
86
94
|
|
|
87
95
|
private
|
|
88
96
|
|
|
89
|
-
#
|
|
90
|
-
def
|
|
97
|
+
# Access the cache using the given method and key, rescuing exceptions if necessary.
|
|
98
|
+
def cache_op(meth, ck)
|
|
91
99
|
if @cache_ignore_exceptions
|
|
92
|
-
@cache_store.
|
|
100
|
+
@cache_store.public_send(meth, ck) rescue nil
|
|
93
101
|
else
|
|
94
|
-
@cache_store.
|
|
102
|
+
@cache_store.public_send(meth, ck)
|
|
95
103
|
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Delete the entry with the matching key from the cache
|
|
107
|
+
def cache_delete(ck)
|
|
108
|
+
cache_op(:delete, ck)
|
|
96
109
|
nil
|
|
97
110
|
end
|
|
98
111
|
|
|
99
112
|
# Returned the cached object, or nil if the object was not
|
|
100
113
|
# in the cached
|
|
101
114
|
def cache_get(ck)
|
|
102
|
-
|
|
103
|
-
@cache_store.get(ck) rescue nil
|
|
104
|
-
else
|
|
105
|
-
@cache_store.get(ck)
|
|
106
|
-
end
|
|
115
|
+
cache_op(:get, ck)
|
|
107
116
|
end
|
|
108
|
-
|
|
117
|
+
|
|
109
118
|
# Set the object in the cache_store with the given key for cache_ttl seconds.
|
|
110
119
|
def cache_set(ck, obj)
|
|
111
120
|
@cache_store.set(ck, obj, @cache_ttl)
|
|
@@ -31,32 +31,42 @@ module Sequel
|
|
|
31
31
|
# The class_table_inheritance plugin assumes that the root table
|
|
32
32
|
# (e.g. employees) has a primary key column (usually autoincrementing),
|
|
33
33
|
# and all other tables have a foreign key of the same name that points
|
|
34
|
-
# to the same column in their superclass's table
|
|
35
|
-
#
|
|
36
|
-
# other table is a foreign key
|
|
34
|
+
# to the same column in their superclass's table, which is also the primary
|
|
35
|
+
# key for that table. In this example, the employees table has an id column
|
|
36
|
+
# is a primary key and the id column in every other table is a foreign key
|
|
37
|
+
# referencing employees.id, which is also the primary key of that table.
|
|
38
|
+
#
|
|
39
|
+
# Additionally, note that other than the primary key column, no subclass
|
|
40
|
+
# table has a column with the same name as any superclass table. This plugin
|
|
41
|
+
# does not support cases where the column names in a subclass table overlap
|
|
42
|
+
# with any column names in a superclass table.
|
|
37
43
|
#
|
|
38
44
|
# In this example the staff table also stores Cook model objects and the
|
|
39
45
|
# executives table also stores CEO model objects.
|
|
40
46
|
#
|
|
41
47
|
# When using the class_table_inheritance plugin, subclasses that have additional
|
|
42
|
-
# columns use joined datasets:
|
|
48
|
+
# columns use joined datasets in subselects:
|
|
43
49
|
#
|
|
44
50
|
# Employee.dataset.sql
|
|
45
51
|
# # SELECT * FROM employees
|
|
46
52
|
#
|
|
47
53
|
# Manager.dataset.sql
|
|
48
|
-
# # SELECT
|
|
49
|
-
# #
|
|
50
|
-
# #
|
|
51
|
-
# #
|
|
54
|
+
# # SELECT * FROM (
|
|
55
|
+
# # SELECT employees.id, employees.name, employees.kind,
|
|
56
|
+
# # managers.num_staff
|
|
57
|
+
# # FROM employees
|
|
58
|
+
# # JOIN managers ON (managers.id = employees.id)
|
|
59
|
+
# # ) AS employees
|
|
52
60
|
#
|
|
53
61
|
# CEO.dataset.sql
|
|
54
|
-
# # SELECT
|
|
55
|
-
# #
|
|
56
|
-
# #
|
|
57
|
-
# #
|
|
58
|
-
# #
|
|
59
|
-
# #
|
|
62
|
+
# # SELECT * FROM (
|
|
63
|
+
# # SELECT employees.id, employees.name, employees.kind,
|
|
64
|
+
# # managers.num_staff, executives.num_managers
|
|
65
|
+
# # FROM employees
|
|
66
|
+
# # JOIN managers ON (managers.id = employees.id)
|
|
67
|
+
# # JOIN executives ON (executives.id = managers.id)
|
|
68
|
+
# # WHERE (employees.kind IN ('CEO'))
|
|
69
|
+
# # ) AS employees
|
|
60
70
|
#
|
|
61
71
|
# This allows CEO.all to return instances with all attributes
|
|
62
72
|
# loaded. The plugin overrides the deleting, inserting, and updating
|
|
@@ -82,26 +92,38 @@ module Sequel
|
|
|
82
92
|
#
|
|
83
93
|
# a = Employee.first
|
|
84
94
|
# a.values # {:id=>1, name=>'S', :kind=>'CEO'}
|
|
85
|
-
# a.refresh.values # {:id=>1, name=>'S', :kind=>'
|
|
95
|
+
# a.refresh.values # {:id=>1, name=>'S', :kind=>'CEO', :num_staff=>4, :num_managers=>2}
|
|
86
96
|
#
|
|
87
97
|
# You can also load directly from a subclass:
|
|
88
98
|
#
|
|
89
99
|
# a = Executive.first
|
|
90
100
|
# a.values # {:id=>1, name=>'S', :kind=>'Executive', :num_staff=>4, :num_managers=>2}
|
|
91
|
-
#
|
|
92
|
-
# Note that when loading from a subclass, because the subclass dataset uses a JOIN,
|
|
93
|
-
# if you are referencing the primary key column, you need to disambiguate the reference
|
|
94
|
-
# by explicitly qualifying it:
|
|
95
101
|
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
102
|
+
# Note that when loading from a subclass, because the subclass dataset uses a subquery
|
|
103
|
+
# that by default uses the same alias at the primary table, any qualified identifiers
|
|
104
|
+
# should reference the subquery alias (and qualified identifiers should not be needed
|
|
105
|
+
# unless joining to another table):
|
|
106
|
+
#
|
|
107
|
+
# a = Executive.where(:id=>1).first # works
|
|
108
|
+
# a = Executive.where{{employees[:id]=>1}}.first # works
|
|
109
|
+
# a = Executive.where{{executives[:id]=>1}}.first # doesn't work
|
|
110
|
+
#
|
|
111
|
+
# Note that because subclass datasets select from a subquery, you cannot update,
|
|
112
|
+
# delete, or insert into them directly. To delete related rows, you need to go
|
|
113
|
+
# through the related tables and remove the related rows. Code that does this would
|
|
114
|
+
# be similar to:
|
|
115
|
+
#
|
|
116
|
+
# pks = Executive.where{num_staff < 10}.select_map(:id)
|
|
117
|
+
# Executive.cti_tables.reverse_each do |table|
|
|
118
|
+
# DB.from(table).where(:id=>pks).delete
|
|
119
|
+
# end
|
|
98
120
|
#
|
|
99
121
|
# = Usage
|
|
100
122
|
#
|
|
101
123
|
# # Use the default of storing the class name in the sti_key
|
|
102
124
|
# # column (:kind in this case)
|
|
103
125
|
# class Employee < Sequel::Model
|
|
104
|
-
# plugin :class_table_inheritance, :
|
|
126
|
+
# plugin :class_table_inheritance, key: :kind
|
|
105
127
|
# end
|
|
106
128
|
#
|
|
107
129
|
# # Have subclasses inherit from the appropriate class
|
|
@@ -115,21 +137,21 @@ module Sequel
|
|
|
115
137
|
#
|
|
116
138
|
# # Specifying the tables with a :table_map hash
|
|
117
139
|
# Employee.plugin :class_table_inheritance,
|
|
118
|
-
# :
|
|
119
|
-
#
|
|
120
|
-
#
|
|
121
|
-
#
|
|
122
|
-
#
|
|
123
|
-
#
|
|
140
|
+
# table_map: {Employee: :employees,
|
|
141
|
+
# Staff: :staff,
|
|
142
|
+
# Cook: :staff,
|
|
143
|
+
# Manager: :managers,
|
|
144
|
+
# Executive: :executives,
|
|
145
|
+
# CEO: :executives }
|
|
124
146
|
#
|
|
125
147
|
# # Using integers to store the class type, with a :model_map hash
|
|
126
148
|
# # and an sti_key of :type
|
|
127
|
-
# Employee.plugin :class_table_inheritance, :type,
|
|
128
|
-
# :
|
|
149
|
+
# Employee.plugin :class_table_inheritance, key: :type,
|
|
150
|
+
# model_map: {1=>:Staff, 2=>:Cook, 3=>:Manager, 4=>:Executive, 5=>:CEO}
|
|
129
151
|
#
|
|
130
152
|
# # Using non-class name strings
|
|
131
|
-
# Employee.plugin :class_table_inheritance, :
|
|
132
|
-
# :
|
|
153
|
+
# Employee.plugin :class_table_inheritance, key: :type,
|
|
154
|
+
# model_map: {'staff'=>:Staff, 'cook staff'=>:Cook, 'supervisor'=>:Manager}
|
|
133
155
|
#
|
|
134
156
|
# # By default the plugin sets the respective column value
|
|
135
157
|
# # when a new instance is created.
|
|
@@ -138,26 +160,26 @@ module Sequel
|
|
|
138
160
|
#
|
|
139
161
|
# # You can customize this behavior with the :key_chooser option.
|
|
140
162
|
# # This is most useful when using a non-bijective mapping.
|
|
141
|
-
# Employee.plugin :class_table_inheritance, :
|
|
142
|
-
# :
|
|
143
|
-
# :
|
|
163
|
+
# Employee.plugin :class_table_inheritance, key: :type,
|
|
164
|
+
# model_map: {'cook staff'=>:Cook, 'supervisor'=>:Manager},
|
|
165
|
+
# key_chooser: proc{|instance| instance.model.sti_key_map[instance.model.to_s].first || 'stranger' }
|
|
144
166
|
#
|
|
145
167
|
# # Using custom procs, with :model_map taking column values
|
|
146
168
|
# # and yielding either a class, string, symbol, or nil,
|
|
147
169
|
# # and :key_map taking a class object and returning the column
|
|
148
170
|
# # value to use
|
|
149
|
-
# Employee.plugin :single_table_inheritance, :
|
|
150
|
-
# :
|
|
151
|
-
# :
|
|
171
|
+
# Employee.plugin :single_table_inheritance, key: :type,
|
|
172
|
+
# model_map: proc{|v| v.reverse},
|
|
173
|
+
# key_map: proc{|klass| klass.name.reverse}
|
|
152
174
|
#
|
|
153
175
|
# # You can use the same class for multiple values.
|
|
154
176
|
# # This is mainly useful when the sti_key column contains multiple values
|
|
155
177
|
# # which are different but do not require different code.
|
|
156
|
-
# Employee.plugin :single_table_inheritance, :
|
|
157
|
-
# :
|
|
158
|
-
#
|
|
159
|
-
#
|
|
160
|
-
#
|
|
178
|
+
# Employee.plugin :single_table_inheritance, key: :type,
|
|
179
|
+
# model_map: {'staff' => "Staff",
|
|
180
|
+
# 'manager' => "Manager",
|
|
181
|
+
# 'overpayed staff' => "Staff",
|
|
182
|
+
# 'underpayed staff' => "Staff"}
|
|
161
183
|
#
|
|
162
184
|
# One minor issue to note is that if you specify the <tt>:key_map</tt>
|
|
163
185
|
# option as a hash, instead of having it inferred from the <tt>:model_map</tt>,
|
|
@@ -173,6 +195,8 @@ module Sequel
|
|
|
173
195
|
end
|
|
174
196
|
|
|
175
197
|
# Initialize the plugin using the following options:
|
|
198
|
+
# :alias :: Change the alias used for the subquery in model datasets.
|
|
199
|
+
# using this as the alias.
|
|
176
200
|
# :key :: Column symbol that holds the key that identifies the class to use.
|
|
177
201
|
# Necessary if you want to call model methods on a superclass
|
|
178
202
|
# that return subclass instances
|
|
@@ -180,32 +204,38 @@ module Sequel
|
|
|
180
204
|
# :key_map :: Hash or proc mapping model class names to key column values.
|
|
181
205
|
# Each value or return is an array of possible key column values.
|
|
182
206
|
# :key_chooser :: proc returning key for the provided model instance
|
|
183
|
-
# :table_map :: Hash with class name symbols keys mapping to table name symbol values
|
|
184
|
-
# Overrides implicit table names
|
|
207
|
+
# :table_map :: Hash with class name symbols keys mapping to table name symbol values.
|
|
208
|
+
# Overrides implicit table names.
|
|
209
|
+
# :ignore_subclass_columns :: Array with column names as symbols that are ignored
|
|
210
|
+
# on all sub-classes.
|
|
211
|
+
# :qualify_tables :: Boolean true to qualify automatically determined
|
|
212
|
+
# subclass tables with the same qualifier as their
|
|
213
|
+
# superclass.
|
|
185
214
|
def self.configure(model, opts = OPTS)
|
|
186
215
|
SingleTableInheritance.configure model, opts[:key], opts
|
|
187
216
|
|
|
188
|
-
model.
|
|
217
|
+
model.instance_exec do
|
|
189
218
|
@cti_models = [self]
|
|
190
219
|
@cti_tables = [table_name]
|
|
191
220
|
@cti_instance_dataset = @instance_dataset
|
|
192
221
|
@cti_table_columns = columns
|
|
193
222
|
@cti_table_map = opts[:table_map] || {}
|
|
223
|
+
@cti_alias = opts[:alias] || case source = @dataset.first_source
|
|
224
|
+
when SQL::QualifiedIdentifier
|
|
225
|
+
@dataset.unqualified_column_for(source)
|
|
226
|
+
else
|
|
227
|
+
source
|
|
228
|
+
end
|
|
229
|
+
@cti_ignore_subclass_columns = opts[:ignore_subclass_columns] || []
|
|
230
|
+
@cti_qualify_tables = !!opts[:qualify_tables]
|
|
194
231
|
end
|
|
195
232
|
end
|
|
196
233
|
|
|
197
234
|
module ClassMethods
|
|
198
|
-
# An array of each model in the inheritance hierarchy that
|
|
235
|
+
# An array of each model in the inheritance hierarchy that is
|
|
199
236
|
# backed by a new table.
|
|
200
237
|
attr_reader :cti_models
|
|
201
238
|
|
|
202
|
-
# The parent/root/base model for this class table inheritance hierarchy.
|
|
203
|
-
# This is the only model in the hierarchy that loads the
|
|
204
|
-
# class_table_inheritance plugin. For backwards compatibility.
|
|
205
|
-
def cti_base_model
|
|
206
|
-
@cti_models.first
|
|
207
|
-
end
|
|
208
|
-
|
|
209
239
|
# An array of column symbols for the backing database table,
|
|
210
240
|
# giving the columns to update in each backing database table.
|
|
211
241
|
attr_reader :cti_table_columns
|
|
@@ -215,67 +245,109 @@ module Sequel
|
|
|
215
245
|
attr_reader :cti_instance_dataset
|
|
216
246
|
|
|
217
247
|
# An array of table symbols that back this model. The first is
|
|
218
|
-
#
|
|
248
|
+
# table symbol for the base model, and the last is the current model
|
|
219
249
|
# table symbol.
|
|
220
250
|
attr_reader :cti_tables
|
|
221
251
|
|
|
222
252
|
# A hash with class name symbol keys and table name symbol values.
|
|
223
|
-
# Specified with the :table_map option to the plugin, and used if
|
|
253
|
+
# Specified with the :table_map option to the plugin, and should be used if
|
|
224
254
|
# the implicit naming is incorrect.
|
|
225
255
|
attr_reader :cti_table_map
|
|
226
256
|
|
|
227
|
-
#
|
|
228
|
-
#
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
257
|
+
# An array of columns that may be duplicated in sub-classes. The
|
|
258
|
+
# primary key column is always allowed to be duplicated
|
|
259
|
+
attr_reader :cti_ignore_subclass_columns
|
|
260
|
+
|
|
261
|
+
# A boolean indicating whether or not to automatically qualify tables
|
|
262
|
+
# backing subclasses with the same qualifier as their superclass, if
|
|
263
|
+
# the superclass is qualified. Specified with the :qualify_tables
|
|
264
|
+
# option to the plugin and only applied to automatically determined
|
|
265
|
+
# table names (not to the :table_map option).
|
|
266
|
+
attr_reader :cti_qualify_tables
|
|
267
|
+
|
|
268
|
+
# Freeze CTI information when freezing model class.
|
|
269
|
+
def freeze
|
|
270
|
+
@cti_models.freeze
|
|
271
|
+
@cti_tables.freeze
|
|
272
|
+
@cti_table_columns.freeze
|
|
273
|
+
@cti_table_map.freeze
|
|
274
|
+
@cti_ignore_subclass_columns.freeze
|
|
275
|
+
|
|
276
|
+
super
|
|
234
277
|
end
|
|
235
278
|
|
|
236
|
-
|
|
237
|
-
def cti_key; sti_key; end
|
|
279
|
+
Plugins.inherited_instance_variables(self, :@cti_models=>nil, :@cti_tables=>nil, :@cti_table_columns=>nil, :@cti_instance_dataset=>nil, :@cti_table_map=>nil, :@cti_alias=>nil, :@cti_ignore_subclass_columns=>nil, :@cti_qualify_tables=>nil)
|
|
238
280
|
|
|
239
|
-
#
|
|
240
|
-
def
|
|
281
|
+
# The table name for the current model class's main table.
|
|
282
|
+
def table_name
|
|
283
|
+
if cti_tables && cti_tables.length > 1
|
|
284
|
+
@cti_alias
|
|
285
|
+
else
|
|
286
|
+
super
|
|
287
|
+
end
|
|
288
|
+
end
|
|
241
289
|
|
|
242
|
-
|
|
290
|
+
# The name of the most recently joined table.
|
|
291
|
+
def cti_table_name
|
|
292
|
+
cti_tables.last
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# The model class for the given key value.
|
|
296
|
+
def sti_class_from_key(key)
|
|
297
|
+
sti_class(sti_model_map[key])
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
private
|
|
243
301
|
|
|
244
302
|
def inherited(subclass)
|
|
245
303
|
ds = sti_dataset
|
|
246
304
|
|
|
247
305
|
# Prevent inherited in model/base.rb from setting the dataset
|
|
248
|
-
subclass.
|
|
306
|
+
subclass.instance_exec { @dataset = nil }
|
|
249
307
|
|
|
250
308
|
super
|
|
251
309
|
|
|
252
310
|
# Set table if this is a class table inheritance
|
|
253
311
|
table = nil
|
|
254
312
|
columns = nil
|
|
255
|
-
if
|
|
313
|
+
if n = subclass.name
|
|
256
314
|
if table = cti_table_map[n.to_sym]
|
|
257
|
-
columns = db.
|
|
315
|
+
columns = db.schema(table).map(&:first)
|
|
258
316
|
else
|
|
259
|
-
table =
|
|
260
|
-
|
|
317
|
+
table = if cti_qualify_tables && (schema = dataset.schema_and_table(cti_table_name).first)
|
|
318
|
+
SQL::QualifiedIdentifier.new(schema, subclass.implicit_table_name)
|
|
319
|
+
else
|
|
320
|
+
subclass.implicit_table_name
|
|
321
|
+
end
|
|
322
|
+
columns = check_non_connection_error(false){db.schema(table) && db.schema(table).map(&:first)}
|
|
261
323
|
table = nil if !columns || columns.empty?
|
|
262
324
|
end
|
|
263
325
|
end
|
|
264
|
-
table = nil if table && (table ==
|
|
326
|
+
table = nil if table && (table == cti_table_name)
|
|
265
327
|
|
|
266
328
|
return unless table
|
|
267
329
|
|
|
268
330
|
pk = primary_key
|
|
269
|
-
subclass.
|
|
331
|
+
subclass.instance_exec do
|
|
270
332
|
if cti_tables.length == 1
|
|
271
|
-
ds = ds.select(*self.columns.map{|cc| Sequel.qualify(
|
|
333
|
+
ds = ds.select(*self.columns.map{|cc| Sequel.qualify(cti_table_name, Sequel.identifier(cc))})
|
|
334
|
+
end
|
|
335
|
+
ds.send(:columns=, self.columns)
|
|
336
|
+
cols = (columns - [pk]) - cti_ignore_subclass_columns
|
|
337
|
+
dup_cols = cols & ds.columns
|
|
338
|
+
unless dup_cols.empty?
|
|
339
|
+
raise Error, "class_table_inheritance with duplicate column names (other than the primary key column) is not supported, make sure tables have unique column names (duplicate columns: #{dup_cols}). If this is desired, specify these columns in the :ignore_subclass_columns option when initializing the plugin"
|
|
272
340
|
end
|
|
273
|
-
sel_app =
|
|
274
|
-
@sti_dataset = ds.join(table, pk=>pk).select_append(*sel_app)
|
|
275
|
-
|
|
341
|
+
sel_app = cols.map{|cc| Sequel.qualify(table, Sequel.identifier(cc))}
|
|
342
|
+
@sti_dataset = ds = ds.join(table, pk=>pk).select_append(*sel_app)
|
|
343
|
+
|
|
344
|
+
ds = ds.from_self(:alias=>@cti_alias)
|
|
345
|
+
ds.send(:columns=, self.columns + cols)
|
|
346
|
+
|
|
347
|
+
set_dataset(ds)
|
|
276
348
|
set_columns(self.columns)
|
|
277
|
-
dataset
|
|
278
|
-
|
|
349
|
+
@dataset = @dataset.with_row_proc(lambda{|r| subclass.sti_load(r)})
|
|
350
|
+
cols.each{|a| define_lazy_attribute_getter(a, :dataset=>dataset, :table=>@cti_alias)}
|
|
279
351
|
|
|
280
352
|
@cti_models += [self]
|
|
281
353
|
@cti_tables += [table]
|
|
@@ -285,16 +357,18 @@ module Sequel
|
|
|
285
357
|
cti_tables.reverse_each do |ct|
|
|
286
358
|
db.schema(ct).each{|sk,v| db_schema[sk] = v}
|
|
287
359
|
end
|
|
360
|
+
setup_auto_validations if respond_to?(:setup_auto_validations, true)
|
|
288
361
|
end
|
|
289
362
|
end
|
|
290
363
|
|
|
291
|
-
#
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
364
|
+
# If using a subquery for class table inheritance, also use a subquery
|
|
365
|
+
# when setting subclass dataset.
|
|
366
|
+
def sti_subclass_dataset(key)
|
|
367
|
+
ds = super
|
|
368
|
+
if cti_models[0] != self
|
|
369
|
+
ds = ds.from_self(:alias=>@cti_alias)
|
|
370
|
+
end
|
|
371
|
+
ds
|
|
298
372
|
end
|
|
299
373
|
end
|
|
300
374
|
|
|
@@ -309,29 +383,29 @@ module Sequel
|
|
|
309
383
|
self
|
|
310
384
|
end
|
|
311
385
|
|
|
312
|
-
private
|
|
313
|
-
|
|
314
|
-
def cti_this(model)
|
|
315
|
-
use_server(model.cti_instance_dataset.filter(model.primary_key_hash(pk)))
|
|
316
|
-
end
|
|
317
|
-
|
|
318
386
|
# Set the sti_key column based on the sti_key_map.
|
|
319
|
-
def
|
|
387
|
+
def before_validation
|
|
320
388
|
if new? && (set = self[model.sti_key])
|
|
321
389
|
exp = model.sti_key_chooser.call(self)
|
|
322
390
|
if set != exp
|
|
323
|
-
set_table = model.sti_class_from_key(set).
|
|
324
|
-
exp_table = model.sti_class_from_key(exp).
|
|
391
|
+
set_table = model.sti_class_from_key(set).cti_table_name
|
|
392
|
+
exp_table = model.sti_class_from_key(exp).cti_table_name
|
|
325
393
|
set_column_value("#{model.sti_key}=", exp) if set_table != exp_table
|
|
326
394
|
end
|
|
327
395
|
end
|
|
328
396
|
super
|
|
329
397
|
end
|
|
330
398
|
|
|
399
|
+
private
|
|
400
|
+
|
|
401
|
+
def cti_this(model)
|
|
402
|
+
use_server(model.cti_instance_dataset.where(model.primary_key_hash(pk)))
|
|
403
|
+
end
|
|
404
|
+
|
|
331
405
|
# Insert rows into all backing tables, using the columns
|
|
332
406
|
# in each table.
|
|
333
407
|
def _insert
|
|
334
|
-
return super if model.
|
|
408
|
+
return super if model.cti_models[0] == model
|
|
335
409
|
model.cti_models.each do |m|
|
|
336
410
|
v = {}
|
|
337
411
|
m.cti_table_columns.each{|c| v[c] = @values[c] if @values.include?(c)}
|
|
@@ -343,15 +417,20 @@ module Sequel
|
|
|
343
417
|
@values[primary_key] ||= nid
|
|
344
418
|
end
|
|
345
419
|
end
|
|
346
|
-
|
|
420
|
+
@values[primary_key]
|
|
347
421
|
end
|
|
348
422
|
|
|
349
423
|
# Update rows in all backing tables, using the columns in each table.
|
|
350
424
|
def _update(columns)
|
|
425
|
+
return super if model.cti_models[0] == model
|
|
351
426
|
model.cti_models.each do |m|
|
|
352
427
|
h = {}
|
|
353
428
|
m.cti_table_columns.each{|c| h[c] = columns[c] if columns.include?(c)}
|
|
354
|
-
|
|
429
|
+
unless h.empty?
|
|
430
|
+
ds = cti_this(m)
|
|
431
|
+
n = ds.update(h)
|
|
432
|
+
raise(NoExistingObject, "Attempt to update object did not result in a single row modification (SQL: #{ds.update_sql(h)})") if require_modification && n != 1
|
|
433
|
+
end
|
|
355
434
|
end
|
|
356
435
|
end
|
|
357
436
|
end
|
|
@@ -29,11 +29,16 @@ module Sequel
|
|
|
29
29
|
# # Make the Album class handle column conflicts automatically
|
|
30
30
|
# Album.plugin :column_conflicts
|
|
31
31
|
module ColumnConflicts
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
model.instance_eval do
|
|
32
|
+
def self.apply(model)
|
|
33
|
+
model.instance_exec do
|
|
35
34
|
@get_column_conflicts = {}
|
|
36
35
|
@set_column_conflicts = {}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Check for column conflicts on the current model if the model has a dataset.
|
|
40
|
+
def self.configure(model)
|
|
41
|
+
model.instance_exec do
|
|
37
42
|
check_column_conflicts if @dataset
|
|
38
43
|
end
|
|
39
44
|
end
|
|
@@ -60,6 +65,14 @@ module Sequel
|
|
|
60
65
|
columns.find_all{|c| mod.method_defined?("#{c}=")}.each{|c| set_column_conflict!(c)}
|
|
61
66
|
end
|
|
62
67
|
|
|
68
|
+
# Freeze column conflict information when freezing model class.
|
|
69
|
+
def freeze
|
|
70
|
+
@get_column_conflicts.freeze
|
|
71
|
+
@set_column_conflicts.freeze
|
|
72
|
+
|
|
73
|
+
super
|
|
74
|
+
end
|
|
75
|
+
|
|
63
76
|
# Set the given column as one with a getter method conflict.
|
|
64
77
|
def get_column_conflict!(column)
|
|
65
78
|
@get_column_conflicts[column.to_sym] = @get_column_conflicts[column.to_s] = column.to_sym
|