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
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* A fiber_concurrency extension has been added, for using
|
|
4
|
+
Fiber.current instead of Thread.current when checking out a
|
|
5
|
+
connection. This allows separate fibers of the same thread
|
|
6
|
+
to use separate connections. In addition to allowing direct use
|
|
7
|
+
of fibers, this also allows concurrent use of multiple enumerators
|
|
8
|
+
that use database connections in the same thread.
|
|
9
|
+
|
|
10
|
+
When using this extension, you must be careful and ensure that you
|
|
11
|
+
are not using more concurrent fibers than your connection pool size.
|
|
12
|
+
Otherwise, all fibers will block while one fiber waits until a
|
|
13
|
+
connection is available. It is possible this issue will be
|
|
14
|
+
addressed when Ruby implements a fiber scheduler (currently
|
|
15
|
+
being discussed for inclusion in Ruby 3).
|
|
16
|
+
|
|
17
|
+
* A run_transaction_hooks Database extension has been added,
|
|
18
|
+
allowing for running the transaction hooks before commit/rollback,
|
|
19
|
+
which can be helpful for testing the hooks when using transactional
|
|
20
|
+
testing.
|
|
21
|
+
|
|
22
|
+
= Other Improvements
|
|
23
|
+
|
|
24
|
+
* Database#create_table? now works correctly with the :partition_of
|
|
25
|
+
option on PostgreSQL.
|
|
26
|
+
|
|
27
|
+
* The timestamp(N) with time zone type is now recognized by the
|
|
28
|
+
schema parser.
|
|
29
|
+
|
|
30
|
+
* Singleton methods of the Sequel module have now been moved into a
|
|
31
|
+
Sequel::SequelMethods module. This allows you to extend Sequel
|
|
32
|
+
with a module that overrides the methods and call super to get
|
|
33
|
+
the default behavior.
|
|
34
|
+
|
|
35
|
+
* The pg_inet extension no longer defines inet/cidr conversion procs
|
|
36
|
+
if sequel_pg 1.13.0+ is in use. This is because sequel_pg 1.13.0+
|
|
37
|
+
will respect the conversion procs and defining them makes things
|
|
38
|
+
slower. sequel_pg 1.13.0+ handles the same conversion by default
|
|
39
|
+
without needing a conversion proc.
|
|
40
|
+
|
|
41
|
+
* Method visibility issues in the model, plugin, extension, and adapter
|
|
42
|
+
code have been fixed. Most cases fixed were private methods being
|
|
43
|
+
accidentally made public when they were overridden.
|
|
44
|
+
|
|
45
|
+
During this change, Model#_insert_values was changed from public to
|
|
46
|
+
private, since it was originally intended to be private.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Custom join types are now supported on a per-association basis when
|
|
4
|
+
using eager_graph/association_join. This builds on the previous
|
|
5
|
+
support for custom aliases, using Sequel::SQL::AliasedExpression:
|
|
6
|
+
|
|
7
|
+
class Artist < Sequel::Model; end
|
|
8
|
+
class Album < Sequel::Model; end
|
|
9
|
+
class Track < Sequel::Model; end
|
|
10
|
+
Artist.one_to_many :albums
|
|
11
|
+
Album.one_to_many :tracks
|
|
12
|
+
Artist.eager_graph(
|
|
13
|
+
Sequel[:albums].as(:a, join_type: :inner) =>
|
|
14
|
+
Sequel[:tracks].as(:t, join_type: :left)
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
* A Database#current_timestamp_utc accessor has been added on SQLite.
|
|
18
|
+
Setting this to true will keep CURRENT_TIMESTAMP, CURRENT_TIME, and
|
|
19
|
+
CURRENT_DATE in UTC instead of converting them to localtime.
|
|
20
|
+
|
|
21
|
+
= Other Improvements
|
|
22
|
+
|
|
23
|
+
* The smallserial PostgreSQL type is now recognized and Sequel will
|
|
24
|
+
not try to mark smallserial columns as identity columns.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* The association_pks plugin now creates *_pks_dataset methods for
|
|
4
|
+
each association. These are similar to the existing *_pks getter
|
|
5
|
+
methods, but they return a dataset of the keys instead of the keys
|
|
6
|
+
themselves.
|
|
7
|
+
|
|
8
|
+
* The association_pks plugin now supports a :cache_pks association
|
|
9
|
+
option, which will cache calls to the *_pks getter method. The
|
|
10
|
+
default behavior remains that the *_pks getter method only returns
|
|
11
|
+
cached values if the *_pks= setter method has been used to set the
|
|
12
|
+
values.
|
|
13
|
+
|
|
14
|
+
* The *_pks getter methods supported by the association_pks plugin
|
|
15
|
+
now support a :refresh option to ignore any cached values, similar
|
|
16
|
+
to how the association getter methods work.
|
|
17
|
+
|
|
18
|
+
= Other Improvements
|
|
19
|
+
|
|
20
|
+
* If trying to disconnect a server that doesn't exist when using a
|
|
21
|
+
sharded connection pool, a Sequel::Error is now raised. Previously,
|
|
22
|
+
the sharded threaded pool raised a NoMethodError and the sharded
|
|
23
|
+
single connection pool did not raise an error.
|
|
24
|
+
|
|
25
|
+
* If using the :savepoint option when savepoints are not supported,
|
|
26
|
+
a Sequel::InvalidOperation exception is now raised, instead of a
|
|
27
|
+
NoMethodError.
|
|
28
|
+
|
|
29
|
+
* Calling Dataset#eager_graph with no arguments now returns the
|
|
30
|
+
dataset.
|
|
31
|
+
|
|
32
|
+
* If not connected to the database, the single connection pool will
|
|
33
|
+
not yield any connections to Database#pool.all_connections.
|
|
34
|
+
|
|
35
|
+
* Forcing a :ruby eager limit strategy for an association without a
|
|
36
|
+
limit or offset now works correctly.
|
|
37
|
+
|
|
38
|
+
* Multiple unnecessary conditionals have been removed.
|
|
39
|
+
|
|
40
|
+
* Sequel core and model code now have 100% branch coverage.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* An instance_specific_default plugin has been added for setting the
|
|
4
|
+
default for the :instance_specific association option, or
|
|
5
|
+
warning/raises in cases where it is not specified. This allows
|
|
6
|
+
you to easily find associations that would be considering instance
|
|
7
|
+
specific by default, and mark them as not instance specific for
|
|
8
|
+
better performance.
|
|
9
|
+
|
|
10
|
+
= Other Improvements
|
|
11
|
+
|
|
12
|
+
* Setting the :instance_specific association option to false now
|
|
13
|
+
works correctly if the association uses a block. Associations
|
|
14
|
+
that set the :dataset option are now always considered instance
|
|
15
|
+
specific, even if the :instance_specific option is explicitly
|
|
16
|
+
passed.
|
|
17
|
+
|
|
18
|
+
* The validation_class_methods plugin now considers all :if,
|
|
19
|
+
:allow_missing, :allow_nil, and :allow_blank options. Previously,
|
|
20
|
+
it only considered the first of those options that was set.
|
|
21
|
+
|
|
22
|
+
* Model.finalize_associations no longer breaks if you have
|
|
23
|
+
instance-specific associations.
|
|
24
|
+
|
|
25
|
+
* Model.plugin now warns if you load the plugin with arguments or a
|
|
26
|
+
block if the plugin does not accept arguments or block. This is
|
|
27
|
+
because a future change to Sequel could break the call.
|
|
28
|
+
|
|
29
|
+
* When emulating unsupported alter table operations on SQLite, Sequel
|
|
30
|
+
now copies composite unique constraints unless the alter table
|
|
31
|
+
operation is the dropping of a unique constraint.
|
|
32
|
+
|
|
33
|
+
* Sequel now recognizes an additional disconnect error in the oracle
|
|
34
|
+
adapter.
|
|
35
|
+
|
|
36
|
+
* In the run_transaction_hooks extension, calling
|
|
37
|
+
run_after_{commit,rollback}_hooks now raises the correct exception
|
|
38
|
+
class.
|
|
39
|
+
|
|
40
|
+
* In the pg_range extension, conversion procs for the tsrange[] and
|
|
41
|
+
tstzrange[] types are not added unless the Database uses the
|
|
42
|
+
pg_array extension.
|
|
43
|
+
|
|
44
|
+
* Multiple unnecessary conditionals in plugins and extensions have
|
|
45
|
+
been removed.
|
|
46
|
+
|
|
47
|
+
* Sequel plugin and extension code now have 100% branch coverage.
|
|
48
|
+
|
|
49
|
+
* Sequel now avoids a statement not reached verbose warning in
|
|
50
|
+
Dataset#clone.
|
|
51
|
+
|
|
52
|
+
= Backwards Compatibility
|
|
53
|
+
|
|
54
|
+
* The output of Dataset#to_dot in the to_dot extension has changed
|
|
55
|
+
slightly, including hash entries with nil keys. These entries
|
|
56
|
+
were previously ignored.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Dataset#with_ties has been added on PostgreSQL 13+ and Microsoft
|
|
4
|
+
SQL Server, which will have a limited dataset also return all
|
|
5
|
+
rows with the same order as the final row.
|
|
6
|
+
|
|
7
|
+
* In the pg_json_ops extension, the following methods have been
|
|
8
|
+
added to Postgres::JSONBOp, all of which require PostgreSQL 13+:
|
|
9
|
+
|
|
10
|
+
* #set_lax
|
|
11
|
+
* #path_exists_tz!
|
|
12
|
+
* #path_match_tz!
|
|
13
|
+
* #path_query_tz
|
|
14
|
+
* #path_query_array_tz
|
|
15
|
+
* #path_query_first_tz
|
|
16
|
+
|
|
17
|
+
* On Oracle, the Database#view_exists? method now accepts a
|
|
18
|
+
:current_schema option to limit the views returned to the
|
|
19
|
+
current schema, instead of all non-system schemas.
|
|
20
|
+
|
|
21
|
+
= Other Improvements
|
|
22
|
+
|
|
23
|
+
* Sequel will now pass keyword arguments through in the following
|
|
24
|
+
cases:
|
|
25
|
+
|
|
26
|
+
* When loading plugins (Model.plugin)
|
|
27
|
+
|
|
28
|
+
* Class methods automically defined for methods defined in a
|
|
29
|
+
Model.dataset_module block
|
|
30
|
+
|
|
31
|
+
* Methods defined by Plugins.def_dataset_method
|
|
32
|
+
|
|
33
|
+
* Database methods called inside migrations
|
|
34
|
+
|
|
35
|
+
* Methods called via an association proxy when using the
|
|
36
|
+
association_proxies plugin.
|
|
37
|
+
|
|
38
|
+
* Dataset methods called inside a Dataset#query block when using
|
|
39
|
+
the query extension.
|
|
40
|
+
|
|
41
|
+
Previously, keywords were not handled in these cases, which would
|
|
42
|
+
cause deprecation warnings in Ruby 2.7 and ArgumentErrors in Ruby
|
|
43
|
+
3.0. Note that Sequel itself does not use keyword arguments at
|
|
44
|
+
all, so all of these changes only affect cases where external
|
|
45
|
+
methods are defined that accept keywords, and Sequel methods are
|
|
46
|
+
called with keywords that end up being delegated to the external
|
|
47
|
+
methods.
|
|
48
|
+
|
|
49
|
+
* The odbc adapter will now stream result sets instead of loading
|
|
50
|
+
the entire result set in memory and then iterating over it.
|
|
51
|
+
|
|
52
|
+
* Sequel now recognizes another disconnect error in the mysql and
|
|
53
|
+
mysql2 adapters.
|
|
54
|
+
|
|
55
|
+
= Backwards Compatibility
|
|
56
|
+
|
|
57
|
+
* Due to the odbc adapter change to use streaming, issuing queries
|
|
58
|
+
inside a Dataset#each block will no longer work unless a different
|
|
59
|
+
shard or thread is used. The behavior of such code is considered
|
|
60
|
+
undefined on all Sequel adapters.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Model#column_previously_was and #column_previously_changed? have
|
|
4
|
+
been added to the dirty plugin, for getting the previous values
|
|
5
|
+
of the column before saving and for whether there were changes
|
|
6
|
+
before saving.
|
|
7
|
+
|
|
8
|
+
Model#column_previously_changed? accepts :from and :to options
|
|
9
|
+
to allow you to more easily determine if the value changed from
|
|
10
|
+
and/or to specific values.
|
|
11
|
+
|
|
12
|
+
This information was previously obtainable via
|
|
13
|
+
Model#previous_changes, but these new methods offer a friendlier
|
|
14
|
+
interface.
|
|
15
|
+
|
|
16
|
+
* Postgres::PGRow::{Array,Hash}Row#op has been added to the
|
|
17
|
+
pg_row_ops extension if the pg_row extension is loaded. This
|
|
18
|
+
is similar to how the pg_array_ops, pg_hstore_ops, and
|
|
19
|
+
pg_json_ops and #op method to their objects. This makes it
|
|
20
|
+
easier to perform row operations on literal rows.
|
|
21
|
+
|
|
22
|
+
= Other Improvements
|
|
23
|
+
|
|
24
|
+
* The schema_dumper extension now supports more unsigned numeric
|
|
25
|
+
types, such as "decimal(7,2) unsigned" and "real unsigned".
|
|
26
|
+
|
|
27
|
+
* IntegerMigrator now raises an Migrator::Error if attempting to
|
|
28
|
+
migrate down when there are migration files missing and needed for
|
|
29
|
+
the down migration. Previously, IntegerMigrator would not raise an
|
|
30
|
+
exception and would make no database changes in this case.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* The jdbc/mysql adapter now supports the newer
|
|
4
|
+
com.mysql.cj.jdbc.Driver driver. The adapter will still attempt to
|
|
5
|
+
load the older com.mysql.jdbc.Driver if the com.mysql.cj.jdbc.Driver
|
|
6
|
+
is not found.
|
|
7
|
+
|
|
8
|
+
= Other Improvements
|
|
9
|
+
|
|
10
|
+
* When testing a connection after creating a new Database instance
|
|
11
|
+
raises an exception, the Database instance is removed from
|
|
12
|
+
Sequel::DATABASES.
|
|
13
|
+
|
|
14
|
+
* The single_table_inheritance and prepared_statements plugins now
|
|
15
|
+
work correctly if loaded into the same class.
|
|
16
|
+
|
|
17
|
+
* Database connect and disconnect errors are no longer swallowed when
|
|
18
|
+
calling Database#create_or_replace_view, Database#server_version
|
|
19
|
+
on PostgreSQL, or Database#create_table* on Oracle.
|
|
20
|
+
|
|
21
|
+
= Backwards Compatibility
|
|
22
|
+
|
|
23
|
+
* Previously, instantiating a new Database instance directly using
|
|
24
|
+
Sequel::Database.new did not test the connection by default. That
|
|
25
|
+
was instead handled by Sequel::Database.connect. The test
|
|
26
|
+
connection now happens inside Database#initialize. This should only
|
|
27
|
+
affect backwards compatibility for code that is calling
|
|
28
|
+
Sequel::Database.new directly.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* An escaped_like extension has been added, for the creation of
|
|
4
|
+
LIKE/ILIKE expressions with placeholders in patterns without
|
|
5
|
+
access to a dataset. This adds escaped_like and escaped_ilike
|
|
6
|
+
methods to the same Sequel expression objects that support like
|
|
7
|
+
and ilike. These methods take two arguments, the first being
|
|
8
|
+
the pattern, with ? placeholders, and the second being the
|
|
9
|
+
placeholder value (which can be an array for multiple
|
|
10
|
+
placeholders):
|
|
11
|
+
|
|
12
|
+
Sequel.extension :escaped_like
|
|
13
|
+
DB[:table].where{string_column.escaped_like('?%', user_input)}
|
|
14
|
+
# user_input is 'foo':
|
|
15
|
+
# SELECT * FROM table WHERE string_column LIKE 'foo%'
|
|
16
|
+
# user_input is '%foo':
|
|
17
|
+
# SELECT * FROM table WHERE string_column LIKE '\%foo%'
|
|
18
|
+
|
|
19
|
+
* Generated columns on MySQL 5.7+ and MariaDB 5.2+ are now supported
|
|
20
|
+
using the :generated_always_as option when creating the column.
|
|
21
|
+
The :generated_type option can also be used to specify the type of
|
|
22
|
+
generated column (virtual or stored). Examples:
|
|
23
|
+
|
|
24
|
+
DB.add_column :t, :c, Integer, generated_always_as: Sequel[:a]+'b'
|
|
25
|
+
# ALTER TABLE `t` ADD COLUMN `c` varchar(255)
|
|
26
|
+
# GENERATED ALWAYS AS (CONCAT(`a`, 'b'))
|
|
27
|
+
|
|
28
|
+
DB.add_column :t, :c, Integer, generated_always_as: Sequel[:a]+'b',
|
|
29
|
+
generated_type: :virtual
|
|
30
|
+
# ALTER TABLE `t` ADD COLUMN `c` varchar(255)
|
|
31
|
+
# GENERATED ALWAYS AS (CONCAT(`a`, 'b')) VIRTUAL
|
|
32
|
+
|
|
33
|
+
DB.add_column :t, :c, Integer, generated_always_as: Sequel[:a]+'b',
|
|
34
|
+
generated_type: :stored
|
|
35
|
+
# ALTER TABLE `t` ADD COLUMN `c` varchar(255)
|
|
36
|
+
# GENERATED ALWAYS AS (CONCAT(`a`, 'b')) STORED
|
|
37
|
+
|
|
38
|
+
* Sequel::Model.has_dataset? has been added for checking whether the
|
|
39
|
+
model class has an associated dataset. This will generally be true
|
|
40
|
+
for most model classes, but will be false for abstract model
|
|
41
|
+
classes (such as Sequel::Model itself).
|
|
42
|
+
|
|
43
|
+
* Sequel::VERSION_NUMBER has been added for easier future version
|
|
44
|
+
comparisons. The version number for 5.9.0 is 50090.
|
|
45
|
+
|
|
46
|
+
= Other Improvements
|
|
47
|
+
|
|
48
|
+
* When disconnecting connections in the threaded connection pools,
|
|
49
|
+
the disconnection is performed without holding the connection
|
|
50
|
+
pool mutex, since disconnection may block.
|
|
51
|
+
|
|
52
|
+
* The sharded threaded connection pool no longer deadlocks when
|
|
53
|
+
disconnecting connections if the connection_validator or
|
|
54
|
+
connection_expiration extension is used.
|
|
55
|
+
|
|
56
|
+
* If a thread dies and does not check a connection back into the
|
|
57
|
+
connection pool, Sequel now disconnects the connection when it
|
|
58
|
+
detects the dead thread, instead of assuming the connection is
|
|
59
|
+
safe to be reused.
|
|
60
|
+
|
|
61
|
+
* When using eager_graph with cascaded associations, a unique
|
|
62
|
+
object is now used instead of a shared object in cases where
|
|
63
|
+
using a shared object may cause further cascaded associated
|
|
64
|
+
objects to be duplicated.
|
|
65
|
+
|
|
66
|
+
* On PostgreSQL, the ESCAPE modifier to the LIKE/ILIKE operators is
|
|
67
|
+
no longer used, since the default ESCAPE value is the one Sequel
|
|
68
|
+
uses. This change was made in order to allow the LIKE/ILIKE
|
|
69
|
+
operators to work with the ANY function, as PostgreSQL does not
|
|
70
|
+
support the use of the ESCAPE modifier in such cases.
|
|
71
|
+
|
|
72
|
+
* A hash argument passed to Model.nested_attributes in the
|
|
73
|
+
nested_attributes plugin is now no longer modified.
|
|
74
|
+
|
|
75
|
+
* Internal data structures for eager and eager_graph datasets are now
|
|
76
|
+
frozen to avoid unintentional modification.
|
|
77
|
+
|
|
78
|
+
* Nondeterministic behavior in Database#foreign_key_list with the
|
|
79
|
+
:reverse option on PostgreSQL is now avoided by using an
|
|
80
|
+
unambiguous order.
|
|
81
|
+
|
|
82
|
+
* Performance has been improved slightly by avoiding unnecessary
|
|
83
|
+
hash allocations.
|
|
84
|
+
|
|
85
|
+
* Performance has been improved slightly by using while instead
|
|
86
|
+
of Kernel#loop.
|
|
87
|
+
|
|
88
|
+
* BigDecimal() is now used instead of BigDecimal.new(), as the
|
|
89
|
+
latter has been deprecated.
|
|
90
|
+
|
|
91
|
+
* The jdbc adapter now avoids referencing ::NativeException on JRuby
|
|
92
|
+
9.2+, since JRuby has deprecated it. It is still used on older
|
|
93
|
+
versions of JRuby, since some JRuby 1.7 code may still require it.
|
|
94
|
+
|
|
95
|
+
* Sequel now works around multiple Date/Time conversion bugs in
|
|
96
|
+
JRuby 9.2.0.0 for BC dates in the pg_extended_date_support
|
|
97
|
+
extension. These bugs have already been fixed in JRuby, and
|
|
98
|
+
the workarounds will be removed after the release of JRuby
|
|
99
|
+
9.2.1.0.
|
data/doc/security.rdoc
CHANGED
|
@@ -173,6 +173,16 @@ user input for function names.
|
|
|
173
173
|
|
|
174
174
|
DB[:table].select(Sequel.function(params[:id])) # SQL injection!
|
|
175
175
|
|
|
176
|
+
==== SQL Window Frames
|
|
177
|
+
|
|
178
|
+
For backwards compatibility, Sequel supports regular strings in the
|
|
179
|
+
window function :frame option, which will be treated as a literal string:
|
|
180
|
+
|
|
181
|
+
DB[:table].select{fun(arg).over(:frame=>'SQL Here')}
|
|
182
|
+
|
|
183
|
+
You should make sure the frame argument is not derived from user input,
|
|
184
|
+
or switch to using a hash as the :frame option value.
|
|
185
|
+
|
|
176
186
|
==== auto_literal_strings extension
|
|
177
187
|
|
|
178
188
|
If the auto_literal_strings extension is used for backwards compatibility,
|
data/doc/sharding.rdoc
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
=
|
|
1
|
+
= Primary/Replica Configurations and Database Sharding
|
|
2
2
|
|
|
3
|
-
Sequel has support for
|
|
4
|
-
with
|
|
3
|
+
Sequel has support for primary/replica configurations (writable primary
|
|
4
|
+
database with read only replicas databases), as well as database sharding (where you can
|
|
5
5
|
pick a server to use for a given dataset). Support for both
|
|
6
6
|
features is database independent, and should work for all database adapters
|
|
7
7
|
that ship with Sequel.
|
|
@@ -13,7 +13,7 @@ option. Using the :servers database option makes Sequel use a connection pool
|
|
|
13
13
|
class that supports sharding, and the minimum required to enable sharding
|
|
14
14
|
support is to use the empty hash:
|
|
15
15
|
|
|
16
|
-
DB=Sequel.connect('postgres://
|
|
16
|
+
DB=Sequel.connect('postgres://primary_server/database', servers: {})
|
|
17
17
|
|
|
18
18
|
In most cases, you are probably not going to want to use an empty hash. Keys in the server hash are
|
|
19
19
|
not restricted to type, but the general recommendation is to use a symbol
|
|
@@ -28,69 +28,69 @@ a :host entry in each shard's hash.
|
|
|
28
28
|
Note that all servers should have the same schema for all
|
|
29
29
|
tables you are accessing, unless you really know what you are doing.
|
|
30
30
|
|
|
31
|
-
==
|
|
31
|
+
== Primary and Replica Database Configurations
|
|
32
32
|
|
|
33
|
-
=== Single
|
|
33
|
+
=== Single Primary, Single Replica
|
|
34
34
|
|
|
35
|
-
To use a single, read-only
|
|
35
|
+
To use a single, read-only replica that handles SELECT queries, the following
|
|
36
36
|
is the simplest configuration:
|
|
37
37
|
|
|
38
|
-
DB=Sequel.connect('postgres://
|
|
39
|
-
servers: {read_only: {host: '
|
|
38
|
+
DB=Sequel.connect('postgres://primary_server/database',
|
|
39
|
+
servers: {read_only: {host: 'replica_server'}})
|
|
40
40
|
|
|
41
|
-
This will use the
|
|
41
|
+
This will use the replica_server for SELECT queries and primary_server for
|
|
42
42
|
other queries.
|
|
43
43
|
|
|
44
44
|
If you want to ensure your queries are going to a specific database, you
|
|
45
45
|
can force this for a given query by using the .server method and passing
|
|
46
46
|
the symbol name defined in the connect options. For example:
|
|
47
47
|
|
|
48
|
-
# Force the SELECT to run on the
|
|
48
|
+
# Force the SELECT to run on the primary server
|
|
49
49
|
DB[:users].server(:default).all
|
|
50
50
|
|
|
51
|
-
# Force the DELETE to run on the read-only
|
|
51
|
+
# Force the DELETE to run on the read-only replica
|
|
52
52
|
DB[:users].server(:read_only).delete
|
|
53
53
|
|
|
54
|
-
===
|
|
54
|
+
=== Single Primary, Multiple Replicas
|
|
55
55
|
|
|
56
|
-
Let's say you have 4
|
|
57
|
-
|
|
56
|
+
Let's say you have 4 replica servers with names replica_server0,
|
|
57
|
+
replica_server1, replica_server2, and replica_server3.
|
|
58
58
|
|
|
59
59
|
num_read_only = 4
|
|
60
60
|
read_only_host = rand(num_read_only)
|
|
61
61
|
read_only_proc = proc do |db|
|
|
62
|
-
{host: "
|
|
62
|
+
{host: "replica_server#{(read_only_host+=1) % num_read_only}"}
|
|
63
63
|
end
|
|
64
|
-
DB=Sequel.connect('postgres://
|
|
64
|
+
DB=Sequel.connect('postgres://primary_server/database',
|
|
65
65
|
servers: {read_only: read_only_proc})
|
|
66
66
|
|
|
67
|
-
This will use one of the
|
|
68
|
-
|
|
67
|
+
This will use one of the replica servers for SELECT queries and use the
|
|
68
|
+
primary server for other queries. It's also possible to pick a random host
|
|
69
69
|
instead of using the round robin approach presented above, but that can result
|
|
70
70
|
in less optimal resource usage.
|
|
71
71
|
|
|
72
|
-
=== Multiple
|
|
72
|
+
=== Multiple Primary, Multiple Replicas
|
|
73
73
|
|
|
74
|
-
This involves the same basic idea as the multiple
|
|
75
|
-
it shows that the
|
|
76
|
-
4
|
|
74
|
+
This involves the same basic idea as the multiple replicas, single primary, but
|
|
75
|
+
it shows that the primary database is named :default. So for 4 primary servers and
|
|
76
|
+
4 replica servers:
|
|
77
77
|
|
|
78
78
|
num_read_only = 4
|
|
79
79
|
read_only_host = rand(num_read_only)
|
|
80
80
|
read_only_proc = proc do |db|
|
|
81
|
-
{host: "
|
|
81
|
+
{host: "replica_server#{(read_only_host+=1) % num_read_only}"}
|
|
82
82
|
end
|
|
83
83
|
num_default = 4
|
|
84
84
|
default_host = rand(num_default)
|
|
85
85
|
default_proc = proc do |db|
|
|
86
|
-
{host: "
|
|
86
|
+
{host: "primary_server#{(default_host+=1) % num_default}"}
|
|
87
87
|
end
|
|
88
|
-
DB=Sequel.connect('postgres://
|
|
88
|
+
DB=Sequel.connect('postgres://primary_server/database',
|
|
89
89
|
servers: {default: default_proc, read_only: read_only_proc})
|
|
90
90
|
|
|
91
91
|
== Sharding
|
|
92
92
|
|
|
93
|
-
There is specific support in Sequel for handling
|
|
93
|
+
There is specific support in Sequel for handling primary/replica database
|
|
94
94
|
combinations, with the only necessary setup being the database configuration.
|
|
95
95
|
However, since sharding is always going to be implementation dependent, Sequel
|
|
96
96
|
supplies the basic infrastructure, but you have to tell it which server to use
|
|
@@ -140,6 +140,8 @@ the shard to use. This is fairly easy using a Sequel::Model:
|
|
|
140
140
|
|
|
141
141
|
Rainbow.plaintext_for_hash("e580726d31f6e1ad216ffd87279e536d1f74e606")
|
|
142
142
|
|
|
143
|
+
=== :servers_hash Option
|
|
144
|
+
|
|
143
145
|
The connection pool can be further controlled to change how it handles attempts
|
|
144
146
|
to access shards that haven't been configured. The default is
|
|
145
147
|
to assume the :default shard. However, you can specify a
|
|
@@ -210,7 +212,7 @@ need to do that, call the server method explicitly on the dataset used to retrie
|
|
|
210
212
|
model objects.
|
|
211
213
|
|
|
212
214
|
The with_server method also supports a second argument for the default read_only server
|
|
213
|
-
to use, which can be useful if you are mixing sharding and
|
|
215
|
+
to use, which can be useful if you are mixing sharding and primary/replica servers:
|
|
214
216
|
|
|
215
217
|
DB.extension :server_block
|
|
216
218
|
DB.with_server(:a, :a_read_only) do
|
|
@@ -268,3 +270,15 @@ the Database, just remove that option. If you are setting:
|
|
|
268
270
|
Sequel.single_threaded = true
|
|
269
271
|
|
|
270
272
|
just remove or comment out that code.
|
|
273
|
+
|
|
274
|
+
== JDBC
|
|
275
|
+
|
|
276
|
+
If you are using the jdbc adapter, note that it does not handle separate
|
|
277
|
+
options such as +:host+, +:user+, and +:port+. If you would like to use
|
|
278
|
+
the +:servers+ option when connecting to a JDBC database, each hash value in
|
|
279
|
+
the +servers+ option should contain a +:uri+ key with a JDBC connection string
|
|
280
|
+
for that shard as the value. Example:
|
|
281
|
+
|
|
282
|
+
DB=Sequel.connect('jdbc:postgresql://primary_server/database',
|
|
283
|
+
servers: {read_only: {uri: 'jdbc:postgresql://replica_server/database'}})
|
|
284
|
+
|