sequel 4.49.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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()
|