sequel 4.49.0 → 5.0.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 +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,43 +1,15 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../utils/emulate_offset_with_row_number'
|
4
4
|
|
5
5
|
module Sequel
|
6
6
|
module DB2
|
7
7
|
Sequel::Database.set_shared_adapter_scheme(:db2, self)
|
8
8
|
|
9
|
-
# SEQUEL5: Remove
|
10
|
-
@use_clob_as_blob = false
|
11
|
-
class << self
|
12
|
-
def use_clob_as_blob
|
13
|
-
Sequel::Deprecation.deprecate("Sequel::DB2.use_clob_as_blob", "Call this method on the Database instance")
|
14
|
-
@use_clob_as_blob
|
15
|
-
end
|
16
|
-
def use_clob_as_blob=(v)
|
17
|
-
Sequel::Deprecation.deprecate("Sequel::DB2.use_clob_as_blob=", "Call this method on the Database instance")
|
18
|
-
@use_clob_as_blob = v
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
9
|
module DatabaseMethods
|
23
|
-
AUTOINCREMENT = 'GENERATED ALWAYS AS IDENTITY'.freeze
|
24
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
|
25
|
-
NOT_NULL = ' NOT NULL'.freeze
|
26
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_NULL)
|
27
|
-
NULL = ''.freeze
|
28
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL)
|
29
|
-
|
30
10
|
# Whether to use clob as the generic File type, false by default.
|
31
|
-
|
11
|
+
attr_accessor :use_clob_as_blob
|
32
12
|
|
33
|
-
# SEQUEL5: Remove
|
34
|
-
attr_writer :use_clob_as_blob
|
35
|
-
def use_clob_as_blob
|
36
|
-
v = @use_clob_as_blob
|
37
|
-
v.nil? ? Sequel::DB2.instance_variable_get(:@use_clob_as_blob) : v
|
38
|
-
end
|
39
|
-
|
40
|
-
# DB2 always uses :db2 as it's database type
|
41
13
|
def database_type
|
42
14
|
:db2
|
43
15
|
end
|
@@ -145,7 +117,6 @@ module Sequel
|
|
145
117
|
|
146
118
|
private
|
147
119
|
|
148
|
-
# Handle DB2 specific alter table operations.
|
149
120
|
def alter_table_sql(table, op)
|
150
121
|
case op[:op]
|
151
122
|
when :add_column
|
@@ -302,36 +273,7 @@ module Sequel
|
|
302
273
|
module DatasetMethods
|
303
274
|
include EmulateOffsetWithRowNumber
|
304
275
|
|
305
|
-
BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}
|
306
|
-
|
307
|
-
PAREN_CLOSE = ')'.freeze
|
308
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
309
|
-
PAREN_OPEN = '('.freeze
|
310
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
|
311
|
-
BOOL_TRUE = '1'.freeze
|
312
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
313
|
-
BOOL_FALSE = '0'.freeze
|
314
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
315
|
-
CAST_STRING_OPEN = "RTRIM(CHAR(".freeze
|
316
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_OPEN)
|
317
|
-
CAST_STRING_CLOSE = "))".freeze
|
318
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_CLOSE)
|
319
|
-
FETCH_FIRST_ROW_ONLY = " FETCH FIRST ROW ONLY".freeze
|
320
|
-
Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST_ROW_ONLY)
|
321
|
-
FETCH_FIRST = " FETCH FIRST ".freeze
|
322
|
-
Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST)
|
323
|
-
ROWS_ONLY = " ROWS ONLY".freeze
|
324
|
-
Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
|
325
|
-
EMPTY_FROM_TABLE = ' FROM "SYSIBM"."SYSDUMMY1"'.freeze
|
326
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_FROM_TABLE)
|
327
|
-
HSTAR = "H*".freeze
|
328
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
329
|
-
BLOB_OPEN = "BLOB(X'".freeze
|
330
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
|
331
|
-
BLOB_CLOSE = "')".freeze
|
332
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_CLOSE)
|
333
|
-
EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
|
334
|
-
Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
|
276
|
+
BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}.freeze
|
335
277
|
|
336
278
|
# DB2 casts strings using RTRIM and CHAR instead of VARCHAR.
|
337
279
|
def cast_sql_append(sql, expr, type)
|
@@ -1,39 +1,19 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../utils/emulate_offset_with_row_number'
|
4
|
+
require_relative '../utils/split_alter_table'
|
4
5
|
|
5
6
|
module Sequel
|
6
7
|
module MSSQL
|
7
8
|
Sequel::Database.set_shared_adapter_scheme(:mssql, self)
|
8
9
|
|
9
10
|
def self.mock_adapter_setup(db)
|
10
|
-
db.
|
11
|
+
db.instance_exec do
|
11
12
|
@server_version = 11000000
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
module DatabaseMethods
|
16
|
-
AUTO_INCREMENT = 'IDENTITY(1,1)'.freeze
|
17
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTO_INCREMENT)
|
18
|
-
SERVER_VERSION_RE = /^(\d+)\.(\d+)\.(\d+)/.freeze
|
19
|
-
Sequel::Deprecation.deprecate_constant(self, :SERVER_VERSION_RE)
|
20
|
-
SERVER_VERSION_SQL = "SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar)".freeze
|
21
|
-
Sequel::Deprecation.deprecate_constant(self, :SERVER_VERSION_SQL)
|
22
|
-
SQL_BEGIN = "BEGIN TRANSACTION".freeze
|
23
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_BEGIN)
|
24
|
-
SQL_COMMIT = "COMMIT TRANSACTION".freeze
|
25
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_COMMIT)
|
26
|
-
SQL_ROLLBACK = "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION".freeze
|
27
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK)
|
28
|
-
SQL_ROLLBACK_TO_SAVEPOINT = 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION autopoint_%d'.freeze
|
29
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK_TO_SAVEPOINT)
|
30
|
-
SQL_SAVEPOINT = 'SAVE TRANSACTION autopoint_%d'.freeze
|
31
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_SAVEPOINT)
|
32
|
-
MSSQL_DEFAULT_RE = /\A(?:\(N?('.*')\)|\(\((-?\d+(?:\.\d+)?)\)\))\z/
|
33
|
-
Sequel::Deprecation.deprecate_constant(self, :MSSQL_DEFAULT_RE)
|
34
|
-
DECIMAL_TYPE_RE = /number|numeric|decimal/io
|
35
|
-
Sequel::Deprecation.deprecate_constant(self, :DECIMAL_TYPE_RE)
|
36
|
-
|
37
17
|
FOREIGN_KEY_ACTION_MAP = {0 => :no_action, 1 => :cascade, 2 => :set_null, 3 => :set_default}.freeze
|
38
18
|
|
39
19
|
include Sequel::Database::SplitAlterTable
|
@@ -42,12 +22,7 @@ module Sequel
|
|
42
22
|
# strings. True by default for compatibility, can be set to false for a possible
|
43
23
|
# performance increase. This sets the default for all datasets created from this
|
44
24
|
# Database object.
|
45
|
-
|
46
|
-
|
47
|
-
def mssql_unicode_strings=(v)
|
48
|
-
@mssql_unicode_strings = v
|
49
|
-
reset_default_dataset
|
50
|
-
end
|
25
|
+
attr_accessor :mssql_unicode_strings
|
51
26
|
|
52
27
|
# Execute the given stored procedure with the given name.
|
53
28
|
#
|
@@ -67,11 +42,11 @@ module Sequel
|
|
67
42
|
#
|
68
43
|
# Examples:
|
69
44
|
#
|
70
|
-
# DB.call_mssql_sproc(:SequelTest, {:
|
71
|
-
# DB.call_mssql_sproc(:SequelTest, {:
|
45
|
+
# DB.call_mssql_sproc(:SequelTest, {args: ['input arg', :output]})
|
46
|
+
# DB.call_mssql_sproc(:SequelTest, {args: ['input arg', [:output, 'int', 'varname']]})
|
72
47
|
#
|
73
48
|
# named params:
|
74
|
-
# DB.call_mssql_sproc(:SequelTest, :
|
49
|
+
# DB.call_mssql_sproc(:SequelTest, args: {
|
75
50
|
# 'input_arg1_name' => 'input arg1 value',
|
76
51
|
# 'input_arg2_name' => 'input arg2 value',
|
77
52
|
# 'output_arg_name' => [:output, 'int', 'varname']
|
@@ -90,7 +65,7 @@ module Sequel
|
|
90
65
|
method = :each_with_index
|
91
66
|
end
|
92
67
|
|
93
|
-
args.
|
68
|
+
args.public_send(method) do |v, i|
|
94
69
|
if named_args
|
95
70
|
k = v
|
96
71
|
v, type, select = i
|
@@ -128,7 +103,6 @@ module Sequel
|
|
128
103
|
ds.first
|
129
104
|
end
|
130
105
|
|
131
|
-
# Microsoft SQL Server uses the :mssql type.
|
132
106
|
def database_type
|
133
107
|
:mssql
|
134
108
|
end
|
@@ -234,7 +208,7 @@ module Sequel
|
|
234
208
|
dataset.send(:is_2008_or_later?)
|
235
209
|
end
|
236
210
|
|
237
|
-
# MSSQL supports savepoints, though it doesn't support
|
211
|
+
# MSSQL supports savepoints, though it doesn't support releasing them
|
238
212
|
def supports_savepoints?
|
239
213
|
true
|
240
214
|
end
|
@@ -276,7 +250,6 @@ module Sequel
|
|
276
250
|
'IDENTITY(1,1)'
|
277
251
|
end
|
278
252
|
|
279
|
-
# MSSQL specific syntax for altering tables.
|
280
253
|
def alter_table_sql(table, op)
|
281
254
|
case op[:op]
|
282
255
|
when :add_column
|
@@ -316,12 +289,10 @@ module Sequel
|
|
316
289
|
end
|
317
290
|
end
|
318
291
|
|
319
|
-
# SQL to start a new savepoint
|
320
292
|
def begin_savepoint_sql(depth)
|
321
293
|
"SAVE TRANSACTION autopoint_#{depth}"
|
322
294
|
end
|
323
295
|
|
324
|
-
# SQL to BEGIN a transaction.
|
325
296
|
def begin_transaction_sql
|
326
297
|
"BEGIN TRANSACTION"
|
327
298
|
end
|
@@ -339,13 +310,11 @@ module Sequel
|
|
339
310
|
super(default, type)
|
340
311
|
end
|
341
312
|
|
342
|
-
# Commit the active transaction on the connection, does not
|
343
|
-
# savepoints.
|
313
|
+
# Commit the active transaction on the connection, does not release savepoints.
|
344
314
|
def commit_transaction(conn, opts=OPTS)
|
345
315
|
log_connection_execute(conn, commit_transaction_sql) unless savepoint_level(conn) > 1
|
346
316
|
end
|
347
317
|
|
348
|
-
# SQL to COMMIT a transaction.
|
349
318
|
def commit_transaction_sql
|
350
319
|
"COMMIT TRANSACTION"
|
351
320
|
end
|
@@ -389,12 +358,10 @@ module Sequel
|
|
389
358
|
end
|
390
359
|
end
|
391
360
|
|
392
|
-
# The SQL to drop an index for the table.
|
393
361
|
def drop_index_sql(table, op)
|
394
362
|
"DROP INDEX #{quote_identifier(op[:name] || default_index_name(table, op[:columns]))} ON #{quote_schema_table(table)}"
|
395
363
|
end
|
396
364
|
|
397
|
-
# support for clustered index type
|
398
365
|
def index_definition_sql(table_name, index)
|
399
366
|
index_name = index[:name] || default_index_name(table_name, index[:columns])
|
400
367
|
raise Error, "Partial indexes are not supported for this database" if index[:where] && !supports_partial_indexes?
|
@@ -424,17 +391,14 @@ module Sequel
|
|
424
391
|
"sp_rename #{literal(quote_schema_table(name))}, #{quote_identifier(schema_and_table(new_name).pop)}"
|
425
392
|
end
|
426
393
|
|
427
|
-
# SQL to rollback to a savepoint
|
428
394
|
def rollback_savepoint_sql(depth)
|
429
395
|
"IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION autopoint_#{depth}"
|
430
396
|
end
|
431
397
|
|
432
|
-
# SQL to ROLLBACK a transaction.
|
433
398
|
def rollback_transaction_sql
|
434
399
|
"IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION"
|
435
400
|
end
|
436
401
|
|
437
|
-
# The closest MSSQL equivalent of a boolean datatype is the bit type.
|
438
402
|
def schema_column_type(db_type)
|
439
403
|
case db_type
|
440
404
|
when /\A(?:bit)\z/io
|
@@ -537,111 +501,15 @@ module Sequel
|
|
537
501
|
end)
|
538
502
|
include EmulateOffsetWithRowNumber
|
539
503
|
|
540
|
-
CONSTANT_MAP = {:CURRENT_DATE=>'CAST(CURRENT_TIMESTAMP AS DATE)'.freeze, :CURRENT_TIME=>'CAST(CURRENT_TIMESTAMP AS TIME)'.freeze}
|
541
|
-
EXTRACT_MAP = {:year=>"yy", :month=>"m", :day=>"d", :hour=>"hh", :minute=>"n", :second=>"s"}
|
542
|
-
|
504
|
+
CONSTANT_MAP = {:CURRENT_DATE=>'CAST(CURRENT_TIMESTAMP AS DATE)'.freeze, :CURRENT_TIME=>'CAST(CURRENT_TIMESTAMP AS TIME)'.freeze}.freeze
|
505
|
+
EXTRACT_MAP = {:year=>"yy", :month=>"m", :day=>"d", :hour=>"hh", :minute=>"n", :second=>"s"}.freeze
|
506
|
+
EXTRACT_MAP.each_value(&:freeze)
|
543
507
|
LIMIT_ALL = Object.new.freeze
|
544
508
|
|
545
|
-
BOOL_TRUE = '1'.freeze
|
546
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
547
|
-
BOOL_FALSE = '0'.freeze
|
548
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
549
|
-
COMMA_SEPARATOR = ', '.freeze
|
550
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
|
551
|
-
TABLE_HINT = " WITH (".freeze
|
552
|
-
Sequel::Deprecation.deprecate_constant(self, :TABLE_HINT)
|
553
|
-
READPAST = "READPAST".freeze
|
554
|
-
Sequel::Deprecation.deprecate_constant(self, :READPAST)
|
555
|
-
NOLOCK = 'NOLOCK'.freeze
|
556
|
-
Sequel::Deprecation.deprecate_constant(self, :NOLOCK)
|
557
|
-
UPDLOCK = 'UPDLOCK'.freeze
|
558
|
-
Sequel::Deprecation.deprecate_constant(self, :UPDLOCK)
|
559
|
-
WILDCARD = LiteralString.new('*').freeze
|
560
|
-
Sequel::Deprecation.deprecate_constant(self, :WILDCARD)
|
561
|
-
BRACKET_CLOSE = ']'.freeze
|
562
|
-
Sequel::Deprecation.deprecate_constant(self, :BRACKET_CLOSE)
|
563
|
-
BRACKET_OPEN = '['.freeze
|
564
|
-
Sequel::Deprecation.deprecate_constant(self, :BRACKET_OPEN)
|
565
|
-
COMMA = ', '.freeze
|
566
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
567
|
-
PAREN_CLOSE = ')'.freeze
|
568
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
569
|
-
PAREN_SPACE_OPEN = ' ('.freeze
|
570
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_SPACE_OPEN)
|
571
|
-
SPACE = ' '.freeze
|
572
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE)
|
573
|
-
FROM = ' FROM '.freeze
|
574
|
-
Sequel::Deprecation.deprecate_constant(self, :FROM)
|
575
|
-
APOS = "'".freeze
|
576
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
577
|
-
APOS_RE = /'/.freeze
|
578
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
|
579
|
-
DOUBLE_APOS = "''".freeze
|
580
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
581
|
-
INTO = " INTO ".freeze
|
582
|
-
Sequel::Deprecation.deprecate_constant(self, :INTO)
|
583
|
-
DOUBLE_BRACKET_CLOSE = ']]'.freeze
|
584
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_BRACKET_CLOSE)
|
585
|
-
DATEPART_SECOND_OPEN = "CAST((datepart(".freeze
|
586
|
-
Sequel::Deprecation.deprecate_constant(self, :DATEPART_SECOND_OPEN)
|
587
|
-
DATEPART_SECOND_MIDDLE = ') + datepart(ns, '.freeze
|
588
|
-
Sequel::Deprecation.deprecate_constant(self, :DATEPART_SECOND_MIDDLE)
|
589
|
-
DATEPART_SECOND_CLOSE = ")/1000000000.0) AS double precision)".freeze
|
590
|
-
Sequel::Deprecation.deprecate_constant(self, :DATEPART_SECOND_CLOSE)
|
591
|
-
DATEPART_OPEN = "datepart(".freeze
|
592
|
-
Sequel::Deprecation.deprecate_constant(self, :DATEPART_OPEN)
|
593
|
-
OUTPUT_INSERTED = " OUTPUT INSERTED.*".freeze
|
594
|
-
Sequel::Deprecation.deprecate_constant(self, :OUTPUT_INSERTED)
|
595
|
-
HEX_START = '0x'.freeze
|
596
|
-
Sequel::Deprecation.deprecate_constant(self, :HEX_START)
|
597
|
-
UNICODE_STRING_START = "N'".freeze
|
598
|
-
Sequel::Deprecation.deprecate_constant(self, :UNICODE_STRING_START)
|
599
|
-
BACKSLASH_CRLF_RE = /\\((?:\r\n)|\n)/.freeze
|
600
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_CRLF_RE)
|
601
|
-
BACKSLASH_CRLF_REPLACE = '\\\\\\\\\\1\\1'.freeze
|
602
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_CRLF_REPLACE)
|
603
|
-
TOP_PAREN = " TOP (".freeze
|
604
|
-
Sequel::Deprecation.deprecate_constant(self, :TOP_PAREN)
|
605
|
-
TOP = " TOP ".freeze
|
606
|
-
Sequel::Deprecation.deprecate_constant(self, :TOP)
|
607
|
-
OUTPUT = " OUTPUT ".freeze
|
608
|
-
Sequel::Deprecation.deprecate_constant(self, :OUTPUT)
|
609
|
-
HSTAR = "H*".freeze
|
610
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
611
|
-
CASE_SENSITIVE_COLLATION = 'Latin1_General_CS_AS'.freeze
|
612
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_SENSITIVE_COLLATION)
|
613
|
-
CASE_INSENSITIVE_COLLATION = 'Latin1_General_CI_AS'.freeze
|
614
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_INSENSITIVE_COLLATION)
|
615
|
-
DEFAULT_TIMESTAMP_FORMAT = "'%Y-%m-%dT%H:%M:%S%N%z'".freeze
|
616
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_TIMESTAMP_FORMAT)
|
617
|
-
FORMAT_DATE = "'%Y%m%d'".freeze
|
618
|
-
Sequel::Deprecation.deprecate_constant(self, :FORMAT_DATE)
|
619
|
-
CROSS_APPLY = 'CROSS APPLY'.freeze
|
620
|
-
Sequel::Deprecation.deprecate_constant(self, :CROSS_APPLY)
|
621
|
-
OUTER_APPLY = 'OUTER APPLY'.freeze
|
622
|
-
Sequel::Deprecation.deprecate_constant(self, :OUTER_APPLY)
|
623
|
-
OFFSET = " OFFSET ".freeze
|
624
|
-
Sequel::Deprecation.deprecate_constant(self, :OFFSET)
|
625
|
-
ROWS = " ROWS".freeze
|
626
|
-
Sequel::Deprecation.deprecate_constant(self, :ROWS)
|
627
|
-
ROWS_ONLY = " ROWS ONLY".freeze
|
628
|
-
Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
|
629
|
-
FETCH_NEXT = " FETCH NEXT ".freeze
|
630
|
-
Sequel::Deprecation.deprecate_constant(self, :FETCH_NEXT)
|
631
|
-
NON_SQL_OPTIONS = (Dataset::NON_SQL_OPTIONS + [:disable_insert_output, :mssql_unicode_strings]).freeze
|
632
|
-
Sequel::Deprecation.deprecate_constant(self, :NON_SQL_OPTIONS)
|
633
|
-
|
634
|
-
Dataset.def_mutation_method(:disable_insert_output, :output, :module=>self)
|
635
509
|
Dataset.def_sql_method(self, :delete, %w'with delete limit from output from2 where')
|
636
510
|
Dataset.def_sql_method(self, :insert, %w'with insert into columns output values')
|
637
511
|
Dataset.def_sql_method(self, :update, [['if is_2005_or_later?', %w'with update limit table set output from where'], ['else', %w'update table set output from where']])
|
638
512
|
|
639
|
-
# Allow overriding of the mssql_unicode_strings option at the dataset level.
|
640
|
-
def mssql_unicode_strings=(v)
|
641
|
-
Sequel::Deprecation.deprecate("Dataset#mssql_unicode_strings=", "Switch to using with_mssql_unicode_strings, which returns a modified copy")
|
642
|
-
@opts[:mssql_unicode_strings] = v
|
643
|
-
end
|
644
|
-
|
645
513
|
# Use the database's mssql_unicode_strings setting if the dataset hasn't overridden it.
|
646
514
|
def mssql_unicode_strings
|
647
515
|
opts.has_key?(:mssql_unicode_strings) ? opts[:mssql_unicode_strings] : db.mssql_unicode_strings
|
@@ -652,7 +520,6 @@ module Sequel
|
|
652
520
|
clone(:mssql_unicode_strings=>v)
|
653
521
|
end
|
654
522
|
|
655
|
-
# MSSQL uses + for string concatenation, and LIKE is case insensitive by default.
|
656
523
|
def complex_expression_sql_append(sql, op, args)
|
657
524
|
case op
|
658
525
|
when :'||'
|
@@ -751,8 +618,8 @@ module Sequel
|
|
751
618
|
#
|
752
619
|
# Examples:
|
753
620
|
#
|
754
|
-
# dataset.output(:output_table, [:
|
755
|
-
# dataset.output(:output_table, :
|
621
|
+
# dataset.output(:output_table, [Sequel[:deleted][:id], Sequel[:deleted][:name]])
|
622
|
+
# dataset.output(:output_table, id: Sequel[:inserted][:id], name: Sequel[:inserted][:name])
|
756
623
|
def output(into, values)
|
757
624
|
raise(Error, "SQL Server versions 2000 and earlier do not support the OUTPUT clause") unless supports_output_clause?
|
758
625
|
output = {}
|
@@ -897,7 +764,7 @@ module Sequel
|
|
897
764
|
end
|
898
765
|
end
|
899
766
|
|
900
|
-
# MSSQL does not allow ordering in sub-clauses unless
|
767
|
+
# MSSQL does not allow ordering in sub-clauses unless TOP (limit) is specified
|
901
768
|
def aggregate_dataset
|
902
769
|
(options_overlap(Sequel::Dataset::COUNT_FROM_SELF_OPTS) && !options_overlap([:limit])) ? unordered.from_self : super
|
903
770
|
end
|
@@ -924,9 +791,7 @@ module Sequel
|
|
924
791
|
# Allow update and delete for unordered, limited datasets only.
|
925
792
|
def check_not_limited!(type)
|
926
793
|
return if @opts[:skip_limit_check] && type != :truncate
|
927
|
-
|
928
|
-
#raise Sequel::InvalidOperation, "Dataset##{type} not suppored on ordered, limited datasets" if opts[:order] && opts[:limit]
|
929
|
-
Sequel::Deprecation.deprecate("Dataset##{type} on ordered, limited datasets", "Call unlimited to not use a limit, or unordered to not use an order, or skip_limit_check to ignore the limit") if @opts[:order] && @opts[:limit]
|
794
|
+
raise Sequel::InvalidOperation, "Dataset##{type} not suppored on ordered, limited datasets" if opts[:order] && opts[:limit]
|
930
795
|
super if type == :truncate || @opts[:offset]
|
931
796
|
end
|
932
797
|
|
@@ -988,7 +853,7 @@ module Sequel
|
|
988
853
|
end
|
989
854
|
end
|
990
855
|
|
991
|
-
# Microsoft SQL Server 2012 has native support for offsets, but only for ordered datasets.
|
856
|
+
# Microsoft SQL Server 2012+ has native support for offsets, but only for ordered datasets.
|
992
857
|
def emulate_offset_with_row_number?
|
993
858
|
super && !(is_2012_or_later? && @opts[:order])
|
994
859
|
end
|
@@ -1021,7 +886,7 @@ module Sequel
|
|
1021
886
|
sql << '0x' << v.unpack("H*").first
|
1022
887
|
end
|
1023
888
|
|
1024
|
-
# Use YYYYmmdd format, since that's the only
|
889
|
+
# Use YYYYmmdd format, since that's the only format that is
|
1025
890
|
# multilanguage and not DATEFORMAT dependent.
|
1026
891
|
def literal_date(v)
|
1027
892
|
v.strftime("'%Y%m%d'")
|
@@ -1061,7 +926,7 @@ module Sequel
|
|
1061
926
|
end
|
1062
927
|
end
|
1063
928
|
|
1064
|
-
# MSSQL uses TOP N for limit. For MSSQL 2005+ TOP (N) is used
|
929
|
+
# MSSQL 2000 uses TOP N for limit. For MSSQL 2005+ TOP (N) is used
|
1065
930
|
# to allow the limit to be a bound variable.
|
1066
931
|
def select_limit_sql(sql)
|
1067
932
|
if l = @opts[:limit]
|
@@ -1092,7 +957,7 @@ module Sequel
|
|
1092
957
|
end
|
1093
958
|
alias delete_limit_sql update_limit_sql
|
1094
959
|
|
1095
|
-
#
|
960
|
+
# Handle dirty, skip locked, and for update locking
|
1096
961
|
def select_lock_sql(sql)
|
1097
962
|
lock = @opts[:lock]
|
1098
963
|
skip_locked = @opts[:skip_locked]
|
@@ -1144,7 +1009,6 @@ module Sequel
|
|
1144
1009
|
end
|
1145
1010
|
end
|
1146
1011
|
|
1147
|
-
# SQL fragment for MSSQL's OUTPUT clause.
|
1148
1012
|
def output_sql(sql, type)
|
1149
1013
|
return unless supports_output_clause?
|
1150
1014
|
if output = @opts[:output]
|
@@ -1,105 +1,37 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../utils/replace'
|
4
|
+
require_relative '../utils/split_alter_table'
|
5
|
+
require_relative '../utils/unmodified_identifiers'
|
4
6
|
|
5
7
|
module Sequel
|
6
8
|
module MySQL
|
7
9
|
Sequel::Database.set_shared_adapter_scheme(:mysql, self)
|
8
10
|
|
9
11
|
def self.mock_adapter_setup(db)
|
10
|
-
db.
|
12
|
+
db.instance_exec do
|
11
13
|
@server_version = 50617
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
# SEQUEL5: Remove
|
16
|
-
@convert_tinyint_to_bool = true
|
17
|
-
@default_charset = nil
|
18
|
-
@default_collate = nil
|
19
|
-
@default_engine = nil
|
20
|
-
class << self
|
21
|
-
def convert_tinyint_to_bool
|
22
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.convert_tinyint_to_bool", "Call this method on the Database instance")
|
23
|
-
@convert_tinyint_to_bool
|
24
|
-
end
|
25
|
-
def convert_tinyint_to_bool=(v)
|
26
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.convert_tinyint_to_bool=", "Call this method on the Database instance")
|
27
|
-
@convert_tinyint_to_bool = v
|
28
|
-
end
|
29
|
-
|
30
|
-
def default_charset
|
31
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.default_charset", "Call this method on the Database instance")
|
32
|
-
@default_charset
|
33
|
-
end
|
34
|
-
def default_charset=(v)
|
35
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.default_charset=", "Call this method on the Database instance")
|
36
|
-
@default_charset = v
|
37
|
-
end
|
38
|
-
|
39
|
-
def default_collate
|
40
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.default_collate", "Call this method on the Database instance")
|
41
|
-
@default_collate
|
42
|
-
end
|
43
|
-
def default_collate=(v)
|
44
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.default_collate=", "Call this method on the Database instance")
|
45
|
-
@default_collate = v
|
46
|
-
end
|
47
|
-
|
48
|
-
def default_engine
|
49
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.default_engine", "Call this method on the Database instance")
|
50
|
-
@default_engine
|
51
|
-
end
|
52
|
-
def default_engine=(v)
|
53
|
-
Sequel::Deprecation.deprecate("Sequel::MySQL.default_engine=", "Call this method on the Database instance")
|
54
|
-
@default_engine = v
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Methods shared by Database instances that connect to MySQL,
|
59
|
-
# currently supported by the native and JDBC adapters.
|
60
17
|
module DatabaseMethods
|
61
18
|
include UnmodifiedIdentifiers::DatabaseMethods
|
62
19
|
include Sequel::Database::SplitAlterTable
|
63
20
|
|
64
|
-
|
65
|
-
|
66
|
-
PRIMARY = 'PRIMARY'.freeze
|
67
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY)
|
68
|
-
MYSQL_TIMESTAMP_RE = /\ACURRENT_(?:DATE|TIMESTAMP)?\z/
|
69
|
-
Sequel::Deprecation.deprecate_constant(self, :MYSQL_TIMESTAMP_RE)
|
70
|
-
|
71
|
-
CAST_TYPES = {String=>:CHAR, Integer=>:SIGNED, Time=>:DATETIME, DateTime=>:DATETIME, Numeric=>:DECIMAL, BigDecimal=>:DECIMAL, File=>:BINARY}#.freeze # SEQUEL5
|
72
|
-
COLUMN_DEFINITION_ORDER = [:collate, :null, :default, :unique, :primary_key, :auto_increment, :references]#.freeze # SEQUEL5
|
73
|
-
|
21
|
+
CAST_TYPES = {String=>:CHAR, Integer=>:SIGNED, Time=>:DATETIME, DateTime=>:DATETIME, Numeric=>:DECIMAL, BigDecimal=>:DECIMAL, File=>:BINARY}.freeze
|
22
|
+
COLUMN_DEFINITION_ORDER = [:collate, :null, :default, :unique, :primary_key, :auto_increment, :references].freeze
|
74
23
|
|
75
24
|
# Set the default charset used for CREATE TABLE. You can pass the
|
76
25
|
# :charset option to create_table to override this setting.
|
77
|
-
|
26
|
+
attr_accessor :default_charset
|
78
27
|
|
79
28
|
# Set the default collation used for CREATE TABLE. You can pass the
|
80
29
|
# :collate option to create_table to override this setting.
|
81
|
-
|
30
|
+
attr_accessor :default_collate
|
82
31
|
|
83
32
|
# Set the default engine used for CREATE TABLE. You can pass the
|
84
33
|
# :engine option to create_table to override this setting.
|
85
|
-
|
86
|
-
|
87
|
-
# SEQUEL5: Remove
|
88
|
-
attr_writer :default_charset
|
89
|
-
def default_charset
|
90
|
-
v = @default_charset
|
91
|
-
v.nil? ? Sequel::MySQL.instance_variable_get(:@default_charset) : v
|
92
|
-
end
|
93
|
-
attr_writer :default_collate
|
94
|
-
def default_collate
|
95
|
-
v = @default_collate
|
96
|
-
v.nil? ? Sequel::MySQL.instance_variable_get(:@default_collate) : v
|
97
|
-
end
|
98
|
-
attr_writer :default_engine
|
99
|
-
def default_engine
|
100
|
-
v = @default_engine
|
101
|
-
v.nil? ? Sequel::MySQL.instance_variable_get(:@default_engine) : v
|
102
|
-
end
|
34
|
+
attr_accessor :default_engine
|
103
35
|
|
104
36
|
# MySQL's cast rules are restrictive in that you can't just cast to any possible
|
105
37
|
# database type.
|
@@ -107,13 +39,10 @@ module Sequel
|
|
107
39
|
CAST_TYPES[type] || super
|
108
40
|
end
|
109
41
|
|
110
|
-
# Commit an existing prepared transaction with the given transaction
|
111
|
-
# identifier string.
|
112
42
|
def commit_prepared_transaction(transaction_id, opts=OPTS)
|
113
43
|
run("XA COMMIT #{literal(transaction_id)}", opts)
|
114
44
|
end
|
115
45
|
|
116
|
-
# MySQL uses the :mysql database type
|
117
46
|
def database_type
|
118
47
|
:mysql
|
119
48
|
end
|
@@ -163,7 +92,6 @@ module Sequel
|
|
163
92
|
indexes = {}
|
164
93
|
remove_indexes = []
|
165
94
|
m = output_identifier_meth
|
166
|
-
im = input_identifier_meth
|
167
95
|
schema, table = schema_and_table(table)
|
168
96
|
|
169
97
|
table = Sequel::SQL::Identifier.new(table)
|
@@ -184,8 +112,6 @@ module Sequel
|
|
184
112
|
indexes.reject{|k,v| remove_indexes.include?(k)}
|
185
113
|
end
|
186
114
|
|
187
|
-
# Rollback an existing prepared transaction with the given transaction
|
188
|
-
# identifier string.
|
189
115
|
def rollback_prepared_transaction(transaction_id, opts=OPTS)
|
190
116
|
run("XA ROLLBACK #{literal(transaction_id)}", opts)
|
191
117
|
end
|
@@ -241,16 +167,6 @@ module Sequel
|
|
241
167
|
full_tables('BASE TABLE', opts)
|
242
168
|
end
|
243
169
|
|
244
|
-
# Changes the database in use by issuing a USE statement. I would be
|
245
|
-
# very careful if I used this.
|
246
|
-
def use(db_name)
|
247
|
-
Sequel::Deprecation.deprecate("Database#use", "Create a new Sequel::Database instance instead of using Database#use")
|
248
|
-
disconnect
|
249
|
-
@opts[:database] = db_name if self << "USE #{db_name}"
|
250
|
-
@schemas = {}
|
251
|
-
self
|
252
|
-
end
|
253
|
-
|
254
170
|
# Return an array of symbols specifying view names in the current database.
|
255
171
|
#
|
256
172
|
# Options:
|
@@ -324,7 +240,6 @@ module Sequel
|
|
324
240
|
end
|
325
241
|
end
|
326
242
|
|
327
|
-
# MySQL server requires table names when dropping indexes.
|
328
243
|
def alter_table_sql(table, op)
|
329
244
|
case op[:op]
|
330
245
|
when :drop_index
|
@@ -379,7 +294,6 @@ module Sequel
|
|
379
294
|
sqls
|
380
295
|
end
|
381
296
|
|
382
|
-
# Use MySQL specific AUTO_INCREMENT text.
|
383
297
|
def auto_increment_sql
|
384
298
|
'AUTO_INCREMENT'
|
385
299
|
end
|
@@ -400,7 +314,6 @@ module Sequel
|
|
400
314
|
end
|
401
315
|
end
|
402
316
|
|
403
|
-
# The order of the column definition, as an array of symbols.
|
404
317
|
def column_definition_order
|
405
318
|
COLUMN_DEFINITION_ORDER
|
406
319
|
end
|
@@ -488,7 +401,6 @@ module Sequel
|
|
488
401
|
metadata_dataset.with_sql('SHOW FULL TABLES').server(opts[:server]).map{|r| m.call(r.values.first) if r.delete(:Table_type) == type}.compact
|
489
402
|
end
|
490
403
|
|
491
|
-
# Handle MySQL specific index SQL syntax
|
492
404
|
def index_definition_sql(table_name, index)
|
493
405
|
index_name = quote_identifier(index[:name] || default_index_name(table_name, index[:columns]))
|
494
406
|
raise Error, "Partial indexes are not supported for this database" if index[:where] && !supports_partial_indexes?
|
@@ -520,7 +432,6 @@ module Sequel
|
|
520
432
|
end
|
521
433
|
end
|
522
434
|
|
523
|
-
# Recognize MySQL set type.
|
524
435
|
def schema_column_type(db_type)
|
525
436
|
case db_type
|
526
437
|
when /\Aset/io
|
@@ -629,99 +540,6 @@ module Sequel
|
|
629
540
|
|
630
541
|
# Dataset methods shared by datasets that use MySQL databases.
|
631
542
|
module DatasetMethods
|
632
|
-
BOOL_TRUE = '1'.freeze
|
633
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
634
|
-
BOOL_FALSE = '0'.freeze
|
635
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
636
|
-
COMMA_SEPARATOR = ', '.freeze
|
637
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
|
638
|
-
FOR_SHARE = ' LOCK IN SHARE MODE'.freeze
|
639
|
-
Sequel::Deprecation.deprecate_constant(self, :FOR_SHARE)
|
640
|
-
SQL_CALC_FOUND_ROWS = ' SQL_CALC_FOUND_ROWS'.freeze
|
641
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_CALC_FOUND_ROWS)
|
642
|
-
APOS = "'".freeze
|
643
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
644
|
-
APOS_RE = /'/.freeze
|
645
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
|
646
|
-
DOUBLE_APOS = "''".freeze
|
647
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
648
|
-
SPACE = ' '.freeze
|
649
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE)
|
650
|
-
PAREN_CLOSE = ')'.freeze
|
651
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
652
|
-
PAREN_OPEN = '('.freeze
|
653
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
|
654
|
-
NOT_SPACE = 'NOT '.freeze
|
655
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_SPACE)
|
656
|
-
FROM = ' FROM '.freeze
|
657
|
-
Sequel::Deprecation.deprecate_constant(self, :FROM)
|
658
|
-
COMMA = ', '.freeze
|
659
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
660
|
-
LIMIT = " LIMIT ".freeze
|
661
|
-
Sequel::Deprecation.deprecate_constant(self, :LIMIT)
|
662
|
-
GROUP_BY = " GROUP BY ".freeze
|
663
|
-
Sequel::Deprecation.deprecate_constant(self, :GROUP_BY)
|
664
|
-
ESCAPE = " ESCAPE ".freeze
|
665
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE)
|
666
|
-
BACKSLASH = "\\".freeze
|
667
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
|
668
|
-
REGEXP = 'REGEXP'.freeze
|
669
|
-
Sequel::Deprecation.deprecate_constant(self, :REGEXP)
|
670
|
-
LIKE = 'LIKE'.freeze
|
671
|
-
Sequel::Deprecation.deprecate_constant(self, :LIKE)
|
672
|
-
BINARY = 'BINARY '.freeze
|
673
|
-
Sequel::Deprecation.deprecate_constant(self, :BINARY)
|
674
|
-
CONCAT = "CONCAT".freeze
|
675
|
-
Sequel::Deprecation.deprecate_constant(self, :CONCAT)
|
676
|
-
CAST_BITCOMP_OPEN = "CAST(~".freeze
|
677
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_BITCOMP_OPEN)
|
678
|
-
CAST_BITCOMP_CLOSE = " AS SIGNED INTEGER)".freeze
|
679
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_BITCOMP_CLOSE)
|
680
|
-
STRAIGHT_JOIN = 'STRAIGHT_JOIN'.freeze
|
681
|
-
Sequel::Deprecation.deprecate_constant(self, :STRAIGHT_JOIN)
|
682
|
-
NATURAL_LEFT_JOIN = 'NATURAL LEFT JOIN'.freeze
|
683
|
-
Sequel::Deprecation.deprecate_constant(self, :NATURAL_LEFT_JOIN)
|
684
|
-
BACKTICK = '`'.freeze
|
685
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKTICK)
|
686
|
-
BACKTICK_RE = /`/.freeze
|
687
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKTICK_RE)
|
688
|
-
DOUBLE_BACKTICK = '``'.freeze
|
689
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_BACKTICK)
|
690
|
-
EMPTY_COLUMNS = " ()".freeze
|
691
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_COLUMNS)
|
692
|
-
EMPTY_VALUES = " VALUES ()".freeze
|
693
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_VALUES)
|
694
|
-
IGNORE = " IGNORE".freeze
|
695
|
-
Sequel::Deprecation.deprecate_constant(self, :IGNORE)
|
696
|
-
ON_DUPLICATE_KEY_UPDATE = " ON DUPLICATE KEY UPDATE ".freeze
|
697
|
-
Sequel::Deprecation.deprecate_constant(self, :ON_DUPLICATE_KEY_UPDATE)
|
698
|
-
EQ_VALUES = '=VALUES('.freeze
|
699
|
-
Sequel::Deprecation.deprecate_constant(self, :EQ_VALUES)
|
700
|
-
EQ = '='.freeze
|
701
|
-
Sequel::Deprecation.deprecate_constant(self, :EQ)
|
702
|
-
WITH_ROLLUP = ' WITH ROLLUP'.freeze
|
703
|
-
Sequel::Deprecation.deprecate_constant(self, :WITH_ROLLUP)
|
704
|
-
EXPLAIN = 'EXPLAIN '.freeze
|
705
|
-
Sequel::Deprecation.deprecate_constant(self, :EXPLAIN)
|
706
|
-
EXPLAIN_EXTENDED = 'EXPLAIN EXTENDED '.freeze
|
707
|
-
Sequel::Deprecation.deprecate_constant(self, :EXPLAIN_EXTENDED)
|
708
|
-
BACKSLASH_RE = /\\/.freeze
|
709
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_RE)
|
710
|
-
QUAD_BACKSLASH = "\\\\\\\\".freeze
|
711
|
-
Sequel::Deprecation.deprecate_constant(self, :QUAD_BACKSLASH)
|
712
|
-
BLOB_START = "0x".freeze
|
713
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_START)
|
714
|
-
EMPTY_BLOB = "''".freeze
|
715
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_BLOB)
|
716
|
-
HSTAR = "H*".freeze
|
717
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
718
|
-
CURRENT_TIMESTAMP_56 = 'CURRENT_TIMESTAMP(6)'.freeze
|
719
|
-
Sequel::Deprecation.deprecate_constant(self, :CURRENT_TIMESTAMP_56)
|
720
|
-
ONLY_OFFSET = ",18446744073709551615".freeze
|
721
|
-
Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
|
722
|
-
NON_SQL_OPTIONS = (Dataset::NON_SQL_OPTIONS + [:insert_ignore, :update_ignore, :on_duplicate_key_update]).freeze
|
723
|
-
Sequel::Deprecation.deprecate_constant(self, :NON_SQL_OPTIONS)
|
724
|
-
|
725
543
|
MATCH_AGAINST = ["MATCH ".freeze, " AGAINST (".freeze, ")".freeze].freeze
|
726
544
|
MATCH_AGAINST_BOOLEAN = ["MATCH ".freeze, " AGAINST (".freeze, " IN BOOLEAN MODE)".freeze].freeze
|
727
545
|
|
@@ -733,8 +551,6 @@ module Sequel
|
|
733
551
|
include Sequel::Dataset::Replace
|
734
552
|
include UnmodifiedIdentifiers::DatasetMethods
|
735
553
|
|
736
|
-
# MySQL specific syntax for LIKE/REGEXP searches, as well as
|
737
|
-
# string concatenation.
|
738
554
|
def complex_expression_sql_append(sql, op, args)
|
739
555
|
case op
|
740
556
|
when :IN, :"NOT IN"
|
@@ -802,10 +618,10 @@ module Sequel
|
|
802
618
|
# Sets up the select methods to delete from if deleting from a
|
803
619
|
# joined dataset:
|
804
620
|
#
|
805
|
-
# DB[:a].join(:b, :
|
621
|
+
# DB[:a].join(:b, a_id: :id).delete
|
806
622
|
# # DELETE a FROM a INNER JOIN b ON (b.a_id = a.id)
|
807
623
|
#
|
808
|
-
# DB[:a].join(:b, :
|
624
|
+
# DB[:a].join(:b, a_id: :id).delete_from(:a, :b).delete
|
809
625
|
# # DELETE a, b FROM a INNER JOIN b ON (b.a_id = a.id)
|
810
626
|
def delete_from(*tables)
|
811
627
|
clone(:delete_from=>tables)
|
@@ -838,26 +654,10 @@ module Sequel
|
|
838
654
|
SQL::PlaceholderLiteralString.new((opts[:boolean] ? MATCH_AGAINST_BOOLEAN : MATCH_AGAINST), [Array(cols), terms])
|
839
655
|
end
|
840
656
|
|
841
|
-
# Transforms
|
842
|
-
# Raises an error on use of :full_outer type, since MySQL doesn't support it.
|
843
|
-
def join_table(type, table, expr=nil, opts=OPTS, &block)
|
844
|
-
if (type == :cross) && !expr.nil?
|
845
|
-
Sequel::Deprecation.deprecate(":cross join type with conditions being converted to INNER JOIN on MySQL", "Use :inner join type instead")
|
846
|
-
type = :inner
|
847
|
-
end
|
848
|
-
raise(Sequel::Error, "MySQL doesn't support FULL OUTER JOIN or NATURAL FULL JOIN") if type == :full_outer || type == :natural_full
|
849
|
-
super(type, table, expr, opts, &block)
|
850
|
-
end
|
851
|
-
|
852
|
-
# Transforms :natural_inner to NATURAL LEFT JOIN and straight to
|
853
|
-
# STRAIGHT_JOIN.
|
657
|
+
# Transforms :straight to STRAIGHT_JOIN.
|
854
658
|
def join_type_sql(join_type)
|
855
|
-
|
856
|
-
when :straight
|
659
|
+
if join_type == :straight
|
857
660
|
'STRAIGHT_JOIN'
|
858
|
-
when :natural_inner
|
859
|
-
Sequel::Deprecation.deprecate(":natural_inner join type being converted to NATURAL LEFT JOIN on MySQL", "Use :natural_left join type for NATURAL LEFT JOIN, or :natural join type for NATURAL JOIN")
|
860
|
-
'NATURAL LEFT JOIN'
|
861
661
|
else
|
862
662
|
super
|
863
663
|
end
|
@@ -868,7 +668,7 @@ module Sequel
|
|
868
668
|
# inserting rows that violate the unique key restriction.
|
869
669
|
#
|
870
670
|
# dataset.insert_ignore.multi_insert(
|
871
|
-
#
|
671
|
+
# [{name: 'a', value: 1}, {name: 'b', value: 2}]
|
872
672
|
# )
|
873
673
|
# # INSERT IGNORE INTO tablename (name, value) VALUES (a, 1), (b, 2)
|
874
674
|
def insert_ignore
|
@@ -886,21 +686,21 @@ module Sequel
|
|
886
686
|
# inserting rows that violate the unique key restriction.
|
887
687
|
#
|
888
688
|
# dataset.on_duplicate_key_update.multi_insert(
|
889
|
-
#
|
689
|
+
# [{name: 'a', value: 1}, {name: 'b', value: 2}]
|
890
690
|
# )
|
891
691
|
# # INSERT INTO tablename (name, value) VALUES (a, 1), (b, 2)
|
892
692
|
# # ON DUPLICATE KEY UPDATE name=VALUES(name), value=VALUES(value)
|
893
693
|
#
|
894
694
|
# dataset.on_duplicate_key_update(:value).multi_insert(
|
895
|
-
# [{:
|
695
|
+
# [{name: 'a', value: 1}, {name: 'b', value: 2}]
|
896
696
|
# )
|
897
697
|
# # INSERT INTO tablename (name, value) VALUES (a, 1), (b, 2)
|
898
698
|
# # ON DUPLICATE KEY UPDATE value=VALUES(value)
|
899
699
|
#
|
900
700
|
# dataset.on_duplicate_key_update(
|
901
|
-
# :
|
701
|
+
# value: Sequel.lit('value + VALUES(value)')
|
902
702
|
# ).multi_insert(
|
903
|
-
# [{:
|
703
|
+
# [{name: 'a', value: 1}, {name: 'b', value: 2}]
|
904
704
|
# )
|
905
705
|
# # INSERT INTO tablename (name, value) VALUES (a, 1), (b, 2)
|
906
706
|
# # ON DUPLICATE KEY UPDATE value=value + VALUES(value)
|
@@ -945,7 +745,7 @@ module Sequel
|
|
945
745
|
end
|
946
746
|
|
947
747
|
# MySQL's DISTINCT ON emulation using GROUP BY does not respect the
|
948
|
-
#
|
748
|
+
# query's ORDER BY clause.
|
949
749
|
def supports_ordered_distinct_on?
|
950
750
|
false
|
951
751
|
end
|
@@ -955,9 +755,8 @@ module Sequel
|
|
955
755
|
true
|
956
756
|
end
|
957
757
|
|
958
|
-
#
|
959
|
-
#
|
960
|
-
# they are ignored anyway, not using them is probably best.
|
758
|
+
# Check the database setting for whether fractional timestamps
|
759
|
+
# are suppported.
|
961
760
|
def supports_timestamp_usecs?
|
962
761
|
db.supports_timestamp_usecs?
|
963
762
|
end
|
@@ -966,7 +765,7 @@ module Sequel
|
|
966
765
|
# Useful if you have a unique key and want to just skip
|
967
766
|
# updating rows that violate the unique key restriction.
|
968
767
|
#
|
969
|
-
# dataset.update_ignore.update(
|
768
|
+
# dataset.update_ignore.update(name: 'a', value: 1)
|
970
769
|
# # UPDATE IGNORE tablename SET name = 'a', value = 1
|
971
770
|
def update_ignore
|
972
771
|
clone(:update_ignore=>true)
|
@@ -1105,7 +904,7 @@ module Sequel
|
|
1105
904
|
'1'
|
1106
905
|
end
|
1107
906
|
|
1108
|
-
# MySQL supports multiple rows in INSERT.
|
907
|
+
# MySQL supports multiple rows in VALUES in INSERT.
|
1109
908
|
def multi_insert_sql_strategy
|
1110
909
|
:values
|
1111
910
|
end
|