sequel 5.20.0 → 5.49.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 +398 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +7 -7
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +80 -16
- data/doc/cheat_sheet.rdoc +6 -5
- data/doc/code_order.rdoc +10 -12
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/fork_safety.rdoc +84 -0
- data/doc/migration.rdoc +11 -5
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +10 -2
- data/doc/postgresql.rdoc +82 -3
- data/doc/querying.rdoc +4 -4
- 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.39.0.txt +19 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/sharding.rdoc +2 -0
- data/doc/sql.rdoc +13 -1
- data/doc/testing.rdoc +20 -7
- data/doc/transactions.rdoc +0 -8
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +1 -1
- data/lib/sequel/adapters/ado/access.rb +1 -1
- data/lib/sequel/adapters/ado.rb +43 -35
- data/lib/sequel/adapters/ibmdb.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
- data/lib/sequel/adapters/jdbc.rb +24 -6
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +2 -3
- data/lib/sequel/adapters/odbc.rb +8 -6
- data/lib/sequel/adapters/oracle.rb +5 -4
- data/lib/sequel/adapters/postgres.rb +15 -9
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +66 -21
- data/lib/sequel/adapters/shared/mysql.rb +27 -10
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +271 -32
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +161 -19
- data/lib/sequel/adapters/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/sqlite.rb +1 -1
- data/lib/sequel/adapters/tinytds.rb +15 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
- data/lib/sequel/ast_transformer.rb +6 -0
- data/lib/sequel/connection_pool/sharded_single.rb +4 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +2 -2
- data/lib/sequel/core.rb +333 -319
- data/lib/sequel/database/connecting.rb +3 -4
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +31 -12
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +53 -51
- data/lib/sequel/database/schema_methods.rb +38 -23
- data/lib/sequel/database/transactions.rb +17 -18
- data/lib/sequel/dataset/actions.rb +14 -9
- data/lib/sequel/dataset/features.rb +16 -0
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +26 -9
- data/lib/sequel/dataset/sql.rb +76 -25
- data/lib/sequel/dataset.rb +4 -2
- 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/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/date_arithmetic.rb +36 -24
- data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
- data/lib/sequel/extensions/eval_inspect.rb +2 -0
- 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/inflector.rb +9 -1
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +11 -3
- data/lib/sequel/extensions/named_timezones.rb +56 -8
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_array.rb +5 -0
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +11 -3
- data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +36 -8
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +238 -0
- data/lib/sequel/extensions/pg_loose_count.rb +3 -1
- data/lib/sequel/extensions/pg_range.rb +17 -9
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +4 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +3 -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 +24 -7
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -1
- 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/associations.rb +356 -117
- data/lib/sequel/model/base.rb +107 -68
- data/lib/sequel/model/errors.rb +10 -1
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model/plugins.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- 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 +60 -18
- data/lib/sequel/plugins/association_proxies.rb +8 -2
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_validations.rb +39 -5
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- 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 +33 -28
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/composition.rb +7 -2
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +2 -1
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/dataset_associations.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/json_serializer.rb +57 -35
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +108 -9
- data/lib/sequel/plugins/nested_attributes.rb +15 -3
- data/lib/sequel/plugins/pg_array_associations.rb +58 -41
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
- data/lib/sequel/plugins/prepared_statements.rb +15 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +43 -35
- data/lib/sequel/plugins/serialization.rb +8 -3
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +11 -5
- data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +9 -4
- 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/throw_failures.rb +1 -1
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/tree.rb +9 -4
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +1 -1
- data/lib/sequel/plugins/validation_class_methods.rb +5 -1
- data/lib/sequel/plugins/validation_helpers.rb +18 -11
- data/lib/sequel/plugins/xml_serializer.rb +1 -1
- data/lib/sequel/sql.rb +20 -5
- data/lib/sequel/timezones.rb +63 -17
- data/lib/sequel/version.rb +1 -1
- metadata +113 -381
- 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 -1065
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4125
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2865
- data/spec/core/dataset_spec.rb +0 -5515
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1455
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- 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 -1826
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- 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 -28
- 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 -229
- 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/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- 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 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- 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 -150
- 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/eager_graph_eager_spec.rb +0 -100
- 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/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- 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 -402
- 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 -291
- 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 -864
- 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 -111
- data/spec/extensions/nested_attributes_spec.rb +0 -767
- 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 -172
- data/spec/extensions/pg_enum_spec.rb +0 -118
- 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 -519
- 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 -177
- 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 -870
- 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 -63
- 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 -471
- 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 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- 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 -334
- 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 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1981
- 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 -2396
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -889
- data/spec/integration/spec_helper.rb +0 -65
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- 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 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- 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/doc/release_notes/4.8.0.txt
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* A one_through_one association type has been added. This is similar
|
|
4
|
-
to the many_to_many association type in that it uses a join table,
|
|
5
|
-
but it returns a single record instead of an array of records.
|
|
6
|
-
This is designed for cases where the foreign key in the join table
|
|
7
|
-
that references the current table has a unique constraint, or where
|
|
8
|
-
you want to use an order to just pick the first matching record.
|
|
9
|
-
|
|
10
|
-
Similarly, the many_through_many plugin now also offers a
|
|
11
|
-
one_through_many association.
|
|
12
|
-
|
|
13
|
-
* An association_join method has been added to model datasets, for
|
|
14
|
-
setting up joins based on associations. This basically does the
|
|
15
|
-
same join that eager_graph would do, but does not make the other
|
|
16
|
-
changes that eager_graph makes.
|
|
17
|
-
|
|
18
|
-
Unlike eager_graph (which uses LEFT OUTER JOINs by default),
|
|
19
|
-
association_join uses INNER JOINs, but there are also
|
|
20
|
-
association_*_join methods (e.g. association_left_join) for
|
|
21
|
-
using different join types.
|
|
22
|
-
|
|
23
|
-
Similar to eager_graph, you can use cascading of associations or
|
|
24
|
-
multiple associations.
|
|
25
|
-
|
|
26
|
-
Album.association_join(:artist, :tracks)
|
|
27
|
-
Artist.association_left_join(:albums=>:tracks)
|
|
28
|
-
|
|
29
|
-
* Dataset#eager_graph_with_options has been added for model
|
|
30
|
-
datasets. It currently supports a :join_type option, for
|
|
31
|
-
overriding the type of join to use on a per-call basis, as well
|
|
32
|
-
as a :limit_strategy option. The API is similar to eager_graph,
|
|
33
|
-
except that the associations to eagerly load are passed in as
|
|
34
|
-
a single argument, and it takes an options hash.
|
|
35
|
-
|
|
36
|
-
The :limit_strategy option works similarly to the
|
|
37
|
-
:eager_limit_strategy option when eagerly loading. If set to
|
|
38
|
-
true and the database supports window functions, it will join
|
|
39
|
-
the current dataset to a subquery that uses a window function
|
|
40
|
-
to correctly restrict the join to only those objects that fall
|
|
41
|
-
within the association's limit/offset.
|
|
42
|
-
|
|
43
|
-
The :limit_strategy option is not on by default. It is possible
|
|
44
|
-
for it to perform significantly worse than the default strategy
|
|
45
|
-
(which uses array slicing in ruby). The :limit_strategy
|
|
46
|
-
significantly changes the SQL used, and can change the results
|
|
47
|
-
of the query if any filters/orders related to the association
|
|
48
|
-
are used.
|
|
49
|
-
|
|
50
|
-
It's recommended you only use the :limit_strategy option if you
|
|
51
|
-
are experiencing a bottleneck and you have benchmarked that it
|
|
52
|
-
is faster and still produces the desired results.
|
|
53
|
-
|
|
54
|
-
Artist.eager_graph_with_options(:first_10_albums,
|
|
55
|
-
:limit_strategy=>true)
|
|
56
|
-
# SELECT artists.id, artists.name,
|
|
57
|
-
# first_10_albums.id AS first_10_albums_id,
|
|
58
|
-
# first_10_albums.name AS first_10_albums_name,
|
|
59
|
-
# first_10_albums.artist_id,
|
|
60
|
-
# first_10_albums.release_date
|
|
61
|
-
# FROM artists
|
|
62
|
-
# LEFT OUTER JOIN (
|
|
63
|
-
# SELECT id, name, artist_id, release_date
|
|
64
|
-
# FROM (
|
|
65
|
-
# SELECT *, row_number() OVER (PARTITION BY tracks.album_id)
|
|
66
|
-
# AS x_sequel_row_number_x
|
|
67
|
-
# FROM albums
|
|
68
|
-
# ) AS t1 WHERE (x_sequel_row_number_x <= 10)
|
|
69
|
-
# ) AS first_10_albums ON (first_10_albums.artist_id = artists.id)
|
|
70
|
-
|
|
71
|
-
* Dataset#full_text_search on PostgreSQL now supports :plain and
|
|
72
|
-
:phrase options. :plain takes the search terms as a single
|
|
73
|
-
string, and searches for rows where all terms are used.
|
|
74
|
-
:phrase is similar to :plain, but also adds a substring search
|
|
75
|
-
to ensure that the string given appears verbatim in the text.
|
|
76
|
-
|
|
77
|
-
* A :graph_order association option has been added, for using a
|
|
78
|
-
different order when using eager_graph. This is mostly
|
|
79
|
-
designed for cases where :order should be qualified in other
|
|
80
|
-
cases, but using a qualification breaks eager_graph because the
|
|
81
|
-
correct qualifier is not known until runtime.
|
|
82
|
-
|
|
83
|
-
* SQL::AliasedExpression#alias has been added as an alias for #aliaz.
|
|
84
|
-
|
|
85
|
-
= Other Improvements
|
|
86
|
-
|
|
87
|
-
* Sequel will now automatically use an eager limit strategy for
|
|
88
|
-
*_one associations that use an :order option. For associations
|
|
89
|
-
that are truly one-to-one, an :order option is not needed, so it
|
|
90
|
-
only makes sense to have an :order option if the association
|
|
91
|
-
could theoretically return multiple results (in which case an
|
|
92
|
-
eager limit strategy is helpful).
|
|
93
|
-
|
|
94
|
-
* The queries that Sequel uses to filter by associations when
|
|
95
|
-
those associations have conditions are now simpler and easier
|
|
96
|
-
for the database to execute.
|
|
97
|
-
|
|
98
|
-
* The queries that Sequel uses for dataset associations now handle
|
|
99
|
-
cases where unqualified identifiers were used in the receiving
|
|
100
|
-
dataset that would be made ambiguous by a join.
|
|
101
|
-
|
|
102
|
-
* A limit strategy is now used when filtering by associations if
|
|
103
|
-
the association has a limit and the database supports window
|
|
104
|
-
functions. This allows Sequel to setup a correct filter in
|
|
105
|
-
such cases.
|
|
106
|
-
|
|
107
|
-
Artist.where(:first_10_albums=>Album[1]).all
|
|
108
|
-
# SELECT *
|
|
109
|
-
# FROM artists
|
|
110
|
-
# WHERE (artists.id IN (
|
|
111
|
-
# SELECT albums.artist_id
|
|
112
|
-
# FROM albums
|
|
113
|
-
# WHERE ((albums.artist_id IS NOT NULL) AND (albums.id IN (
|
|
114
|
-
# SELECT id FROM (
|
|
115
|
-
# SELECT albums.id, row_number() OVER
|
|
116
|
-
# (PARTITION BY albums.artist_id ORDER BY release_date)
|
|
117
|
-
# AS x_sequel_row_number_x
|
|
118
|
-
# FROM albums
|
|
119
|
-
# ) AS t1
|
|
120
|
-
# WHERE (x_sequel_row_number_x <= 10)
|
|
121
|
-
# )) AND (albums.id = 1))))
|
|
122
|
-
|
|
123
|
-
* A limit strategy is now used in the dataset_associations plugin
|
|
124
|
-
if the association has a limit and the database supports window
|
|
125
|
-
functions. This makes the resulting datasets return correct
|
|
126
|
-
results.
|
|
127
|
-
|
|
128
|
-
Artist.first_10_albums
|
|
129
|
-
# SELECT *
|
|
130
|
-
# FROM albums
|
|
131
|
-
# WHERE ((albums.artist_id IN (
|
|
132
|
-
# SELECT artists.id FROM artists)
|
|
133
|
-
# ) AND (albums.id IN (
|
|
134
|
-
# SELECT id FROM (
|
|
135
|
-
# SELECT albums.id, row_number() OVER
|
|
136
|
-
# (PARTITION BY albums.artist_id ORDER BY release_date)
|
|
137
|
-
# AS x_sequel_row_number_x
|
|
138
|
-
# FROM albums
|
|
139
|
-
# ) AS t1
|
|
140
|
-
# WHERE (x_sequel_row_number_x <= 10)
|
|
141
|
-
# )))
|
|
142
|
-
# ORDER BY release_date
|
|
143
|
-
|
|
144
|
-
* You can now pass symbols with embedded qualifiers or aliases,
|
|
145
|
-
as well as SQL::Identifier, SQL::QualifiedIdentifier, and
|
|
146
|
-
SQL::AliasedExpression objects as the first argument to
|
|
147
|
-
Dataset#graph.
|
|
148
|
-
|
|
149
|
-
* The nested_attributes plugin now automatically handles presence
|
|
150
|
-
validations on foreign keys when creating associated objects.
|
|
151
|
-
It now sets the foreign key value (or a placeholder value)
|
|
152
|
-
before validating such objects.
|
|
153
|
-
|
|
154
|
-
* Offsets on *_one associations are now respected when using
|
|
155
|
-
eager_graph.
|
|
156
|
-
|
|
157
|
-
* eager graphing *_many associations with offsets no longer breaks
|
|
158
|
-
if there are no associated results.
|
|
159
|
-
|
|
160
|
-
* Database#register_array_type in the pg_array extension now works
|
|
161
|
-
correctly if there is no existing scalar conversion proc for
|
|
162
|
-
the type.
|
|
163
|
-
|
|
164
|
-
* Unique, foreign key, and not null constraint violations are now
|
|
165
|
-
recognized correctly on SQLite 3.8.2+.
|
|
166
|
-
|
|
167
|
-
* The odbc adapter now returns fractional seconds in timestamps.
|
|
168
|
-
|
|
169
|
-
* The obdc/mssql adapter now inputs timestamps with 3 decimal
|
|
170
|
-
places.
|
|
171
|
-
|
|
172
|
-
= Backwards Compatibility
|
|
173
|
-
|
|
174
|
-
* The private Model.apply_window_function_eager_limit_strategy
|
|
175
|
-
method has been removed.
|
data/doc/release_notes/4.9.0.txt
DELETED
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
= Performance Enhancements
|
|
2
|
-
|
|
3
|
-
* Dataset::PlaceholderLiteralizer has been added as an optimization
|
|
4
|
-
framework. This allows you to record changes to a given dataset
|
|
5
|
-
using placeholder arguments, and later quickly execute the query
|
|
6
|
-
providing values for the placeholders. This is similar in idea
|
|
7
|
-
to prepared statements, except that the SQL for each query can
|
|
8
|
-
change depending on the values for the placeholders.
|
|
9
|
-
|
|
10
|
-
Using this optimization framework, generating the SQL for query
|
|
11
|
-
is about 3x faster, and since SQL generation time is a significant
|
|
12
|
-
portion of total time for simple queries, simple queries can
|
|
13
|
-
execute up to 50% faster.
|
|
14
|
-
|
|
15
|
-
There are two APIs for this optimization framework. There is a
|
|
16
|
-
lower level dataset API:
|
|
17
|
-
|
|
18
|
-
loader = Sequel::Dataset::PlaceholderLiteralizer.
|
|
19
|
-
loader(DB[:items]) do |pl, ds|
|
|
20
|
-
ds.where(:id=>pl.arg).exclude(:name=>pl.arg).limit(1)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
loader.first(1, "foo")
|
|
24
|
-
# SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
|
|
25
|
-
|
|
26
|
-
loader.first([1, 2], %w"foo bar")
|
|
27
|
-
# SELECT * FROM items WHERE ((id IN (1, 2)) AND
|
|
28
|
-
# (name NOT IN ('foo', 'bar'))) LIMIT 1
|
|
29
|
-
|
|
30
|
-
There is also a higher level model API (Model.finder):
|
|
31
|
-
|
|
32
|
-
class Item < Sequel::Model
|
|
33
|
-
# Given class method that returns a dataset
|
|
34
|
-
def self.by_id_and_not_name(id, not_name)
|
|
35
|
-
where(:id=>id).exclude(:name=>not_name)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Create optimized method that returns first value
|
|
39
|
-
finder :by_id_and_not_name
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Call optimized method
|
|
43
|
-
Album.first_by_id_and_not_name(1, 'foo')
|
|
44
|
-
# SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
|
|
45
|
-
|
|
46
|
-
Model.finder defaults to creating a method that returns the first
|
|
47
|
-
matching row, but using the :type option you can create methods
|
|
48
|
-
that call each, all, or get. There is also an option to choose the
|
|
49
|
-
method name (:name), as well as one to specify the number of
|
|
50
|
-
arguments to use if the method doesn't take a fixed number
|
|
51
|
-
(:arity).
|
|
52
|
-
|
|
53
|
-
Finally, Model.find, .first, and .first! now automatically use an
|
|
54
|
-
optimized finder if given a single argument. Model.[] uses an
|
|
55
|
-
optimized finder if given a single hash, and Model.[], .with_pk,
|
|
56
|
-
and .with_pk! use an optimized finder if the model has a composite
|
|
57
|
-
primary key. In all of these cases, these methods are about 50%
|
|
58
|
-
faster than before.
|
|
59
|
-
|
|
60
|
-
* The pure-ruby PostgreSQL array parser that ships with Sequel has
|
|
61
|
-
been replaced with a strscan-based parser. This parser avoids
|
|
62
|
-
O(n^2) performance for arrays with multibyte strings, and in general
|
|
63
|
-
is much faster. Parsing an array with a single string with 100,000
|
|
64
|
-
multibyte characters is about 1000x faster, and now about half the
|
|
65
|
-
speed of the C implementation in sequel_pg.
|
|
66
|
-
|
|
67
|
-
* Dataset#paged_each now has a :strategy=>:filter option that
|
|
68
|
-
dramatically improves performance, especially if the columns
|
|
69
|
-
being ordered by are indexed.
|
|
70
|
-
|
|
71
|
-
Unfortunately, there are enough corner cases to this approach
|
|
72
|
-
that it cannot be used by default. At the least, the dataset
|
|
73
|
-
needs to be selecting the columns it is ordering by, not aliasing
|
|
74
|
-
the columns it is ordering by in the SELECT clause, not have
|
|
75
|
-
NULLs in any of the columns being ordered by, and not itself use
|
|
76
|
-
a limit or offset.
|
|
77
|
-
|
|
78
|
-
If you are ordering by expressions that are not simple column
|
|
79
|
-
values, you can provide a :filter_value option proc that takes the
|
|
80
|
-
last retrieved row and array of order by expressions, and returns
|
|
81
|
-
an array of values in the last retrieved row for those order by
|
|
82
|
-
expressions.
|
|
83
|
-
|
|
84
|
-
* In the postgres adapter, Dataset#paged_each now automatically uses
|
|
85
|
-
a cursor for improved performance.
|
|
86
|
-
|
|
87
|
-
* In the mysql2 adapter, Dataset#paged_each now automatically uses
|
|
88
|
-
streaming for improved performance, if streaming is supported.
|
|
89
|
-
|
|
90
|
-
* Dataset#with_sql_{each,all,first,single_value,insert,update}
|
|
91
|
-
have been added. These methods take specific SQL and execute
|
|
92
|
-
it on the database, returning the appropriate value. They
|
|
93
|
-
are significantly faster than the previous approach of
|
|
94
|
-
with_sql(SQL).{each,all,first,single_value,insert,update},
|
|
95
|
-
as they don't require cloning the dataset.
|
|
96
|
-
|
|
97
|
-
= New Features
|
|
98
|
-
|
|
99
|
-
* Database#create_join_table! and #create_join_table? have been added,
|
|
100
|
-
for consistency with #create_table! and #create_table?.
|
|
101
|
-
|
|
102
|
-
* A :hold option has been added to Dataset#use_cursor in the postgres
|
|
103
|
-
adapter, which uses WITH HOLD in the query, allowing for usage of
|
|
104
|
-
the cursor outside the enclosing transaction. When :hold is used,
|
|
105
|
-
Sequel does not automatically use a transaction around the cursor
|
|
106
|
-
call.
|
|
107
|
-
|
|
108
|
-
* Dataset#where_current_of has been added to the postgres adapter,
|
|
109
|
-
for updating rows based on a cursor's current position. This can
|
|
110
|
-
be used to update a large dataset where new values depend on
|
|
111
|
-
some ruby method, without keeping all rows in memory.
|
|
112
|
-
|
|
113
|
-
ds = DB[:huge_table]
|
|
114
|
-
ds.use_cursor(:rows_per_fetch=>1).each do |row|
|
|
115
|
-
ds.where_current_of.update(:column=>ruby_method(row))
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
* A current_datetime_timestamp extension has been added, for
|
|
119
|
-
creating Time/DateTime instances that are literalized as
|
|
120
|
-
CURRENT_TIMESTAMP. When the dataset uses this extension, models
|
|
121
|
-
that use the touch and timestamps plugins will use
|
|
122
|
-
CURRENT_TIMESTAMP for the timestamps.
|
|
123
|
-
|
|
124
|
-
* The jdbc adapter now supports a :driver option, useful when
|
|
125
|
-
Sequel doesn't have direct support for the underlying driver, and
|
|
126
|
-
where java.sql.DriverManager.getConnection does not work
|
|
127
|
-
correctly due to Java class loading issues.
|
|
128
|
-
|
|
129
|
-
= Other Improvements
|
|
130
|
-
|
|
131
|
-
* Multiple corner cases in Dataset#eager_graph have been fixed.
|
|
132
|
-
|
|
133
|
-
* Calling Dataset#columns when using the eager_each plugin no
|
|
134
|
-
longer triggers eager loading.
|
|
135
|
-
|
|
136
|
-
* Database#column_schema_to_ruby_default is now a public method
|
|
137
|
-
in the schema_dumper extension.
|
|
138
|
-
|
|
139
|
-
* When validating associated objects for one_to_many and one_to_one
|
|
140
|
-
associations in the nested_attributes plugin, don't remove column
|
|
141
|
-
values if the association's foreign key is the associated model's
|
|
142
|
-
primary key.
|
|
143
|
-
|
|
144
|
-
* On PostgreSQL, Dataset#disable_insert_returning has been added
|
|
145
|
-
back. This disables the automatic use of RETURNING for INSERTs
|
|
146
|
-
for the dataset. This is necessary in cases where INSERT
|
|
147
|
-
RETURNING doesn't work, such as PostgreSQL <8.2 (or PostgreSQL
|
|
148
|
-
variants that forked before 8.2), or when using partitioning
|
|
149
|
-
with trigger functions, or conditional rules.
|
|
150
|
-
|
|
151
|
-
Note that if you use disable_insert_returning, insert will not
|
|
152
|
-
return the autoincremented primary key. You need to call
|
|
153
|
-
currval or lastval manually using the same connection to get
|
|
154
|
-
the value, or use nextval to get the value to use before
|
|
155
|
-
inserting.
|
|
156
|
-
|
|
157
|
-
* The pg_array extension now uses the correct database type when
|
|
158
|
-
typecasting values for smallint, oid, real, character, and varchar
|
|
159
|
-
arrays. Previously, Sequel did not use the correct database type
|
|
160
|
-
in some cases (e.g. text[] for a varchar[]), which resulted in
|
|
161
|
-
errors if the value was used in a filter expression.
|
|
162
|
-
|
|
163
|
-
* Additional unique constraint violations are now recognized on
|
|
164
|
-
SQLite.
|
|
165
|
-
|
|
166
|
-
* Check constraint violations are now recognized on SQLite >=3.8.2.
|
|
167
|
-
|
|
168
|
-
* Adapters that emulate bitwise operators now do so using an append
|
|
169
|
-
only design, similar to how all other queries are built in Sequel.
|
|
170
|
-
|
|
171
|
-
= Backwards Compatibility
|
|
172
|
-
|
|
173
|
-
* In some cases Sequel no longer adds superfluous parentheses when
|
|
174
|
-
constructing SQL strings. If you are testing for specific SQL,
|
|
175
|
-
this can cause test failures.
|
|
176
|
-
|
|
177
|
-
* The pg_array extension no longer recognizes the :typecast_method
|
|
178
|
-
option when registering an array type. The option allowed reuse
|
|
179
|
-
of an existing typecast method, but as that results in an incorrect
|
|
180
|
-
type at the database level, the option was fundementally broken.
|
|
181
|
-
|
|
182
|
-
* The internals of the PostgreSQL array parser have changed. If you
|
|
183
|
-
were relying on them, you'll need to update your code.
|
|
184
|
-
|
|
185
|
-
* Dataset#complex_expression_arg_pairs private method now returns
|
|
186
|
-
nested expression objects instead of an already literalized string
|
|
187
|
-
in some cases. Custom adapters that call this method will probably
|
|
188
|
-
need to be changed. It's recommended that such adapters switch to
|
|
189
|
-
using the new Dataset#complex_expression_emulate_append method if
|
|
190
|
-
possible.
|
data/spec/adapter_spec.rb
DELETED
data/spec/adapters/db2_spec.rb
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
SEQUEL_ADAPTER_TEST = :db2
|
|
2
|
-
|
|
3
|
-
require_relative 'spec_helper'
|
|
4
|
-
|
|
5
|
-
if DB.table_exists?(:test)
|
|
6
|
-
DB.drop_table(:test)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
describe Sequel::Database do
|
|
10
|
-
before do
|
|
11
|
-
@db = DB
|
|
12
|
-
@db.create_table(:test){String :a}
|
|
13
|
-
@ds = @db[:test]
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
after do
|
|
17
|
-
@db.drop_table(:test)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should provide disconnect functionality after preparing a connection" do
|
|
21
|
-
@ds.prepare(:first, :a).call
|
|
22
|
-
@db.disconnect
|
|
23
|
-
@db.pool.size.must_equal 0
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should return version correctly" do
|
|
27
|
-
@db.db2_version.must_match(/DB2 v/i)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
describe "Simple Dataset operations" do
|
|
32
|
-
before(:all) do
|
|
33
|
-
DB.use_clob_as_blob = true
|
|
34
|
-
DB.create_table!(:items) do
|
|
35
|
-
Integer :id, :primary_key => true
|
|
36
|
-
Integer :number
|
|
37
|
-
column :bin_string, 'varchar(20) for bit data'
|
|
38
|
-
column :bin_clob, 'clob'
|
|
39
|
-
end
|
|
40
|
-
@ds = DB[:items]
|
|
41
|
-
end
|
|
42
|
-
after(:each) do
|
|
43
|
-
@ds.delete
|
|
44
|
-
end
|
|
45
|
-
after(:all) do
|
|
46
|
-
DB.use_clob_as_blob = false
|
|
47
|
-
DB.drop_table(:items)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should insert with a primary key specified" do
|
|
51
|
-
@ds.insert(:id => 1, :number => 10)
|
|
52
|
-
@ds.insert(:id => 100, :number => 20)
|
|
53
|
-
@ds.select_hash(:id, :number).must_equal(1 => 10, 100 => 20)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should insert into binary columns" do
|
|
57
|
-
@ds.insert(:id => 1, :bin_string => Sequel.blob("\1"), :bin_clob => Sequel.blob("\2"))
|
|
58
|
-
@ds.select(:bin_string, :bin_clob).first.must_equal(:bin_string => "\1", :bin_clob => "\2")
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
describe Sequel::Database do
|
|
63
|
-
before do
|
|
64
|
-
@db = DB
|
|
65
|
-
end
|
|
66
|
-
after do
|
|
67
|
-
@db.drop_table(:items)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should parse primary keys from the schema properly" do
|
|
71
|
-
@db.create_table!(:items){Integer :number}
|
|
72
|
-
@db.schema(:items).collect{|k,v| k if v[:primary_key]}.compact.must_equal []
|
|
73
|
-
@db.create_table!(:items){primary_key :number}
|
|
74
|
-
@db.schema(:items).collect{|k,v| k if v[:primary_key]}.compact.must_equal [:number]
|
|
75
|
-
@db.create_table!(:items){Integer :number1, :null => false; Integer :number2, :null => false; primary_key [:number1, :number2]}
|
|
76
|
-
@db.schema(:items).collect{|k,v| k if v[:primary_key]}.compact.must_equal [:number1, :number2]
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should not error on alter_table operations that need REORG" do
|
|
80
|
-
@db.create_table!(:items) do
|
|
81
|
-
varchar :a
|
|
82
|
-
end
|
|
83
|
-
@db.alter_table(:items) do
|
|
84
|
-
add_column :b, :varchar, :null => true
|
|
85
|
-
set_column_allow_null :a, false
|
|
86
|
-
add_index :a, :unique => true
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
describe "Sequel::IBMDB::Database#convert_smallint_to_bool" do
|
|
92
|
-
before do
|
|
93
|
-
@db = DB
|
|
94
|
-
@db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
|
|
95
|
-
@ds = @db[:booltest]
|
|
96
|
-
end
|
|
97
|
-
after do
|
|
98
|
-
@db.convert_smallint_to_bool = true
|
|
99
|
-
@db.drop_table(:booltest)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should consider smallint datatypes as boolean if set, but not larger smallints" do
|
|
103
|
-
@db.schema(:booltest, :reload=>true).first.last[:type].must_equal :boolean
|
|
104
|
-
@db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
|
|
105
|
-
@db.convert_smallint_to_bool = false
|
|
106
|
-
@db.schema(:booltest, :reload=>true).first.last[:type].must_equal :integer
|
|
107
|
-
@db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "should return smallints as bools and integers as integers when set" do
|
|
111
|
-
@db.convert_smallint_to_bool = true
|
|
112
|
-
@ds.delete
|
|
113
|
-
@ds.insert(:b=>true, :i=>10)
|
|
114
|
-
@ds.all.must_equal [{:b=>true, :i=>10}]
|
|
115
|
-
@ds.delete
|
|
116
|
-
@ds.insert(:b=>false, :i=>0)
|
|
117
|
-
@ds.all.must_equal [{:b=>false, :i=>0}]
|
|
118
|
-
@ds.delete
|
|
119
|
-
@ds.insert(:b=>true, :i=>1)
|
|
120
|
-
@ds.all.must_equal [{:b=>true, :i=>1}]
|
|
121
|
-
|
|
122
|
-
@ds = @ds.with_convert_smallint_to_bool(false)
|
|
123
|
-
@ds.delete
|
|
124
|
-
@ds.insert(:b=>true, :i=>10)
|
|
125
|
-
@ds.all.must_equal [{:b=>1, :i=>10}]
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
it "should return all smallints as integers when unset" do
|
|
129
|
-
@db.convert_smallint_to_bool = false
|
|
130
|
-
@ds.delete
|
|
131
|
-
@ds.insert(:b=>true, :i=>10)
|
|
132
|
-
@ds.all.must_equal [{:b=>1, :i=>10}]
|
|
133
|
-
@ds.delete
|
|
134
|
-
@ds.insert(:b=>false, :i=>0)
|
|
135
|
-
@ds.all.must_equal [{:b=>0, :i=>0}]
|
|
136
|
-
|
|
137
|
-
@ds.delete
|
|
138
|
-
@ds.insert(:b=>1, :i=>10)
|
|
139
|
-
@ds.all.must_equal [{:b=>1, :i=>10}]
|
|
140
|
-
@ds.delete
|
|
141
|
-
@ds.insert(:b=>0, :i=>0)
|
|
142
|
-
@ds.all.must_equal [{:b=>0, :i=>0}]
|
|
143
|
-
|
|
144
|
-
@ds = @ds.with_convert_smallint_to_bool(true)
|
|
145
|
-
@ds.delete
|
|
146
|
-
@ds.insert(:b=>true, :i=>10)
|
|
147
|
-
@ds.all.must_equal [{:b=>true, :i=>10}]
|
|
148
|
-
end
|
|
149
|
-
end if DB.adapter_scheme == :ibmdb
|
|
150
|
-
|
|
151
|
-
describe "Simple Dataset operations in transactions" do
|
|
152
|
-
before do
|
|
153
|
-
DB.create_table!(:items_insert_in_transaction) do
|
|
154
|
-
Integer :id, :primary_key => true
|
|
155
|
-
integer :number
|
|
156
|
-
end
|
|
157
|
-
@ds = DB[:items_insert_in_transaction]
|
|
158
|
-
end
|
|
159
|
-
after do
|
|
160
|
-
DB.drop_table(:items_insert_in_transaction)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should insert correctly with a primary key specified inside a transaction" do
|
|
164
|
-
DB.transaction do
|
|
165
|
-
@ds.insert(:id=>100, :number=>20)
|
|
166
|
-
@ds.count.must_equal 1
|
|
167
|
-
@ds.order(:id).all.must_equal [{:id=>100, :number=>20}]
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|