sequel 5.8.0 → 5.38.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 +4 -4
- data/CHANGELOG +409 -1795
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -4
- data/bin/sequel +4 -0
- data/doc/advanced_associations.rdoc +136 -18
- data/doc/association_basics.rdoc +10 -5
- data/doc/cheat_sheet.rdoc +1 -0
- data/doc/code_order.rdoc +12 -2
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/mass_assignment.rdoc +3 -3
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +30 -8
- data/doc/postgresql.rdoc +107 -2
- 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.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.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.9.0.txt +99 -0
- data/doc/security.rdoc +10 -0
- data/doc/sharding.rdoc +42 -28
- data/doc/sql.rdoc +12 -0
- data/doc/testing.rdoc +24 -17
- data/doc/transactions.rdoc +78 -0
- data/doc/validations.rdoc +2 -2
- data/lib/sequel/adapters/ado.rb +26 -18
- data/lib/sequel/adapters/ado/access.rb +2 -2
- data/lib/sequel/adapters/ado/mssql.rb +5 -8
- data/lib/sequel/adapters/amalgalite.rb +1 -1
- data/lib/sequel/adapters/jdbc.rb +71 -27
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/oracle.rb +7 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +17 -28
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +5 -6
- data/lib/sequel/adapters/jdbc/sqlite.rb +33 -2
- data/lib/sequel/adapters/jdbc/sqlserver.rb +4 -3
- data/lib/sequel/adapters/jdbc/transactions.rb +14 -28
- data/lib/sequel/adapters/mysql.rb +14 -15
- data/lib/sequel/adapters/mysql2.rb +5 -3
- data/lib/sequel/adapters/odbc.rb +4 -6
- data/lib/sequel/adapters/oracle.rb +7 -7
- data/lib/sequel/adapters/postgres.rb +52 -16
- data/lib/sequel/adapters/shared/access.rb +16 -12
- data/lib/sequel/adapters/shared/db2.rb +5 -0
- data/lib/sequel/adapters/shared/mssql.rb +41 -18
- data/lib/sequel/adapters/shared/mysql.rb +66 -19
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +341 -95
- data/lib/sequel/adapters/shared/sqlanywhere.rb +23 -10
- data/lib/sequel/adapters/shared/sqlite.rb +174 -21
- data/lib/sequel/adapters/sqlanywhere.rb +33 -17
- data/lib/sequel/adapters/sqlite.rb +78 -68
- data/lib/sequel/adapters/tinytds.rb +14 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +2 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +5 -1
- data/lib/sequel/connection_pool.rb +2 -6
- data/lib/sequel/connection_pool/sharded_single.rb +7 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +32 -21
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +26 -11
- data/lib/sequel/core.rb +327 -319
- data/lib/sequel/database/connecting.rb +7 -8
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +68 -34
- data/lib/sequel/database/query.rb +6 -4
- data/lib/sequel/database/schema_generator.rb +31 -11
- data/lib/sequel/database/schema_methods.rb +32 -22
- data/lib/sequel/database/transactions.rb +129 -25
- data/lib/sequel/dataset.rb +4 -2
- data/lib/sequel/dataset/actions.rb +34 -23
- data/lib/sequel/dataset/features.rb +34 -0
- data/lib/sequel/dataset/graph.rb +27 -11
- data/lib/sequel/dataset/misc.rb +17 -3
- data/lib/sequel/dataset/placeholder_literalizer.rb +50 -21
- data/lib/sequel/dataset/prepared_statements.rb +96 -26
- data/lib/sequel/dataset/query.rb +43 -8
- data/lib/sequel/dataset/sql.rb +189 -41
- data/lib/sequel/deprecated.rb +3 -1
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +1 -2
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +6 -6
- data/lib/sequel/extensions/connection_validator.rb +7 -6
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +53 -28
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -0
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +3 -1
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/integer64.rb +3 -1
- data/lib/sequel/extensions/looser_typecasting.rb +3 -3
- data/lib/sequel/extensions/migration.rb +13 -6
- data/lib/sequel/extensions/named_timezones.rb +84 -23
- data/lib/sequel/extensions/pg_array.rb +87 -79
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +34 -18
- data/lib/sequel/extensions/pg_extended_date_support.rb +34 -14
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -0
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +168 -0
- data/lib/sequel/extensions/pg_range.rb +20 -10
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +3 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +1 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +13 -7
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +4 -2
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- data/lib/sequel/model/associations.rb +403 -69
- data/lib/sequel/model/base.rb +170 -90
- data/lib/sequel/model/plugins.rb +105 -0
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +3 -3
- 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 +74 -22
- data/lib/sequel/plugins/association_proxies.rb +6 -2
- data/lib/sequel/plugins/auto_validations.rb +36 -17
- data/lib/sequel/plugins/blacklist_security.rb +1 -2
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/caching.rb +3 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +62 -34
- data/lib/sequel/plugins/composition.rb +13 -9
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/defaults_setter.rb +2 -2
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/finder.rb +2 -2
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/hook_class_methods.rb +17 -5
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +2 -2
- data/lib/sequel/plugins/json_serializer.rb +21 -14
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/list.rb +22 -10
- data/lib/sequel/plugins/many_through_many.rb +1 -1
- data/lib/sequel/plugins/nested_attributes.rb +27 -5
- data/lib/sequel/plugins/pg_array_associations.rb +12 -9
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +149 -61
- data/lib/sequel/plugins/prepared_statements.rb +6 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +20 -22
- data/lib/sequel/plugins/sharding.rb +13 -7
- data/lib/sequel/plugins/single_table_inheritance.rb +20 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +36 -17
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +1 -1
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +73 -2
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/tree.rb +49 -31
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/validation_class_methods.rb +11 -5
- data/lib/sequel/plugins/validation_helpers.rb +2 -2
- data/lib/sequel/sql.rb +120 -30
- data/lib/sequel/timezones.rb +55 -14
- data/lib/sequel/version.rb +6 -1
- metadata +101 -361
- data/Rakefile +0 -151
- 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.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- 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/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -804
- data/spec/adapters/mysql_spec.rb +0 -1041
- data/spec/adapters/oracle_spec.rb +0 -327
- data/spec/adapters/postgres_spec.rb +0 -4000
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -600
- data/spec/bin_spec.rb +0 -269
- data/spec/core/connection_pool_spec.rb +0 -1228
- data/spec/core/database_spec.rb +0 -2673
- data/spec/core/dataset_spec.rb +0 -5419
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1344
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -306
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1820
- data/spec/core/spec_helper.rb +0 -23
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -762
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- 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 -125
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -202
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- 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 -273
- data/spec/extensions/class_table_inheritance_spec.rb +0 -568
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -133
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -395
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -141
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -189
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- 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 -74
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -380
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -275
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -840
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -109
- data/spec/extensions/nested_attributes_spec.rb +0 -703
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -165
- data/spec/extensions/pg_enum_spec.rb +0 -113
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -289
- data/spec/extensions/pg_json_spec.rb +0 -262
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -487
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -182
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -381
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -868
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -97
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -189
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -61
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_spec.rb +0 -410
- data/spec/extensions/string_agg_spec.rb +0 -90
- 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 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -141
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -284
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- 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 -58
- data/spec/integration/associations_test.rb +0 -2513
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1880
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2302
- data/spec/integration/prepared_statement_test.rb +0 -398
- data/spec/integration/schema_test.rb +0 -869
- data/spec/integration/spec_helper.rb +0 -64
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -354
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4538
- data/spec/model/base_spec.rb +0 -817
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2262
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -953
- data/spec/model/plugins_spec.rb +0 -318
- data/spec/model/record_spec.rb +0 -2107
- data/spec/model/spec_helper.rb +0 -45
- 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/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
data/lib/sequel/model/base.rb
CHANGED
|
@@ -250,7 +250,7 @@ module Sequel
|
|
|
250
250
|
# Artist.create do |a|
|
|
251
251
|
# a.name = 'Jim'
|
|
252
252
|
# end # INSERT INTO artists (name) VALUES ('Jim')
|
|
253
|
-
def create(values =
|
|
253
|
+
def create(values = OPTS, &block)
|
|
254
254
|
new(values, &block).save
|
|
255
255
|
end
|
|
256
256
|
|
|
@@ -324,14 +324,14 @@ module Sequel
|
|
|
324
324
|
# Any public methods in the dataset module will have class methods created that
|
|
325
325
|
# call the method on the dataset, assuming that the class method is not already
|
|
326
326
|
# defined.
|
|
327
|
-
def dataset_module(mod = nil)
|
|
327
|
+
def dataset_module(mod = nil, &block)
|
|
328
328
|
if mod
|
|
329
|
-
raise Error, "can't provide both argument and block to Model.dataset_module" if
|
|
329
|
+
raise Error, "can't provide both argument and block to Model.dataset_module" if block
|
|
330
330
|
dataset_extend(mod)
|
|
331
331
|
mod
|
|
332
332
|
else
|
|
333
333
|
@dataset_module ||= dataset_module_class.new(self)
|
|
334
|
-
@dataset_module.module_eval(&
|
|
334
|
+
@dataset_module.module_eval(&block) if block
|
|
335
335
|
dataset_extend(@dataset_module)
|
|
336
336
|
@dataset_module
|
|
337
337
|
end
|
|
@@ -446,6 +446,13 @@ module Sequel
|
|
|
446
446
|
super
|
|
447
447
|
end
|
|
448
448
|
|
|
449
|
+
# Whether the model has a dataset. True for most model classes,
|
|
450
|
+
# but can be false if the model class is an abstract model class
|
|
451
|
+
# designed for subclassing, such as Sequel::Model itself.
|
|
452
|
+
def has_dataset?
|
|
453
|
+
!@dataset.nil?
|
|
454
|
+
end
|
|
455
|
+
|
|
449
456
|
# Clear the setter_methods cache when a module is included, as it
|
|
450
457
|
# may contain setter methods.
|
|
451
458
|
def include(*mods)
|
|
@@ -453,47 +460,6 @@ module Sequel
|
|
|
453
460
|
super
|
|
454
461
|
end
|
|
455
462
|
|
|
456
|
-
# If possible, set the dataset for the model subclass as soon as it
|
|
457
|
-
# is created. Also, make sure the inherited class instance variables
|
|
458
|
-
# are copied into the subclass.
|
|
459
|
-
#
|
|
460
|
-
# Sequel queries the database to get schema information as soon as
|
|
461
|
-
# a model class is created:
|
|
462
|
-
#
|
|
463
|
-
# class Artist < Sequel::Model # Causes schema query
|
|
464
|
-
# end
|
|
465
|
-
def inherited(subclass)
|
|
466
|
-
super
|
|
467
|
-
ivs = subclass.instance_variables
|
|
468
|
-
inherited_instance_variables.each do |iv, dup|
|
|
469
|
-
next if ivs.include?(iv)
|
|
470
|
-
if (sup_class_value = instance_variable_get(iv)) && dup
|
|
471
|
-
sup_class_value = case dup
|
|
472
|
-
when :dup
|
|
473
|
-
sup_class_value.dup
|
|
474
|
-
when :hash_dup
|
|
475
|
-
h = {}
|
|
476
|
-
sup_class_value.each{|k,v| h[k] = v.dup}
|
|
477
|
-
h
|
|
478
|
-
when Proc
|
|
479
|
-
dup.call(sup_class_value)
|
|
480
|
-
else
|
|
481
|
-
raise Error, "bad inherited instance variable type: #{dup.inspect}"
|
|
482
|
-
end
|
|
483
|
-
end
|
|
484
|
-
subclass.instance_variable_set(iv, sup_class_value)
|
|
485
|
-
end
|
|
486
|
-
|
|
487
|
-
unless ivs.include?(:@dataset)
|
|
488
|
-
if @dataset && self != Model
|
|
489
|
-
subclass.set_dataset(@dataset.clone, :inherited=>true)
|
|
490
|
-
elsif (n = subclass.name) && !n.to_s.empty?
|
|
491
|
-
db
|
|
492
|
-
subclass.set_dataset(subclass.implicit_table_name)
|
|
493
|
-
end
|
|
494
|
-
end
|
|
495
|
-
end
|
|
496
|
-
|
|
497
463
|
# Returns the implicit table name for the model class, which is the demodulized,
|
|
498
464
|
# underscored, pluralized name of the class.
|
|
499
465
|
#
|
|
@@ -508,12 +474,6 @@ module Sequel
|
|
|
508
474
|
call(values)
|
|
509
475
|
end
|
|
510
476
|
|
|
511
|
-
# Clear the setter_methods cache when a setter method is added.
|
|
512
|
-
def method_added(meth)
|
|
513
|
-
clear_setter_methods_cache if meth.to_s.end_with?('=')
|
|
514
|
-
super
|
|
515
|
-
end
|
|
516
|
-
|
|
517
477
|
# Mark the model as not having a primary key. Not having a primary key
|
|
518
478
|
# can cause issues, among which is that you won't be able to update records.
|
|
519
479
|
#
|
|
@@ -531,6 +491,11 @@ module Sequel
|
|
|
531
491
|
# the module using a the camelized plugin name under Sequel::Plugins.
|
|
532
492
|
def plugin(plugin, *args, &block)
|
|
533
493
|
m = plugin.is_a?(Module) ? plugin : plugin_module(plugin)
|
|
494
|
+
|
|
495
|
+
if !m.respond_to?(:apply) && !m.respond_to?(:configure) && (!args.empty? || block)
|
|
496
|
+
Deprecation.deprecate("Plugin #{plugin} accepts no arguments or block, and passing arguments/block to it", "Remove arguments and block when loading the plugin")
|
|
497
|
+
end
|
|
498
|
+
|
|
534
499
|
unless @plugins.include?(m)
|
|
535
500
|
@plugins << m
|
|
536
501
|
m.apply(self, *args, &block) if m.respond_to?(:apply)
|
|
@@ -540,8 +505,10 @@ module Sequel
|
|
|
540
505
|
dataset_extend(m::DatasetMethods, :create_class_methods=>false)
|
|
541
506
|
end
|
|
542
507
|
end
|
|
508
|
+
|
|
543
509
|
m.configure(self, *args, &block) if m.respond_to?(:configure)
|
|
544
510
|
end
|
|
511
|
+
ruby2_keywords(:plugin) if respond_to?(:ruby2_keywords, true)
|
|
545
512
|
|
|
546
513
|
# Returns primary key attribute hash. If using a composite primary key
|
|
547
514
|
# value such be an array with values for each primary key in the correct
|
|
@@ -633,7 +600,7 @@ module Sequel
|
|
|
633
600
|
@columns = superclass.instance_variable_get(:@columns)
|
|
634
601
|
@db_schema = superclass.instance_variable_get(:@db_schema)
|
|
635
602
|
else
|
|
636
|
-
@dataset = @dataset.with_extend(*@dataset_method_modules.reverse)
|
|
603
|
+
@dataset = @dataset.with_extend(*@dataset_method_modules.reverse)
|
|
637
604
|
@db_schema = get_db_schema
|
|
638
605
|
end
|
|
639
606
|
|
|
@@ -672,8 +639,7 @@ module Sequel
|
|
|
672
639
|
|
|
673
640
|
# Cache of setter methods to allow by default, in order to speed up mass assignment.
|
|
674
641
|
def setter_methods
|
|
675
|
-
|
|
676
|
-
@setter_methods = get_setter_methods
|
|
642
|
+
@setter_methods || (@setter_methods = get_setter_methods)
|
|
677
643
|
end
|
|
678
644
|
|
|
679
645
|
# Returns name of primary table for the dataset. If the table for the dataset
|
|
@@ -758,9 +724,11 @@ module Sequel
|
|
|
758
724
|
|
|
759
725
|
# Create a column accessor for a column with a method name that is hard to use in ruby code.
|
|
760
726
|
def def_bad_column_accessor(column)
|
|
727
|
+
im = instance_methods
|
|
761
728
|
overridable_methods_module.module_eval do
|
|
762
|
-
|
|
763
|
-
define_method(
|
|
729
|
+
meth = :"#{column}="
|
|
730
|
+
define_method(column){self[column]} unless im.include?(column)
|
|
731
|
+
define_method(meth){|v| self[column] = v} unless im.include?(meth)
|
|
764
732
|
end
|
|
765
733
|
end
|
|
766
734
|
|
|
@@ -772,7 +740,7 @@ module Sequel
|
|
|
772
740
|
bad_columns.each{|x| def_bad_column_accessor(x)}
|
|
773
741
|
im = instance_methods
|
|
774
742
|
columns.each do |column|
|
|
775
|
-
meth = "#{column}="
|
|
743
|
+
meth = :"#{column}="
|
|
776
744
|
overridable_methods_module.module_eval("def #{column}; self[:#{column}] end", __FILE__, __LINE__) unless im.include?(column)
|
|
777
745
|
overridable_methods_module.module_eval("def #{meth}(v); self[:#{column}] = v end", __FILE__, __LINE__) unless im.include?(meth)
|
|
778
746
|
end
|
|
@@ -789,6 +757,7 @@ module Sequel
|
|
|
789
757
|
else
|
|
790
758
|
define_singleton_method(meth){|*args, &block| dataset.public_send(meth, *args, &block)}
|
|
791
759
|
end
|
|
760
|
+
singleton_class.send(:ruby2_keywords, meth) if respond_to?(:ruby2_keywords, true)
|
|
792
761
|
end
|
|
793
762
|
|
|
794
763
|
# Get the schema from the database, fall back on checking the columns
|
|
@@ -845,6 +814,46 @@ module Sequel
|
|
|
845
814
|
meths
|
|
846
815
|
end
|
|
847
816
|
|
|
817
|
+
# If possible, set the dataset for the model subclass as soon as it
|
|
818
|
+
# is created. Also, make sure the inherited class instance variables
|
|
819
|
+
# are copied into the subclass.
|
|
820
|
+
#
|
|
821
|
+
# Sequel queries the database to get schema information as soon as
|
|
822
|
+
# a model class is created:
|
|
823
|
+
#
|
|
824
|
+
# class Artist < Sequel::Model # Causes schema query
|
|
825
|
+
# end
|
|
826
|
+
def inherited(subclass)
|
|
827
|
+
super
|
|
828
|
+
ivs = subclass.instance_variables
|
|
829
|
+
inherited_instance_variables.each do |iv, dup|
|
|
830
|
+
if (sup_class_value = instance_variable_get(iv)) && dup
|
|
831
|
+
sup_class_value = case dup
|
|
832
|
+
when :dup
|
|
833
|
+
sup_class_value.dup
|
|
834
|
+
when :hash_dup
|
|
835
|
+
h = {}
|
|
836
|
+
sup_class_value.each{|k,v| h[k] = v.dup}
|
|
837
|
+
h
|
|
838
|
+
when Proc
|
|
839
|
+
dup.call(sup_class_value)
|
|
840
|
+
else
|
|
841
|
+
raise Error, "bad inherited instance variable type: #{dup.inspect}"
|
|
842
|
+
end
|
|
843
|
+
end
|
|
844
|
+
subclass.instance_variable_set(iv, sup_class_value)
|
|
845
|
+
end
|
|
846
|
+
|
|
847
|
+
unless ivs.include?(:@dataset)
|
|
848
|
+
if @dataset && self != Model
|
|
849
|
+
subclass.set_dataset(@dataset.clone, :inherited=>true)
|
|
850
|
+
elsif (n = subclass.name) && !n.to_s.empty?
|
|
851
|
+
db
|
|
852
|
+
subclass.set_dataset(subclass.implicit_table_name)
|
|
853
|
+
end
|
|
854
|
+
end
|
|
855
|
+
end
|
|
856
|
+
|
|
848
857
|
# A hash of instance variables to automatically set up in subclasses.
|
|
849
858
|
# Keys are instance variable symbols, values should be:
|
|
850
859
|
# nil :: Assign directly from superclass to subclass (frozen objects)
|
|
@@ -899,6 +908,12 @@ module Sequel
|
|
|
899
908
|
opts[:class_name] ||= '::' + ((name || '').split("::")[0..-2] + [camelize(default)]).join('::')
|
|
900
909
|
end
|
|
901
910
|
|
|
911
|
+
# Clear the setter_methods cache when a setter method is added.
|
|
912
|
+
def method_added(meth)
|
|
913
|
+
clear_setter_methods_cache if meth.to_s.end_with?('=')
|
|
914
|
+
super
|
|
915
|
+
end
|
|
916
|
+
|
|
902
917
|
# Module that the class includes that holds methods the class adds for column accessors and
|
|
903
918
|
# associations so that the methods can be overridden with +super+.
|
|
904
919
|
def overridable_methods_module
|
|
@@ -1055,12 +1070,12 @@ module Sequel
|
|
|
1055
1070
|
# Artist.new do |a|
|
|
1056
1071
|
# a.name = 'Bob'
|
|
1057
1072
|
# end
|
|
1058
|
-
def initialize(values =
|
|
1073
|
+
def initialize(values = OPTS)
|
|
1059
1074
|
@values = {}
|
|
1060
1075
|
@new = true
|
|
1061
1076
|
@modified = true
|
|
1062
1077
|
initialize_set(values)
|
|
1063
|
-
|
|
1078
|
+
_clear_changed_columns(:initialize)
|
|
1064
1079
|
yield self if block_given?
|
|
1065
1080
|
end
|
|
1066
1081
|
|
|
@@ -1096,16 +1111,33 @@ module Sequel
|
|
|
1096
1111
|
eql?(obj)
|
|
1097
1112
|
end
|
|
1098
1113
|
|
|
1099
|
-
#
|
|
1100
|
-
#
|
|
1114
|
+
# Case equality. By default, checks equality of the primary key value, see
|
|
1115
|
+
# pk_equal?.
|
|
1101
1116
|
#
|
|
1102
|
-
# Artist[1] === Artist[1] # true
|
|
1103
|
-
# Artist.new === Artist.new # false
|
|
1104
|
-
# Artist[1].set(:name=>'Bob')
|
|
1117
|
+
# Artist[1] === Artist[1] # => true
|
|
1118
|
+
# Artist.new === Artist.new # => false
|
|
1119
|
+
# Artist[1].set(:name=>'Bob') === Artist[1] # => true
|
|
1105
1120
|
def ===(obj)
|
|
1106
|
-
|
|
1121
|
+
case pkv = pk
|
|
1122
|
+
when nil
|
|
1123
|
+
return false
|
|
1124
|
+
when Array
|
|
1125
|
+
return false if pkv.any?(&:nil?)
|
|
1126
|
+
end
|
|
1127
|
+
|
|
1128
|
+
(obj.class == model) && (obj.pk == pkv)
|
|
1107
1129
|
end
|
|
1108
|
-
|
|
1130
|
+
|
|
1131
|
+
# If the receiver has a primary key value, returns true if the objects have
|
|
1132
|
+
# the same class and primary key value.
|
|
1133
|
+
# If the receiver's primary key value is nil or is an array containing
|
|
1134
|
+
# nil, returns false.
|
|
1135
|
+
#
|
|
1136
|
+
# Artist[1].pk_equal?(Artist[1]) # => true
|
|
1137
|
+
# Artist.new.pk_equal?(Artist.new) # => false
|
|
1138
|
+
# Artist[1].set(:name=>'Bob').pk_equal?(Artist[1]) # => true
|
|
1139
|
+
alias pk_equal? ===
|
|
1140
|
+
|
|
1109
1141
|
# class is defined in Object, but it is also a keyword,
|
|
1110
1142
|
# and since a lot of instance methods call class methods,
|
|
1111
1143
|
# this alias makes it so you can use model instead of
|
|
@@ -1280,11 +1312,11 @@ module Sequel
|
|
|
1280
1312
|
# a.update(:name=>'A')
|
|
1281
1313
|
# end
|
|
1282
1314
|
#
|
|
1283
|
-
#
|
|
1284
|
-
#
|
|
1285
|
-
#
|
|
1286
|
-
#
|
|
1287
|
-
#
|
|
1315
|
+
# a = Artist[2]
|
|
1316
|
+
# Artist.db.transaction do
|
|
1317
|
+
# a.lock!('FOR NO KEY UPDATE')
|
|
1318
|
+
# a.update(:name=>'B')
|
|
1319
|
+
# end
|
|
1288
1320
|
def lock!(style=:update)
|
|
1289
1321
|
_refresh(this.lock_style(style)) unless new?
|
|
1290
1322
|
self
|
|
@@ -1408,9 +1440,9 @@ module Sequel
|
|
|
1408
1440
|
# is valid and before hooks execute successfully. Fails if:
|
|
1409
1441
|
#
|
|
1410
1442
|
# * the record is not valid, or
|
|
1411
|
-
# * before_save
|
|
1412
|
-
# * the record is new and before_create
|
|
1413
|
-
# * the record is not new and before_update
|
|
1443
|
+
# * before_save calls cancel_action, or
|
|
1444
|
+
# * the record is new and before_create calls cancel_action, or
|
|
1445
|
+
# * the record is not new and before_update calls cancel_action.
|
|
1414
1446
|
#
|
|
1415
1447
|
# If +save+ fails and either raise_on_save_failure or the
|
|
1416
1448
|
# :raise_on_failure option is true, it raises ValidationFailed
|
|
@@ -1432,8 +1464,8 @@ module Sequel
|
|
|
1432
1464
|
def save(opts=OPTS)
|
|
1433
1465
|
raise Sequel::Error, "can't save frozen object" if frozen?
|
|
1434
1466
|
set_server(opts[:server]) if opts[:server]
|
|
1435
|
-
unless
|
|
1436
|
-
raise(
|
|
1467
|
+
unless _save_valid?(opts)
|
|
1468
|
+
raise(validation_failed_error) if raise_on_failure?(opts)
|
|
1437
1469
|
return
|
|
1438
1470
|
end
|
|
1439
1471
|
checked_save_failure(opts){checked_transaction(opts){_save(opts)}}
|
|
@@ -1491,7 +1523,7 @@ module Sequel
|
|
|
1491
1523
|
# # Sequel::Error raised
|
|
1492
1524
|
def set_fields(hash, fields, opts=nil)
|
|
1493
1525
|
opts = if opts
|
|
1494
|
-
|
|
1526
|
+
model.default_set_fields_options.merge(opts)
|
|
1495
1527
|
else
|
|
1496
1528
|
model.default_set_fields_options
|
|
1497
1529
|
end
|
|
@@ -1527,6 +1559,15 @@ module Sequel
|
|
|
1527
1559
|
super
|
|
1528
1560
|
end
|
|
1529
1561
|
|
|
1562
|
+
# Skip all validation of the object on the next call to #save,
|
|
1563
|
+
# including the running of validation hooks. This is designed for
|
|
1564
|
+
# and should only be used in cases where #valid? is called before
|
|
1565
|
+
# saving and the <tt>validate: false</tt> option cannot be passed to
|
|
1566
|
+
# #save.
|
|
1567
|
+
def skip_validation_on_next_save!
|
|
1568
|
+
@skip_validation_on_next_save = true
|
|
1569
|
+
end
|
|
1570
|
+
|
|
1530
1571
|
# Returns (naked) dataset that should return only this instance.
|
|
1531
1572
|
#
|
|
1532
1573
|
# Artist[1].this
|
|
@@ -1544,8 +1585,8 @@ module Sequel
|
|
|
1544
1585
|
update_restricted(hash, :default)
|
|
1545
1586
|
end
|
|
1546
1587
|
|
|
1547
|
-
# Update the
|
|
1548
|
-
#
|
|
1588
|
+
# Update the instance's values by calling set_fields with the arguments, then
|
|
1589
|
+
# calls save_changes.
|
|
1549
1590
|
#
|
|
1550
1591
|
# artist.update_fields({name: 'Jim'}, [:name])
|
|
1551
1592
|
# # UPDATE artists SET name = 'Jim' WHERE (id = 1)
|
|
@@ -1591,6 +1632,13 @@ module Sequel
|
|
|
1591
1632
|
def _changed_columns
|
|
1592
1633
|
@changed_columns ||= []
|
|
1593
1634
|
end
|
|
1635
|
+
|
|
1636
|
+
# Clear the changed columns. Reason is the reason for clearing
|
|
1637
|
+
# the columns, and should be one of: :initialize, :refresh, :create
|
|
1638
|
+
# or :update.
|
|
1639
|
+
def _clear_changed_columns(_reason)
|
|
1640
|
+
_changed_columns.clear
|
|
1641
|
+
end
|
|
1594
1642
|
|
|
1595
1643
|
# Do the deletion of the object's dataset, and check that the row
|
|
1596
1644
|
# was actually deleted.
|
|
@@ -1676,12 +1724,13 @@ module Sequel
|
|
|
1676
1724
|
|
|
1677
1725
|
# The values hash to use when inserting a new record.
|
|
1678
1726
|
alias _insert_values values
|
|
1727
|
+
private :_insert_values
|
|
1679
1728
|
|
|
1680
1729
|
# Refresh using a particular dataset, used inside save to make sure the same server
|
|
1681
1730
|
# is used for reading newly inserted values from the database
|
|
1682
1731
|
def _refresh(dataset)
|
|
1683
1732
|
_refresh_set_values(_refresh_get(dataset) || raise(NoExistingObject, "Record not found"))
|
|
1684
|
-
|
|
1733
|
+
_clear_changed_columns(:refresh)
|
|
1685
1734
|
end
|
|
1686
1735
|
|
|
1687
1736
|
# Get the row of column data from the database.
|
|
@@ -1719,7 +1768,7 @@ module Sequel
|
|
|
1719
1768
|
@this = nil
|
|
1720
1769
|
@new = false
|
|
1721
1770
|
@modified = false
|
|
1722
|
-
pk ? _save_refresh :
|
|
1771
|
+
pk ? _save_refresh : _clear_changed_columns(:create)
|
|
1723
1772
|
after_create
|
|
1724
1773
|
true
|
|
1725
1774
|
end
|
|
@@ -1730,14 +1779,12 @@ module Sequel
|
|
|
1730
1779
|
before_update
|
|
1731
1780
|
columns = opts[:columns]
|
|
1732
1781
|
if columns.nil?
|
|
1733
|
-
if opts[:changed]
|
|
1734
|
-
|
|
1735
|
-
columns_updated = @values.reject{|k,v| !cc.include?(k)}
|
|
1736
|
-
cc.clear
|
|
1782
|
+
columns_updated = if opts[:changed]
|
|
1783
|
+
_save_update_changed_colums_hash
|
|
1737
1784
|
else
|
|
1738
|
-
|
|
1739
|
-
_changed_columns.clear
|
|
1785
|
+
_save_update_all_columns_hash
|
|
1740
1786
|
end
|
|
1787
|
+
_clear_changed_columns(:update)
|
|
1741
1788
|
else # update only the specified columns
|
|
1742
1789
|
columns = Array(columns)
|
|
1743
1790
|
columns_updated = @values.reject{|k, v| !columns.include?(k)}
|
|
@@ -1763,7 +1810,7 @@ module Sequel
|
|
|
1763
1810
|
# can be overridden to avoid the refresh.
|
|
1764
1811
|
def _save_refresh
|
|
1765
1812
|
_save_set_values(_refresh_get(this.server?(:default)) || raise(NoExistingObject, "Record not found"))
|
|
1766
|
-
|
|
1813
|
+
_clear_changed_columns(:create)
|
|
1767
1814
|
end
|
|
1768
1815
|
|
|
1769
1816
|
# Set values to the provided hash. Called after a create,
|
|
@@ -1785,6 +1832,27 @@ module Sequel
|
|
|
1785
1832
|
v
|
|
1786
1833
|
end
|
|
1787
1834
|
|
|
1835
|
+
# Return a hash of values used when saving changed columns of an
|
|
1836
|
+
# existing object. Defaults to all of the objects current values
|
|
1837
|
+
# that are recorded as modified.
|
|
1838
|
+
def _save_update_changed_colums_hash
|
|
1839
|
+
cc = changed_columns
|
|
1840
|
+
@values.reject{|k,v| !cc.include?(k)}
|
|
1841
|
+
end
|
|
1842
|
+
|
|
1843
|
+
# Validate the object if validating on save. Skips validation
|
|
1844
|
+
# completely (including validation hooks) if
|
|
1845
|
+
# skip_validation_on_save! has been called on the object,
|
|
1846
|
+
# resetting the flag so that future saves will validate.
|
|
1847
|
+
def _save_valid?(opts)
|
|
1848
|
+
if @skip_validation_on_next_save
|
|
1849
|
+
@skip_validation_on_next_save = false
|
|
1850
|
+
return true
|
|
1851
|
+
end
|
|
1852
|
+
|
|
1853
|
+
checked_save_failure(opts){_valid?(opts)}
|
|
1854
|
+
end
|
|
1855
|
+
|
|
1788
1856
|
# Call _update with the given columns, if any are present.
|
|
1789
1857
|
# Plugins can override this method in order to update with
|
|
1790
1858
|
# additional columns, even when the column hash is initially empty.
|
|
@@ -1868,6 +1936,11 @@ module Sequel
|
|
|
1868
1936
|
Errors
|
|
1869
1937
|
end
|
|
1870
1938
|
|
|
1939
|
+
# A HookFailed exception for the given message tied to the current instance.
|
|
1940
|
+
def hook_failed_error(msg)
|
|
1941
|
+
HookFailed.new(msg, self)
|
|
1942
|
+
end
|
|
1943
|
+
|
|
1871
1944
|
# Clone constructor -- freeze internal data structures if the original's
|
|
1872
1945
|
# are frozen.
|
|
1873
1946
|
def initialize_clone(other)
|
|
@@ -1917,9 +1990,9 @@ module Sequel
|
|
|
1917
1990
|
"a hook failed"
|
|
1918
1991
|
end
|
|
1919
1992
|
|
|
1920
|
-
raise
|
|
1993
|
+
raise hook_failed_error(msg)
|
|
1921
1994
|
end
|
|
1922
|
-
|
|
1995
|
+
|
|
1923
1996
|
# Get the ruby class or classes related to the given column's type.
|
|
1924
1997
|
def schema_type_class(column)
|
|
1925
1998
|
if (sch = db_schema[column]) && (type = sch[:type])
|
|
@@ -2012,6 +2085,11 @@ module Sequel
|
|
|
2012
2085
|
def use_transaction?(opts = OPTS)
|
|
2013
2086
|
opts.fetch(:transaction, use_transactions)
|
|
2014
2087
|
end
|
|
2088
|
+
|
|
2089
|
+
# An ValidationFailed exception instance to raise for this instance.
|
|
2090
|
+
def validation_failed_error
|
|
2091
|
+
ValidationFailed.new(self)
|
|
2092
|
+
end
|
|
2015
2093
|
end
|
|
2016
2094
|
|
|
2017
2095
|
# DatasetMethods contains methods that all model datasets have.
|
|
@@ -2160,7 +2238,9 @@ module Sequel
|
|
|
2160
2238
|
plugin self
|
|
2161
2239
|
|
|
2162
2240
|
singleton_class.send(:undef_method, :dup, :clone, :initialize_copy)
|
|
2241
|
+
# :nocov:
|
|
2163
2242
|
if RUBY_VERSION >= '1.9.3'
|
|
2243
|
+
# :nocov:
|
|
2164
2244
|
singleton_class.send(:undef_method, :initialize_clone, :initialize_dup)
|
|
2165
2245
|
end
|
|
2166
2246
|
end
|