sequel 5.8.0 → 5.38.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 +409 -1795
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -4
- data/bin/sequel +4 -0
- data/doc/advanced_associations.rdoc +136 -18
- data/doc/association_basics.rdoc +10 -5
- data/doc/cheat_sheet.rdoc +1 -0
- data/doc/code_order.rdoc +12 -2
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/mass_assignment.rdoc +3 -3
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +30 -8
- data/doc/postgresql.rdoc +107 -2
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/security.rdoc +10 -0
- data/doc/sharding.rdoc +42 -28
- data/doc/sql.rdoc +12 -0
- data/doc/testing.rdoc +24 -17
- data/doc/transactions.rdoc +78 -0
- data/doc/validations.rdoc +2 -2
- data/lib/sequel/adapters/ado.rb +26 -18
- data/lib/sequel/adapters/ado/access.rb +2 -2
- data/lib/sequel/adapters/ado/mssql.rb +5 -8
- data/lib/sequel/adapters/amalgalite.rb +1 -1
- data/lib/sequel/adapters/jdbc.rb +71 -27
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/oracle.rb +7 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +17 -28
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +5 -6
- data/lib/sequel/adapters/jdbc/sqlite.rb +33 -2
- data/lib/sequel/adapters/jdbc/sqlserver.rb +4 -3
- data/lib/sequel/adapters/jdbc/transactions.rb +14 -28
- data/lib/sequel/adapters/mysql.rb +14 -15
- data/lib/sequel/adapters/mysql2.rb +5 -3
- data/lib/sequel/adapters/odbc.rb +4 -6
- data/lib/sequel/adapters/oracle.rb +7 -7
- data/lib/sequel/adapters/postgres.rb +52 -16
- data/lib/sequel/adapters/shared/access.rb +16 -12
- data/lib/sequel/adapters/shared/db2.rb +5 -0
- data/lib/sequel/adapters/shared/mssql.rb +41 -18
- data/lib/sequel/adapters/shared/mysql.rb +66 -19
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +341 -95
- data/lib/sequel/adapters/shared/sqlanywhere.rb +23 -10
- data/lib/sequel/adapters/shared/sqlite.rb +174 -21
- data/lib/sequel/adapters/sqlanywhere.rb +33 -17
- data/lib/sequel/adapters/sqlite.rb +78 -68
- data/lib/sequel/adapters/tinytds.rb +14 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +2 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +5 -1
- data/lib/sequel/connection_pool.rb +2 -6
- data/lib/sequel/connection_pool/sharded_single.rb +7 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +32 -21
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +26 -11
- data/lib/sequel/core.rb +327 -319
- data/lib/sequel/database/connecting.rb +7 -8
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +68 -34
- data/lib/sequel/database/query.rb +6 -4
- data/lib/sequel/database/schema_generator.rb +31 -11
- data/lib/sequel/database/schema_methods.rb +32 -22
- data/lib/sequel/database/transactions.rb +129 -25
- data/lib/sequel/dataset.rb +4 -2
- data/lib/sequel/dataset/actions.rb +34 -23
- data/lib/sequel/dataset/features.rb +34 -0
- data/lib/sequel/dataset/graph.rb +27 -11
- data/lib/sequel/dataset/misc.rb +17 -3
- data/lib/sequel/dataset/placeholder_literalizer.rb +50 -21
- data/lib/sequel/dataset/prepared_statements.rb +96 -26
- data/lib/sequel/dataset/query.rb +43 -8
- data/lib/sequel/dataset/sql.rb +189 -41
- data/lib/sequel/deprecated.rb +3 -1
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +1 -2
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +6 -6
- data/lib/sequel/extensions/connection_validator.rb +7 -6
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +53 -28
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -0
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +3 -1
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/integer64.rb +3 -1
- data/lib/sequel/extensions/looser_typecasting.rb +3 -3
- data/lib/sequel/extensions/migration.rb +13 -6
- data/lib/sequel/extensions/named_timezones.rb +84 -23
- data/lib/sequel/extensions/pg_array.rb +87 -79
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +34 -18
- data/lib/sequel/extensions/pg_extended_date_support.rb +34 -14
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -0
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +168 -0
- data/lib/sequel/extensions/pg_range.rb +20 -10
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +3 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +1 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +13 -7
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +4 -2
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- data/lib/sequel/model/associations.rb +403 -69
- data/lib/sequel/model/base.rb +170 -90
- data/lib/sequel/model/plugins.rb +105 -0
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +3 -3
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +74 -22
- data/lib/sequel/plugins/association_proxies.rb +6 -2
- data/lib/sequel/plugins/auto_validations.rb +36 -17
- data/lib/sequel/plugins/blacklist_security.rb +1 -2
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/caching.rb +3 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +62 -34
- data/lib/sequel/plugins/composition.rb +13 -9
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/defaults_setter.rb +2 -2
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/finder.rb +2 -2
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/hook_class_methods.rb +17 -5
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +2 -2
- data/lib/sequel/plugins/json_serializer.rb +21 -14
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/list.rb +22 -10
- data/lib/sequel/plugins/many_through_many.rb +1 -1
- data/lib/sequel/plugins/nested_attributes.rb +27 -5
- data/lib/sequel/plugins/pg_array_associations.rb +12 -9
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +149 -61
- data/lib/sequel/plugins/prepared_statements.rb +6 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +20 -22
- data/lib/sequel/plugins/sharding.rb +13 -7
- data/lib/sequel/plugins/single_table_inheritance.rb +20 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +36 -17
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +1 -1
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +73 -2
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/tree.rb +49 -31
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/validation_class_methods.rb +11 -5
- data/lib/sequel/plugins/validation_helpers.rb +2 -2
- data/lib/sequel/sql.rb +120 -30
- data/lib/sequel/timezones.rb +55 -14
- data/lib/sequel/version.rb +6 -1
- metadata +101 -361
- data/Rakefile +0 -151
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -804
- data/spec/adapters/mysql_spec.rb +0 -1041
- data/spec/adapters/oracle_spec.rb +0 -327
- data/spec/adapters/postgres_spec.rb +0 -4000
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -600
- data/spec/bin_spec.rb +0 -269
- data/spec/core/connection_pool_spec.rb +0 -1228
- data/spec/core/database_spec.rb +0 -2673
- data/spec/core/dataset_spec.rb +0 -5419
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1344
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -306
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1820
- data/spec/core/spec_helper.rb +0 -23
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -762
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -202
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -273
- data/spec/extensions/class_table_inheritance_spec.rb +0 -568
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -133
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -395
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -141
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -189
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -74
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -380
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -275
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -840
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -109
- data/spec/extensions/nested_attributes_spec.rb +0 -703
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -165
- data/spec/extensions/pg_enum_spec.rb +0 -113
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -289
- data/spec/extensions/pg_json_spec.rb +0 -262
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -487
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -182
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -381
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -868
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -97
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -189
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -61
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_spec.rb +0 -410
- data/spec/extensions/string_agg_spec.rb +0 -90
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -141
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -284
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -58
- data/spec/integration/associations_test.rb +0 -2513
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1880
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2302
- data/spec/integration/prepared_statement_test.rb +0 -398
- data/spec/integration/schema_test.rb +0 -869
- data/spec/integration/spec_helper.rb +0 -64
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -354
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4538
- data/spec/model/base_spec.rb +0 -817
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2262
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -953
- data/spec/model/plugins_spec.rb +0 -318
- data/spec/model/record_spec.rb +0 -2107
- data/spec/model/spec_helper.rb +0 -45
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
|
@@ -65,12 +65,12 @@
|
|
|
65
65
|
# If you want an easy way to call PostgreSQL array functions and
|
|
66
66
|
# operators, look into the pg_array_ops extension.
|
|
67
67
|
#
|
|
68
|
-
# This extension requires the
|
|
68
|
+
# This extension requires the delegate library, and the strscan library
|
|
69
|
+
# sequel_pg has not been loaded.
|
|
69
70
|
#
|
|
70
71
|
# Related module: Sequel::Postgres::PGArray
|
|
71
72
|
|
|
72
73
|
require 'delegate'
|
|
73
|
-
require 'strscan'
|
|
74
74
|
|
|
75
75
|
module Sequel
|
|
76
76
|
module Postgres
|
|
@@ -99,7 +99,7 @@ module Sequel
|
|
|
99
99
|
register_array_type('bytea', :oid=>1001, :scalar_oid=>17, :type_symbol=>:blob)
|
|
100
100
|
register_array_type('date', :oid=>1182, :scalar_oid=>1082)
|
|
101
101
|
register_array_type('time without time zone', :oid=>1183, :scalar_oid=>1083, :type_symbol=>:time)
|
|
102
|
-
register_array_type('time with time zone', :oid=>1270, :scalar_oid=>
|
|
102
|
+
register_array_type('time with time zone', :oid=>1270, :scalar_oid=>1266, :type_symbol=>:time_timezone, :scalar_typecast=>:time)
|
|
103
103
|
|
|
104
104
|
register_array_type('smallint', :oid=>1005, :scalar_oid=>21, :scalar_typecast=>:integer)
|
|
105
105
|
register_array_type('oid', :oid=>1028, :scalar_oid=>26, :scalar_typecast=>:integer)
|
|
@@ -300,93 +300,101 @@ module Sequel
|
|
|
300
300
|
end
|
|
301
301
|
end
|
|
302
302
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
#
|
|
308
|
-
#
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
303
|
+
unless Sequel::Postgres.respond_to?(:parse_pg_array)
|
|
304
|
+
require 'strscan'
|
|
305
|
+
|
|
306
|
+
# PostgreSQL array parser that handles PostgreSQL array output format.
|
|
307
|
+
# Note that does not handle all forms out input that PostgreSQL will
|
|
308
|
+
# accept, and it will not raise an error for all forms of invalid input.
|
|
309
|
+
class Parser < StringScanner
|
|
310
|
+
# Set the source for the input, and any converter callable
|
|
311
|
+
# to call with objects to be created. For nested parsers
|
|
312
|
+
# the source may contain text after the end current parse,
|
|
313
|
+
# which will be ignored.
|
|
314
|
+
def initialize(source, converter=nil)
|
|
315
|
+
super(source)
|
|
316
|
+
@converter = converter
|
|
317
|
+
@stack = [[]]
|
|
318
|
+
@encoding = string.encoding
|
|
319
|
+
@recorded = String.new.force_encoding(@encoding)
|
|
320
|
+
end
|
|
318
321
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
322
|
+
# Take the buffer of recorded characters and add it to the array
|
|
323
|
+
# of entries, and use a new buffer for recorded characters.
|
|
324
|
+
def new_entry(include_empty=false)
|
|
325
|
+
if !@recorded.empty? || include_empty
|
|
326
|
+
entry = @recorded
|
|
327
|
+
if entry == 'NULL' && !include_empty
|
|
328
|
+
entry = nil
|
|
329
|
+
elsif @converter
|
|
330
|
+
entry = @converter.call(entry)
|
|
331
|
+
end
|
|
332
|
+
@stack.last.push(entry)
|
|
333
|
+
@recorded = String.new.force_encoding(@encoding)
|
|
328
334
|
end
|
|
329
|
-
@stack.last.push(entry)
|
|
330
|
-
@recorded = String.new.force_encoding(@encoding)
|
|
331
335
|
end
|
|
332
|
-
end
|
|
333
336
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
337
|
+
# Parse the input character by character, returning an array
|
|
338
|
+
# of parsed (and potentially converted) objects.
|
|
339
|
+
def parse
|
|
340
|
+
raise Sequel::Error, "invalid array, empty string" if eos?
|
|
341
|
+
raise Sequel::Error, "invalid array, doesn't start with {" unless scan(/((\[\d+:\d+\])+=)?\{/)
|
|
342
|
+
|
|
343
|
+
# :nocov:
|
|
344
|
+
while !eos?
|
|
345
|
+
# :nocov:
|
|
346
|
+
char = scan(/[{}",]|[^{}",]+/)
|
|
347
|
+
if char == ','
|
|
348
|
+
# Comma outside quoted string indicates end of current entry
|
|
349
|
+
new_entry
|
|
350
|
+
elsif char == '"'
|
|
351
|
+
raise Sequel::Error, "invalid array, opening quote with existing recorded data" unless @recorded.empty?
|
|
352
|
+
# :nocov:
|
|
353
|
+
while true
|
|
354
|
+
# :nocov:
|
|
355
|
+
char = scan(/["\\]|[^"\\]+/)
|
|
356
|
+
if char == '\\'
|
|
357
|
+
@recorded << getch
|
|
358
|
+
elsif char == '"'
|
|
359
|
+
n = peek(1)
|
|
360
|
+
raise Sequel::Error, "invalid array, closing quote not followed by comma or closing brace" unless n == ',' || n == '}'
|
|
361
|
+
break
|
|
362
|
+
else
|
|
363
|
+
@recorded << char
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
new_entry(true)
|
|
367
|
+
elsif char == '{'
|
|
368
|
+
raise Sequel::Error, "invalid array, opening brace with existing recorded data" unless @recorded.empty?
|
|
369
|
+
|
|
370
|
+
# Start of new array, add it to the stack
|
|
371
|
+
new = []
|
|
372
|
+
@stack.last << new
|
|
373
|
+
@stack << new
|
|
374
|
+
elsif char == '}'
|
|
375
|
+
# End of current array, add current entry to the current array
|
|
376
|
+
new_entry
|
|
377
|
+
|
|
378
|
+
if @stack.length == 1
|
|
379
|
+
raise Sequel::Error, "array parsing finished without parsing entire string" unless eos?
|
|
380
|
+
|
|
381
|
+
# Top level of array, parsing should be over.
|
|
382
|
+
# Pop current array off stack and return it as result
|
|
383
|
+
return @stack.pop
|
|
355
384
|
else
|
|
356
|
-
|
|
385
|
+
# Nested array, pop current array off stack
|
|
386
|
+
@stack.pop
|
|
357
387
|
end
|
|
358
|
-
end
|
|
359
|
-
new_entry(true)
|
|
360
|
-
elsif char == '{'
|
|
361
|
-
raise Sequel::Error, "invalid array, opening brace with existing recorded data" unless @recorded.empty?
|
|
362
|
-
|
|
363
|
-
# Start of new array, add it to the stack
|
|
364
|
-
new = []
|
|
365
|
-
@stack.last << new
|
|
366
|
-
@stack << new
|
|
367
|
-
elsif char == '}'
|
|
368
|
-
# End of current array, add current entry to the current array
|
|
369
|
-
new_entry
|
|
370
|
-
|
|
371
|
-
if @stack.length == 1
|
|
372
|
-
raise Sequel::Error, "array parsing finished without parsing entire string" unless eos?
|
|
373
|
-
|
|
374
|
-
# Top level of array, parsing should be over.
|
|
375
|
-
# Pop current array off stack and return it as result
|
|
376
|
-
return @stack.pop
|
|
377
388
|
else
|
|
378
|
-
#
|
|
379
|
-
@
|
|
389
|
+
# Add the character to the recorded character buffer.
|
|
390
|
+
@recorded << char
|
|
380
391
|
end
|
|
381
|
-
else
|
|
382
|
-
# Add the character to the recorded character buffer.
|
|
383
|
-
@recorded << char
|
|
384
392
|
end
|
|
385
|
-
end
|
|
386
393
|
|
|
387
|
-
|
|
394
|
+
raise Sequel::Error, "array parsing finished with array unclosed"
|
|
395
|
+
end
|
|
388
396
|
end
|
|
389
|
-
end
|
|
397
|
+
end
|
|
390
398
|
|
|
391
399
|
# Callable object that takes the input string and parses it using Parser.
|
|
392
400
|
class Creator
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
# ia.length(2) # array_length(int_array_column, 2)
|
|
52
52
|
# ia.lower # array_lower(int_array_column, 1)
|
|
53
53
|
# ia.lower(2) # array_lower(int_array_column, 2)
|
|
54
|
-
# ia.join # array_to_string(int_array_column, ''
|
|
55
|
-
# ia.join(':') # array_to_string(int_array_column, ':'
|
|
54
|
+
# ia.join # array_to_string(int_array_column, '')
|
|
55
|
+
# ia.join(':') # array_to_string(int_array_column, ':')
|
|
56
56
|
# ia.join(':', ' ') # array_to_string(int_array_column, ':', ' ')
|
|
57
57
|
# ia.unnest # unnest(int_array_column)
|
|
58
58
|
# ia.unnest(:b) # unnest(int_array_column, b)
|
|
@@ -157,7 +157,9 @@ module Sequel
|
|
|
157
157
|
else
|
|
158
158
|
Sequel.function(:hstore, self, wrap_array(arg))
|
|
159
159
|
end
|
|
160
|
+
# :nocov:
|
|
160
161
|
if Sequel.respond_to?(:hstore_op)
|
|
162
|
+
# :nocov:
|
|
161
163
|
v = Sequel.hstore_op(v)
|
|
162
164
|
end
|
|
163
165
|
v
|
|
@@ -217,12 +219,16 @@ module Sequel
|
|
|
217
219
|
|
|
218
220
|
# Call the array_to_string method:
|
|
219
221
|
#
|
|
220
|
-
# array_op.join # array_to_string(array, ''
|
|
221
|
-
# array_op.to_string # array_to_string(array, ''
|
|
222
|
-
# array_op.join(":") # array_to_string(array, ':'
|
|
222
|
+
# array_op.join # array_to_string(array, '')
|
|
223
|
+
# array_op.to_string # array_to_string(array, '')
|
|
224
|
+
# array_op.join(":") # array_to_string(array, ':')
|
|
223
225
|
# array_op.join(":", "*") # array_to_string(array, ':', '*')
|
|
224
226
|
def to_string(joiner="", null=nil)
|
|
225
|
-
|
|
227
|
+
if null.nil?
|
|
228
|
+
function(:array_to_string, joiner)
|
|
229
|
+
else
|
|
230
|
+
function(:array_to_string, joiner, null)
|
|
231
|
+
end
|
|
226
232
|
end
|
|
227
233
|
alias join to_string
|
|
228
234
|
|
|
@@ -279,7 +285,9 @@ module Sequel
|
|
|
279
285
|
end
|
|
280
286
|
end
|
|
281
287
|
|
|
288
|
+
# :nocov:
|
|
282
289
|
if defined?(PGArray)
|
|
290
|
+
# :nocov:
|
|
283
291
|
class PGArray
|
|
284
292
|
# Wrap the PGArray instance in an ArrayOp, allowing you to easily use
|
|
285
293
|
# the PostgreSQL array functions and operators with literal arrays.
|
|
@@ -17,6 +17,12 @@
|
|
|
17
17
|
#
|
|
18
18
|
# DB.rename_enum(:enum_type_name, :enum_type_another_name)
|
|
19
19
|
#
|
|
20
|
+
# If you want to rename an enum value, you can use rename_enum_value:
|
|
21
|
+
#
|
|
22
|
+
# DB.rename_enum_value(
|
|
23
|
+
# :enum_type_name, :enum_value_name, :enum_value_another_name
|
|
24
|
+
# )
|
|
25
|
+
#
|
|
20
26
|
# If you want to drop an enum type, you can use drop_enum:
|
|
21
27
|
#
|
|
22
28
|
# DB.drop_enum(:enum_type_name)
|
|
@@ -34,8 +40,11 @@
|
|
|
34
40
|
# DB.schema(:table_name)
|
|
35
41
|
# [[:column_name, {:type=>:enum, :enum_values=>['value1', 'value2']}]]
|
|
36
42
|
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
43
|
+
# This extension integrates with the pg_array extension. If you plan
|
|
44
|
+
# to use arrays of enum types, load the pg_array extension before the
|
|
45
|
+
# pg_interval extension:
|
|
46
|
+
#
|
|
47
|
+
# DB.extension :pg_array, :pg_enum
|
|
39
48
|
#
|
|
40
49
|
# DB.create_table(:table_name) do
|
|
41
50
|
# column :column_name, 'enum_type_name[]'
|
|
@@ -86,26 +95,24 @@ module Sequel
|
|
|
86
95
|
elsif v = opts[:after]
|
|
87
96
|
sql << " AFTER #{literal(v.to_s)}"
|
|
88
97
|
end
|
|
89
|
-
|
|
90
|
-
parse_enum_labels
|
|
91
|
-
nil
|
|
98
|
+
_process_enum_change_sql(sql)
|
|
92
99
|
end
|
|
93
100
|
|
|
94
101
|
# Run the SQL to create an enum type with the given name and values.
|
|
95
102
|
def create_enum(enum, values)
|
|
96
|
-
|
|
97
|
-
run sql
|
|
98
|
-
parse_enum_labels
|
|
99
|
-
nil
|
|
103
|
+
_process_enum_change_sql("CREATE TYPE #{quote_schema_table(enum)} AS ENUM (#{values.map{|v| literal(v.to_s)}.join(', ')})")
|
|
100
104
|
end
|
|
101
105
|
|
|
102
106
|
# Run the SQL to rename the enum type with the given name
|
|
103
107
|
# to the another given name.
|
|
104
108
|
def rename_enum(enum, new_name)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
_process_enum_change_sql("ALTER TYPE #{quote_schema_table(enum)} RENAME TO #{quote_schema_table(new_name)}")
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Run the SQL to rename the enum value with the given name
|
|
113
|
+
# to the another given name.
|
|
114
|
+
def rename_enum_value(enum, old_name, new_name)
|
|
115
|
+
_process_enum_change_sql("ALTER TYPE #{quote_schema_table(enum)} RENAME VALUE #{literal(old_name.to_s)} TO #{literal(new_name.to_s)}")
|
|
109
116
|
end
|
|
110
117
|
|
|
111
118
|
# Run the SQL to drop the enum type with the given name.
|
|
@@ -113,20 +120,27 @@ module Sequel
|
|
|
113
120
|
# :if_exists :: Do not raise an error if the enum type does not exist
|
|
114
121
|
# :cascade :: Also drop other objects that depend on the enum type
|
|
115
122
|
def drop_enum(enum, opts=OPTS)
|
|
116
|
-
|
|
117
|
-
run sql
|
|
118
|
-
parse_enum_labels
|
|
119
|
-
nil
|
|
123
|
+
_process_enum_change_sql("DROP TYPE#{' IF EXISTS' if opts[:if_exists]} #{quote_schema_table(enum)}#{' CASCADE' if opts[:cascade]}")
|
|
120
124
|
end
|
|
121
125
|
|
|
122
126
|
private
|
|
123
127
|
|
|
128
|
+
# Run the SQL on the database, reparsing the enum labels after it is run.
|
|
129
|
+
def _process_enum_change_sql(sql)
|
|
130
|
+
run(sql)
|
|
131
|
+
parse_enum_labels
|
|
132
|
+
nil
|
|
133
|
+
end
|
|
134
|
+
|
|
124
135
|
# Parse the pg_enum table to get enum values, and
|
|
125
136
|
# the pg_type table to get names and array oids for
|
|
126
137
|
# enums.
|
|
127
138
|
def parse_enum_labels
|
|
139
|
+
order = [:enumtypid]
|
|
140
|
+
order << :enumsortorder if server_version >= 90100
|
|
141
|
+
|
|
128
142
|
enum_labels = metadata_dataset.from(:pg_enum).
|
|
129
|
-
order(
|
|
143
|
+
order(*order).
|
|
130
144
|
select_hash_groups(Sequel.cast(:enumtypid, Integer).as(:v), :enumlabel).freeze
|
|
131
145
|
enum_labels.each_value(&:freeze)
|
|
132
146
|
|
|
@@ -167,7 +181,9 @@ module Sequel
|
|
|
167
181
|
end
|
|
168
182
|
|
|
169
183
|
# support reversible create_enum statements if the migration extension is loaded
|
|
184
|
+
# :nocov:
|
|
170
185
|
if defined?(MigrationReverser)
|
|
186
|
+
# :nocov:
|
|
171
187
|
class MigrationReverser
|
|
172
188
|
private
|
|
173
189
|
def create_enum(name, _)
|
|
@@ -83,13 +83,30 @@ module Sequel
|
|
|
83
83
|
# If convert_infinite_timestamps is true and the value is infinite, return an appropriate
|
|
84
84
|
# value based on the convert_infinite_timestamps setting.
|
|
85
85
|
def to_application_timestamp(value)
|
|
86
|
-
if value.is_a?(String) && (m = value.match(/(
|
|
87
|
-
if m[
|
|
86
|
+
if value.is_a?(String) && (m = value.match(/((?:[-+]\d\d:\d\d)(:\d\d)?)?( BC)?\z/)) && (m[2] || m[3])
|
|
87
|
+
if m[3]
|
|
88
88
|
value = value.sub(' BC', '').sub(' ', ' BC ')
|
|
89
|
+
conv = defined?(JRUBY_VERSION) && JRUBY_VERSION == '9.2.0.0'
|
|
89
90
|
end
|
|
90
|
-
if m[
|
|
91
|
+
if m[2] || conv
|
|
91
92
|
dt = DateTime.parse(value)
|
|
92
|
-
|
|
93
|
+
if conv
|
|
94
|
+
# :nocov:
|
|
95
|
+
if Sequel.datetime_class == DateTime
|
|
96
|
+
dt >>= 12
|
|
97
|
+
else
|
|
98
|
+
dt >>= 24
|
|
99
|
+
end
|
|
100
|
+
# :nocov:
|
|
101
|
+
end
|
|
102
|
+
unless Sequel.datetime_class == DateTime
|
|
103
|
+
dt = dt.to_time
|
|
104
|
+
if conv && (timezone == nil || timezone == :local) && !m[1]
|
|
105
|
+
# :nocov:
|
|
106
|
+
dt = Sequel.send(:convert_input_timestamp, dt.strftime("%F %T.%6N"), :local)
|
|
107
|
+
# :nocov:
|
|
108
|
+
end
|
|
109
|
+
end
|
|
93
110
|
Sequel.convert_output_timestamp(dt, Sequel.application_timezone)
|
|
94
111
|
else
|
|
95
112
|
super(value)
|
|
@@ -172,7 +189,7 @@ module Sequel
|
|
|
172
189
|
if date < DATETIME_YEAR_1
|
|
173
190
|
date <<= ((date.year) * 24 - 12)
|
|
174
191
|
date = db.from_application_timestamp(date)
|
|
175
|
-
minutes = (date.
|
|
192
|
+
minutes = (date.offset * 1440).to_i
|
|
176
193
|
date.strftime("'%Y-%m-%d %H:%M:%S.%N#{format_timestamp_offset(*minutes.divmod(60))} BC'")
|
|
177
194
|
else
|
|
178
195
|
super
|
|
@@ -191,15 +208,6 @@ module Sequel
|
|
|
191
208
|
if RUBY_ENGINE == 'jruby'
|
|
192
209
|
# :nocov:
|
|
193
210
|
|
|
194
|
-
# Work around JRuby bug #4822 in Time#to_datetime for times before date of calendar reform
|
|
195
|
-
def literal_time(time)
|
|
196
|
-
if time < TIME_YEAR_1
|
|
197
|
-
literal_datetime(DateTime.parse(super))
|
|
198
|
-
else
|
|
199
|
-
super
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
211
|
ExtendedDateSupport::CONVERT_TYPES = [Java::JavaSQL::Types::DATE, Java::JavaSQL::Types::TIMESTAMP]
|
|
204
212
|
|
|
205
213
|
# Use non-JDBC parsing as JDBC parsing doesn't work for BC dates/timestamps.
|
|
@@ -211,6 +219,18 @@ module Sequel
|
|
|
211
219
|
super
|
|
212
220
|
end
|
|
213
221
|
end
|
|
222
|
+
|
|
223
|
+
# Work around JRuby bug #4822 in Time#to_datetime for times before date of calendar reform
|
|
224
|
+
def literal_time(time)
|
|
225
|
+
if time < TIME_YEAR_1
|
|
226
|
+
dt = DateTime.parse(super)
|
|
227
|
+
# Work around JRuby bug #5191
|
|
228
|
+
dt >>= 12 if JRUBY_VERSION == '9.2.0.0'
|
|
229
|
+
literal_datetime(dt)
|
|
230
|
+
else
|
|
231
|
+
super
|
|
232
|
+
end
|
|
233
|
+
end
|
|
214
234
|
# :nocov:
|
|
215
235
|
else
|
|
216
236
|
# Handle BC Time objects.
|
|
@@ -74,6 +74,12 @@
|
|
|
74
74
|
#
|
|
75
75
|
# DB.extension :pg_hstore
|
|
76
76
|
#
|
|
77
|
+
# This extension integrates with the pg_array extension. If you plan
|
|
78
|
+
# to use arrays of hstore types, load the pg_array extension before the
|
|
79
|
+
# pg_interval extension:
|
|
80
|
+
#
|
|
81
|
+
# DB.extension :pg_array, :pg_hstore
|
|
82
|
+
#
|
|
77
83
|
# See the {schema modification guide}[rdoc-ref:doc/schema_modification.rdoc]
|
|
78
84
|
# for details on using hstore columns in CREATE/ALTER TABLE statements.
|
|
79
85
|
#
|