sequel 4.36.0 → 5.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -203
- data/spec/core/schema_spec.rb +0 -1676
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -728
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -65
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -390
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -275
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -473
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -814
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/uuid_spec.rb +0 -106
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -554
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
@@ -1,42 +1,35 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
4
|
-
# :nocov:
|
5
|
-
require 'fastercsv'
|
6
|
-
# :nocov:
|
7
|
-
else
|
8
|
-
require 'csv'
|
9
|
-
end
|
3
|
+
require 'csv'
|
10
4
|
|
11
5
|
module Sequel
|
12
6
|
module Plugins
|
13
7
|
# csv_serializer handles serializing entire Sequel::Model objects to CSV,
|
14
8
|
# as well as support for deserializing CSV directly into Sequel::Model
|
15
|
-
# objects. It requires
|
16
|
-
# or the fastercsv gem when using ruby 1.8.
|
9
|
+
# objects. It requires the csv standard library.
|
17
10
|
#
|
18
11
|
# Basic Example:
|
19
12
|
#
|
20
13
|
# album = Album[1]
|
21
|
-
# album.to_csv(:
|
14
|
+
# album.to_csv(write_headers: true)
|
22
15
|
# # => "id,name,artist_id\n1,RF,2\n"
|
23
16
|
#
|
24
17
|
# You can provide options to control the CSV output:
|
25
18
|
#
|
26
|
-
# album.to_csv(:
|
27
|
-
# album.to_csv(:
|
19
|
+
# album.to_csv(only: :name)
|
20
|
+
# album.to_csv(except: [:id, :artist_id])
|
28
21
|
# # => "RF\n"
|
29
22
|
#
|
30
23
|
# +to_csv+ also exists as a class and dataset method, both of which return
|
31
24
|
# all objects in the dataset:
|
32
25
|
#
|
33
26
|
# Album.to_csv
|
34
|
-
# Album.
|
27
|
+
# Album.where(artist_id: 1).to_csv
|
35
28
|
#
|
36
|
-
# If you have an existing array of model
|
29
|
+
# If you have an existing array of model instances you want to convert to
|
37
30
|
# CSV, you can call the class to_csv method with the :array option:
|
38
31
|
#
|
39
|
-
# Album.to_csv(:
|
32
|
+
# Album.to_csv(array: [Album[1], Album[2]])
|
40
33
|
#
|
41
34
|
# In addition to creating CSV, this plugin also enables Sequel::Model
|
42
35
|
# classes to create instances directly from CSV using the from_csv class
|
@@ -48,7 +41,7 @@ module Sequel
|
|
48
41
|
# The array_from_csv class method exists to parse arrays of model instances
|
49
42
|
# from CSV:
|
50
43
|
#
|
51
|
-
# csv = Album.
|
44
|
+
# csv = Album.where(artist_id: 1).to_csv
|
52
45
|
# albums = Album.array_from_csv(csv)
|
53
46
|
#
|
54
47
|
# These do not necessarily round trip, since doing so would let users
|
@@ -56,7 +49,7 @@ module Sequel
|
|
56
49
|
# call set with the values in the hash. If you want to specify the allowed
|
57
50
|
# fields, you can use the :headers option.
|
58
51
|
#
|
59
|
-
# Album.from_csv(album.to_csv, :
|
52
|
+
# Album.from_csv(album.to_csv, headers: %w'id name')
|
60
53
|
#
|
61
54
|
# If you want to update an existing instance, you can use the from_csv
|
62
55
|
# instance method:
|
@@ -72,14 +65,30 @@ module Sequel
|
|
72
65
|
# # Add CSV output capability to Album class instances
|
73
66
|
# Album.plugin :csv_serializer
|
74
67
|
module CsvSerializer
|
75
|
-
CSV = Object.const_defined?(:CSV) ? ::CSV : ::FasterCSV
|
76
|
-
|
77
68
|
# Set up the column readers to do deserialization and the column writers
|
78
69
|
# to save the value in deserialized_values
|
79
|
-
def self.configure(model, opts =
|
80
|
-
model.
|
81
|
-
@csv_serializer_opts = (@csv_serializer_opts ||
|
70
|
+
def self.configure(model, opts = OPTS)
|
71
|
+
model.instance_exec do
|
72
|
+
@csv_serializer_opts = (@csv_serializer_opts || OPTS).merge(opts)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Avoid keyword argument separation warnings on Ruby 2.7, while still
|
77
|
+
# being compatible with 1.9.
|
78
|
+
if RUBY_VERSION >= "2.0"
|
79
|
+
instance_eval(<<-END, __FILE__, __LINE__+1)
|
80
|
+
def self.csv_call(*args, opts, &block)
|
81
|
+
CSV.send(*args, **opts, &block)
|
82
|
+
end
|
83
|
+
END
|
84
|
+
else
|
85
|
+
# :nocov:
|
86
|
+
# :nodoc:
|
87
|
+
def self.csv_call(*args, opts, &block)
|
88
|
+
CSV.send(*args, opts, &block)
|
82
89
|
end
|
90
|
+
# :nodoc:
|
91
|
+
# :nocov:
|
83
92
|
end
|
84
93
|
|
85
94
|
module ClassMethods
|
@@ -87,26 +96,36 @@ module Sequel
|
|
87
96
|
attr_reader :csv_serializer_opts
|
88
97
|
|
89
98
|
# Attempt to parse an array of instances from the given CSV string
|
90
|
-
def array_from_csv(csv, opts =
|
91
|
-
|
99
|
+
def array_from_csv(csv, opts = OPTS)
|
100
|
+
CsvSerializer.csv_call(:parse, csv, process_csv_serializer_opts(opts)).map do |row|
|
92
101
|
row = row.to_hash
|
93
102
|
row.delete(nil)
|
94
103
|
new(row)
|
95
104
|
end
|
96
105
|
end
|
97
106
|
|
107
|
+
# Freeze csv serializier opts when freezing model class
|
108
|
+
def freeze
|
109
|
+
@csv_serializer_opts.freeze.each_value do |v|
|
110
|
+
v.freeze if v.is_a?(Array) || v.is_a?(Hash)
|
111
|
+
end
|
112
|
+
|
113
|
+
super
|
114
|
+
end
|
115
|
+
|
98
116
|
# Attempt to parse a single instance from the given CSV string
|
99
|
-
def from_csv(csv, opts =
|
117
|
+
def from_csv(csv, opts = OPTS)
|
100
118
|
new.from_csv(csv, opts)
|
101
119
|
end
|
102
120
|
|
103
121
|
# Convert the options hash to one that can be passed to CSV.
|
104
122
|
def process_csv_serializer_opts(opts)
|
105
|
-
opts = (csv_serializer_opts ||
|
123
|
+
opts = (csv_serializer_opts || OPTS).merge(opts)
|
106
124
|
opts_cols = opts.delete(:columns)
|
107
125
|
opts_include = opts.delete(:include)
|
108
126
|
opts_except = opts.delete(:except)
|
109
|
-
|
127
|
+
only = opts.delete(:only)
|
128
|
+
opts[:headers] ||= Array(only || opts_cols || columns) + Array(opts_include) - Array(opts_except)
|
110
129
|
opts
|
111
130
|
end
|
112
131
|
|
@@ -127,8 +146,8 @@ module Sequel
|
|
127
146
|
#
|
128
147
|
# :headers :: The headers to use for the CSV line. Use nil for a header
|
129
148
|
# to specify the column should be ignored.
|
130
|
-
def from_csv(csv, opts =
|
131
|
-
row =
|
149
|
+
def from_csv(csv, opts = OPTS)
|
150
|
+
row = CsvSerializer.csv_call(:parse_line, csv, model.process_csv_serializer_opts(opts)).to_hash
|
132
151
|
row.delete(nil)
|
133
152
|
set(row)
|
134
153
|
end
|
@@ -142,11 +161,12 @@ module Sequel
|
|
142
161
|
# output, ignoring all other columns
|
143
162
|
# :include :: Symbol or Array of Symbols specifying non-column
|
144
163
|
# attributes to include in the CSV output.
|
145
|
-
def to_csv(opts =
|
164
|
+
def to_csv(opts = OPTS)
|
146
165
|
opts = model.process_csv_serializer_opts(opts)
|
166
|
+
headers = opts[:headers]
|
147
167
|
|
148
|
-
|
149
|
-
csv <<
|
168
|
+
CsvSerializer.csv_call(:generate, model.process_csv_serializer_opts(opts)) do |csv|
|
169
|
+
csv << headers.map{|k| public_send(k)}
|
150
170
|
end
|
151
171
|
end
|
152
172
|
end
|
@@ -159,13 +179,14 @@ module Sequel
|
|
159
179
|
#
|
160
180
|
# :array :: An array of instances. If this is not provided, calls #all
|
161
181
|
# on the receiver to get the array.
|
162
|
-
def to_csv(opts =
|
182
|
+
def to_csv(opts = OPTS)
|
163
183
|
opts = model.process_csv_serializer_opts({:columns=>columns}.merge!(opts))
|
164
184
|
items = opts.delete(:array) || self
|
185
|
+
headers = opts[:headers]
|
165
186
|
|
166
|
-
|
187
|
+
CsvSerializer.csv_call(:generate, opts) do |csv|
|
167
188
|
items.each do |object|
|
168
|
-
csv <<
|
189
|
+
csv << headers.map{|header| object.public_send(header)}
|
169
190
|
end
|
170
191
|
end
|
171
192
|
end
|
@@ -12,7 +12,7 @@ module Sequel
|
|
12
12
|
# plugin :dataset_associations
|
13
13
|
# one_to_many :albums
|
14
14
|
# end
|
15
|
-
# Artist.
|
15
|
+
# Artist.where(id: 1..100).albums
|
16
16
|
# # SELECT * FROM albums
|
17
17
|
# # WHERE (albums.artist_id IN (
|
18
18
|
# # SELECT id FROM artists
|
@@ -27,7 +27,7 @@ module Sequel
|
|
27
27
|
# As the dataset methods return datasets, you can easily chain the
|
28
28
|
# methods to get associated datasets of associated datasets:
|
29
29
|
#
|
30
|
-
# Artist.
|
30
|
+
# Artist.where(id: 1..100).albums.where{name < 'M'}.tags
|
31
31
|
# # SELECT tags.* FROM tags
|
32
32
|
# # WHERE (tags.id IN (
|
33
33
|
# # SELECT albums_tags.tag_id FROM albums
|
@@ -62,7 +62,10 @@ module Sequel
|
|
62
62
|
ret = super
|
63
63
|
r = association_reflection(name)
|
64
64
|
meth = r.returns_array? ? name : pluralize(name).to_sym
|
65
|
-
|
65
|
+
dataset_module do
|
66
|
+
define_method(meth){associated(name)}
|
67
|
+
alias_method(meth, meth)
|
68
|
+
end
|
66
69
|
ret
|
67
70
|
end
|
68
71
|
|
@@ -83,29 +86,49 @@ module Sequel
|
|
83
86
|
sds = opts[:limit] ? self : unordered
|
84
87
|
ds = case r[:type]
|
85
88
|
when :many_to_one
|
86
|
-
ds.
|
89
|
+
ds.where(r.qualified_primary_key=>sds.select(*Array(r[:qualified_key])))
|
87
90
|
when :one_to_one, :one_to_many
|
88
|
-
r.send(:apply_filter_by_associations_limit_strategy, ds.
|
91
|
+
r.send(:apply_filter_by_associations_limit_strategy, ds.where(r.qualified_key=>sds.select(*Array(r.qualified_primary_key))))
|
89
92
|
when :many_to_many, :one_through_one
|
90
93
|
mds = r.associated_class.dataset.
|
91
94
|
join(r[:join_table], r[:right_keys].zip(r.right_primary_keys)).
|
92
95
|
select(*Array(r.qualified_right_key)).
|
93
96
|
where(r.qualify(r.join_table_alias, r[:left_keys])=>sds.select(*r.qualify(model.table_name, r[:left_primary_key_columns])))
|
94
|
-
ds.
|
97
|
+
ds.where(r.qualified_right_primary_key=>r.send(:apply_filter_by_associations_limit_strategy, mds))
|
95
98
|
when :many_through_many, :one_through_many
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
99
|
+
if r.reverse_edges.empty?
|
100
|
+
mds = r.associated_dataset
|
101
|
+
fe = r.edges.first
|
102
|
+
selection = Array(r.qualify(fe[:table], r.final_edge[:left]))
|
103
|
+
predicate_key = r.qualify(fe[:table], fe[:right])
|
104
|
+
else
|
105
|
+
mds = model.dataset
|
106
|
+
iq = model.table_name
|
107
|
+
edges = r.edges.map(&:dup)
|
108
|
+
edges << r.final_edge.dup
|
109
|
+
edges.each do |e|
|
110
|
+
alias_expr = e[:table]
|
111
|
+
aliaz = mds.unused_table_alias(e[:table])
|
112
|
+
unless aliaz == alias_expr
|
113
|
+
alias_expr = Sequel.as(e[:table], aliaz)
|
114
|
+
end
|
115
|
+
e[:alias] = aliaz
|
116
|
+
mds = mds.join(alias_expr, Array(e[:right]).zip(Array(e[:left])), :implicit_qualifier=>iq)
|
117
|
+
iq = nil
|
118
|
+
end
|
119
|
+
fe, f1e, f2e = edges.values_at(0, -1, -2)
|
120
|
+
selection = Array(r.qualify(f2e[:alias], f1e[:left]))
|
121
|
+
predicate_key = r.qualify(fe[:alias], fe[:right])
|
122
|
+
end
|
123
|
+
|
124
|
+
mds = mds.
|
125
|
+
select(*selection).
|
126
|
+
where(predicate_key=>sds.select(*r.qualify(model.table_name, r[:left_primary_key_columns])))
|
127
|
+
ds.where(r.qualified_right_primary_key=>r.send(:apply_filter_by_associations_limit_strategy, mds))
|
105
128
|
when :pg_array_to_many
|
106
|
-
ds.
|
129
|
+
ds.where(Sequel[r.primary_key=>sds.select{Sequel.pg_array_op(r.qualify(r[:model].table_name, r[:key])).unnest}])
|
107
130
|
when :many_to_pg_array
|
108
|
-
ds.
|
131
|
+
ds.where(Sequel.function(:coalesce, Sequel.pg_array_op(r[:key]).overlaps(sds.select{array_agg(r.qualify(r[:model].table_name, r.primary_key))}), false))
|
109
132
|
else
|
110
133
|
raise Error, "unrecognized association type for association #{name.inspect}: #{r[:type].inspect}"
|
111
134
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
module Plugins
|
5
|
+
# The def_dataset_method plugin adds Model.def_dataset_method
|
6
|
+
# for defining dataset methods:
|
7
|
+
#
|
8
|
+
# Album.def_dataset_method(:by_name) do |name|
|
9
|
+
# where(name: name)
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# Additionally, this adds support for Model.subset, which can also
|
13
|
+
# be used to define dataset methods that add specific filters:
|
14
|
+
#
|
15
|
+
# Album.subset(:gold){copies_sold >= 500000}
|
16
|
+
#
|
17
|
+
# This exists for backwards compatibility with previous Sequel versions.
|
18
|
+
#
|
19
|
+
# Usage:
|
20
|
+
#
|
21
|
+
# # Make all model subclasses support Model.def_dataset_method
|
22
|
+
# # (called before loading subclasses)
|
23
|
+
# Sequel::Model.plugin :def_dataset_method
|
24
|
+
#
|
25
|
+
# # Make the Album class support Model.def_dataset_method
|
26
|
+
# Album.plugin :def_dataset_method
|
27
|
+
module DefDatasetMethod
|
28
|
+
module ClassMethods
|
29
|
+
# If a block is given, define a method on the dataset (if the model currently has an dataset) with the given argument name using
|
30
|
+
# the given block. Also define a class method on the model that calls the
|
31
|
+
# dataset method. Stores the method name and block so that it can be reapplied if the model's
|
32
|
+
# dataset changes.
|
33
|
+
#
|
34
|
+
# If a block is not given, just define a class method on the model for each argument
|
35
|
+
# that calls the dataset method of the same argument name.
|
36
|
+
#
|
37
|
+
# Using dataset_module is recommended over using this method. In addition to allowing
|
38
|
+
# more natural ruby syntax for defining methods manually, it also offers numerous
|
39
|
+
# helper methods that make defining common dataset methods more easily, as well as
|
40
|
+
# supporting dataset caching (assuming the arguments allow it).
|
41
|
+
#
|
42
|
+
# # Add new dataset method and class method that calls it
|
43
|
+
# Artist.def_dataset_method(:by_name){order(:name)}
|
44
|
+
# Artist.where(Sequel[:name].like('A%')).by_name
|
45
|
+
# Artist.by_name.where(Sequel[:name].like('A%'))
|
46
|
+
#
|
47
|
+
# # Just add a class method that calls an existing dataset method
|
48
|
+
# Artist.def_dataset_method(:paginate)
|
49
|
+
# Artist.paginate(2, 10)
|
50
|
+
def def_dataset_method(*args, &block)
|
51
|
+
raise(Error, "No arguments given") if args.empty?
|
52
|
+
|
53
|
+
if block
|
54
|
+
raise(Error, "Defining a dataset method using a block requires only one argument") if args.length > 1
|
55
|
+
dataset_module{define_method(args.first, &block)}
|
56
|
+
else
|
57
|
+
args.each{|arg| def_model_dataset_method(arg)}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Sets up a dataset method that returns a filtered dataset.
|
62
|
+
# Sometimes thought of as a scope, and like most dataset methods,
|
63
|
+
# they can be chained.
|
64
|
+
# For example:
|
65
|
+
#
|
66
|
+
# Topic.subset(:joes, Sequel[:username].like('%joe%'))
|
67
|
+
# Topic.subset(:popular){num_posts > 100}
|
68
|
+
# Topic.subset(:recent){created_on > Date.today - 7}
|
69
|
+
#
|
70
|
+
# Allows you to do:
|
71
|
+
#
|
72
|
+
# Topic.joes.recent.popular
|
73
|
+
#
|
74
|
+
# to get topics with a username that includes joe that
|
75
|
+
# have more than 100 posts and were created less than
|
76
|
+
# 7 days ago.
|
77
|
+
#
|
78
|
+
# Both the args given and the block are passed to <tt>Dataset#where</tt>.
|
79
|
+
#
|
80
|
+
# This method creates dataset methods that do not accept arguments. To create
|
81
|
+
# dataset methods that accept arguments, you should use define a
|
82
|
+
# method directly inside a #dataset_module block.
|
83
|
+
def subset(*args, &block)
|
84
|
+
dataset_module{subset(*args, &block)}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
@@ -10,9 +10,37 @@ module Sequel
|
|
10
10
|
# album = Album.new
|
11
11
|
# album.a # => nil
|
12
12
|
# album.b # => 2
|
13
|
-
# album = Album.new(:
|
13
|
+
# album = Album.new(a: 1, b: 3)
|
14
14
|
# album.a # => 1
|
15
15
|
# album.b # => 3
|
16
|
+
#
|
17
|
+
# You can manually set default values as well:
|
18
|
+
#
|
19
|
+
# Album.default_values[:a] = 4
|
20
|
+
# Album.new.a # => 4
|
21
|
+
#
|
22
|
+
# You can also provide procs to set default values:
|
23
|
+
#
|
24
|
+
# Album.default_values[:a] = lambda{Date.today}
|
25
|
+
# Album.new.a # => Date.today
|
26
|
+
#
|
27
|
+
# By default, default values returned are not cached:
|
28
|
+
#
|
29
|
+
# Album.new.a.equal?(Album.new.a) # => false
|
30
|
+
#
|
31
|
+
# However, you can turn on caching of default values:
|
32
|
+
#
|
33
|
+
# Album.plugin :defaults_setter, cache: true
|
34
|
+
# Album.new.a.equal?(Album.new.a) # => false
|
35
|
+
#
|
36
|
+
# Note that if the cache is turned on, the cached values are stored in
|
37
|
+
# the values hash:
|
38
|
+
#
|
39
|
+
# Album.plugin :defaults_setter, cache: true
|
40
|
+
# album = Album.new
|
41
|
+
# album.values # => {}
|
42
|
+
# album.a
|
43
|
+
# album.values # => {:a => Date.today}
|
16
44
|
#
|
17
45
|
# Usage:
|
18
46
|
#
|
@@ -22,27 +50,52 @@ module Sequel
|
|
22
50
|
# # Make the Album class set defaults
|
23
51
|
# Album.plugin :defaults_setter
|
24
52
|
module DefaultsSetter
|
25
|
-
# Set the default values based on the model schema
|
26
|
-
|
27
|
-
|
53
|
+
# Set the default values based on the model schema. Options:
|
54
|
+
# :cache :: Cache default values returned in the model's values hash.
|
55
|
+
def self.configure(model, opts=OPTS)
|
56
|
+
model.instance_exec do
|
57
|
+
set_default_values
|
58
|
+
@cache_default_values = opts[:cache] if opts.has_key?(:cache)
|
59
|
+
end
|
28
60
|
end
|
29
61
|
|
30
62
|
module ClassMethods
|
31
|
-
# The default values to
|
63
|
+
# The default values to use for this model. A hash with column symbol
|
32
64
|
# keys and default values. If the default values respond to +call+, it will be called
|
33
65
|
# to get the value, otherwise the value will be used directly. You can manually modify
|
34
66
|
# this hash to set specific default values, by default the ones will be parsed from the database.
|
35
67
|
attr_reader :default_values
|
36
|
-
|
68
|
+
|
37
69
|
Plugins.after_set_dataset(self, :set_default_values)
|
38
70
|
|
71
|
+
Plugins.inherited_instance_variables(self, :@default_values=>:dup, :@cache_default_values=>nil)
|
72
|
+
|
73
|
+
# Whether default values should be cached in the values hash after being retrieved.
|
74
|
+
def cache_default_values?
|
75
|
+
@cache_default_values
|
76
|
+
end
|
77
|
+
|
78
|
+
# Freeze default values when freezing model class
|
79
|
+
def freeze
|
80
|
+
@default_values.freeze
|
81
|
+
super
|
82
|
+
end
|
83
|
+
|
39
84
|
private
|
40
85
|
|
41
86
|
# Parse the cached database schema for this model and set the default values appropriately.
|
42
87
|
def set_default_values
|
43
88
|
h = {}
|
44
|
-
|
45
|
-
|
89
|
+
if @db_schema
|
90
|
+
@db_schema.each do |k, v|
|
91
|
+
if v[:callable_default]
|
92
|
+
h[k] = v[:callable_default]
|
93
|
+
elsif !v[:ruby_default].nil?
|
94
|
+
h[k] = convert_default_value(v[:ruby_default])
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
@default_values = h.merge!(@default_values || OPTS)
|
46
99
|
end
|
47
100
|
|
48
101
|
# Handle the CURRENT_DATE and CURRENT_TIMESTAMP values specially by returning an appropriate Date or
|
@@ -63,8 +116,10 @@ module Sequel
|
|
63
116
|
# Use default value for a new record if values doesn't already contain an entry for it.
|
64
117
|
def [](k)
|
65
118
|
if new? && !values.has_key?(k)
|
66
|
-
v = model.default_values
|
67
|
-
v
|
119
|
+
v = model.default_values.fetch(k){return}
|
120
|
+
v = v.call if v.respond_to?(:call)
|
121
|
+
values[k] = v if model.cache_default_values?
|
122
|
+
v
|
68
123
|
else
|
69
124
|
super
|
70
125
|
end
|
@@ -40,7 +40,7 @@ module Sequel
|
|
40
40
|
if opts.dataset_need_primary_key? && new?
|
41
41
|
o = make_add_associated_object(opts, o)
|
42
42
|
delay_validate_associated_object(opts, o)
|
43
|
-
|
43
|
+
public_send(opts[:name]) << o
|
44
44
|
after_create_hook{super(opts, o, *args)}
|
45
45
|
o
|
46
46
|
else
|
data/lib/sequel/plugins/dirty.rb
CHANGED
@@ -41,6 +41,15 @@ module Sequel
|
|
41
41
|
# artist.column_changes # => {}
|
42
42
|
# artist.previous_changes # => {:name=>['Foo', 'Bar']}
|
43
43
|
#
|
44
|
+
# artist.column_previously_was(:name)
|
45
|
+
# # => 'Foo'
|
46
|
+
# artist.column_previously_changed?(:name)
|
47
|
+
# # => true
|
48
|
+
# artist.column_previously_changed?(:name, from: 'Foo', to: 'Bar')
|
49
|
+
# # => true
|
50
|
+
# artist.column_previously_changed?(:name, from: 'Foo', to: 'Baz')
|
51
|
+
# # => false
|
52
|
+
#
|
44
53
|
# There is one caveat; when used with a column that also uses the
|
45
54
|
# serialization plugin, setting the column back to its original value
|
46
55
|
# after changing it is not correctly detected and will leave an entry
|
@@ -61,6 +70,19 @@ module Sequel
|
|
61
70
|
# that were used in the update statement.
|
62
71
|
attr_reader :previous_changes
|
63
72
|
|
73
|
+
# Reset the initial values after saving.
|
74
|
+
def after_save
|
75
|
+
super
|
76
|
+
reset_initial_values
|
77
|
+
end
|
78
|
+
|
79
|
+
# Save the current changes so they are available after updating. This happens
|
80
|
+
# before after_save resets them.
|
81
|
+
def after_update
|
82
|
+
super
|
83
|
+
@previous_changes = column_changes
|
84
|
+
end
|
85
|
+
|
64
86
|
# An array with the initial value and the current value
|
65
87
|
# of the column, if the column has been changed. If the
|
66
88
|
# column has not been changed, returns nil.
|
@@ -92,6 +114,41 @@ module Sequel
|
|
92
114
|
initial_values.has_key?(column)
|
93
115
|
end
|
94
116
|
|
117
|
+
# Whether the column was previously changed.
|
118
|
+
# Options:
|
119
|
+
# :from :: If given, the previous initial value of the column must match this
|
120
|
+
# :to :: If given, the previous changed value of the column must match this
|
121
|
+
#
|
122
|
+
# update(name: 'Current')
|
123
|
+
# previous_changes # => {:name=>['Initial', 'Current']}
|
124
|
+
# column_previously_changed?(:name) # => true
|
125
|
+
# column_previously_changed?(:id) # => false
|
126
|
+
# column_previously_changed?(:name, from: 'Initial', to: 'Current') # => true
|
127
|
+
# column_previously_changed?(:name, from: 'Foo', to: 'Current') # => false
|
128
|
+
def column_previously_changed?(column, opts=OPTS)
|
129
|
+
return false unless (pc = @previous_changes) && (val = pc[column])
|
130
|
+
|
131
|
+
if opts.has_key?(:from)
|
132
|
+
return false unless val[0] == opts[:from]
|
133
|
+
end
|
134
|
+
|
135
|
+
if opts.has_key?(:to)
|
136
|
+
return false unless val[1] == opts[:to]
|
137
|
+
end
|
138
|
+
|
139
|
+
true
|
140
|
+
end
|
141
|
+
|
142
|
+
# The previous value of the column, which is the initial value of
|
143
|
+
# the column before the object was previously saved.
|
144
|
+
#
|
145
|
+
# initial_value(:name) # => 'Initial'
|
146
|
+
# update(name: 'Current')
|
147
|
+
# column_previously_was(:name) # => 'Initial'
|
148
|
+
def column_previously_was(column)
|
149
|
+
(pc = @previous_changes) && (val = pc[column]) && val[0]
|
150
|
+
end
|
151
|
+
|
95
152
|
# Freeze internal data structures
|
96
153
|
def freeze
|
97
154
|
initial_values.freeze
|
@@ -137,7 +194,7 @@ module Sequel
|
|
137
194
|
# name.gsub(/i/i, 'o')
|
138
195
|
# column_change(:name) # => ['Initial', 'onotoal']
|
139
196
|
def will_change_column(column)
|
140
|
-
|
197
|
+
_add_changed_column(column)
|
141
198
|
check_missing_initial_value(column)
|
142
199
|
|
143
200
|
value = if initial_values.has_key?(column)
|
@@ -159,23 +216,10 @@ module Sequel
|
|
159
216
|
|
160
217
|
private
|
161
218
|
|
162
|
-
# Reset
|
163
|
-
def
|
164
|
-
reset_initial_values
|
165
|
-
super
|
166
|
-
end
|
167
|
-
|
168
|
-
# Reset the initial values after saving.
|
169
|
-
def after_save
|
170
|
-
super
|
171
|
-
reset_initial_values
|
172
|
-
end
|
173
|
-
|
174
|
-
# Save the current changes so they are available after updating. This happens
|
175
|
-
# before after_save resets them.
|
176
|
-
def after_update
|
219
|
+
# Reset initial values when clearing changed columns
|
220
|
+
def _clear_changed_columns(reason)
|
221
|
+
reset_initial_values if reason == :initialize || reason == :refresh
|
177
222
|
super
|
178
|
-
@previous_changes = column_changes
|
179
223
|
end
|
180
224
|
|
181
225
|
# When changing the column value, save the initial column value. If the column
|
@@ -186,7 +230,7 @@ module Sequel
|
|
186
230
|
initial = iv[column]
|
187
231
|
super
|
188
232
|
if value == initial
|
189
|
-
|
233
|
+
_changed_columns.delete(column) unless missing_initial_values.include?(column)
|
190
234
|
iv.delete(column)
|
191
235
|
end
|
192
236
|
else
|
@@ -214,12 +258,6 @@ module Sequel
|
|
214
258
|
self
|
215
259
|
end
|
216
260
|
|
217
|
-
# Reset the initial values when initializing.
|
218
|
-
def initialize_set(h)
|
219
|
-
super
|
220
|
-
reset_initial_values
|
221
|
-
end
|
222
|
-
|
223
261
|
# Array holding column symbols that were not present initially. This is necessary
|
224
262
|
# to differentiate between values that were not present and values that were
|
225
263
|
# present but equal to nil.
|
@@ -30,16 +30,16 @@ module Sequel
|
|
30
30
|
module EagerEach
|
31
31
|
module DatasetMethods
|
32
32
|
# Don't call #all when attempting to load the columns.
|
33
|
-
def columns
|
33
|
+
def columns!
|
34
34
|
if use_eager_all?
|
35
|
-
clone(:all_called=>true).columns
|
35
|
+
clone(:all_called=>true).columns!
|
36
36
|
else
|
37
37
|
super
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
# Call #all instead of #each if eager loading,
|
42
|
-
#
|
42
|
+
# unless #each is being called by #all.
|
43
43
|
def each(&block)
|
44
44
|
if use_eager_all?
|
45
45
|
all(&block)
|