sequel 4.49.0 → 5.3.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 +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- 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/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -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/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- 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 +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- 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 +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- 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/jdbc.rb +18 -74
- 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/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/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- 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 +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -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 +4 -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/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/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- 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 +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -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 +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- 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 +27 -43
- 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_extended_date_support.rb +230 -0
- 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 +3 -16
- 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/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- 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/model.rb +27 -62
- 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 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- 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 +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- 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 +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -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 +88 -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 +30 -92
- 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 +53 -1118
- 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 +8 -30
- 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 +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -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 +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- 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_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- 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 +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- 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 +43 -32
- 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 +5 -17
- 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/synchronize_sql_spec.rb +124 -0
- 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 +5 -7
- 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 +12 -16
- 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 -13
- 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 +8 -13
- 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 +12 -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 +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -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 +43 -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 +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- 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/do.rb +0 -166
- 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/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/swift.rb +0 -169
- 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,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]
|