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
data/lib/sequel/adapters/odbc.rb
CHANGED
@@ -11,13 +11,6 @@ module Sequel
|
|
11
11
|
class Database < Sequel::Database
|
12
12
|
set_adapter_scheme :odbc
|
13
13
|
|
14
|
-
GUARDED_DRV_NAME = /^\{.+\}$/.freeze
|
15
|
-
Sequel::Deprecation.deprecate_constant(self, :GUARDED_DRV_NAME)
|
16
|
-
DRV_NAME_GUARDS = '{%s}'.freeze
|
17
|
-
Sequel::Deprecation.deprecate_constant(self, :DRV_NAME_GUARDS)
|
18
|
-
DISCONNECT_ERRORS = /\A08S01/.freeze
|
19
|
-
Sequel::Deprecation.deprecate_constant(self, :DISCONNECT_ERRORS)
|
20
|
-
|
21
14
|
def connect(server)
|
22
15
|
opts = server_opts(server)
|
23
16
|
conn = if opts.include?(:drvconnect)
|
@@ -93,18 +86,6 @@ module Sequel
|
|
93
86
|
end
|
94
87
|
|
95
88
|
class Dataset < Sequel::Dataset
|
96
|
-
BOOL_TRUE = '1'.freeze
|
97
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
98
|
-
BOOL_FALSE = '0'.freeze
|
99
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
100
|
-
ODBC_DATE_FORMAT = "{d '%Y-%m-%d'}".freeze
|
101
|
-
Sequel::Deprecation.deprecate_constant(self, :ODBC_DATE_FORMAT)
|
102
|
-
TIMESTAMP_FORMAT="{ts '%Y-%m-%d %H:%M:%S'}".freeze
|
103
|
-
Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
|
104
|
-
|
105
|
-
Database::DatasetClass = self
|
106
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
107
|
-
|
108
89
|
def fetch_rows(sql)
|
109
90
|
execute(sql) do |s|
|
110
91
|
i = -1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../shared/mssql'
|
4
4
|
|
5
5
|
module Sequel
|
6
6
|
module ODBC
|
@@ -12,15 +12,10 @@ module Sequel
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
# Database and Dataset instance methods for MSSQL specific
|
16
|
-
# support via ODBC.
|
17
15
|
module MSSQL
|
18
16
|
module DatabaseMethods
|
19
17
|
include Sequel::MSSQL::DatabaseMethods
|
20
|
-
|
21
|
-
Sequel::Deprecation.deprecate_constant(self, :LAST_INSERT_ID_SQL)
|
22
|
-
|
23
|
-
# Return the last inserted identity value.
|
18
|
+
|
24
19
|
def execute_insert(sql, opts=OPTS)
|
25
20
|
synchronize(opts[:server]) do |conn|
|
26
21
|
begin
|
@@ -43,13 +38,10 @@ module Sequel
|
|
43
38
|
class Dataset < ODBC::Dataset
|
44
39
|
include Sequel::MSSQL::DatasetMethods
|
45
40
|
|
46
|
-
# Use ODBC format, not Microsoft format, as the ODBC layer does
|
47
|
-
# some translation. MSSQL version is over-ridden to allow 3 millisecond decimal places
|
48
|
-
TIMESTAMP_FORMAT="{ts '%Y-%m-%d %H:%M:%S%N'}".freeze
|
49
|
-
Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
|
50
|
-
|
51
41
|
private
|
52
42
|
|
43
|
+
# Use ODBC format, not Microsoft format, as the ODBC layer does
|
44
|
+
# some translation, but allow for millisecond precision.
|
53
45
|
def default_timestamp_format
|
54
46
|
"{ts '%Y-%m-%d %H:%M:%S%N'}"
|
55
47
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
3
|
require 'oci8'
|
4
|
-
|
4
|
+
require_relative 'shared/oracle'
|
5
5
|
|
6
6
|
module Sequel
|
7
7
|
module Oracle
|
@@ -13,12 +13,12 @@ module Sequel
|
|
13
13
|
# ORA-01012: not logged on
|
14
14
|
# ORA-03113: end-of-file on communication channel
|
15
15
|
# ORA-03114: not connected to ORACLE
|
16
|
-
CONNECTION_ERROR_CODES = [ 28, 1012, 3113, 3114 ]
|
16
|
+
CONNECTION_ERROR_CODES = [ 28, 1012, 3113, 3114 ].freeze
|
17
17
|
|
18
18
|
ORACLE_TYPES = {
|
19
19
|
:blob=>lambda{|b| Sequel::SQL::Blob.new(b.read)},
|
20
|
-
:clob
|
21
|
-
}
|
20
|
+
:clob=>:read.to_proc
|
21
|
+
}.freeze
|
22
22
|
|
23
23
|
# Hash of conversion procs for this database.
|
24
24
|
attr_reader :conversion_procs
|
@@ -40,8 +40,8 @@ module Sequel
|
|
40
40
|
|
41
41
|
# The ruby-oci8 gem which retrieves oracle columns with a type of
|
42
42
|
# DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE is complex based on the
|
43
|
-
# ruby version
|
44
|
-
# In the now standard case of
|
43
|
+
# ruby version and Oracle version (9 or later)
|
44
|
+
# In the now standard case of Oracle 9 or later, the timezone
|
45
45
|
# is determined by the Oracle session timezone. Thus if the user
|
46
46
|
# requests Sequel provide UTC timezone to the application,
|
47
47
|
# we need to alter the session timezone to be UTC
|
@@ -114,7 +114,7 @@ module Sequel
|
|
114
114
|
|
115
115
|
PS_TYPES = {'string'=>String, 'integer'=>Integer, 'float'=>Float,
|
116
116
|
'decimal'=>Float, 'date'=>Time, 'datetime'=>Time,
|
117
|
-
'time'=>Time, 'boolean'=>String, 'blob'=>OCI8::BLOB}
|
117
|
+
'time'=>Time, 'boolean'=>String, 'blob'=>OCI8::BLOB}.freeze
|
118
118
|
def cursor_bind_params(conn, cursor, args)
|
119
119
|
i = 0
|
120
120
|
args.map do |arg, type|
|
@@ -324,12 +324,6 @@ module Sequel
|
|
324
324
|
class Dataset < Sequel::Dataset
|
325
325
|
include DatasetMethods
|
326
326
|
|
327
|
-
Database::DatasetClass = self
|
328
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
329
|
-
|
330
|
-
PREPARED_ARG_PLACEHOLDER = ':'.freeze
|
331
|
-
Sequel::Deprecation.deprecate_constant(self, :PREPARED_ARG_PLACEHOLDER)
|
332
|
-
|
333
327
|
# Oracle already supports named bind arguments, so use directly.
|
334
328
|
module ArgumentMapper
|
335
329
|
include Sequel::Dataset::ArgumentMapper
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'shared/postgres'
|
4
4
|
|
5
5
|
begin
|
6
6
|
require 'pg'
|
@@ -26,12 +26,6 @@ end
|
|
26
26
|
|
27
27
|
module Sequel
|
28
28
|
module Postgres
|
29
|
-
# SEQUEL5: Remove
|
30
|
-
TYPE_CONVERTOR = Class.new do
|
31
|
-
def bytea(s) ::Sequel::SQL::Blob.new(Adapter.unescape_bytea(s)) end
|
32
|
-
end.new
|
33
|
-
Sequel::Deprecation.deprecate_constant(self, :TYPE_CONVERTOR)
|
34
|
-
|
35
29
|
if Sequel::Postgres::USES_PG
|
36
30
|
# Whether the given sequel_pg version integer is supported.
|
37
31
|
def self.sequel_pg_version_supported?(version)
|
@@ -39,19 +33,6 @@ module Sequel
|
|
39
33
|
end
|
40
34
|
end
|
41
35
|
|
42
|
-
# SEQUEL5: Remove
|
43
|
-
@use_iso_date_format = true
|
44
|
-
class << self
|
45
|
-
def use_iso_date_format
|
46
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres.use_iso_date_format", "Use the :use_iso_date_format Database option instead")
|
47
|
-
@use_iso_date_format
|
48
|
-
end
|
49
|
-
def use_iso_date_format=(v)
|
50
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres.use_iso_date_format=", "Use the :use_iso_date_format Database option instead")
|
51
|
-
@use_iso_date_format = v
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
36
|
# PGconn subclass for connection specific methods used with the
|
56
37
|
# pg or postgres-pr driver.
|
57
38
|
class Adapter < PGconn
|
@@ -61,7 +42,7 @@ module Sequel
|
|
61
42
|
if defined?(::PG::ConnectionBad)
|
62
43
|
DISCONNECT_ERROR_CLASSES << ::PG::ConnectionBad
|
63
44
|
end
|
64
|
-
|
45
|
+
DISCONNECT_ERROR_CLASSES.freeze
|
65
46
|
|
66
47
|
disconnect_errors = [
|
67
48
|
'could not receive data from server',
|
@@ -89,7 +70,6 @@ module Sequel
|
|
89
70
|
# Escape bytea values. Uses historical format instead of hex
|
90
71
|
# format for maximum compatibility.
|
91
72
|
def escape_bytea(str)
|
92
|
-
# each_byte used instead of [] for 1.9 compatibility
|
93
73
|
str.gsub(/[\000-\037\047\134\177-\377]/n){|b| "\\#{sprintf('%o', b.each_byte{|x| break x}).rjust(3, '0')}"}
|
94
74
|
end
|
95
75
|
|
@@ -160,15 +140,12 @@ module Sequel
|
|
160
140
|
|
161
141
|
private
|
162
142
|
|
163
|
-
# Return the PGResult
|
164
|
-
# sql and args.
|
143
|
+
# Return the PGResult containing the query results.
|
165
144
|
def execute_query(sql, args)
|
166
145
|
@db.log_connection_yield(sql, self, args){args ? async_exec(sql, args) : async_exec(sql)}
|
167
146
|
end
|
168
147
|
end
|
169
148
|
|
170
|
-
# Database class for PostgreSQL databases used with Sequel and the
|
171
|
-
# pg, postgres, or postgres-pr driver.
|
172
149
|
class Database < Sequel::Database
|
173
150
|
include Sequel::Postgres::DatabaseMethods
|
174
151
|
|
@@ -185,15 +162,12 @@ module Sequel
|
|
185
162
|
attr_reader :convert_infinite_timestamps
|
186
163
|
|
187
164
|
# Convert given argument so that it can be used directly by pg. Currently, pg doesn't
|
188
|
-
# handle fractional seconds in Time/DateTime or blobs with "\0"
|
189
|
-
#
|
190
|
-
# be used by external code.
|
165
|
+
# handle fractional seconds in Time/DateTime or blobs with "\0". Only public for use by
|
166
|
+
# the adapter, shouldn't be used by external code.
|
191
167
|
def bound_variable_arg(arg, conn)
|
192
168
|
case arg
|
193
169
|
when Sequel::SQL::Blob
|
194
170
|
{:value=>arg, :type=>17, :format=>1}
|
195
|
-
when Sequel::SQLTime
|
196
|
-
literal(arg)
|
197
171
|
when DateTime, Time
|
198
172
|
literal(arg)
|
199
173
|
else
|
@@ -230,7 +204,7 @@ module Sequel
|
|
230
204
|
conn.set_notice_receiver(&receiver)
|
231
205
|
end
|
232
206
|
else
|
233
|
-
unless typecast_value_boolean(@opts.fetch(:force_standard_strings,
|
207
|
+
unless typecast_value_boolean(@opts.fetch(:force_standard_strings, true))
|
234
208
|
raise Error, "Cannot create connection using postgres-pr unless force_standard_strings is set"
|
235
209
|
end
|
236
210
|
|
@@ -290,7 +264,6 @@ module Sequel
|
|
290
264
|
add_conversion_proc(1082, pr)
|
291
265
|
end
|
292
266
|
|
293
|
-
# Disconnect given connection
|
294
267
|
def disconnect_connection(conn)
|
295
268
|
conn.finish
|
296
269
|
rescue PGError, IOError
|
@@ -322,7 +295,6 @@ module Sequel
|
|
322
295
|
end
|
323
296
|
end
|
324
297
|
|
325
|
-
# Execute the given SQL with the given args on an available connection.
|
326
298
|
def execute(sql, opts=OPTS, &block)
|
327
299
|
synchronize(opts[:server]){|conn| check_database_errors{_execute(conn, sql, opts, &block)}}
|
328
300
|
end
|
@@ -524,7 +496,7 @@ module Sequel
|
|
524
496
|
# Add the primary_keys and primary_key_sequences instance variables,
|
525
497
|
# so we can get the correct return values for inserted rows.
|
526
498
|
def adapter_initialize
|
527
|
-
@use_iso_date_format = typecast_value_boolean(@opts.fetch(:use_iso_date_format,
|
499
|
+
@use_iso_date_format = typecast_value_boolean(@opts.fetch(:use_iso_date_format, true))
|
528
500
|
initialize_postgres_adapter
|
529
501
|
add_conversion_proc(17, method(:unescape_bytea)) if USES_PG
|
530
502
|
add_conversion_proc(1082, TYPE_TRANSLATOR.method(:date)) if @use_iso_date_format
|
@@ -629,7 +601,7 @@ module Sequel
|
|
629
601
|
end
|
630
602
|
|
631
603
|
# If the value is an infinite value (either an infinite float or a string returned by
|
632
|
-
# by PostgreSQL for an infinite
|
604
|
+
# by PostgreSQL for an infinite date), return it without converting it if
|
633
605
|
# convert_infinite_timestamps is set.
|
634
606
|
def typecast_value_date(value)
|
635
607
|
if convert_infinite_timestamps
|
@@ -661,20 +633,9 @@ module Sequel
|
|
661
633
|
end
|
662
634
|
end
|
663
635
|
|
664
|
-
# Dataset class for PostgreSQL datasets that use the pg, postgres, or
|
665
|
-
# postgres-pr driver.
|
666
636
|
class Dataset < Sequel::Dataset
|
667
637
|
include Sequel::Postgres::DatasetMethods
|
668
638
|
|
669
|
-
Database::DatasetClass = self
|
670
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
671
|
-
APOS = "'".freeze
|
672
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
673
|
-
DEFAULT_CURSOR_NAME = 'sequel_cursor'.freeze
|
674
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_CURSOR_NAME)
|
675
|
-
|
676
|
-
# Yield all rows returned by executing the given SQL and converting
|
677
|
-
# the types.
|
678
639
|
def fetch_rows(sql)
|
679
640
|
return cursor_fetch_rows(sql){|h| yield h} if @opts[:cursor]
|
680
641
|
execute(sql){|res| yield_hash_rows(res, fetch_rows_set_cols(res)){|h| yield h}}
|
@@ -702,8 +663,8 @@ module Sequel
|
|
702
663
|
# Usage:
|
703
664
|
#
|
704
665
|
# DB[:huge_table].use_cursor.each{|row| p row}
|
705
|
-
# DB[:huge_table].use_cursor(:
|
706
|
-
# DB[:huge_table].use_cursor(:
|
666
|
+
# DB[:huge_table].use_cursor(rows_per_fetch: 10000).each{|row| p row}
|
667
|
+
# DB[:huge_table].use_cursor(cursor_name: 'my_cursor').each{|row| p row}
|
707
668
|
#
|
708
669
|
# This is untested with the prepared statement/bound variable support,
|
709
670
|
# and unlikely to work with either.
|
@@ -716,15 +677,14 @@ module Sequel
|
|
716
677
|
# large dataset by updating individual rows while processing the dataset
|
717
678
|
# via a cursor:
|
718
679
|
#
|
719
|
-
# DB[:huge_table].use_cursor(:
|
720
|
-
# DB[:huge_table].where_current_of.update(:
|
680
|
+
# DB[:huge_table].use_cursor(rows_per_fetch: 1).each do |row|
|
681
|
+
# DB[:huge_table].where_current_of.update(column: ruby_method(row))
|
721
682
|
# end
|
722
683
|
def where_current_of(cursor_name='sequel_cursor')
|
723
684
|
clone(:where=>Sequel.lit(['CURRENT OF '], Sequel.identifier(cursor_name)))
|
724
685
|
end
|
725
686
|
|
726
687
|
if USES_PG
|
727
|
-
|
728
688
|
PREPARED_ARG_PLACEHOLDER = LiteralString.new('$').freeze
|
729
689
|
|
730
690
|
# PostgreSQL specific argument mapper used for mapping the named
|
@@ -789,7 +749,7 @@ module Sequel
|
|
789
749
|
cursor_name = quote_identifier(cursor[:cursor_name] || 'sequel_cursor')
|
790
750
|
rows_per_fetch = cursor[:rows_per_fetch].to_i
|
791
751
|
|
792
|
-
db.
|
752
|
+
db.public_send(*(hold ? [:synchronize, server_opts[:server]] : [:transaction, server_opts])) do
|
793
753
|
begin
|
794
754
|
execute_ddl("DECLARE #{cursor_name} NO SCROLL CURSOR WITH#{'OUT' unless hold} HOLD FOR #{sql}", server_opts)
|
795
755
|
rows_per_fetch = 1000 if rows_per_fetch <= 0
|
@@ -869,7 +829,3 @@ if Sequel::Postgres::USES_PG && !ENV['NO_SEQUEL_PG']
|
|
869
829
|
rescue LoadError
|
870
830
|
end
|
871
831
|
end
|
872
|
-
|
873
|
-
# SEQUEL5: Remove
|
874
|
-
SEQUEL_POSTGRES_USES_PG = Sequel::Postgres::USES_PG
|
875
|
-
Sequel::Deprecation.deprecate_constant(Object, :SEQUEL_POSTGRES_USES_PG)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../utils/emulate_offset_with_reverse_and_count'
|
4
|
+
require_relative '../utils/unmodified_identifiers'
|
4
5
|
|
5
6
|
module Sequel
|
6
7
|
module Access
|
@@ -9,7 +10,6 @@ module Sequel
|
|
9
10
|
module DatabaseMethods
|
10
11
|
include UnmodifiedIdentifiers::DatabaseMethods
|
11
12
|
|
12
|
-
# Access uses type :access as the database_type
|
13
13
|
def database_type
|
14
14
|
:access
|
15
15
|
end
|
@@ -56,7 +56,6 @@ module Sequel
|
|
56
56
|
DATABASE_ERROR_REGEXPS
|
57
57
|
end
|
58
58
|
|
59
|
-
# The SQL to drop an index for the table.
|
60
59
|
def drop_index_sql(table, op)
|
61
60
|
"DROP INDEX #{quote_identifier(op[:name] || default_index_name(table, op[:columns]))} ON #{quote_schema_table(table)}"
|
62
61
|
end
|
@@ -85,52 +84,12 @@ module Sequel
|
|
85
84
|
include EmulateOffsetWithReverseAndCount
|
86
85
|
include UnmodifiedIdentifiers::DatasetMethods
|
87
86
|
|
88
|
-
EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}
|
89
|
-
|
90
|
-
OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}
|
91
|
-
CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}
|
92
|
-
|
93
|
-
|
94
|
-
Sequel::Deprecation.deprecate_constant(self, :DATE_FORMAT)
|
95
|
-
TIMESTAMP_FORMAT = '#%Y-%m-%d %H:%M:%S#'.freeze
|
96
|
-
Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
|
97
|
-
TOP = " TOP ".freeze
|
98
|
-
Sequel::Deprecation.deprecate_constant(self, :TOP)
|
99
|
-
BRACKET_CLOSE = ']'.freeze
|
100
|
-
Sequel::Deprecation.deprecate_constant(self, :BRACKET_CLOSE)
|
101
|
-
BRACKET_OPEN = '['.freeze
|
102
|
-
Sequel::Deprecation.deprecate_constant(self, :BRACKET_OPEN)
|
103
|
-
COMMA = ', '.freeze
|
104
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
105
|
-
PAREN_CLOSE = ')'.freeze
|
106
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
107
|
-
PAREN_OPEN = '('.freeze
|
108
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
|
109
|
-
INTO = " INTO ".freeze
|
110
|
-
Sequel::Deprecation.deprecate_constant(self, :INTO)
|
111
|
-
FROM = ' FROM '.freeze
|
112
|
-
Sequel::Deprecation.deprecate_constant(self, :FROM)
|
113
|
-
SPACE = ' '.freeze
|
114
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE)
|
115
|
-
NOT_EQUAL = ' <> '.freeze
|
116
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_EQUAL)
|
117
|
-
BOOL_FALSE = '0'.freeze
|
118
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
119
|
-
BOOL_TRUE = '-1'.freeze
|
120
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
121
|
-
DATE_FUNCTION = 'Date()'.freeze
|
122
|
-
Sequel::Deprecation.deprecate_constant(self, :DATE_FUNCTION)
|
123
|
-
NOW_FUNCTION = 'Now()'.freeze
|
124
|
-
Sequel::Deprecation.deprecate_constant(self, :NOW_FUNCTION)
|
125
|
-
TIME_FUNCTION = 'Time()'.freeze
|
126
|
-
Sequel::Deprecation.deprecate_constant(self, :TIME_FUNCTION)
|
127
|
-
DATEPART_OPEN = "datepart(".freeze
|
128
|
-
Sequel::Deprecation.deprecate_constant(self, :DATEPART_OPEN)
|
129
|
-
EMULATED_FUNCTION_MAP = {:char_length=>:len}
|
130
|
-
Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
|
131
|
-
|
132
|
-
# Access doesn't support CASE, but it can be emulated with nested
|
133
|
-
# IIF function calls.
|
87
|
+
EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}.freeze
|
88
|
+
EXTRACT_MAP.each_value(&:freeze)
|
89
|
+
OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}.freeze
|
90
|
+
CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}.freeze
|
91
|
+
|
92
|
+
# Access doesn't support CASE, so emulate it with nested IIF function calls.
|
134
93
|
def case_expression_sql_append(sql, ce)
|
135
94
|
literal_append(sql, ce.with_merged_expression.conditions.reverse.inject(ce.default){|exp,(cond,val)| Sequel::SQL::Function.new(:IIF, cond, val, exp)})
|
136
95
|
end
|
@@ -189,7 +148,7 @@ module Sequel
|
|
189
148
|
end
|
190
149
|
end
|
191
150
|
|
192
|
-
# Use Date() and
|
151
|
+
# Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME
|
193
152
|
def constant_sql_append(sql, constant)
|
194
153
|
case constant
|
195
154
|
when :CURRENT_DATE
|
@@ -317,7 +276,8 @@ module Sequel
|
|
317
276
|
end
|
318
277
|
end
|
319
278
|
|
320
|
-
# Access uses [] for quoting identifiers
|
279
|
+
# Access uses [] for quoting identifiers, and can't handle
|
280
|
+
# ] inside identifiers.
|
321
281
|
def quoted_identifier_append(sql, v)
|
322
282
|
sql << '[' << v.to_s << ']'
|
323
283
|
end
|