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
|
@@ -24,6 +24,10 @@ module Sequel
|
|
|
24
24
|
# Database object.
|
|
25
25
|
attr_accessor :mssql_unicode_strings
|
|
26
26
|
|
|
27
|
+
# Whether to use LIKE without COLLATE Latin1_General_CS_AS. Skipping the COLLATE
|
|
28
|
+
# can significantly increase performance in some cases.
|
|
29
|
+
attr_accessor :like_without_collate
|
|
30
|
+
|
|
27
31
|
# Execute the given stored procedure with the given name.
|
|
28
32
|
#
|
|
29
33
|
# Options:
|
|
@@ -244,6 +248,16 @@ module Sequel
|
|
|
244
248
|
|
|
245
249
|
private
|
|
246
250
|
|
|
251
|
+
# Add CLUSTERED or NONCLUSTERED as needed
|
|
252
|
+
def add_clustered_sql_fragment(sql, opts)
|
|
253
|
+
clustered = opts[:clustered]
|
|
254
|
+
unless clustered.nil?
|
|
255
|
+
sql += " #{'NON' unless clustered}CLUSTERED"
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
sql
|
|
259
|
+
end
|
|
260
|
+
|
|
247
261
|
# Add dropping of the default constraint to the list of SQL queries.
|
|
248
262
|
# This is necessary before dropping the column or changing its type.
|
|
249
263
|
def add_drop_default_constraint_sql(sqls, table, column)
|
|
@@ -279,18 +293,20 @@ module Sequel
|
|
|
279
293
|
end
|
|
280
294
|
end
|
|
281
295
|
sqls << "ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{column_definition_sql(op)}"
|
|
282
|
-
sqls << alter_table_sql(table, op.merge(:op=>:set_column_default, :default=>default)) if default
|
|
296
|
+
sqls << alter_table_sql(table, op.merge(:op=>:set_column_default, :default=>default, :skip_drop_default=>true)) if default
|
|
283
297
|
sqls
|
|
284
298
|
when :set_column_null
|
|
285
299
|
sch = schema(table).find{|k,v| k.to_s == op[:name].to_s}.last
|
|
286
300
|
type = sch[:db_type]
|
|
287
|
-
if [:string, :decimal].include?(sch[:type]) && !["text", "ntext"].include?(type) && (size = (sch[:max_chars] || sch[:column_size]))
|
|
301
|
+
if [:string, :decimal, :blob].include?(sch[:type]) && !["text", "ntext"].include?(type) && (size = (sch[:max_chars] || sch[:column_size]))
|
|
288
302
|
size = "MAX" if size == -1
|
|
289
303
|
type += "(#{size}#{", #{sch[:scale]}" if sch[:scale] && sch[:scale].to_i > 0})"
|
|
290
304
|
end
|
|
291
305
|
"ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{quote_identifier(op[:name])} #{type_literal(:type=>type)} #{'NOT ' unless op[:null]}NULL"
|
|
292
306
|
when :set_column_default
|
|
293
|
-
|
|
307
|
+
sqls = []
|
|
308
|
+
add_drop_default_constraint_sql(sqls, table, op[:name]) unless op[:skip_drop_default]
|
|
309
|
+
sqls << "ALTER TABLE #{quote_schema_table(table)} ADD CONSTRAINT #{quote_identifier("sequel_#{table}_#{op[:name]}_def")} DEFAULT #{literal(op[:default])} FOR #{quote_identifier(op[:name])}"
|
|
294
310
|
else
|
|
295
311
|
super(table, op)
|
|
296
312
|
end
|
|
@@ -394,6 +410,11 @@ module Sequel
|
|
|
394
410
|
super.with_quote_identifiers(true)
|
|
395
411
|
end
|
|
396
412
|
|
|
413
|
+
# Handle clustered and nonclustered primary keys
|
|
414
|
+
def primary_key_constraint_sql_fragment(opts)
|
|
415
|
+
add_clustered_sql_fragment(super, opts)
|
|
416
|
+
end
|
|
417
|
+
|
|
397
418
|
# Use sp_rename to rename the table
|
|
398
419
|
def rename_table_sql(name, new_name)
|
|
399
420
|
"sp_rename #{literal(quote_schema_table(name))}, #{quote_identifier(schema_and_table(new_name).pop)}"
|
|
@@ -427,20 +448,19 @@ module Sequel
|
|
|
427
448
|
m = output_identifier_meth(opts[:dataset])
|
|
428
449
|
m2 = input_identifier_meth(opts[:dataset])
|
|
429
450
|
tn = m2.call(table_name.to_s)
|
|
430
|
-
table_id = get(Sequel.function(:object_id, tn))
|
|
431
451
|
info_sch_sch = opts[:information_schema_schema]
|
|
432
452
|
inf_sch_qual = lambda{|s| info_sch_sch ? Sequel.qualify(info_sch_sch, s) : Sequel[s]}
|
|
433
|
-
|
|
453
|
+
table_id = metadata_dataset.from(inf_sch_qual.call(Sequel[:sys][:objects])).where(:name => tn).select_map(:object_id).first
|
|
434
454
|
|
|
435
|
-
identity_cols = metadata_dataset.from(
|
|
455
|
+
identity_cols = metadata_dataset.from(inf_sch_qual.call(Sequel[:sys][:columns])).
|
|
436
456
|
where(:object_id=>table_id, :is_identity=>true).
|
|
437
457
|
select_map(:name)
|
|
438
458
|
|
|
439
|
-
pk_index_id = metadata_dataset.from(
|
|
459
|
+
pk_index_id = metadata_dataset.from(inf_sch_qual.call(Sequel[:sys][:sysindexes])).
|
|
440
460
|
where(:id=>table_id, :indid=>1..254){{(status & 2048)=>2048}}.
|
|
441
461
|
get(:indid)
|
|
442
|
-
pk_cols = metadata_dataset.from(
|
|
443
|
-
join(
|
|
462
|
+
pk_cols = metadata_dataset.from(inf_sch_qual.call(Sequel[:sys][:sysindexkeys]).as(:sik)).
|
|
463
|
+
join(inf_sch_qual.call(Sequel[:sys][:syscolumns]).as(:sc), :id=>:id, :colid=>:colid).
|
|
444
464
|
where{{sik[:id]=>table_id, sik[:indid]=>pk_index_id}}.
|
|
445
465
|
select_order_map{sc[:name]}
|
|
446
466
|
|
|
@@ -491,6 +511,11 @@ module Sequel
|
|
|
491
511
|
:'varbinary(max)'
|
|
492
512
|
end
|
|
493
513
|
|
|
514
|
+
# Handle clustered and nonclustered unique constraints
|
|
515
|
+
def unique_constraint_sql_fragment(opts)
|
|
516
|
+
add_clustered_sql_fragment(super, opts)
|
|
517
|
+
end
|
|
518
|
+
|
|
494
519
|
# MSSQL supports views with check option, but not local.
|
|
495
520
|
def view_with_check_option_support
|
|
496
521
|
true
|
|
@@ -527,9 +552,9 @@ module Sequel
|
|
|
527
552
|
when :'||'
|
|
528
553
|
super(sql, :+, args)
|
|
529
554
|
when :LIKE, :"NOT LIKE"
|
|
530
|
-
super(sql, op, args
|
|
555
|
+
super(sql, op, complex_expression_sql_like_args(args, " COLLATE Latin1_General_CS_AS)"))
|
|
531
556
|
when :ILIKE, :"NOT ILIKE"
|
|
532
|
-
super(sql, (op == :ILIKE ? :LIKE : :"NOT LIKE"), args
|
|
557
|
+
super(sql, (op == :ILIKE ? :LIKE : :"NOT LIKE"), complex_expression_sql_like_args(args, " COLLATE Latin1_General_CI_AS)"))
|
|
533
558
|
when :<<, :>>
|
|
534
559
|
complex_expression_emulate_append(sql, op, args)
|
|
535
560
|
when :extract
|
|
@@ -658,11 +683,11 @@ module Sequel
|
|
|
658
683
|
# case by default, and that also adds a default order, so it's better to just
|
|
659
684
|
# avoid the subquery.
|
|
660
685
|
def select_sql
|
|
661
|
-
if @opts[:offset]
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
super
|
|
686
|
+
if @opts[:offset]
|
|
687
|
+
raise(Error, "Using with_ties is not supported with an offset on Microsoft SQL Server") if @opts[:limit_with_ties]
|
|
688
|
+
return order(1).select_sql if is_2012_or_later? && !@opts[:order]
|
|
665
689
|
end
|
|
690
|
+
super
|
|
666
691
|
end
|
|
667
692
|
|
|
668
693
|
# The version of the database server.
|
|
@@ -754,6 +779,12 @@ module Sequel
|
|
|
754
779
|
false
|
|
755
780
|
end
|
|
756
781
|
|
|
782
|
+
# Use WITH TIES when limiting the result set to also include additional
|
|
783
|
+
# rows matching the last row.
|
|
784
|
+
def with_ties
|
|
785
|
+
clone(:limit_with_ties=>true)
|
|
786
|
+
end
|
|
787
|
+
|
|
757
788
|
protected
|
|
758
789
|
|
|
759
790
|
# If returned primary keys are requested, use OUTPUT unless already set on the
|
|
@@ -765,19 +796,15 @@ module Sequel
|
|
|
765
796
|
output(nil, [SQL::QualifiedIdentifier.new(:inserted, first_primary_key)])._import(columns, values, opts)
|
|
766
797
|
elsif @opts[:output]
|
|
767
798
|
statements = multi_insert_sql(columns, values)
|
|
799
|
+
ds = naked
|
|
768
800
|
@db.transaction(opts.merge(:server=>@opts[:server])) do
|
|
769
|
-
statements.map{|st| with_sql(st)}
|
|
801
|
+
statements.map{|st| ds.with_sql(st)}
|
|
770
802
|
end.first.map{|v| v.length == 1 ? v.values.first : v}
|
|
771
803
|
else
|
|
772
804
|
super
|
|
773
805
|
end
|
|
774
806
|
end
|
|
775
807
|
|
|
776
|
-
# MSSQL does not allow ordering in sub-clauses unless TOP (limit) is specified
|
|
777
|
-
def aggregate_dataset
|
|
778
|
-
(options_overlap(Sequel::Dataset::COUNT_FROM_SELF_OPTS) && !options_overlap([:limit])) ? unordered.from_self : super
|
|
779
|
-
end
|
|
780
|
-
|
|
781
808
|
# If the dataset using a order without a limit or offset or custom SQL,
|
|
782
809
|
# remove the order. Compounds on Microsoft SQL Server have undefined
|
|
783
810
|
# order unless the result is specifically ordered. Applying the current
|
|
@@ -797,6 +824,11 @@ module Sequel
|
|
|
797
824
|
|
|
798
825
|
private
|
|
799
826
|
|
|
827
|
+
# MSSQL does not allow ordering in sub-clauses unless TOP (limit) is specified
|
|
828
|
+
def aggregate_dataset
|
|
829
|
+
(options_overlap(Sequel::Dataset::COUNT_FROM_SELF_OPTS) && !options_overlap([:limit])) ? unordered.from_self : super
|
|
830
|
+
end
|
|
831
|
+
|
|
800
832
|
# Allow update and delete for unordered, limited datasets only.
|
|
801
833
|
def check_not_limited!(type)
|
|
802
834
|
return if @opts[:skip_limit_check] && type != :truncate
|
|
@@ -819,6 +851,15 @@ module Sequel
|
|
|
819
851
|
server_version >= 11000000
|
|
820
852
|
end
|
|
821
853
|
|
|
854
|
+
# Determine whether to add the COLLATE for LIKE arguments, based on the Database setting.
|
|
855
|
+
def complex_expression_sql_like_args(args, collation)
|
|
856
|
+
if db.like_without_collate
|
|
857
|
+
args
|
|
858
|
+
else
|
|
859
|
+
args.map{|a| Sequel.lit(["(", collation], a)}
|
|
860
|
+
end
|
|
861
|
+
end
|
|
862
|
+
|
|
822
863
|
# Use strict ISO-8601 format with T between date and time,
|
|
823
864
|
# since that is the format that is multilanguage and not
|
|
824
865
|
# DATEFORMAT dependent.
|
|
@@ -957,6 +998,10 @@ module Sequel
|
|
|
957
998
|
sql << " TOP "
|
|
958
999
|
literal_append(sql, l)
|
|
959
1000
|
end
|
|
1001
|
+
|
|
1002
|
+
if @opts[:limit_with_ties]
|
|
1003
|
+
sql << " WITH TIES"
|
|
1004
|
+
end
|
|
960
1005
|
end
|
|
961
1006
|
|
|
962
1007
|
def update_limit_sql(sql)
|
|
@@ -187,6 +187,15 @@ module Sequel
|
|
|
187
187
|
def views(opts=OPTS)
|
|
188
188
|
full_tables('VIEW', opts)
|
|
189
189
|
end
|
|
190
|
+
|
|
191
|
+
# Renames multiple tables in a single call.
|
|
192
|
+
#
|
|
193
|
+
# DB.rename_tables [:items, :old_items], [:other_items, :old_other_items]
|
|
194
|
+
# # RENAME TABLE items TO old_items, other_items TO old_other_items
|
|
195
|
+
def rename_tables(*renames)
|
|
196
|
+
execute_ddl(rename_tables_sql(renames))
|
|
197
|
+
renames.each{|from,| remove_cached_schema(from)}
|
|
198
|
+
end
|
|
190
199
|
|
|
191
200
|
private
|
|
192
201
|
|
|
@@ -473,6 +482,14 @@ module Sequel
|
|
|
473
482
|
schema(table).select{|a| a[1][:primary_key]}.map{|a| a[0]}
|
|
474
483
|
end
|
|
475
484
|
|
|
485
|
+
# SQL statement for renaming multiple tables.
|
|
486
|
+
def rename_tables_sql(renames)
|
|
487
|
+
rename_tos = renames.map do |from, to|
|
|
488
|
+
"#{quote_schema_table(from)} TO #{quote_schema_table(to)}"
|
|
489
|
+
end.join(', ')
|
|
490
|
+
"RENAME TABLE #{rename_tos}"
|
|
491
|
+
end
|
|
492
|
+
|
|
476
493
|
# Rollback the currently open XA transaction
|
|
477
494
|
def rollback_transaction(conn, opts=OPTS)
|
|
478
495
|
if (s = opts[:prepare]) && savepoint_level(conn) <= 1
|
|
@@ -691,7 +708,7 @@ module Sequel
|
|
|
691
708
|
end
|
|
692
709
|
|
|
693
710
|
# Return the results of an EXPLAIN query as a string. Options:
|
|
694
|
-
# :extended :: Use EXPLAIN
|
|
711
|
+
# :extended :: Use EXPLAIN EXTENDED instead of EXPLAIN if true.
|
|
695
712
|
def explain(opts=OPTS)
|
|
696
713
|
# Load the PrettyTable class, needed for explain output
|
|
697
714
|
Sequel.extension(:_pretty_table) unless defined?(Sequel::PrettyTable)
|
|
@@ -717,15 +734,6 @@ module Sequel
|
|
|
717
734
|
SQL::PlaceholderLiteralString.new((opts[:boolean] ? MATCH_AGAINST_BOOLEAN : MATCH_AGAINST), [Array(cols), terms])
|
|
718
735
|
end
|
|
719
736
|
|
|
720
|
-
# Transforms :straight to STRAIGHT_JOIN.
|
|
721
|
-
def join_type_sql(join_type)
|
|
722
|
-
if join_type == :straight
|
|
723
|
-
'STRAIGHT_JOIN'
|
|
724
|
-
else
|
|
725
|
-
super
|
|
726
|
-
end
|
|
727
|
-
end
|
|
728
|
-
|
|
729
737
|
# Sets up the insert methods to use INSERT IGNORE.
|
|
730
738
|
# Useful if you have a unique key and want to just skip
|
|
731
739
|
# inserting rows that violate the unique key restriction.
|
|
@@ -956,6 +964,15 @@ module Sequel
|
|
|
956
964
|
end
|
|
957
965
|
end
|
|
958
966
|
|
|
967
|
+
# Transforms :straight to STRAIGHT_JOIN.
|
|
968
|
+
def join_type_sql(join_type)
|
|
969
|
+
if join_type == :straight
|
|
970
|
+
'STRAIGHT_JOIN'
|
|
971
|
+
else
|
|
972
|
+
super
|
|
973
|
+
end
|
|
974
|
+
end
|
|
975
|
+
|
|
959
976
|
# MySQL allows a LIMIT in DELETE and UPDATE statements.
|
|
960
977
|
def limit_sql(sql)
|
|
961
978
|
if l = @opts[:limit]
|
|
@@ -103,12 +103,18 @@ module Sequel
|
|
|
103
103
|
map{|r| m.call(r[:view_name])}
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
# Whether a view with a given name exists. By default, looks in all schemas other than system
|
|
107
|
+
# schemas. If the :current_schema option is given, looks in the schema for the current user.
|
|
108
|
+
def view_exists?(name, opts=OPTS)
|
|
109
|
+
ds = metadata_dataset.from(:all_views).where(:view_name=>input_identifier_meth.call(name))
|
|
110
|
+
|
|
111
|
+
if opts[:current_schema]
|
|
112
|
+
ds = ds.where(:owner=>Sequel.function(:SYS_CONTEXT, 'userenv', 'current_schema'))
|
|
113
|
+
else
|
|
114
|
+
ds = ds.exclude(:owner=>IGNORE_OWNERS)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
ds.count > 0
|
|
112
118
|
end
|
|
113
119
|
|
|
114
120
|
# The version of the Oracle server, used for determining capability.
|
|
@@ -178,7 +184,7 @@ module Sequel
|
|
|
178
184
|
|
|
179
185
|
def create_table_from_generator(name, generator, options)
|
|
180
186
|
drop_statement, create_statements = create_table_sql_list(name, generator, options)
|
|
181
|
-
|
|
187
|
+
swallow_database_error{execute_ddl(drop_statement)} if drop_statement
|
|
182
188
|
create_statements.each{|sql| execute_ddl(sql)}
|
|
183
189
|
end
|
|
184
190
|
|
|
@@ -422,22 +428,6 @@ module Sequel
|
|
|
422
428
|
end
|
|
423
429
|
end
|
|
424
430
|
|
|
425
|
-
def select_limit_sql(sql)
|
|
426
|
-
return unless supports_fetch_next_rows?
|
|
427
|
-
|
|
428
|
-
if offset = @opts[:offset]
|
|
429
|
-
sql << " OFFSET "
|
|
430
|
-
literal_append(sql, offset)
|
|
431
|
-
sql << " ROWS"
|
|
432
|
-
end
|
|
433
|
-
|
|
434
|
-
if limit = @opts[:limit]
|
|
435
|
-
sql << " FETCH NEXT "
|
|
436
|
-
literal_append(sql, limit)
|
|
437
|
-
sql << " ROWS ONLY"
|
|
438
|
-
end
|
|
439
|
-
end
|
|
440
|
-
|
|
441
431
|
# Oracle requires recursive CTEs to have column aliases.
|
|
442
432
|
def recursive_cte_requires_column_aliases?
|
|
443
433
|
true
|
|
@@ -624,6 +614,22 @@ module Sequel
|
|
|
624
614
|
:union
|
|
625
615
|
end
|
|
626
616
|
|
|
617
|
+
def select_limit_sql(sql)
|
|
618
|
+
return unless supports_fetch_next_rows?
|
|
619
|
+
|
|
620
|
+
if offset = @opts[:offset]
|
|
621
|
+
sql << " OFFSET "
|
|
622
|
+
literal_append(sql, offset)
|
|
623
|
+
sql << " ROWS"
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
if limit = @opts[:limit]
|
|
627
|
+
sql << " FETCH NEXT "
|
|
628
|
+
literal_append(sql, limit)
|
|
629
|
+
sql << " ROWS ONLY"
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
|
|
627
633
|
# Use SKIP LOCKED if skipping locked rows.
|
|
628
634
|
def select_lock_sql(sql)
|
|
629
635
|
super
|