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
@@ -30,7 +30,7 @@
|
|
30
30
|
# Since the hstore type only supports strings, non string keys and
|
31
31
|
# values are converted to strings
|
32
32
|
#
|
33
|
-
# Sequel.hstore(:
|
33
|
+
# Sequel.hstore(foo: 1).to_hash # {'foo'=>'1'}
|
34
34
|
# v = Sequel.hstore({})
|
35
35
|
# v[:foo] = 1
|
36
36
|
# v # {'foo'=>'1'}
|
@@ -68,7 +68,7 @@
|
|
68
68
|
#
|
69
69
|
# If you want to insert a hash into an hstore database column:
|
70
70
|
#
|
71
|
-
# DB[:table].insert(:
|
71
|
+
# DB[:table].insert(column: Sequel.hstore('foo'=>'bar'))
|
72
72
|
#
|
73
73
|
# To use this extension, first load it into your Sequel::Database instance:
|
74
74
|
#
|
@@ -91,21 +91,6 @@ module Sequel
|
|
91
91
|
|
92
92
|
# Parser for PostgreSQL hstore output format.
|
93
93
|
class Parser < StringScanner
|
94
|
-
QUOTE_RE = /"/.freeze
|
95
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTE_RE)
|
96
|
-
KV_SEP_RE = /"\s*=>\s*/.freeze
|
97
|
-
Sequel::Deprecation.deprecate_constant(self, :KV_SEP_RE)
|
98
|
-
NULL_RE = /NULL/.freeze
|
99
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL_RE)
|
100
|
-
SEP_RE = /,\s*/.freeze
|
101
|
-
Sequel::Deprecation.deprecate_constant(self, :SEP_RE)
|
102
|
-
QUOTED_RE = /(\\"|[^"])*/.freeze
|
103
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTED_RE)
|
104
|
-
REPLACE_RE = /\\(.)/.freeze
|
105
|
-
Sequel::Deprecation.deprecate_constant(self, :REPLACE_RE)
|
106
|
-
REPLACE_WITH = '\1'.freeze
|
107
|
-
Sequel::Deprecation.deprecate_constant(self, :REPLACE_WITH)
|
108
|
-
|
109
94
|
# Parse the output format that PostgreSQL uses for hstore
|
110
95
|
# columns. Note that this does not attempt to parse all
|
111
96
|
# input formats that PostgreSQL will accept. For instance,
|
@@ -144,7 +129,7 @@ module Sequel
|
|
144
129
|
|
145
130
|
module DatabaseMethods
|
146
131
|
def self.extended(db)
|
147
|
-
db.
|
132
|
+
db.instance_exec do
|
148
133
|
add_named_conversion_proc(:hstore, &HStore.method(:parse))
|
149
134
|
@schema_type_classes[:hstore] = HStore
|
150
135
|
end
|
@@ -162,13 +147,6 @@ module Sequel
|
|
162
147
|
end
|
163
148
|
end
|
164
149
|
|
165
|
-
# SEQUEL5: Remove
|
166
|
-
def reset_conversion_procs
|
167
|
-
procs = super
|
168
|
-
add_named_conversion_proc(:hstore, &HStore.method(:parse))
|
169
|
-
procs
|
170
|
-
end
|
171
|
-
|
172
150
|
private
|
173
151
|
|
174
152
|
# Recognize the hstore database type.
|
@@ -198,29 +176,12 @@ module Sequel
|
|
198
176
|
# keys to strings during lookup.
|
199
177
|
DEFAULT_PROC = lambda{|h, k| h[k.to_s] unless k.is_a?(String)}
|
200
178
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
NULL = "NULL".freeze
|
208
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL)
|
209
|
-
ESCAPE_RE = /("|\\)/.freeze
|
210
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
|
211
|
-
ESCAPE_REPLACE = '\\\\\1'.freeze
|
212
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACE)
|
213
|
-
HSTORE_CAST = '::hstore'.freeze
|
214
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTORE_CAST)
|
215
|
-
|
216
|
-
if RUBY_VERSION >= '1.9'
|
217
|
-
# Undef 1.9 marshal_{dump,load} methods in the delegate class,
|
218
|
-
# so that ruby 1.9 uses the old style _dump/_load methods defined
|
219
|
-
# in the delegate class, instead of the marshal_{dump,load} methods
|
220
|
-
# in the Hash class.
|
221
|
-
undef_method :marshal_load
|
222
|
-
undef_method :marshal_dump
|
223
|
-
end
|
179
|
+
# Undef marshal_{dump,load} methods in the delegate class,
|
180
|
+
# so that ruby uses the old style _dump/_load methods defined
|
181
|
+
# in the delegate class, instead of the marshal_{dump,load} methods
|
182
|
+
# in the Hash class.
|
183
|
+
undef_method :marshal_load
|
184
|
+
undef_method :marshal_dump
|
224
185
|
|
225
186
|
# Use custom marshal loading, since underlying hash uses a default proc.
|
226
187
|
def self._load(args)
|
@@ -234,12 +195,12 @@ module Sequel
|
|
234
195
|
end
|
235
196
|
|
236
197
|
# Override methods that accept key argument to convert to string.
|
237
|
-
|
198
|
+
%w'[] delete has_key? include? key? member? assoc'.each do |m|
|
238
199
|
class_eval("def #{m}(k) super(k.to_s) end", __FILE__, __LINE__)
|
239
200
|
end
|
240
201
|
|
241
202
|
# Override methods that accept value argument to convert to string unless nil.
|
242
|
-
|
203
|
+
%w'has_value? value? key rassoc'.each do |m|
|
243
204
|
class_eval("def #{m}(v) super(convert_value(v)) end", __FILE__, __LINE__)
|
244
205
|
end
|
245
206
|
|
@@ -57,10 +57,10 @@
|
|
57
57
|
# Here are a couple examples for updating an existing hstore column:
|
58
58
|
#
|
59
59
|
# # Add a key, or update an existing key with a new value
|
60
|
-
# DB[:tab].update(:
|
60
|
+
# DB[:tab].update(h: Sequel.hstore_op(:h).concat('c'=>3))
|
61
61
|
#
|
62
62
|
# # Delete a key
|
63
|
-
# DB[:tab].update(:
|
63
|
+
# DB[:tab].update(h: Sequel.hstore_op(:h).delete('k1'))
|
64
64
|
#
|
65
65
|
# See the PostgreSQL hstore function and operator documentation for more
|
66
66
|
# details on what these functions and operators do.
|
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
# This extension integrates with Sequel's native postgres and jdbc/postgresql
|
7
7
|
# adapters, so that when inet/cidr fields are retrieved, they are returned as
|
8
|
-
# IPAddr instances
|
8
|
+
# IPAddr instances.
|
9
9
|
#
|
10
10
|
# To use this extension, load it into your database:
|
11
11
|
#
|
@@ -29,7 +29,6 @@
|
|
29
29
|
# Related module: Sequel::Postgres::InetDatabaseMethods
|
30
30
|
|
31
31
|
require 'ipaddr'
|
32
|
-
Sequel.require 'adapters/shared/postgres'
|
33
32
|
|
34
33
|
module Sequel
|
35
34
|
module Postgres
|
@@ -39,7 +38,7 @@ module Sequel
|
|
39
38
|
# it will pick up the inet/cidr converter. Also, extend the datasets
|
40
39
|
# with support for literalizing the IPAddr types.
|
41
40
|
def self.extended(db)
|
42
|
-
db.
|
41
|
+
db.instance_exec do
|
43
42
|
extend_datasets(InetDatasetMethods)
|
44
43
|
meth = IPAddr.method(:new)
|
45
44
|
add_conversion_proc(869, meth)
|
@@ -112,18 +111,6 @@ module Sequel
|
|
112
111
|
end
|
113
112
|
end
|
114
113
|
end
|
115
|
-
|
116
|
-
# SEQUEL5: Remove
|
117
|
-
meth = IPAddr.method(:new)
|
118
|
-
PG__TYPES[869] = PG__TYPES[650] = lambda do |s|
|
119
|
-
Sequel::Deprecation.deprecate("Conversion proc for inet/cidr added globally by pg_inet extension", "Load the pg_inet extension into the Database instance")
|
120
|
-
IPAddr.new(s)
|
121
|
-
end
|
122
|
-
if defined?(PGArray) && PGArray.respond_to?(:register)
|
123
|
-
PGArray.register('inet', :oid=>1041, :scalar_oid=>869, :skip_deprecation_warning=>true)
|
124
|
-
PGArray.register('cidr', :oid=>651, :scalar_oid=>650, :skip_deprecation_warning=>true)
|
125
|
-
PGArray.register('macaddr', :oid=>1040, :skip_deprecation_warning=>true)
|
126
|
-
end
|
127
114
|
end
|
128
115
|
|
129
116
|
Database.register_extension(:pg_inet, Postgres::InetDatabaseMethods)
|
@@ -33,13 +33,10 @@
|
|
33
33
|
# Related module: Sequel::Postgres::IntervalDatabaseMethods
|
34
34
|
|
35
35
|
require 'active_support/duration'
|
36
|
-
Sequel.require 'adapters/shared/postgres'
|
37
36
|
|
38
37
|
module Sequel
|
39
38
|
module Postgres
|
40
39
|
module IntervalDatabaseMethods
|
41
|
-
EMPTY_INTERVAL = '0'.freeze
|
42
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_INTERVAL)
|
43
40
|
DURATION_UNITS = [:years, :months, :weeks, :days, :hours, :minutes, :seconds].freeze
|
44
41
|
|
45
42
|
# Return an unquoted string version of the duration object suitable for
|
@@ -64,10 +61,6 @@ module Sequel
|
|
64
61
|
|
65
62
|
# Creates callable objects that convert strings into ActiveSupport::Duration instances.
|
66
63
|
class Parser
|
67
|
-
# Regexp that parses the full range of PostgreSQL interval type output.
|
68
|
-
PARSER = /\A([+-]?\d+ years?\s?)?([+-]?\d+ mons?\s?)?([+-]?\d+ days?\s?)?(?:(?:([+-])?(\d{2,10}):(\d\d):(\d\d(\.\d+)?))|([+-]?\d+ hours?\s?)?([+-]?\d+ mins?\s?)?([+-]?\d+(\.\d+)? secs?\s?)?)?\z/
|
69
|
-
Sequel::Deprecation.deprecate_constant(self, :PARSER)
|
70
|
-
|
71
64
|
# Parse the interval input string into an ActiveSupport::Duration instance.
|
72
65
|
def call(string)
|
73
66
|
raise(InvalidValue, "invalid or unhandled interval format: #{string.inspect}") unless matches = /\A([+-]?\d+ years?\s?)?([+-]?\d+ mons?\s?)?([+-]?\d+ days?\s?)?(?:(?:([+-])?(\d{2,10}):(\d\d):(\d\d(\.\d+)?))|([+-]?\d+ hours?\s?)?([+-]?\d+ mins?\s?)?([+-]?\d+(\.\d+)? secs?\s?)?)?\z/.match(string)
|
@@ -121,7 +114,7 @@ module Sequel
|
|
121
114
|
# Reset the conversion procs if using the native postgres adapter,
|
122
115
|
# and extend the datasets to correctly literalize ActiveSupport::Duration values.
|
123
116
|
def self.extended(db)
|
124
|
-
db.
|
117
|
+
db.instance_exec do
|
125
118
|
extend_datasets(IntervalDatasetMethods)
|
126
119
|
add_conversion_proc(1186, Postgres::IntervalDatabaseMethods::PARSER)
|
127
120
|
if respond_to?(:register_array_type)
|
@@ -175,9 +168,6 @@ module Sequel
|
|
175
168
|
end
|
176
169
|
|
177
170
|
module IntervalDatasetMethods
|
178
|
-
CAST_INTERVAL = '::interval'.freeze
|
179
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_INTERVAL)
|
180
|
-
|
181
171
|
# Handle literalization of ActiveSupport::Duration objects, treating them as
|
182
172
|
# PostgreSQL intervals.
|
183
173
|
def literal_other_append(sql, v)
|
@@ -190,15 +180,6 @@ module Sequel
|
|
190
180
|
end
|
191
181
|
end
|
192
182
|
end
|
193
|
-
|
194
|
-
# SEQUEL5: Remove
|
195
|
-
PG__TYPES[1186] = lambda do |s|
|
196
|
-
Sequel::Deprecation.deprecate("Conversion proc for interval added globally by pg_interval extension", "Load the pg_interval extension into the Database instance")
|
197
|
-
Postgres::IntervalDatabaseMethods::PARSER.call(s)
|
198
|
-
end
|
199
|
-
if defined?(PGArray) && PGArray.respond_to?(:register)
|
200
|
-
PGArray.register('interval', :oid=>1187, :scalar_oid=>1186, :skip_deprecation_warning=>true)
|
201
|
-
end
|
202
183
|
end
|
203
184
|
|
204
185
|
Database.register_extension(:pg_interval, Postgres::IntervalDatabaseMethods)
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# PostgreSQL json values that are not arrays or objects, but support
|
9
9
|
# is fairly limited and the values do not roundtrip.
|
10
10
|
#
|
11
|
-
# This extension integrates with Sequel's native postgres
|
11
|
+
# This extension integrates with Sequel's native postgres and jdbc/postgresql adapters, so
|
12
12
|
# that when json fields are retrieved, they are parsed and returned
|
13
13
|
# as instances of Sequel::Postgres::JSONArray or
|
14
14
|
# Sequel::Postgres::JSONHash (or JSONBArray or JSONBHash for jsonb
|
@@ -35,8 +35,8 @@
|
|
35
35
|
#
|
36
36
|
# So if you want to insert an array or hash into an json database column:
|
37
37
|
#
|
38
|
-
# DB[:table].insert(:
|
39
|
-
# DB[:table].insert(:
|
38
|
+
# DB[:table].insert(column: Sequel.pg_json([1, 2, 3]))
|
39
|
+
# DB[:table].insert(column: Sequel.pg_json({'a'=>1, 'b'=>2}))
|
40
40
|
#
|
41
41
|
# To use this extension, please load it into the Database instance:
|
42
42
|
#
|
@@ -62,15 +62,9 @@
|
|
62
62
|
|
63
63
|
require 'delegate'
|
64
64
|
require 'json'
|
65
|
-
Sequel.require 'adapters/shared/postgres'
|
66
65
|
|
67
66
|
module Sequel
|
68
67
|
module Postgres
|
69
|
-
CAST_JSON = '::json'.freeze
|
70
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_JSON)
|
71
|
-
CAST_JSONB = '::jsonb'.freeze
|
72
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_JSONB)
|
73
|
-
|
74
68
|
# Class representing PostgreSQL JSON/JSONB column array values.
|
75
69
|
class JSONArrayBase < DelegateClass(Array)
|
76
70
|
include Sequel::SQL::AliasMethods
|
@@ -133,7 +127,7 @@ module Sequel
|
|
133
127
|
# Methods enabling Database object integration with the json type.
|
134
128
|
module JSONDatabaseMethods
|
135
129
|
def self.extended(db)
|
136
|
-
db.
|
130
|
+
db.instance_exec do
|
137
131
|
add_conversion_proc(114, JSONDatabaseMethods.method(:db_parse_json))
|
138
132
|
add_conversion_proc(3802, JSONDatabaseMethods.method(:db_parse_jsonb))
|
139
133
|
if respond_to?(:register_array_type)
|
@@ -186,7 +180,7 @@ module Sequel
|
|
186
180
|
end
|
187
181
|
end
|
188
182
|
|
189
|
-
# Handle
|
183
|
+
# Handle json and jsonb types in bound variables
|
190
184
|
def bound_variable_arg(arg, conn)
|
191
185
|
case arg
|
192
186
|
when JSONArrayBase, JSONHashBase
|
@@ -198,7 +192,7 @@ module Sequel
|
|
198
192
|
|
199
193
|
private
|
200
194
|
|
201
|
-
# Handle json[] types in bound variables.
|
195
|
+
# Handle json[] and jsonb[] types in bound variables.
|
202
196
|
def bound_variable_array(a)
|
203
197
|
case a
|
204
198
|
when JSONHashBase, JSONArrayBase
|
@@ -208,7 +202,7 @@ module Sequel
|
|
208
202
|
end
|
209
203
|
end
|
210
204
|
|
211
|
-
# Make the column type detection recognize the json
|
205
|
+
# Make the column type detection recognize the json types.
|
212
206
|
def schema_column_type(db_type)
|
213
207
|
case db_type
|
214
208
|
when 'json'
|
@@ -260,20 +254,6 @@ module Sequel
|
|
260
254
|
end
|
261
255
|
end
|
262
256
|
end
|
263
|
-
|
264
|
-
# SEQUEL5: Remove
|
265
|
-
PG__TYPES[114] = lambda do |s|
|
266
|
-
Sequel::Deprecation.deprecate("Conversion proc for json added globally by pg_json extension", "Load the pg_json extension into the Database instance")
|
267
|
-
JSONDatabaseMethods.db_parse_json(s)
|
268
|
-
end
|
269
|
-
PG__TYPES[3802] = lambda do |s|
|
270
|
-
Sequel::Deprecation.deprecate("Conversion proc for jsonb added globally by pg_json extension", "Load the pg_json extension into the Database instance")
|
271
|
-
JSONDatabaseMethods.db_parse_jsonb(s)
|
272
|
-
end
|
273
|
-
if defined?(PGArray) && PGArray.respond_to?(:register)
|
274
|
-
PGArray.register('json', :oid=>199, :scalar_oid=>114, :skip_deprecation_warning=>true)
|
275
|
-
PGArray.register('jsonb', :oid=>3807, :scalar_oid=>3802, :skip_deprecation_warning=>true)
|
276
|
-
end
|
277
257
|
end
|
278
258
|
|
279
259
|
module SQL::Builders
|
@@ -8,7 +8,7 @@
|
|
8
8
|
#
|
9
9
|
# It can also support schema qualified tables:
|
10
10
|
#
|
11
|
-
# DB.loose_count(:
|
11
|
+
# DB.loose_count(Sequel[:schema][:table]) # => 123456
|
12
12
|
#
|
13
13
|
# How accurate this count is depends on the number of rows
|
14
14
|
# added/deleted from the table since the last time it was
|
@@ -70,97 +70,13 @@
|
|
70
70
|
#
|
71
71
|
# Related module: Sequel::Postgres::PGRange
|
72
72
|
|
73
|
-
Sequel.require 'adapters/shared/postgres'
|
74
|
-
|
75
73
|
module Sequel
|
76
74
|
module Postgres
|
77
75
|
class PGRange
|
78
76
|
include Sequel::SQL::AliasMethods
|
79
77
|
|
80
|
-
# SEQUEL5: Remove
|
81
|
-
RANGE_TYPES = {}
|
82
|
-
|
83
|
-
EMPTY = 'empty'.freeze
|
84
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY)
|
85
|
-
EMPTY_STRING = ''.freeze
|
86
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_STRING)
|
87
|
-
COMMA = ','.freeze
|
88
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
89
|
-
QUOTED_EMPTY_STRING = '""'.freeze
|
90
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTED_EMPTY_STRING)
|
91
|
-
OPEN_PAREN = "(".freeze
|
92
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN_PAREN)
|
93
|
-
CLOSE_PAREN = ")".freeze
|
94
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_PAREN)
|
95
|
-
OPEN_BRACKET = "[".freeze
|
96
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN_BRACKET)
|
97
|
-
CLOSE_BRACKET = "]".freeze
|
98
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_BRACKET)
|
99
|
-
ESCAPE_RE = /("|,|\\|\[|\]|\(|\))/.freeze
|
100
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
|
101
|
-
ESCAPE_REPLACE = '\\\\\1'.freeze
|
102
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACE)
|
103
|
-
CAST = '::'.freeze
|
104
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST)
|
105
|
-
|
106
|
-
# SEQUEL5: Remove
|
107
|
-
def self.register(db_type, opts=OPTS, &block)
|
108
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres::PGRange.register", "Use Database#register_range_type on a Database instance using the pg_range extension") unless opts[:skip_deprecation_warning]
|
109
|
-
db_type = db_type.to_s.dup.freeze
|
110
|
-
|
111
|
-
type_procs = opts[:type_procs] || PG__TYPES
|
112
|
-
mod = opts[:typecast_methods_module] || DatabaseMethods
|
113
|
-
typecast_method_map = opts[:typecast_method_map] || RANGE_TYPES
|
114
|
-
|
115
|
-
if converter = opts[:converter]
|
116
|
-
raise Error, "can't provide both a block and :converter option to register" if block
|
117
|
-
else
|
118
|
-
converter = block
|
119
|
-
end
|
120
|
-
|
121
|
-
if soid = opts[:subtype_oid]
|
122
|
-
raise Error, "can't provide both a converter and :subtype_oid option to register" if converter
|
123
|
-
raise Error, "no conversion proc for :subtype_oid=>#{soid.inspect} in PG_TYPES" unless converter = type_procs[soid]
|
124
|
-
end
|
125
|
-
|
126
|
-
parser = Parser.new(db_type, converter)
|
127
|
-
|
128
|
-
typecast_method_map[db_type] = db_type.to_sym
|
129
|
-
|
130
|
-
define_range_typecast_method(mod, db_type, parser)
|
131
|
-
|
132
|
-
if oid = opts[:oid]
|
133
|
-
if opts[:skip_deprecation_warning]
|
134
|
-
def parser.call(s)
|
135
|
-
Sequel::Deprecation.deprecate("Conversion proc for #{db_type} added globally by pg_range extension", "Load the pg_range extension into the Database instance")
|
136
|
-
super
|
137
|
-
end
|
138
|
-
end
|
139
|
-
type_procs[oid] = parser
|
140
|
-
end
|
141
|
-
|
142
|
-
nil
|
143
|
-
end
|
144
|
-
|
145
|
-
# SEQUEL5: Remove
|
146
|
-
def self.define_range_typecast_method(mod, type, parser)
|
147
|
-
mod.class_eval do
|
148
|
-
meth = :"typecast_value_#{type}"
|
149
|
-
define_method(meth){|v| typecast_value_pg_range(v, parser)}
|
150
|
-
private meth
|
151
|
-
end
|
152
|
-
end
|
153
|
-
private_class_method :define_range_typecast_method
|
154
|
-
|
155
78
|
# Creates callable objects that convert strings into PGRange instances.
|
156
79
|
class Parser
|
157
|
-
PARSER = /\A(\[|\()("((?:\\"|[^"])*)"|[^"]*),("((?:\\"|[^"])*)"|[^"]*)(\]|\))\z/
|
158
|
-
Sequel::Deprecation.deprecate_constant(self, :PARSER)
|
159
|
-
REPLACE_RE = /\\(.)/.freeze
|
160
|
-
Sequel::Deprecation.deprecate_constant(self, :REPLACE_RE)
|
161
|
-
REPLACE_WITH = '\1'.freeze
|
162
|
-
Sequel::Deprecation.deprecate_constant(self, :REPLACE_WITH)
|
163
|
-
|
164
80
|
# The database range type for this parser (e.g. 'int4range'),
|
165
81
|
# automatically setting the db_type for the returned PGRange instances.
|
166
82
|
attr_reader :db_type
|
@@ -215,10 +131,10 @@ module Sequel
|
|
215
131
|
end
|
216
132
|
|
217
133
|
module DatabaseMethods
|
218
|
-
#
|
134
|
+
# Add the conversion procs to the database
|
219
135
|
# and extend the datasets to correctly literalize ruby Range values.
|
220
136
|
def self.extended(db)
|
221
|
-
db.
|
137
|
+
db.instance_exec do
|
222
138
|
@pg_range_schema_types ||= {}
|
223
139
|
extend_datasets(DatasetMethods)
|
224
140
|
register_range_type('int4range', :oid=>3904, :subtype_oid=>23)
|
@@ -315,14 +231,13 @@ module Sequel
|
|
315
231
|
|
316
232
|
@pg_range_schema_types[db_type] = db_type.to_sym
|
317
233
|
|
318
|
-
|
234
|
+
singleton_class.class_eval do
|
319
235
|
meth = :"typecast_value_#{db_type}"
|
320
236
|
define_method(meth){|v| typecast_value_pg_range(v, parser)}
|
321
237
|
private meth
|
322
238
|
end
|
323
239
|
|
324
240
|
@schema_type_classes[:"#{opts[:type_symbol] || db_type}"] = PGRange
|
325
|
-
conversion_procs_updated # SEQUEL5: Remove
|
326
241
|
nil
|
327
242
|
end
|
328
243
|
|
@@ -338,23 +253,9 @@ module Sequel
|
|
338
253
|
end
|
339
254
|
end
|
340
255
|
|
341
|
-
# SEQUEL5: Remove
|
342
|
-
def get_conversion_procs
|
343
|
-
procs = super
|
344
|
-
|
345
|
-
procs[3908] = Parser.new("tsrange", procs[1114])
|
346
|
-
procs[3910] = Parser.new("tstzrange", procs[1184])
|
347
|
-
if defined?(PGArray::Creator)
|
348
|
-
procs[3909] = PGArray::Creator.new("tsrange", procs[3908])
|
349
|
-
procs[3911] = PGArray::Creator.new("tstzrange", procs[3910])
|
350
|
-
end
|
351
|
-
|
352
|
-
procs
|
353
|
-
end
|
354
|
-
|
355
256
|
# Recognize the registered database range types.
|
356
257
|
def schema_column_type(db_type)
|
357
|
-
if type = @pg_range_schema_types[db_type]
|
258
|
+
if type = @pg_range_schema_types[db_type]
|
358
259
|
type
|
359
260
|
else
|
360
261
|
super
|
@@ -451,9 +352,9 @@ module Sequel
|
|
451
352
|
def cover?(value)
|
452
353
|
return false if empty?
|
453
354
|
b = self.begin
|
454
|
-
return false if b && b.
|
355
|
+
return false if b && b.public_send(exclude_begin? ? :>= : :>, value)
|
455
356
|
e = self.end
|
456
|
-
return false if e && e.
|
357
|
+
return false if e && e.public_send(exclude_end? ? :<= : :<, value)
|
457
358
|
true
|
458
359
|
end
|
459
360
|
|
@@ -601,22 +502,6 @@ module Sequel
|
|
601
502
|
end
|
602
503
|
end
|
603
504
|
end
|
604
|
-
|
605
|
-
# SEQUEL5: Remove
|
606
|
-
PGRange.register('int4range', :oid=>3904, :subtype_oid=>23, :skip_deprecation_warning=>true)
|
607
|
-
PGRange.register('numrange', :oid=>3906, :subtype_oid=>1700, :skip_deprecation_warning=>true)
|
608
|
-
PGRange.register('tsrange', :oid=>3908, :subtype_oid=>1114, :skip_deprecation_warning=>true)
|
609
|
-
PGRange.register('tstzrange', :oid=>3910, :subtype_oid=>1184, :skip_deprecation_warning=>true)
|
610
|
-
PGRange.register('daterange', :oid=>3912, :subtype_oid=>1082, :skip_deprecation_warning=>true)
|
611
|
-
PGRange.register('int8range', :oid=>3926, :subtype_oid=>20, :skip_deprecation_warning=>true)
|
612
|
-
if defined?(PGArray) && PGArray.respond_to?(:register)
|
613
|
-
PGArray.register('int4range', :oid=>3905, :scalar_oid=>3904, :scalar_typecast=>:int4range, :skip_deprecation_warning=>true)
|
614
|
-
PGArray.register('numrange', :oid=>3907, :scalar_oid=>3906, :scalar_typecast=>:numrange, :skip_deprecation_warning=>true)
|
615
|
-
PGArray.register('tsrange', :oid=>3909, :scalar_oid=>3908, :scalar_typecast=>:tsrange, :skip_deprecation_warning=>true)
|
616
|
-
PGArray.register('tstzrange', :oid=>3911, :scalar_oid=>3910, :scalar_typecast=>:tstzrange, :skip_deprecation_warning=>true)
|
617
|
-
PGArray.register('daterange', :oid=>3913, :scalar_oid=>3912, :scalar_typecast=>:daterange, :skip_deprecation_warning=>true)
|
618
|
-
PGArray.register('int8range', :oid=>3927, :scalar_oid=>3926, :scalar_typecast=>:int8range, :skip_deprecation_warning=>true)
|
619
|
-
end
|
620
505
|
end
|
621
506
|
|
622
507
|
module SQL::Builders
|