sequel 4.49.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,86 +1,4 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
|
-
#
|
3
|
-
# The no_auto_literal_strings extension removes Sequel's automatic conversion
|
4
|
-
# of strings to literal strings in the dataset filter methods. By default,
|
5
|
-
# Sequel considers a string passed to a filter method as a literal string:
|
6
|
-
#
|
7
|
-
# DB[:table].where("name > 'A'")
|
8
|
-
#
|
9
|
-
# This is fine, except when the string is derived from user input:
|
10
|
-
#
|
11
|
-
# DB[:table].where("name > '#{params[:user]}'") # SQL Injection!
|
12
|
-
#
|
13
|
-
# Sequel does support using placeholders for such strings:
|
14
|
-
#
|
15
|
-
# DB[:table].where("name > ?", params[:user].to_s) # Safe
|
16
|
-
#
|
17
|
-
# However, if you forget to user placeholders, and pass a string to a filter
|
18
|
-
# method that is derived from user input, you open yourself up to SQL injection.
|
19
|
-
# With this extension, using a plain string in a filter method will result
|
20
|
-
# in an exception being raised. You either need to explicitly use a literal
|
21
|
-
# string:
|
22
|
-
#
|
23
|
-
# DB[:table].where(Sequel.lit("name > ?", params[:user].to_s))
|
24
|
-
#
|
25
|
-
# or you need to construct the same SQL using a non-string based approach:
|
26
|
-
#
|
27
|
-
# DB[:table].where{|o| o.name > params[:user].to_s}
|
28
|
-
#
|
29
|
-
# Note that as listed in Sequel's security guide, a large number of dataset
|
30
|
-
# methods call down to a filtering method, and this protects all of those
|
31
|
-
# cases.
|
32
|
-
#
|
33
|
-
# This extension also protects the use of a plain string passed to Dataset#update:
|
34
|
-
#
|
35
|
-
# DB[:table].update("column = column + 1")
|
36
|
-
#
|
37
|
-
# Again, you either need to explicitly use a literal string:
|
38
|
-
#
|
39
|
-
# DB[:table].update(Sequel.lit("column = column + 1"))
|
40
|
-
#
|
41
|
-
# or construct the same SQL using a non-string based approach:
|
42
|
-
#
|
43
|
-
# DB[:table].update(:column => Sequel[:column] + 1)
|
44
|
-
#
|
45
|
-
# Related module: Sequel::Dataset::NoAutoLiteralStrings
|
46
2
|
|
47
|
-
|
48
|
-
|
49
|
-
class Dataset
|
50
|
-
module NoAutoLiteralStrings
|
51
|
-
# Raise an error if passing a plain string or an array whose first
|
52
|
-
# entry is a plain string.
|
53
|
-
def filter_expr(expr = nil)
|
54
|
-
case expr
|
55
|
-
when LiteralString
|
56
|
-
super
|
57
|
-
when String
|
58
|
-
raise Error, "plain string passed to a dataset filtering method"
|
59
|
-
when Array
|
60
|
-
if expr.first.is_a?(String) && !expr.first.is_a?(LiteralString)
|
61
|
-
raise Error, "plain string passed to a dataset filtering method"
|
62
|
-
end
|
63
|
-
super
|
64
|
-
else
|
65
|
-
super
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Raise an error if passing a plain string.
|
70
|
-
def update_sql(values=OPTS)
|
71
|
-
case values
|
72
|
-
when LiteralString
|
73
|
-
super
|
74
|
-
when String
|
75
|
-
raise Error, "plain string passed to a dataset filtering method"
|
76
|
-
else
|
77
|
-
super
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
register_extension(:no_auto_literal_strings, NoAutoLiteralStrings)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
# Sequel::Dataset.register_extension(:no_auto_literal_strings){} # SEQUEL5
|
3
|
+
Sequel::Database.register_extension(:no_auto_literal_strings){}
|
4
|
+
Sequel::Dataset.register_extension(:no_auto_literal_strings){}
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# Usage:
|
15
15
|
#
|
16
|
-
# ds = DB[:items].nullify.where(:
|
16
|
+
# ds = DB[:items].nullify.where(a: :b).select(:c)
|
17
17
|
# ds.sql # => "SELECT c FROM items WHERE (a = b)"
|
18
18
|
# ds.all # => [] # no query sent to the database
|
19
19
|
#
|
@@ -41,13 +41,7 @@ module Sequel
|
|
41
41
|
module Nullifiable
|
42
42
|
# Return a cloned nullified dataset.
|
43
43
|
def nullify
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
# Nullify the current dataset
|
48
|
-
def nullify!
|
49
|
-
Sequel::Deprecation.deprecate("Dataset#nullify! from the null_dataset extension", "Use Dataset#nullify, which returned a modified copy")
|
50
|
-
extend NullDataset
|
44
|
+
with_extend(NullDataset)
|
51
45
|
end
|
52
46
|
end
|
53
47
|
|
@@ -64,10 +64,8 @@ module Sequel
|
|
64
64
|
|
65
65
|
class Dataset
|
66
66
|
# Holds methods that only relate to paginated datasets. Paginated dataset
|
67
|
-
# have pages starting at 1 (page 1 is offset 0, page
|
67
|
+
# have pages starting at 1 (page 1 is offset 0, page 2 is offset 1 * page_size).
|
68
68
|
module Pagination
|
69
|
-
Sequel::Dataset.def_deprecated_opts_setter(self, :page_size, :page_count, :current_page, :pagination_record_count)
|
70
|
-
|
71
69
|
# The number of records per page (the final page may have fewer than
|
72
70
|
# this number of records).
|
73
71
|
def page_size
|
@@ -135,20 +133,6 @@ module Sequel
|
|
135
133
|
def prev_page
|
136
134
|
current_page > 1 ? (current_page - 1) : nil
|
137
135
|
end
|
138
|
-
|
139
|
-
# SEQUEL5: Remove
|
140
|
-
# :nocov:
|
141
|
-
def set_pagination_info(page_no, page_size, record_count)
|
142
|
-
Sequel::Deprecation.deprecate("Dataset#set_pagination_info", "It should no longer be necessary to call this method")
|
143
|
-
self.current_page = page_no
|
144
|
-
self.page_size = page_size
|
145
|
-
self.pagination_record_count = record_count
|
146
|
-
page_count = (record_count / page_size.to_f).ceil
|
147
|
-
page_count = 1 if page_count == 0
|
148
|
-
self.page_count = page_count
|
149
|
-
self
|
150
|
-
end
|
151
|
-
# :nocov:
|
152
136
|
end
|
153
137
|
end
|
154
138
|
|
@@ -32,7 +32,7 @@
|
|
32
32
|
#
|
33
33
|
# So if you want to insert an array into an integer[] database column:
|
34
34
|
#
|
35
|
-
# DB[:table].insert(:
|
35
|
+
# DB[:table].insert(column: Sequel.pg_array([1, 2, 3]))
|
36
36
|
#
|
37
37
|
# To use this extension, first load it into your Sequel::Database instance:
|
38
38
|
#
|
@@ -71,7 +71,6 @@
|
|
71
71
|
|
72
72
|
require 'delegate'
|
73
73
|
require 'strscan'
|
74
|
-
Sequel.require 'adapters/shared/postgres'
|
75
74
|
|
76
75
|
module Sequel
|
77
76
|
module Postgres
|
@@ -79,108 +78,16 @@ module Sequel
|
|
79
78
|
class PGArray < DelegateClass(Array)
|
80
79
|
include Sequel::SQL::AliasMethods
|
81
80
|
|
82
|
-
ARRAY = "ARRAY".freeze
|
83
|
-
Sequel::Deprecation.deprecate_constant(self, :ARRAY)
|
84
|
-
DOUBLE_COLON = '::'.freeze
|
85
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_COLON)
|
86
|
-
EMPTY_ARRAY = "'{}'".freeze
|
87
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_ARRAY)
|
88
|
-
EMPTY_BRACKET = '[]'.freeze
|
89
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_BRACKET)
|
90
|
-
OPEN_BRACKET = '['.freeze
|
91
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN_BRACKET)
|
92
|
-
CLOSE_BRACKET = ']'.freeze
|
93
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_BRACKET)
|
94
|
-
COMMA = ','.freeze
|
95
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
96
|
-
BACKSLASH = '\\'.freeze
|
97
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
|
98
|
-
EMPTY_STRING = ''.freeze
|
99
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_STRING)
|
100
|
-
OPEN_BRACE = '{'.freeze
|
101
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN_BRACE)
|
102
|
-
CLOSE_BRACE = '}'.freeze
|
103
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_BRACE)
|
104
|
-
NULL = 'NULL'.freeze
|
105
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL)
|
106
|
-
QUOTE = '"'.freeze
|
107
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTE)
|
108
|
-
|
109
|
-
# SEQUEL5: Remove
|
110
|
-
ARRAY_TYPES = {}
|
111
|
-
|
112
|
-
# SEQUEL5: Remove
|
113
|
-
def self.register(db_type, opts=OPTS, &block)
|
114
|
-
Sequel::Deprecation.deprecate("Sequel::Postgres::PGArray.register", "Use Database#register_array_type on a Database instance using the pg_array extension") unless opts[:skip_deprecation_warning]
|
115
|
-
|
116
|
-
db_type = db_type.to_s
|
117
|
-
type = (opts[:type_symbol] || db_type).to_sym
|
118
|
-
type_procs = opts[:type_procs] || PG__TYPES
|
119
|
-
mod = opts[:typecast_methods_module] || DatabaseMethods
|
120
|
-
typecast_method_map = opts[:typecast_method_map] || ARRAY_TYPES
|
121
|
-
|
122
|
-
if converter = opts[:converter]
|
123
|
-
raise Error, "can't provide both a block and :converter option to register" if block
|
124
|
-
else
|
125
|
-
converter = block
|
126
|
-
end
|
127
|
-
|
128
|
-
if soid = opts[:scalar_oid]
|
129
|
-
raise Error, "can't provide both a converter and :scalar_oid option to register" if converter
|
130
|
-
converter = type_procs[soid]
|
131
|
-
end
|
132
|
-
|
133
|
-
array_type = (opts[:array_type] || db_type).to_s.dup.freeze
|
134
|
-
creator = Creator.new(array_type, converter)
|
135
|
-
|
136
|
-
typecast_method_map[db_type] = :"#{type}_array"
|
137
|
-
|
138
|
-
define_array_typecast_method(mod, type, creator, opts.fetch(:scalar_typecast, type))
|
139
|
-
|
140
|
-
if oid = opts[:oid]
|
141
|
-
if opts[:skip_deprecation_warning]
|
142
|
-
def creator.call(s)
|
143
|
-
Sequel::Deprecation.deprecate("Conversion proc for #{type}[] added globally by pg_array or other pg_* extension", "Load the appropriate pg_* extension(s) into the Database instance")
|
144
|
-
super
|
145
|
-
end
|
146
|
-
end
|
147
|
-
type_procs[oid] = creator
|
148
|
-
end
|
149
|
-
|
150
|
-
nil
|
151
|
-
end
|
152
|
-
|
153
|
-
# SEQUEL5: Remove
|
154
|
-
def self.define_array_typecast_method(mod, type, creator, scalar_typecast)
|
155
|
-
mod.class_eval do
|
156
|
-
meth = :"typecast_value_#{type}_array"
|
157
|
-
scalar_typecast_method = :"typecast_value_#{scalar_typecast}"
|
158
|
-
define_method(meth){|v| typecast_value_pg_array(v, creator, scalar_typecast_method)}
|
159
|
-
private meth
|
160
|
-
end
|
161
|
-
end
|
162
|
-
private_class_method :define_array_typecast_method
|
163
|
-
|
164
81
|
module DatabaseMethods
|
165
|
-
APOS = "'".freeze
|
166
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
167
|
-
DOUBLE_APOS = "''".freeze
|
168
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
169
|
-
ESCAPE_RE = /("|\\)/.freeze
|
170
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
|
171
|
-
ESCAPE_REPLACEMENT = '\\\\\1'.freeze
|
172
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
|
173
|
-
|
174
82
|
BLOB_RANGE = 1...-1
|
175
83
|
|
176
84
|
# Create the local hash of database type strings to schema type symbols,
|
177
85
|
# used for array types local to this database.
|
178
86
|
def self.extended(db)
|
179
|
-
db.
|
87
|
+
db.instance_exec do
|
180
88
|
@pg_array_schema_types ||= {}
|
181
|
-
|
182
|
-
|
183
|
-
add_conversion_proc(1185, Creator.new("timestamp with time zone", procs[1184]))
|
89
|
+
register_array_type('timestamp without time zone', :oid=>1115, :scalar_oid=>1114, :type_symbol=>:datetime)
|
90
|
+
register_array_type('timestamp with time zone', :oid=>1185, :scalar_oid=>1184, :type_symbol=>:datetime_timezone, :scalar_typecast=>:datetime)
|
184
91
|
|
185
92
|
register_array_type('text', :oid=>1009, :scalar_oid=>25, :type_symbol=>:string)
|
186
93
|
register_array_type('integer', :oid=>1007, :scalar_oid=>23)
|
@@ -220,6 +127,15 @@ module Sequel
|
|
220
127
|
end
|
221
128
|
end
|
222
129
|
|
130
|
+
def add_named_conversion_proc(name, &block)
|
131
|
+
ret = super
|
132
|
+
name = name.to_s if name.is_a?(Symbol)
|
133
|
+
from(:pg_type).where(:typname=>name).select_map([:oid, :typarray]).each do |scalar_oid, array_oid|
|
134
|
+
register_array_type(name, :oid=>array_oid.to_i, :scalar_oid=>scalar_oid.to_i)
|
135
|
+
end
|
136
|
+
ret
|
137
|
+
end
|
138
|
+
|
223
139
|
# Handle arrays in bound variables
|
224
140
|
def bound_variable_arg(arg, conn)
|
225
141
|
case arg
|
@@ -260,9 +176,6 @@ module Sequel
|
|
260
176
|
#
|
261
177
|
# If a block is given, it is treated as the :converter option.
|
262
178
|
def register_array_type(db_type, opts=OPTS, &block)
|
263
|
-
# Only for convert_named_procs_to_procs usage
|
264
|
-
type_procs = opts[:type_procs] || conversion_procs # SEQUEL5: Remove
|
265
|
-
|
266
179
|
oid = opts[:oid]
|
267
180
|
soid = opts[:scalar_oid]
|
268
181
|
|
@@ -286,17 +199,16 @@ module Sequel
|
|
286
199
|
|
287
200
|
if soid
|
288
201
|
raise Error, "can't provide both a converter and :scalar_oid option to register" if has_converter
|
289
|
-
converter =
|
202
|
+
converter = conversion_procs[soid]
|
290
203
|
end
|
291
204
|
|
292
205
|
array_type = (opts[:array_type] || db_type).to_s.dup.freeze
|
293
206
|
creator = Creator.new(array_type, converter)
|
294
|
-
|
295
|
-
#add_conversion_proc(oid, creator) # SEQUEL5
|
207
|
+
add_conversion_proc(oid, creator)
|
296
208
|
|
297
209
|
typecast_method_map[db_type] = :"#{type}_array"
|
298
210
|
|
299
|
-
|
211
|
+
singleton_class.class_eval do
|
300
212
|
meth = :"typecast_value_#{type}_array"
|
301
213
|
scalar_typecast_method = :"typecast_value_#{opts.fetch(:scalar_typecast, type)}"
|
302
214
|
define_method(meth){|v| typecast_value_pg_array(v, creator, scalar_typecast_method)}
|
@@ -304,15 +216,9 @@ module Sequel
|
|
304
216
|
end
|
305
217
|
|
306
218
|
@schema_type_classes[:"#{type}_array"] = PGArray
|
307
|
-
conversion_procs_updated # SEQUEL5: Remove
|
308
219
|
nil
|
309
220
|
end
|
310
221
|
|
311
|
-
# SEQUEL5: Remove
|
312
|
-
def schema_type_class(type)
|
313
|
-
super || (ARRAY_TYPES.each_value{|v| return PGArray if type == v}; nil)
|
314
|
-
end
|
315
|
-
|
316
222
|
private
|
317
223
|
|
318
224
|
# Format arrays used in bound variables.
|
@@ -331,32 +237,11 @@ module Sequel
|
|
331
237
|
end
|
332
238
|
end
|
333
239
|
|
334
|
-
# Automatically handle array types for the given named types.
|
335
|
-
def convert_named_procs_to_procs(named_procs)
|
336
|
-
h = super
|
337
|
-
unless h.empty?
|
338
|
-
from(:pg_type).where(:oid=>h.keys).select_map([:typname, :oid, :typarray]).each do |name, scalar_oid, array_oid|
|
339
|
-
register_array_type(name, :type_procs=>h, :oid=>array_oid.to_i, :scalar_oid=>scalar_oid.to_i)
|
340
|
-
end
|
341
|
-
end
|
342
|
-
h
|
343
|
-
end
|
344
|
-
|
345
|
-
# SEQUEL5: Remove
|
346
|
-
def get_conversion_procs
|
347
|
-
procs = super
|
348
|
-
|
349
|
-
procs[1115] = Creator.new("timestamp without time zone", procs[1114])
|
350
|
-
procs[1185] = Creator.new("timestamp with time zone", procs[1184])
|
351
|
-
|
352
|
-
procs
|
353
|
-
end
|
354
|
-
|
355
240
|
# Look into both the current database's array schema types and the global
|
356
241
|
# array schema types to get the type symbol for the given database type
|
357
242
|
# string.
|
358
243
|
def pg_array_schema_type(type)
|
359
|
-
@pg_array_schema_types[type]
|
244
|
+
@pg_array_schema_types[type]
|
360
245
|
end
|
361
246
|
|
362
247
|
# Make the column type detection handle registered array types.
|
@@ -408,15 +293,6 @@ module Sequel
|
|
408
293
|
# Note that does not handle all forms out input that PostgreSQL will
|
409
294
|
# accept, and it will not raise an error for all forms of invalid input.
|
410
295
|
class Parser < StringScanner
|
411
|
-
UNQUOTED_RE = /[{}",]|[^{}",]+/
|
412
|
-
Sequel::Deprecation.deprecate_constant(self, :UNQUOTED_RE)
|
413
|
-
QUOTED_RE = /["\\]|[^"\\]+/
|
414
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTED_RE)
|
415
|
-
NULL_RE = /NULL",/
|
416
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL_RE)
|
417
|
-
OPEN_RE = /((\[\d+:\d+\])+=)?\{/
|
418
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN_RE)
|
419
|
-
|
420
296
|
# Set the source for the input, and any converter callable
|
421
297
|
# to call with objects to be created. For nested parsers
|
422
298
|
# the source may contain text after the end current parse,
|
@@ -425,8 +301,8 @@ module Sequel
|
|
425
301
|
super(source)
|
426
302
|
@converter = converter
|
427
303
|
@stack = [[]]
|
428
|
-
@
|
429
|
-
|
304
|
+
@encoding = string.encoding
|
305
|
+
@recorded = String.new.force_encoding(@encoding)
|
430
306
|
end
|
431
307
|
|
432
308
|
# Take the buffer of recorded characters and add it to the array
|
@@ -440,7 +316,7 @@ module Sequel
|
|
440
316
|
entry = @converter.call(entry)
|
441
317
|
end
|
442
318
|
@stack.last.push(entry)
|
443
|
-
@recorded =
|
319
|
+
@recorded = String.new.force_encoding(@encoding)
|
444
320
|
end
|
445
321
|
end
|
446
322
|
|
@@ -499,21 +375,6 @@ module Sequel
|
|
499
375
|
|
500
376
|
raise Sequel::Error, "array parsing finished with array unclosed"
|
501
377
|
end
|
502
|
-
|
503
|
-
private
|
504
|
-
|
505
|
-
if RUBY_VERSION < '1.9.0'
|
506
|
-
# :nocov:
|
507
|
-
def new_entry_buffer
|
508
|
-
String.new
|
509
|
-
end
|
510
|
-
# :nocov:
|
511
|
-
else
|
512
|
-
def new_entry_buffer
|
513
|
-
String.new.force_encoding(string.encoding)
|
514
|
-
#String.new.force_encoding(@encoding) # SEQUEL5
|
515
|
-
end
|
516
|
-
end
|
517
378
|
end unless Sequel::Postgres.respond_to?(:parse_pg_array)
|
518
379
|
|
519
380
|
# Callable object that takes the input string and parses it using Parser.
|
@@ -596,36 +457,6 @@ module Sequel
|
|
596
457
|
end
|
597
458
|
sql << ']'
|
598
459
|
end
|
599
|
-
|
600
|
-
# SEQUEL5: Remove
|
601
|
-
register('text', :oid=>1009, :scalar_oid=>25, :type_symbol=>:string, :skip_deprecation_warning=>true)
|
602
|
-
register('integer', :oid=>1007, :scalar_oid=>23, :skip_deprecation_warning=>true)
|
603
|
-
register('bigint', :oid=>1016, :scalar_oid=>20, :scalar_typecast=>:integer, :skip_deprecation_warning=>true)
|
604
|
-
register('numeric', :oid=>1231, :scalar_oid=>1700, :type_symbol=>:decimal, :skip_deprecation_warning=>true)
|
605
|
-
register('double precision', :oid=>1022, :scalar_oid=>701, :type_symbol=>:float, :skip_deprecation_warning=>true)
|
606
|
-
register('boolean', :oid=>1000, :scalar_oid=>16, :skip_deprecation_warning=>true)
|
607
|
-
register('bytea', :oid=>1001, :scalar_oid=>17, :type_symbol=>:blob, :skip_deprecation_warning=>true)
|
608
|
-
register('date', :oid=>1182, :scalar_oid=>1082, :skip_deprecation_warning=>true)
|
609
|
-
register('time without time zone', :oid=>1183, :scalar_oid=>1083, :type_symbol=>:time, :skip_deprecation_warning=>true)
|
610
|
-
register('timestamp without time zone', :oid=>1115, :scalar_oid=>1114, :type_symbol=>:datetime, :skip_deprecation_warning=>true)
|
611
|
-
register('time with time zone', :oid=>1270, :scalar_oid=>1083, :type_symbol=>:time_timezone, :scalar_typecast=>:time, :skip_deprecation_warning=>true)
|
612
|
-
register('timestamp with time zone', :oid=>1185, :scalar_oid=>1184, :type_symbol=>:datetime_timezone, :scalar_typecast=>:datetime, :skip_deprecation_warning=>true)
|
613
|
-
register('smallint', :oid=>1005, :scalar_oid=>21, :scalar_typecast=>:integer, :skip_deprecation_warning=>true)
|
614
|
-
register('oid', :oid=>1028, :scalar_oid=>26, :scalar_typecast=>:integer, :skip_deprecation_warning=>true)
|
615
|
-
register('real', :oid=>1021, :scalar_oid=>700, :scalar_typecast=>:float, :skip_deprecation_warning=>true)
|
616
|
-
register('character', :oid=>1014, :array_type=>:text, :scalar_typecast=>:string, :skip_deprecation_warning=>true)
|
617
|
-
register('character varying', :oid=>1015, :scalar_typecast=>:string, :type_symbol=>:varchar, :skip_deprecation_warning=>true)
|
618
|
-
register('xml', :oid=>143, :scalar_oid=>142, :skip_deprecation_warning=>true)
|
619
|
-
register('money', :oid=>791, :scalar_oid=>790, :skip_deprecation_warning=>true)
|
620
|
-
register('bit', :oid=>1561, :scalar_oid=>1560, :skip_deprecation_warning=>true)
|
621
|
-
register('bit varying', :oid=>1563, :scalar_oid=>1562, :type_symbol=>:varbit, :skip_deprecation_warning=>true)
|
622
|
-
register('uuid', :oid=>2951, :scalar_oid=>2950, :skip_deprecation_warning=>true)
|
623
|
-
register('xid', :oid=>1011, :scalar_oid=>28, :skip_deprecation_warning=>true)
|
624
|
-
register('cid', :oid=>1012, :scalar_oid=>29, :skip_deprecation_warning=>true)
|
625
|
-
register('name', :oid=>1003, :scalar_oid=>19, :skip_deprecation_warning=>true)
|
626
|
-
register('tid', :oid=>1010, :scalar_oid=>27, :skip_deprecation_warning=>true)
|
627
|
-
register('int2vector', :oid=>1006, :scalar_oid=>22, :skip_deprecation_warning=>true)
|
628
|
-
register('oidvector', :oid=>1013, :scalar_oid=>30, :skip_deprecation_warning=>true)
|
629
460
|
end
|
630
461
|
end
|
631
462
|
|