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,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,40 +140,25 @@ 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
|
|
|
175
|
-
INFINITE_TIMESTAMP_STRINGS = ['infinity'.freeze, '-infinity'.freeze].freeze
|
|
176
|
-
INFINITE_DATETIME_VALUES = ([PLUS_INFINITY, MINUS_INFINITY] + INFINITE_TIMESTAMP_STRINGS).freeze
|
|
177
|
-
|
|
178
152
|
set_adapter_scheme :postgresql
|
|
179
153
|
set_adapter_scheme :postgres
|
|
180
154
|
|
|
181
|
-
# Whether infinite timestamps/dates should be converted on retrieval. By default, no
|
|
182
|
-
# conversion is done, so an error is raised if you attempt to retrieve an infinite
|
|
183
|
-
# timestamp/date. You can set this to :nil to convert to nil, :string to leave
|
|
184
|
-
# as a string, or :float to convert to an infinite float.
|
|
185
|
-
attr_reader :convert_infinite_timestamps
|
|
186
|
-
|
|
187
155
|
# 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.
|
|
156
|
+
# handle fractional seconds in Time/DateTime or blobs with "\0". Only public for use by
|
|
157
|
+
# the adapter, shouldn't be used by external code.
|
|
191
158
|
def bound_variable_arg(arg, conn)
|
|
192
159
|
case arg
|
|
193
160
|
when Sequel::SQL::Blob
|
|
194
161
|
{:value=>arg, :type=>17, :format=>1}
|
|
195
|
-
when Sequel::SQLTime
|
|
196
|
-
literal(arg)
|
|
197
162
|
when DateTime, Time
|
|
198
163
|
literal(arg)
|
|
199
164
|
else
|
|
@@ -230,7 +195,7 @@ module Sequel
|
|
|
230
195
|
conn.set_notice_receiver(&receiver)
|
|
231
196
|
end
|
|
232
197
|
else
|
|
233
|
-
unless typecast_value_boolean(@opts.fetch(:force_standard_strings,
|
|
198
|
+
unless typecast_value_boolean(@opts.fetch(:force_standard_strings, true))
|
|
234
199
|
raise Error, "Cannot create connection using postgres-pr unless force_standard_strings is set"
|
|
235
200
|
end
|
|
236
201
|
|
|
@@ -258,39 +223,21 @@ module Sequel
|
|
|
258
223
|
conn
|
|
259
224
|
end
|
|
260
225
|
|
|
261
|
-
#
|
|
262
|
-
#
|
|
263
|
-
def convert_infinite_timestamps
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
v
|
|
267
|
-
when 'nil'
|
|
268
|
-
:nil
|
|
269
|
-
when 'string'
|
|
270
|
-
:string
|
|
271
|
-
when 'float'
|
|
272
|
-
:float
|
|
273
|
-
when String
|
|
274
|
-
typecast_value_boolean(v)
|
|
275
|
-
else
|
|
276
|
-
false
|
|
277
|
-
end
|
|
226
|
+
# Always false, support was moved to pg_extended_date_support extension.
|
|
227
|
+
# Needs to stay defined here so that sequel_pg works.
|
|
228
|
+
def convert_infinite_timestamps
|
|
229
|
+
false
|
|
230
|
+
end
|
|
278
231
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
else
|
|
286
|
-
old_pr.call(val)
|
|
287
|
-
end
|
|
288
|
-
end
|
|
232
|
+
# Enable pg_extended_date_support extension if symbol or string is given.
|
|
233
|
+
def convert_infinite_timestamps=(v)
|
|
234
|
+
case v
|
|
235
|
+
when Symbol, String, true
|
|
236
|
+
extension(:pg_extended_date_support)
|
|
237
|
+
self.convert_infinite_timestamps = v
|
|
289
238
|
end
|
|
290
|
-
add_conversion_proc(1082, pr)
|
|
291
239
|
end
|
|
292
240
|
|
|
293
|
-
# Disconnect given connection
|
|
294
241
|
def disconnect_connection(conn)
|
|
295
242
|
conn.finish
|
|
296
243
|
rescue PGError, IOError
|
|
@@ -322,7 +269,6 @@ module Sequel
|
|
|
322
269
|
end
|
|
323
270
|
end
|
|
324
271
|
|
|
325
|
-
# Execute the given SQL with the given args on an available connection.
|
|
326
272
|
def execute(sql, opts=OPTS, &block)
|
|
327
273
|
synchronize(opts[:server]){|conn| check_database_errors{_execute(conn, sql, opts, &block)}}
|
|
328
274
|
end
|
|
@@ -340,6 +286,9 @@ module Sequel
|
|
|
340
286
|
# a version of PostgreSQL before 9.0, you will probably want to
|
|
341
287
|
# use a string if you are using any options at all, as the syntax
|
|
342
288
|
# Sequel uses for options is only compatible with PostgreSQL 9.0+.
|
|
289
|
+
# This should be the full COPY statement passed to PostgreSQL, not
|
|
290
|
+
# just the SELECT query. If a string is given, the :format and
|
|
291
|
+
# :options options are ignored.
|
|
343
292
|
# Dataset :: Uses a query instead of a table name when copying.
|
|
344
293
|
# other :: Uses a table name (usually a symbol) when copying.
|
|
345
294
|
#
|
|
@@ -490,21 +439,6 @@ module Sequel
|
|
|
490
439
|
end
|
|
491
440
|
end
|
|
492
441
|
|
|
493
|
-
# If convert_infinite_timestamps is true and the value is infinite, return an appropriate
|
|
494
|
-
# value based on the convert_infinite_timestamps setting.
|
|
495
|
-
def to_application_timestamp(value)
|
|
496
|
-
if convert_infinite_timestamps
|
|
497
|
-
case value
|
|
498
|
-
when *INFINITE_TIMESTAMP_STRINGS
|
|
499
|
-
infinite_timestamp_value(value)
|
|
500
|
-
else
|
|
501
|
-
super
|
|
502
|
-
end
|
|
503
|
-
else
|
|
504
|
-
super
|
|
505
|
-
end
|
|
506
|
-
end
|
|
507
|
-
|
|
508
442
|
private
|
|
509
443
|
|
|
510
444
|
# Execute the given SQL string or prepared statement on the connection object.
|
|
@@ -524,7 +458,7 @@ module Sequel
|
|
|
524
458
|
# Add the primary_keys and primary_key_sequences instance variables,
|
|
525
459
|
# so we can get the correct return values for inserted rows.
|
|
526
460
|
def adapter_initialize
|
|
527
|
-
@use_iso_date_format = typecast_value_boolean(@opts.fetch(:use_iso_date_format,
|
|
461
|
+
@use_iso_date_format = typecast_value_boolean(@opts.fetch(:use_iso_date_format, true))
|
|
528
462
|
initialize_postgres_adapter
|
|
529
463
|
add_conversion_proc(17, method(:unescape_bytea)) if USES_PG
|
|
530
464
|
add_conversion_proc(1082, TYPE_TRANSLATOR.method(:date)) if @use_iso_date_format
|
|
@@ -611,70 +545,19 @@ module Sequel
|
|
|
611
545
|
end
|
|
612
546
|
end
|
|
613
547
|
|
|
614
|
-
# Return an appropriate value for the given infinite timestamp string.
|
|
615
|
-
def infinite_timestamp_value(value)
|
|
616
|
-
case convert_infinite_timestamps
|
|
617
|
-
when :nil
|
|
618
|
-
nil
|
|
619
|
-
when :string
|
|
620
|
-
value
|
|
621
|
-
else
|
|
622
|
-
value == 'infinity' ? PLUS_INFINITY : MINUS_INFINITY
|
|
623
|
-
end
|
|
624
|
-
end
|
|
625
|
-
|
|
626
548
|
# Don't log, since logging is done by the underlying connection.
|
|
627
549
|
def log_connection_execute(conn, sql)
|
|
628
550
|
conn.execute(sql)
|
|
629
551
|
end
|
|
630
552
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
# convert_infinite_timestamps is set.
|
|
634
|
-
def typecast_value_date(value)
|
|
635
|
-
if convert_infinite_timestamps
|
|
636
|
-
case value
|
|
637
|
-
when *INFINITE_DATETIME_VALUES
|
|
638
|
-
value
|
|
639
|
-
else
|
|
640
|
-
super
|
|
641
|
-
end
|
|
642
|
-
else
|
|
643
|
-
super
|
|
644
|
-
end
|
|
645
|
-
end
|
|
646
|
-
|
|
647
|
-
# If the value is an infinite value (either an infinite float or a string returned by
|
|
648
|
-
# by PostgreSQL for an infinite timestamp), return it without converting it if
|
|
649
|
-
# convert_infinite_timestamps is set.
|
|
650
|
-
def typecast_value_datetime(value)
|
|
651
|
-
if convert_infinite_timestamps
|
|
652
|
-
case value
|
|
653
|
-
when *INFINITE_DATETIME_VALUES
|
|
654
|
-
value
|
|
655
|
-
else
|
|
656
|
-
super
|
|
657
|
-
end
|
|
658
|
-
else
|
|
659
|
-
super
|
|
660
|
-
end
|
|
553
|
+
def rollback_transaction(conn, opts=OPTS)
|
|
554
|
+
super unless conn.transaction_status == 0
|
|
661
555
|
end
|
|
662
556
|
end
|
|
663
557
|
|
|
664
|
-
# Dataset class for PostgreSQL datasets that use the pg, postgres, or
|
|
665
|
-
# postgres-pr driver.
|
|
666
558
|
class Dataset < Sequel::Dataset
|
|
667
559
|
include Sequel::Postgres::DatasetMethods
|
|
668
560
|
|
|
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
561
|
def fetch_rows(sql)
|
|
679
562
|
return cursor_fetch_rows(sql){|h| yield h} if @opts[:cursor]
|
|
680
563
|
execute(sql){|res| yield_hash_rows(res, fetch_rows_set_cols(res)){|h| yield h}}
|
|
@@ -702,8 +585,8 @@ module Sequel
|
|
|
702
585
|
# Usage:
|
|
703
586
|
#
|
|
704
587
|
# DB[:huge_table].use_cursor.each{|row| p row}
|
|
705
|
-
# DB[:huge_table].use_cursor(:
|
|
706
|
-
# DB[:huge_table].use_cursor(:
|
|
588
|
+
# DB[:huge_table].use_cursor(rows_per_fetch: 10000).each{|row| p row}
|
|
589
|
+
# DB[:huge_table].use_cursor(cursor_name: 'my_cursor').each{|row| p row}
|
|
707
590
|
#
|
|
708
591
|
# This is untested with the prepared statement/bound variable support,
|
|
709
592
|
# and unlikely to work with either.
|
|
@@ -716,15 +599,14 @@ module Sequel
|
|
|
716
599
|
# large dataset by updating individual rows while processing the dataset
|
|
717
600
|
# via a cursor:
|
|
718
601
|
#
|
|
719
|
-
# DB[:huge_table].use_cursor(:
|
|
720
|
-
# DB[:huge_table].where_current_of.update(:
|
|
602
|
+
# DB[:huge_table].use_cursor(rows_per_fetch: 1).each do |row|
|
|
603
|
+
# DB[:huge_table].where_current_of.update(column: ruby_method(row))
|
|
721
604
|
# end
|
|
722
605
|
def where_current_of(cursor_name='sequel_cursor')
|
|
723
606
|
clone(:where=>Sequel.lit(['CURRENT OF '], Sequel.identifier(cursor_name)))
|
|
724
607
|
end
|
|
725
608
|
|
|
726
609
|
if USES_PG
|
|
727
|
-
|
|
728
610
|
PREPARED_ARG_PLACEHOLDER = LiteralString.new('$').freeze
|
|
729
611
|
|
|
730
612
|
# PostgreSQL specific argument mapper used for mapping the named
|
|
@@ -789,7 +671,7 @@ module Sequel
|
|
|
789
671
|
cursor_name = quote_identifier(cursor[:cursor_name] || 'sequel_cursor')
|
|
790
672
|
rows_per_fetch = cursor[:rows_per_fetch].to_i
|
|
791
673
|
|
|
792
|
-
db.
|
|
674
|
+
db.public_send(*(hold ? [:synchronize, server_opts[:server]] : [:transaction, server_opts])) do
|
|
793
675
|
begin
|
|
794
676
|
execute_ddl("DECLARE #{cursor_name} NO SCROLL CURSOR WITH#{'OUT' unless hold} HOLD FOR #{sql}", server_opts)
|
|
795
677
|
rows_per_fetch = 1000 if rows_per_fetch <= 0
|
|
@@ -869,7 +751,3 @@ if Sequel::Postgres::USES_PG && !ENV['NO_SEQUEL_PG']
|
|
|
869
751
|
rescue LoadError
|
|
870
752
|
end
|
|
871
753
|
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
|
|
@@ -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)
|