sequel 4.49.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,24 +1,19 @@
|
|
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 Oracle
|
7
7
|
Sequel::Database.set_shared_adapter_scheme(:oracle, self)
|
8
8
|
|
9
9
|
def self.mock_adapter_setup(db)
|
10
|
-
db.
|
10
|
+
db.instance_exec do
|
11
11
|
@server_version = 11000000
|
12
12
|
@primary_key_sequences = {}
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
module DatabaseMethods
|
17
|
-
TEMPORARY = 'GLOBAL TEMPORARY '.freeze
|
18
|
-
Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
|
19
|
-
AUTOINCREMENT = ''.freeze
|
20
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
|
21
|
-
|
22
17
|
attr_accessor :autosequence
|
23
18
|
|
24
19
|
def create_sequence(name, opts=OPTS)
|
@@ -37,7 +32,6 @@ module Sequel
|
|
37
32
|
self << drop_sequence_sql(name)
|
38
33
|
end
|
39
34
|
|
40
|
-
# Oracle uses the :oracle database type
|
41
35
|
def database_type
|
42
36
|
:oracle
|
43
37
|
end
|
@@ -88,7 +82,7 @@ module Sequel
|
|
88
82
|
false
|
89
83
|
end
|
90
84
|
|
91
|
-
IGNORE_OWNERS = %w'APEX_040000 CTXSYS EXFSYS MDSYS OLAPSYS ORDDATA ORDSYS SYS SYSTEM XDB XDBMETADATA XDBPM XFILES WMSYS'
|
85
|
+
IGNORE_OWNERS = %w'APEX_040000 CTXSYS EXFSYS MDSYS OLAPSYS ORDDATA ORDSYS SYS SYSTEM XDB XDBMETADATA XDBPM XFILES WMSYS'.freeze
|
92
86
|
|
93
87
|
def tables(opts=OPTS)
|
94
88
|
m = output_identifier_meth
|
@@ -146,7 +140,6 @@ module Sequel
|
|
146
140
|
|
147
141
|
private
|
148
142
|
|
149
|
-
# Handle Oracle specific ALTER TABLE SQL
|
150
143
|
def alter_table_sql(table, op)
|
151
144
|
case op[:op]
|
152
145
|
when :add_column
|
@@ -253,7 +246,7 @@ module Sequel
|
|
253
246
|
TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>'READ COMMITTED'.freeze,
|
254
247
|
:committed=>'READ COMMITTED'.freeze,
|
255
248
|
:repeatable=>'SERIALIZABLE'.freeze,
|
256
|
-
:serializable=>'SERIALIZABLE'.freeze}
|
249
|
+
:serializable=>'SERIALIZABLE'.freeze}.freeze
|
257
250
|
# Oracle doesn't support READ UNCOMMITTED OR REPEATABLE READ transaction
|
258
251
|
# isolation levels, so upgrade to the next highest level in those cases.
|
259
252
|
def set_transaction_isolation_sql(level)
|
@@ -322,31 +315,6 @@ module Sequel
|
|
322
315
|
ROW_NUMBER_EXPRESSION = LiteralString.new('ROWNUM').freeze
|
323
316
|
BITAND_PROC = lambda{|a, b| Sequel.lit(["CAST(BITAND(", ", ", ") AS INTEGER)"], a, b)}
|
324
317
|
|
325
|
-
SPACE = ' '.freeze
|
326
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE)
|
327
|
-
APOS = "'".freeze
|
328
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
329
|
-
APOS_RE = /'/.freeze
|
330
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
|
331
|
-
DOUBLE_APOS = "''".freeze
|
332
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
333
|
-
FROM = ' FROM '.freeze
|
334
|
-
Sequel::Deprecation.deprecate_constant(self, :FROM)
|
335
|
-
TIMESTAMP_FORMAT = "TIMESTAMP '%Y-%m-%d %H:%M:%S%N %z'".freeze
|
336
|
-
Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
|
337
|
-
TIMESTAMP_OFFSET_FORMAT = "%+03i:%02i".freeze
|
338
|
-
Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_OFFSET_FORMAT)
|
339
|
-
BOOL_FALSE = "'N'".freeze
|
340
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
341
|
-
BOOL_TRUE = "'Y'".freeze
|
342
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
343
|
-
HSTAR = "H*".freeze
|
344
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
345
|
-
DUAL = ' FROM DUAL'.freeze
|
346
|
-
Sequel::Deprecation.deprecate_constant(self, :DUAL)
|
347
|
-
SKIP_LOCKED = " SKIP LOCKED".freeze
|
348
|
-
Sequel::Deprecation.deprecate_constant(self, :SKIP_LOCKED)
|
349
|
-
|
350
318
|
include(Module.new do
|
351
319
|
Dataset.def_sql_method(self, :select, %w'with select distinct columns from join where group having compounds order limit lock')
|
352
320
|
end)
|
@@ -418,7 +386,8 @@ module Sequel
|
|
418
386
|
clone(:sequence=>s)
|
419
387
|
end
|
420
388
|
|
421
|
-
# Handle LIMIT by using a unlimited subselect filtered with ROWNUM
|
389
|
+
# Handle LIMIT by using a unlimited subselect filtered with ROWNUM,
|
390
|
+
# unless Oracle 12 is used.
|
422
391
|
def select_sql
|
423
392
|
return super if @opts[:sql]
|
424
393
|
return super if supports_fetch_next_rows?
|
@@ -467,6 +436,7 @@ module Sequel
|
|
467
436
|
sql << " ROWS ONLY"
|
468
437
|
end
|
469
438
|
end
|
439
|
+
|
470
440
|
# Oracle requires recursive CTEs to have column aliases.
|
471
441
|
def recursive_cte_requires_column_aliases?
|
472
442
|
true
|
@@ -481,7 +451,8 @@ module Sequel
|
|
481
451
|
false
|
482
452
|
end
|
483
453
|
|
484
|
-
# Oracle supports FETCH NEXT ROWS since 12c
|
454
|
+
# Oracle supports FETCH NEXT ROWS since 12c, but it doesn't work when
|
455
|
+
# locking or when skipping locked rows.
|
485
456
|
def supports_fetch_next_rows?
|
486
457
|
server_version >= 12000000 && !(@opts[:lock] || @opts[:skip_locked])
|
487
458
|
end
|
@@ -551,7 +522,7 @@ module Sequel
|
|
551
522
|
db.server_version(@opts[:server])
|
552
523
|
end
|
553
524
|
|
554
|
-
# Oracle supports pattern matching via regular expressions
|
525
|
+
# Oracle 10+ supports pattern matching via regular expressions
|
555
526
|
def supports_regexp?
|
556
527
|
server_version >= 10010002
|
557
528
|
end
|
@@ -565,7 +536,8 @@ module Sequel
|
|
565
536
|
end
|
566
537
|
|
567
538
|
# Oracle doesn't support the use of AS when aliasing a dataset. It doesn't require
|
568
|
-
# the use of AS anywhere, so this disables it in all cases.
|
539
|
+
# the use of AS anywhere, so this disables it in all cases. Oracle also does not support
|
540
|
+
# derived column lists in aliases.
|
569
541
|
def as_sql_append(sql, aliaz, column_aliases=nil)
|
570
542
|
raise Error, "oracle does not support derived column lists" if column_aliases
|
571
543
|
sql << ' '
|
@@ -581,7 +553,7 @@ module Sequel
|
|
581
553
|
' FROM DUAL'
|
582
554
|
end
|
583
555
|
|
584
|
-
# There is no function on
|
556
|
+
# There is no function on Oracle that does character length
|
585
557
|
# and respects trailing spaces (datalength respects trailing spaces, but
|
586
558
|
# counts bytes instead of characters). Use a hack to work around the
|
587
559
|
# trailing spaces issue.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../utils/unmodified_identifiers'
|
4
4
|
|
5
5
|
module Sequel
|
6
6
|
# Top level module for holding all PostgreSQL-related modules and classes
|
@@ -23,17 +23,6 @@ module Sequel
|
|
23
23
|
PLUS_INFINITY = 1.0/0.0
|
24
24
|
MINUS_INFINITY = -1.0/0.0
|
25
25
|
|
26
|
-
NAN_STR = 'NaN'.freeze
|
27
|
-
Sequel::Deprecation.deprecate_constant(self, :NAN_STR)
|
28
|
-
PLUS_INFINITY_STR = 'Infinity'.freeze
|
29
|
-
Sequel::Deprecation.deprecate_constant(self, :PLUS_INFINITY_STR)
|
30
|
-
MINUS_INFINITY_STR = '-Infinity'.freeze
|
31
|
-
Sequel::Deprecation.deprecate_constant(self, :MINUS_INFINITY_STR)
|
32
|
-
TRUE_STR = 't'.freeze
|
33
|
-
Sequel::Deprecation.deprecate_constant(self, :TRUE_STR)
|
34
|
-
DASH_STR = '-'.freeze
|
35
|
-
Sequel::Deprecation.deprecate_constant(self, :DASH_STR)
|
36
|
-
|
37
26
|
TYPE_TRANSLATOR = tt = Class.new do
|
38
27
|
def boolean(s) s == 't' end
|
39
28
|
def integer(s) s.to_i end
|
@@ -62,24 +51,9 @@ module Sequel
|
|
62
51
|
end
|
63
52
|
::Sequel::SQL::Blob.new(str)
|
64
53
|
end
|
65
|
-
end.new
|
66
|
-
|
67
|
-
# Type OIDs for string types used by PostgreSQL. These types don't
|
68
|
-
# have conversion procs associated with them (since the data is
|
69
|
-
# already in the form of a string).
|
70
|
-
STRING_TYPES = [18, 19, 25, 1042, 1043] # SEQUEL5: Remove
|
71
|
-
|
72
|
-
# Hash with type name strings/symbols and callable values for converting PostgreSQL types.
|
73
|
-
# Non-builtin types that don't have fixed numbers should use this to register
|
74
|
-
# conversion procs.
|
75
|
-
PG_NAMED_TYPES = {} unless defined?(PG_NAMED_TYPES)
|
76
|
-
PG_NAMED__TYPES = PG_NAMED_TYPES
|
77
|
-
Sequel::Deprecation.deprecate_constant(self, :PG_NAMED_TYPES)
|
54
|
+
end.new.freeze
|
78
55
|
|
79
|
-
|
80
|
-
PG_TYPES = {} unless defined?(PG_TYPES)
|
81
|
-
|
82
|
-
#CONVERSION_PROCS = {} # SEQUEL5
|
56
|
+
CONVERSION_PROCS = {}
|
83
57
|
|
84
58
|
{
|
85
59
|
[16] => tt.method(:boolean),
|
@@ -92,14 +66,10 @@ module Sequel
|
|
92
66
|
[1184, 1114] => ::Sequel.method(:database_to_application_timestamp),
|
93
67
|
}.each do |k,v|
|
94
68
|
k.each do |n|
|
95
|
-
|
96
|
-
#CONVERSION_PROCS[n] = v # SEQUEL5
|
69
|
+
CONVERSION_PROCS[n] = v
|
97
70
|
end
|
98
71
|
end
|
99
|
-
|
100
|
-
Sequel::Deprecation.deprecate_constant(self, :PG_TYPES)
|
101
|
-
|
102
|
-
#CONVERSION_PROCS.freeze # SEQUEL5
|
72
|
+
CONVERSION_PROCS.freeze
|
103
73
|
|
104
74
|
module MockAdapterDatabaseMethods
|
105
75
|
def bound_variable_arg(arg, conn)
|
@@ -112,39 +82,13 @@ module Sequel
|
|
112
82
|
end
|
113
83
|
|
114
84
|
def self.mock_adapter_setup(db)
|
115
|
-
db.
|
85
|
+
db.instance_exec do
|
116
86
|
@server_version = 90500
|
117
87
|
initialize_postgres_adapter
|
118
88
|
extend(MockAdapterDatabaseMethods)
|
119
89
|
end
|
120
90
|
end
|
121
91
|
|
122
|
-
CONVERTED_EXCEPTIONS = []
|
123
|
-
Sequel::Deprecation.deprecate_constant(self, :CONVERTED_EXCEPTIONS)
|
124
|
-
|
125
|
-
# SEQUEL5: Remove
|
126
|
-
@client_min_messages = :warning
|
127
|
-
@force_standard_strings = true
|
128
|
-
class << self
|
129
|
-
def client_min_messages
|
130
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres.client_min_messages", "Use the :client_min_messages Database option instead")
|
131
|
-
@client_min_messages
|
132
|
-
end
|
133
|
-
def client_min_messages=(v)
|
134
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres.client_min_messages=", "Use the :client_min_messages Database option instead")
|
135
|
-
@client_min_messages = v
|
136
|
-
end
|
137
|
-
|
138
|
-
def force_standard_strings
|
139
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres.force_standard_strings", "Use the :force_standard_strings Database option instead")
|
140
|
-
@force_standard_strings
|
141
|
-
end
|
142
|
-
def force_standard_strings=(v)
|
143
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres.force_standard_strings=", "Use the :force_standard_strings Database option instead")
|
144
|
-
@force_standard_strings = v
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
92
|
class CreateTableGenerator < Sequel::Schema::CreateTableGenerator
|
149
93
|
# Add an exclusion constraint when creating the table. Elements should be
|
150
94
|
# an array of 2 element arrays, with the first element being the column or
|
@@ -185,21 +129,13 @@ module Sequel
|
|
185
129
|
# Error raised when Sequel determines a PostgreSQL exclusion constraint has been violated.
|
186
130
|
class ExclusionConstraintViolation < Sequel::ConstraintViolation; end
|
187
131
|
|
188
|
-
# Methods shared by Database instances that connect to PostgreSQL.
|
189
132
|
module DatabaseMethods
|
190
133
|
include UnmodifiedIdentifiers::DatabaseMethods
|
191
134
|
|
192
|
-
RE_CURRVAL_ERROR = /currval of sequence "(.*)" is not yet defined in this session|relation "(.*)" does not exist/.freeze
|
193
|
-
Sequel::Deprecation.deprecate_constant(self, :RE_CURRVAL_ERROR)
|
194
|
-
POSTGRES_DEFAULT_RE = /\A(?:B?('.*')::[^']+|\((-?\d+(?:\.\d+)?)\))\z/
|
195
|
-
Sequel::Deprecation.deprecate_constant(self, :POSTGRES_DEFAULT_RE)
|
196
|
-
UNLOGGED = 'UNLOGGED '.freeze
|
197
|
-
Sequel::Deprecation.deprecate_constant(self, :UNLOGGED)
|
198
|
-
|
199
135
|
PREPARED_ARG_PLACEHOLDER = LiteralString.new('$').freeze
|
200
136
|
FOREIGN_KEY_LIST_ON_DELETE_MAP = {'a'=>:no_action, 'r'=>:restrict, 'c'=>:cascade, 'n'=>:set_null, 'd'=>:set_default}.freeze
|
201
137
|
ON_COMMIT = {:drop => 'DROP', :delete_rows => 'DELETE ROWS', :preserve_rows => 'PRESERVE ROWS'}.freeze
|
202
|
-
|
138
|
+
ON_COMMIT.each_value(&:freeze)
|
203
139
|
|
204
140
|
# SQL fragment for custom sequences (ones not created by serial primary key),
|
205
141
|
# Returning the schema and literal form of the sequence name, by parsing
|
@@ -263,27 +199,17 @@ module Sequel
|
|
263
199
|
conversion_procs[oid] = callable
|
264
200
|
end
|
265
201
|
|
266
|
-
# Add a conversion proc for a named type
|
267
|
-
# for types without fixed OIDs, which includes all types that
|
268
|
-
# are not included in a default PostgreSQL installation.
|
269
|
-
# a block is given, it is used as the conversion proc, otherwise
|
270
|
-
# the conversion proc is looked up in the PG_NAMED_TYPES hash.
|
202
|
+
# Add a conversion proc for a named type, using the given block.
|
203
|
+
# This should be used for types without fixed OIDs, which includes all types that
|
204
|
+
# are not included in a default PostgreSQL installation.
|
271
205
|
def add_named_conversion_proc(name, &block)
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
end
|
206
|
+
name = name.to_s if name.is_a?(Symbol)
|
207
|
+
unless oid = from(:pg_type).where(:typtype=>['b', 'e'], :typname=>name.to_s).get(:oid)
|
208
|
+
raise Error, "No matching type in pg_type for #{name.inspect}"
|
276
209
|
end
|
277
|
-
|
278
|
-
# SEQUEL5:
|
279
|
-
#unless oid = from(:pg_type).where(:typtype=>['b', 'e'], :typname=>name.to_s).get(:oid)
|
280
|
-
# raise Error, "No matching type in pg_type for #{name.inspect}"
|
281
|
-
#end
|
282
|
-
#add_conversion_proc(oid, block) # SEQUEL5
|
210
|
+
add_conversion_proc(oid, block)
|
283
211
|
end
|
284
212
|
|
285
|
-
# Commit an existing prepared transaction with the given transaction
|
286
|
-
# identifier string.
|
287
213
|
def commit_prepared_transaction(transaction_id, opts=OPTS)
|
288
214
|
run("COMMIT PREPARED #{literal(transaction_id)}", opts)
|
289
215
|
end
|
@@ -347,7 +273,6 @@ module Sequel
|
|
347
273
|
self << create_trigger_sql(table, name, function, opts)
|
348
274
|
end
|
349
275
|
|
350
|
-
# PostgreSQL uses the :postgres database type.
|
351
276
|
def database_type
|
352
277
|
:postgres
|
353
278
|
end
|
@@ -575,14 +500,6 @@ module Sequel
|
|
575
500
|
run "REFRESH MATERIALIZED VIEW#{' CONCURRENTLY' if opts[:concurrently]} #{quote_schema_table(name)}"
|
576
501
|
end
|
577
502
|
|
578
|
-
# SEQUEL5: Remove
|
579
|
-
def reset_conversion_procs
|
580
|
-
Sequel::Deprecation.deprecate('Database#reset_conversion_procs', 'There should no longer be a need to reset conversion procs')
|
581
|
-
@conversion_procs = get_conversion_procs
|
582
|
-
conversion_procs_updated
|
583
|
-
@conversion_procs
|
584
|
-
end
|
585
|
-
|
586
503
|
# Reset the primary key sequence for the given table, basing it on the
|
587
504
|
# maximum current value of the table's primary key.
|
588
505
|
def reset_primary_key_sequence(table)
|
@@ -595,8 +512,6 @@ module Sequel
|
|
595
512
|
get{setval(seq, db[table].select{coalesce(max(pk)+seq_ds.select{:increment_by}, seq_ds.select(:min_value))}, false)}
|
596
513
|
end
|
597
514
|
|
598
|
-
# Rollback an existing prepared transaction with the given transaction
|
599
|
-
# identifier string.
|
600
515
|
def rollback_prepared_transaction(transaction_id, opts=OPTS)
|
601
516
|
run("ROLLBACK PREPARED #{literal(transaction_id)}", opts)
|
602
517
|
end
|
@@ -620,7 +535,6 @@ module Sequel
|
|
620
535
|
0
|
621
536
|
end
|
622
537
|
end
|
623
|
-
Sequel::Deprecation.deprecate('Sequel no longer supports PostgreSQL <8.2, some things may not work.') if @server_version < 80200
|
624
538
|
@server_version
|
625
539
|
end
|
626
540
|
|
@@ -700,10 +614,10 @@ module Sequel
|
|
700
614
|
# Creates a dataset that uses the VALUES clause:
|
701
615
|
#
|
702
616
|
# DB.values([[1, 2], [3, 4]])
|
703
|
-
# VALUES ((1, 2), (3, 4))
|
617
|
+
# # VALUES ((1, 2), (3, 4))
|
704
618
|
#
|
705
619
|
# DB.values([[1, 2], [3, 4]]).order(:column2).limit(1, 1)
|
706
|
-
# VALUES ((1, 2), (3, 4)) ORDER BY column2 LIMIT 1 OFFSET 1
|
620
|
+
# # VALUES ((1, 2), (3, 4)) ORDER BY column2 LIMIT 1 OFFSET 1
|
707
621
|
def values(v)
|
708
622
|
@default_dataset.clone(:values=>v)
|
709
623
|
end
|
@@ -723,21 +637,10 @@ module Sequel
|
|
723
637
|
|
724
638
|
private
|
725
639
|
|
726
|
-
# SEQUEL5: Remove
|
727
|
-
def add_named_conversion_procs(procs, named_procs)
|
728
|
-
unless (named_procs).empty?
|
729
|
-
convert_named_procs_to_procs(named_procs).each do |oid, pr|
|
730
|
-
procs[oid] ||= pr
|
731
|
-
end
|
732
|
-
conversion_procs_updated
|
733
|
-
end
|
734
|
-
end
|
735
|
-
|
736
640
|
def alter_table_add_column_sql(table, op)
|
737
641
|
"ADD COLUMN#{' IF NOT EXISTS' if op[:if_not_exists]} #{column_definition_sql(op)}"
|
738
642
|
end
|
739
643
|
|
740
|
-
# Use a PostgreSQL-specific alter table generator
|
741
644
|
def alter_table_generator_class
|
742
645
|
Postgres::AlterTableGenerator
|
743
646
|
end
|
@@ -821,14 +724,14 @@ module Sequel
|
|
821
724
|
(super || op[:op] == :validate_constraint) && op[:op] != :rename_column
|
822
725
|
end
|
823
726
|
|
824
|
-
VALID_CLIENT_MIN_MESSAGES = %w'DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC'.freeze
|
727
|
+
VALID_CLIENT_MIN_MESSAGES = %w'DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC'.freeze.each(&:freeze)
|
825
728
|
# The SQL queries to execute when starting a new connection.
|
826
729
|
def connection_configuration_sqls
|
827
730
|
sqls = []
|
828
731
|
|
829
|
-
sqls << "SET standard_conforming_strings = ON" if typecast_value_boolean(@opts.fetch(:force_standard_strings,
|
732
|
+
sqls << "SET standard_conforming_strings = ON" if typecast_value_boolean(@opts.fetch(:force_standard_strings, true))
|
830
733
|
|
831
|
-
cmm = @opts.fetch(:client_min_messages,
|
734
|
+
cmm = @opts.fetch(:client_min_messages, :warning)
|
832
735
|
if cmm && !cmm.to_s.empty?
|
833
736
|
cmm = cmm.to_s.upcase.strip
|
834
737
|
unless VALID_CLIENT_MIN_MESSAGES.include?(cmm)
|
@@ -872,34 +775,6 @@ module Sequel
|
|
872
775
|
end
|
873
776
|
end
|
874
777
|
|
875
|
-
# SEQUEL5: Remove
|
876
|
-
def conversion_procs_updated
|
877
|
-
nil
|
878
|
-
end
|
879
|
-
|
880
|
-
# SEQUEL5: Remove
|
881
|
-
def convert_named_procs_to_procs(named_procs)
|
882
|
-
h = {}
|
883
|
-
from(:pg_type).where(:typtype=>['b', 'e'], :typname=>named_procs.keys.map(&:to_s)).select_map([:oid, :typname]).each do |oid, name|
|
884
|
-
h[oid.to_i] = named_procs[name.untaint.to_sym]
|
885
|
-
end
|
886
|
-
h
|
887
|
-
end
|
888
|
-
|
889
|
-
# SEQUEL5: Remove
|
890
|
-
def copy_conversion_procs(oids)
|
891
|
-
Sequel::Deprecation.deprecate("Database#copy_conversion_procs", "There is no reason to use this anymore")
|
892
|
-
procs = conversion_procs
|
893
|
-
oids.each do |oid|
|
894
|
-
procs[oid] = PG__TYPES[oid]
|
895
|
-
end
|
896
|
-
conversion_procs_updated
|
897
|
-
end
|
898
|
-
|
899
|
-
EXCLUSION_CONSTRAINT_SQL_STATE = '23P01'.freeze
|
900
|
-
Sequel::Deprecation.deprecate_constant(self, :EXCLUSION_CONSTRAINT_SQL_STATE)
|
901
|
-
DEADLOCK_SQL_STATE = '40P01'.freeze
|
902
|
-
Sequel::Deprecation.deprecate_constant(self, :DEADLOCK_SQL_STATE)
|
903
778
|
def database_specific_error_class_from_sqlstate(sqlstate)
|
904
779
|
if sqlstate == '23P01'
|
905
780
|
ExclusionConstraintViolation
|
@@ -1041,7 +916,6 @@ module Sequel
|
|
1041
916
|
result += " AS #{sql}"
|
1042
917
|
end
|
1043
918
|
|
1044
|
-
# Use a PostgreSQL-specific create table generator
|
1045
919
|
def create_table_generator_class
|
1046
920
|
Postgres::CreateTableGenerator
|
1047
921
|
end
|
@@ -1098,8 +972,8 @@ module Sequel
|
|
1098
972
|
"DROP #{'MATERIALIZED ' if opts[:materialized]}VIEW#{' IF EXISTS' if opts[:if_exists]} #{quote_schema_table(name)}#{' CASCADE' if opts[:cascade]}"
|
1099
973
|
end
|
1100
974
|
|
1101
|
-
# If opts includes a :schema option,
|
1102
|
-
#
|
975
|
+
# If opts includes a :schema option, use it, otherwise restrict the filter to only the
|
976
|
+
# currently visible schemas.
|
1103
977
|
def filter_schema(ds, opts)
|
1104
978
|
expr = if schema = opts[:schema]
|
1105
979
|
schema.to_s
|
@@ -1109,18 +983,6 @@ module Sequel
|
|
1109
983
|
ds.where{{pg_namespace[:nspname]=>expr}}
|
1110
984
|
end
|
1111
985
|
|
1112
|
-
# SEQUEL5: Remove
|
1113
|
-
def get_conversion_procs
|
1114
|
-
procs = PG__TYPES.dup
|
1115
|
-
procs[1184] = procs[1114] = method(:to_application_timestamp)
|
1116
|
-
unless PG_NAMED__TYPES.empty?
|
1117
|
-
Sequel::Deprecation.deprecate("Sequel::PG_NAMED_TYPES", "Call Database#add_named_conversion_proc directly for each Database instance where you want to support the following type(s): #{PG_NAMED__TYPES.keys.join(', ')}")
|
1118
|
-
end
|
1119
|
-
add_named_conversion_procs(procs, PG_NAMED__TYPES)
|
1120
|
-
procs
|
1121
|
-
end
|
1122
|
-
|
1123
|
-
# PostgreSQL specific index SQL.
|
1124
986
|
def index_definition_sql(table_name, index)
|
1125
987
|
cols = index[:columns]
|
1126
988
|
index_name = index[:name] || default_index_name(table_name, cols)
|
@@ -1129,6 +991,7 @@ module Sequel
|
|
1129
991
|
else
|
1130
992
|
literal(Array(cols))
|
1131
993
|
end
|
994
|
+
if_not_exists = " IF NOT EXISTS" if index[:if_not_exists]
|
1132
995
|
unique = "UNIQUE " if index[:unique]
|
1133
996
|
index_type = index[:type]
|
1134
997
|
filter = index[:where] || index[:filter]
|
@@ -1140,7 +1003,7 @@ module Sequel
|
|
1140
1003
|
when :spatial
|
1141
1004
|
index_type = :gist
|
1142
1005
|
end
|
1143
|
-
"CREATE #{unique}INDEX#{' CONCURRENTLY' if index[:concurrently]} #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{"USING #{index_type} " if index_type}#{expr}#{filter}"
|
1006
|
+
"CREATE #{unique}INDEX#{' CONCURRENTLY' if index[:concurrently]}#{if_not_exists} #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{"USING #{index_type} " if index_type}#{expr}#{filter}"
|
1144
1007
|
end
|
1145
1008
|
|
1146
1009
|
# Setup datastructures shared by all postgres adapters.
|
@@ -1148,10 +1011,8 @@ module Sequel
|
|
1148
1011
|
@primary_keys = {}
|
1149
1012
|
@primary_key_sequences = {}
|
1150
1013
|
@supported_types = {}
|
1151
|
-
@conversion_procs =
|
1152
|
-
|
1153
|
-
# @conversion_procs = CONVERSION_PROCS.dup # SEQUEL5
|
1154
|
-
# procs[1184] = procs[1114] = method(:to_application_timestamp) # SEQUEL5
|
1014
|
+
procs = @conversion_procs = CONVERSION_PROCS.dup
|
1015
|
+
procs[1184] = procs[1114] = method(:to_application_timestamp)
|
1155
1016
|
end
|
1156
1017
|
|
1157
1018
|
# Backbone of the tables and views support.
|
@@ -1168,8 +1029,7 @@ module Sequel
|
|
1168
1029
|
end
|
1169
1030
|
end
|
1170
1031
|
|
1171
|
-
# Use a dollar sign instead of question mark for the argument
|
1172
|
-
# placeholder.
|
1032
|
+
# Use a dollar sign instead of question mark for the argument placeholder.
|
1173
1033
|
def prepared_arg_placeholder
|
1174
1034
|
PREPARED_ARG_PLACEHOLDER
|
1175
1035
|
end
|
@@ -1196,8 +1056,7 @@ module Sequel
|
|
1196
1056
|
Sequel.cast(expr.to_s,:regclass).cast(:oid)
|
1197
1057
|
end
|
1198
1058
|
|
1199
|
-
# Remove the cached entries for primary keys and sequences when a table is
|
1200
|
-
# changed.
|
1059
|
+
# Remove the cached entries for primary keys and sequences when a table is changed.
|
1201
1060
|
def remove_cached_schema(table)
|
1202
1061
|
tab = quote_schema_table(table)
|
1203
1062
|
Sequel.synchronize do
|
@@ -1213,7 +1072,6 @@ module Sequel
|
|
1213
1072
|
"ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_identifier(schema_and_table(new_name).last)}"
|
1214
1073
|
end
|
1215
1074
|
|
1216
|
-
# Recognize PostgreSQL interval type.
|
1217
1075
|
def schema_column_type(db_type)
|
1218
1076
|
case db_type
|
1219
1077
|
when /\Ainterval\z/io
|
@@ -1315,7 +1173,7 @@ module Sequel
|
|
1315
1173
|
# PostgreSQL prefers the text datatype. If a fixed size is requested,
|
1316
1174
|
# the char type is used. If the text type is specifically
|
1317
1175
|
# disallowed or there is a size specified, use the varchar type.
|
1318
|
-
# Otherwise use the
|
1176
|
+
# Otherwise use the text type.
|
1319
1177
|
def type_literal_generic_string(column)
|
1320
1178
|
if column[:fixed]
|
1321
1179
|
"char(#{column[:size]||255})"
|
@@ -1332,85 +1190,11 @@ module Sequel
|
|
1332
1190
|
end
|
1333
1191
|
end
|
1334
1192
|
|
1335
|
-
# Instance methods for datasets that connect to a PostgreSQL database.
|
1336
1193
|
module DatasetMethods
|
1337
1194
|
include UnmodifiedIdentifiers::DatasetMethods
|
1338
1195
|
|
1339
|
-
ACCESS_SHARE = 'ACCESS SHARE'.freeze
|
1340
|
-
Sequel::Deprecation.deprecate_constant(self, :ACCESS_SHARE)
|
1341
|
-
ACCESS_EXCLUSIVE = 'ACCESS EXCLUSIVE'.freeze
|
1342
|
-
Sequel::Deprecation.deprecate_constant(self, :ACCESS_EXCLUSIVE)
|
1343
|
-
BOOL_FALSE = 'false'.freeze
|
1344
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
1345
|
-
BOOL_TRUE = 'true'.freeze
|
1346
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
1347
|
-
COMMA_SEPARATOR = ', '.freeze
|
1348
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
|
1349
|
-
EXCLUSIVE = 'EXCLUSIVE'.freeze
|
1350
|
-
Sequel::Deprecation.deprecate_constant(self, :EXCLUSIVE)
|
1351
|
-
EXPLAIN = 'EXPLAIN '.freeze
|
1352
|
-
Sequel::Deprecation.deprecate_constant(self, :EXPLAIN)
|
1353
|
-
EXPLAIN_ANALYZE = 'EXPLAIN ANALYZE '.freeze
|
1354
|
-
Sequel::Deprecation.deprecate_constant(self, :EXPLAIN_ANALYZE)
|
1355
|
-
FOR_SHARE = ' FOR SHARE'.freeze
|
1356
|
-
Sequel::Deprecation.deprecate_constant(self, :FOR_SHARE)
|
1357
|
-
PG_TIMESTAMP_FORMAT = "TIMESTAMP '%Y-%m-%d %H:%M:%S".freeze
|
1358
|
-
Sequel::Deprecation.deprecate_constant(self, :PG_TIMESTAMP_FORMAT)
|
1359
|
-
QUERY_PLAN = 'QUERY PLAN'.to_sym
|
1360
|
-
Sequel::Deprecation.deprecate_constant(self, :QUERY_PLAN)
|
1361
|
-
ROW_EXCLUSIVE = 'ROW EXCLUSIVE'.freeze
|
1362
|
-
Sequel::Deprecation.deprecate_constant(self, :ROW_EXCLUSIVE)
|
1363
|
-
ROW_SHARE = 'ROW SHARE'.freeze
|
1364
|
-
Sequel::Deprecation.deprecate_constant(self, :ROW_SHARE)
|
1365
|
-
SHARE = 'SHARE'.freeze
|
1366
|
-
Sequel::Deprecation.deprecate_constant(self, :SHARE)
|
1367
|
-
SHARE_ROW_EXCLUSIVE = 'SHARE ROW EXCLUSIVE'.freeze
|
1368
|
-
Sequel::Deprecation.deprecate_constant(self, :SHARE_ROW_EXCLUSIVE)
|
1369
|
-
SHARE_UPDATE_EXCLUSIVE = 'SHARE UPDATE EXCLUSIVE'.freeze
|
1370
|
-
Sequel::Deprecation.deprecate_constant(self, :SHARE_UPDATE_EXCLUSIVE)
|
1371
|
-
SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
|
1372
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_WITH_RECURSIVE)
|
1373
|
-
SPACE = ' '.freeze
|
1374
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE)
|
1375
|
-
FROM = ' FROM '.freeze
|
1376
|
-
Sequel::Deprecation.deprecate_constant(self, :FROM)
|
1377
|
-
APOS = "'".freeze
|
1378
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
1379
|
-
APOS_RE = /'/.freeze
|
1380
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
|
1381
|
-
DOUBLE_APOS = "''".freeze
|
1382
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
1383
|
-
PAREN_CLOSE = ')'.freeze
|
1384
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
1385
|
-
PAREN_OPEN = '('.freeze
|
1386
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
|
1387
|
-
COMMA = ', '.freeze
|
1388
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
1389
|
-
ESCAPE = " ESCAPE ".freeze
|
1390
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE)
|
1391
|
-
BACKSLASH = "\\".freeze
|
1392
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
|
1393
|
-
AS = ' AS '.freeze
|
1394
|
-
Sequel::Deprecation.deprecate_constant(self, :AS)
|
1395
|
-
XOR_OP = ' # '.freeze
|
1396
|
-
Sequel::Deprecation.deprecate_constant(self, :XOR_OP)
|
1397
|
-
CRLF = "\r\n".freeze
|
1398
|
-
Sequel::Deprecation.deprecate_constant(self, :CRLF)
|
1399
|
-
BLOB_RE = /[\000-\037\047\134\177-\377]/n.freeze
|
1400
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_RE)
|
1401
|
-
WINDOW = " WINDOW ".freeze
|
1402
|
-
Sequel::Deprecation.deprecate_constant(self, :WINDOW)
|
1403
|
-
SELECT_VALUES = "VALUES ".freeze
|
1404
|
-
Sequel::Deprecation.deprecate_constant(self, :SELECT_VALUES)
|
1405
|
-
EMPTY_STRING = ''.freeze
|
1406
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_STRING)
|
1407
|
-
SKIP_LOCKED = " SKIP LOCKED".freeze
|
1408
|
-
Sequel::Deprecation.deprecate_constant(self, :SKIP_LOCKED)
|
1409
|
-
NON_SQL_OPTIONS = (Dataset::NON_SQL_OPTIONS + [:cursor, :insert_conflict]).freeze
|
1410
|
-
Sequel::Deprecation.deprecate_constant(self, :NON_SQL_OPTIONS)
|
1411
|
-
|
1412
1196
|
NULL = LiteralString.new('NULL').freeze
|
1413
|
-
LOCK_MODES = ['ACCESS SHARE', 'ROW SHARE', 'ROW EXCLUSIVE', 'SHARE UPDATE EXCLUSIVE', 'SHARE', 'SHARE ROW EXCLUSIVE', 'EXCLUSIVE', 'ACCESS EXCLUSIVE'].each(&:freeze)
|
1197
|
+
LOCK_MODES = ['ACCESS SHARE', 'ROW SHARE', 'ROW EXCLUSIVE', 'SHARE UPDATE EXCLUSIVE', 'SHARE', 'SHARE ROW EXCLUSIVE', 'EXCLUSIVE', 'ACCESS EXCLUSIVE'].each(&:freeze).freeze
|
1414
1198
|
|
1415
1199
|
Dataset.def_sql_method(self, :delete, [['if server_version >= 90100', %w'with delete from using where returning'], ['else', %w'delete from using where returning']])
|
1416
1200
|
Dataset.def_sql_method(self, :insert, [['if server_version >= 90500', %w'with insert into columns values conflict returning'], ['elsif server_version >= 90100', %w'with insert into columns values returning'], ['else', %w'insert into columns values returning']])
|
@@ -1561,28 +1345,28 @@ module Sequel
|
|
1561
1345
|
#
|
1562
1346
|
# Examples:
|
1563
1347
|
#
|
1564
|
-
# DB[:table].insert_conflict.insert(:
|
1348
|
+
# DB[:table].insert_conflict.insert(a: 1, b: 2)
|
1565
1349
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1566
1350
|
# # ON CONFLICT DO NOTHING
|
1567
1351
|
#
|
1568
|
-
# DB[:table].insert_conflict(:
|
1352
|
+
# DB[:table].insert_conflict(constraint: :table_a_uidx).insert(a: 1, b: 2)
|
1569
1353
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1570
1354
|
# # ON CONFLICT ON CONSTRAINT table_a_uidx DO NOTHING
|
1571
1355
|
#
|
1572
|
-
# DB[:table].insert_conflict(:
|
1356
|
+
# DB[:table].insert_conflict(target: :a).insert(a: 1, b: 2)
|
1573
1357
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1574
1358
|
# # ON CONFLICT (a) DO NOTHING
|
1575
1359
|
#
|
1576
|
-
# DB[:table].insert_conflict(:
|
1360
|
+
# DB[:table].insert_conflict(target: :a, conflict_where: {c: true}).insert(a: 1, b: 2)
|
1577
1361
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1578
1362
|
# # ON CONFLICT (a) WHERE (c IS TRUE) DO NOTHING
|
1579
1363
|
#
|
1580
|
-
# DB[:table].insert_conflict(:
|
1364
|
+
# DB[:table].insert_conflict(target: :a, update: {b: Sequel[:excluded][:b]}).insert(a: 1, b: 2)
|
1581
1365
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1582
1366
|
# # ON CONFLICT (a) DO UPDATE SET b = excluded.b
|
1583
1367
|
#
|
1584
|
-
# DB[:table].insert_conflict(:
|
1585
|
-
# :
|
1368
|
+
# DB[:table].insert_conflict(constraint: :table_a_uidx,
|
1369
|
+
# update: {b: Sequel[:excluded][:b]}, update_where: {Sequel[:table][:status_id] => 1}).insert(a: 1, b: 2)
|
1586
1370
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1587
1371
|
# # ON CONFLICT ON CONSTRAINT table_a_uidx
|
1588
1372
|
# # DO UPDATE SET b = excluded.b WHERE (table.status_id = 1)
|
@@ -1593,7 +1377,7 @@ module Sequel
|
|
1593
1377
|
# Ignore uniqueness/exclusion violations when inserting, using ON CONFLICT DO NOTHING.
|
1594
1378
|
# Exists mostly for compatibility to MySQL's insert_ignore. Example:
|
1595
1379
|
#
|
1596
|
-
# DB[:table].insert_ignore.insert(:
|
1380
|
+
# DB[:table].insert_ignore.insert(a: 1, b: 2)
|
1597
1381
|
# # INSERT INTO TABLE (a, b) VALUES (1, 2)
|
1598
1382
|
# # ON CONFLICT DO NOTHING
|
1599
1383
|
def insert_ignore
|
@@ -1616,7 +1400,7 @@ module Sequel
|
|
1616
1400
|
|
1617
1401
|
# Locks all tables in the dataset's FROM clause (but not in JOINs) with
|
1618
1402
|
# the specified mode (e.g. 'EXCLUSIVE'). If a block is given, starts
|
1619
|
-
# a new transaction, locks the table, and yields. If a block is not given
|
1403
|
+
# a new transaction, locks the table, and yields. If a block is not given,
|
1620
1404
|
# just locks the tables. Note that PostgreSQL will probably raise an error
|
1621
1405
|
# if you lock the table outside of an existing transaction. Returns nil.
|
1622
1406
|
def lock(mode, opts=OPTS)
|
@@ -1679,7 +1463,7 @@ module Sequel
|
|
1679
1463
|
server_version >= 90500
|
1680
1464
|
end
|
1681
1465
|
|
1682
|
-
# PostgreSQL 9.
|
1466
|
+
# PostgreSQL 9.3+ supports lateral subqueries
|
1683
1467
|
def supports_lateral_subqueries?
|
1684
1468
|
server_version >= 90300
|
1685
1469
|
end
|
@@ -1725,10 +1509,11 @@ module Sequel
|
|
1725
1509
|
# :only and :restart only work correctly on PostgreSQL 8.4+.
|
1726
1510
|
#
|
1727
1511
|
# Usage:
|
1728
|
-
# DB[:table].truncate
|
1729
|
-
# #
|
1730
|
-
#
|
1731
|
-
#
|
1512
|
+
# DB[:table].truncate
|
1513
|
+
# # TRUNCATE TABLE "table"
|
1514
|
+
#
|
1515
|
+
# DB[:table].truncate(cascade: true, only: true, restart: true)
|
1516
|
+
# # TRUNCATE TABLE ONLY "table" RESTART IDENTITY CASCADE
|
1732
1517
|
def truncate(opts = OPTS)
|
1733
1518
|
if opts.empty?
|
1734
1519
|
super()
|