sequel 4.26.0 → 5.37.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 +5 -5
- data/CHANGELOG +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- 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.2.0.txt +33 -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.3.0.txt +121 -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.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -18
- 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 +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/error_splitter.rb +19 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- 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.3.0.txt +0 -40
- data/doc/release_notes/4.4.0.txt +0 -92
- 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/lib/sequel/adapters/cubrid.rb +0 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -179
- data/spec/core/schema_spec.rb +0 -1659
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- 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 -117
- data/spec/extensions/association_pks_spec.rb +0 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- 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 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -712
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -395
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -229
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -404
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -789
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- 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 -66
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- 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/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/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/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 -55
- data/spec/integration/associations_test.rb +0 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The pg_range_ops extension adds support to Sequel's DSL to make
|
|
2
4
|
# it easier to call PostgreSQL range functions and operators.
|
|
3
5
|
#
|
|
@@ -17,7 +19,7 @@
|
|
|
17
19
|
# Also, on most Sequel expression objects, you can call the pg_range
|
|
18
20
|
# method:
|
|
19
21
|
#
|
|
20
|
-
# r = Sequel
|
|
22
|
+
# r = Sequel[:range].pg_range
|
|
21
23
|
#
|
|
22
24
|
# If you have loaded the {core_extensions extension}[rdoc-ref:doc/core_extensions.rdoc],
|
|
23
25
|
# or you have loaded the core_refinements extension
|
|
@@ -51,6 +53,8 @@
|
|
|
51
53
|
# If you are also using the pg_range extension, you should load it before
|
|
52
54
|
# loading this extension. Doing so will allow you to use PGArray#op to get
|
|
53
55
|
# an RangeOp, allowing you to perform range operations on range literals.
|
|
56
|
+
#
|
|
57
|
+
# Related module: Sequel::Postgres::RangeOp
|
|
54
58
|
|
|
55
59
|
#
|
|
56
60
|
module Sequel
|
|
@@ -71,13 +75,12 @@ module Sequel
|
|
|
71
75
|
:starts_after => ["(".freeze, " &> ".freeze, ")".freeze].freeze,
|
|
72
76
|
:adjacent_to => ["(".freeze, " -|- ".freeze, ")".freeze].freeze,
|
|
73
77
|
:overlaps => ["(".freeze, " && ".freeze, ")".freeze].freeze,
|
|
74
|
-
}
|
|
75
|
-
FUNCTIONS = %w'lower upper isempty lower_inc upper_inc lower_inf upper_inf'
|
|
78
|
+
}.freeze
|
|
76
79
|
|
|
77
|
-
|
|
80
|
+
%w'lower upper isempty lower_inc upper_inc lower_inf upper_inf'.each do |f|
|
|
78
81
|
class_eval("def #{f}; function(:#{f}) end", __FILE__, __LINE__)
|
|
79
82
|
end
|
|
80
|
-
OPERATORS.
|
|
83
|
+
OPERATORS.each_key do |f|
|
|
81
84
|
class_eval("def #{f}(v); operator(:#{f}, v) end", __FILE__, __LINE__)
|
|
82
85
|
end
|
|
83
86
|
|
|
@@ -113,7 +116,9 @@ module Sequel
|
|
|
113
116
|
end
|
|
114
117
|
end
|
|
115
118
|
|
|
119
|
+
# :nocov:
|
|
116
120
|
if defined?(PGRange)
|
|
121
|
+
# :nocov:
|
|
117
122
|
class PGRange
|
|
118
123
|
# Wrap the PGRange instance in an RangeOp, allowing you to easily use
|
|
119
124
|
# the PostgreSQL range functions and operators with literal ranges.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The pg_row extension adds support for Sequel to handle
|
|
2
4
|
# PostgreSQL's row-valued/composite types.
|
|
3
5
|
#
|
|
@@ -5,7 +7,7 @@
|
|
|
5
7
|
# that when composite fields are retrieved, they are parsed and returned
|
|
6
8
|
# as instances of Sequel::Postgres::PGRow::(HashRow|ArrayRow), or
|
|
7
9
|
# optionally a custom type. HashRow and ArrayRow are DelegateClasses of
|
|
8
|
-
#
|
|
10
|
+
# Hash and Array, so they mostly act like a hash or array, but not
|
|
9
11
|
# completely (is_a?(Hash) and is_a?(Array) are false). If you want the
|
|
10
12
|
# actual hash for a HashRow, call HashRow#to_hash, and if you want the
|
|
11
13
|
# actual array for an ArrayRow, call ArrayRow#to_a. This is done so
|
|
@@ -16,11 +18,14 @@
|
|
|
16
18
|
# for HashRow and ArrayRow using the standard Sequel literalization callbacks, so
|
|
17
19
|
# they work with on all adapters.
|
|
18
20
|
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
21
|
+
# To use this extension, first load it into the Database instance:
|
|
22
|
+
#
|
|
23
|
+
# DB.extension :pg_row
|
|
24
|
+
#
|
|
25
|
+
# If you plan to use arrays of composite types, make sure you load the
|
|
26
|
+
# pg_array extension first:
|
|
22
27
|
#
|
|
23
|
-
# DB.extension
|
|
28
|
+
# DB.extension :pg_array, :pg_row
|
|
24
29
|
#
|
|
25
30
|
# You can create an anonymous row type by calling the Sequel.pg_row with
|
|
26
31
|
# an array:
|
|
@@ -59,12 +64,12 @@
|
|
|
59
64
|
#
|
|
60
65
|
# You can also use a hash:
|
|
61
66
|
#
|
|
62
|
-
# DB.row_type(:address, :
|
|
67
|
+
# DB.row_type(:address, street: '123 Sesame St.', city: 'Some City', zip: '12345')
|
|
63
68
|
#
|
|
64
69
|
# So if you have a person table that has an address column, here's how you
|
|
65
70
|
# could insert into the column:
|
|
66
71
|
#
|
|
67
|
-
# DB[:table].insert(:
|
|
72
|
+
# DB[:table].insert(address: DB.row_type(:address, street: '123 Sesame St.', city: 'Some City', zip: '12345'))
|
|
68
73
|
#
|
|
69
74
|
# Note that registering row types without providing an explicit :converter option
|
|
70
75
|
# creates anonymous classes. This results in ruby being unable to Marshal such
|
|
@@ -74,25 +79,19 @@
|
|
|
74
79
|
# DB.conversion_procs.select{|k,v| v.is_a?(Sequel::Postgres::PGRow::Parser) && \
|
|
75
80
|
# v.converter && (v.converter.name.nil? || v.converter.name == '') }.map{|k,v| v}
|
|
76
81
|
#
|
|
77
|
-
# If you are not using the native postgres or jdbc/postgresql adapters and are using composite types
|
|
78
|
-
# types as model column values you probably should use the
|
|
79
|
-
# pg_typecast_on_load plugin if the column values are returned as a string.
|
|
80
|
-
#
|
|
81
82
|
# See the {schema modification guide}[rdoc-ref:doc/schema_modification.rdoc]
|
|
82
83
|
# for details on using row type columns in CREATE/ALTER TABLE statements.
|
|
83
84
|
#
|
|
84
85
|
# This extension requires both the strscan and delegate libraries.
|
|
86
|
+
#
|
|
87
|
+
# Related module: Sequel::Postgres::PGRow
|
|
85
88
|
|
|
86
89
|
require 'delegate'
|
|
87
90
|
require 'strscan'
|
|
88
|
-
Sequel.require 'adapters/utils/pg_types'
|
|
89
91
|
|
|
90
92
|
module Sequel
|
|
91
93
|
module Postgres
|
|
92
94
|
module PGRow
|
|
93
|
-
ROW = 'ROW'.freeze
|
|
94
|
-
CAST = '::'.freeze
|
|
95
|
-
|
|
96
95
|
# Class for row-valued/composite types that are treated as arrays. By default,
|
|
97
96
|
# this is only used for generic PostgreSQL record types, as registered
|
|
98
97
|
# types use HashRow by default.
|
|
@@ -130,10 +129,10 @@ module Sequel
|
|
|
130
129
|
|
|
131
130
|
# Append SQL fragment related to this object to the sql.
|
|
132
131
|
def sql_literal_append(ds, sql)
|
|
133
|
-
sql << ROW
|
|
132
|
+
sql << 'ROW'
|
|
134
133
|
ds.literal_append(sql, to_a)
|
|
135
134
|
if db_type
|
|
136
|
-
sql <<
|
|
135
|
+
sql << '::'
|
|
137
136
|
ds.quote_schema_table_append(sql, db_type)
|
|
138
137
|
end
|
|
139
138
|
end
|
|
@@ -202,16 +201,16 @@ module Sequel
|
|
|
202
201
|
# Append SQL fragment related to this object to the sql.
|
|
203
202
|
def sql_literal_append(ds, sql)
|
|
204
203
|
check_columns!
|
|
205
|
-
sql << ROW
|
|
204
|
+
sql << 'ROW'
|
|
206
205
|
ds.literal_append(sql, values_at(*columns))
|
|
207
206
|
if db_type
|
|
208
|
-
sql <<
|
|
207
|
+
sql << '::'
|
|
209
208
|
ds.quote_schema_table_append(sql, db_type)
|
|
210
209
|
end
|
|
211
210
|
end
|
|
212
211
|
end
|
|
213
212
|
|
|
214
|
-
ROW_TYPE_CLASSES = [HashRow, ArrayRow]
|
|
213
|
+
ROW_TYPE_CLASSES = [HashRow, ArrayRow].freeze
|
|
215
214
|
|
|
216
215
|
# This parser-like class splits the PostgreSQL
|
|
217
216
|
# row-valued/composite type output string format
|
|
@@ -220,33 +219,24 @@ module Sequel
|
|
|
220
219
|
# will accept, it only handles the output format that
|
|
221
220
|
# PostgreSQL uses.
|
|
222
221
|
class Splitter < StringScanner
|
|
223
|
-
OPEN_PAREN = /\(/.freeze
|
|
224
|
-
CLOSE_PAREN = /\)/.freeze
|
|
225
|
-
UNQUOTED_RE = /[^,)]*/.freeze
|
|
226
|
-
SEP_RE = /[,)]/.freeze
|
|
227
|
-
QUOTE_RE = /"/.freeze
|
|
228
|
-
QUOTE_SEP_RE = /"[,)]/.freeze
|
|
229
|
-
QUOTED_RE = /(\\.|""|[^"])*/.freeze
|
|
230
|
-
REPLACE_RE = /\\(.)|"(")/.freeze
|
|
231
|
-
REPLACE_WITH = '\1\2'.freeze
|
|
232
|
-
|
|
233
222
|
# Split the stored string into an array of strings, handling
|
|
234
223
|
# the different types of quoting.
|
|
235
224
|
def parse
|
|
236
|
-
return @result if @result
|
|
237
225
|
values = []
|
|
238
|
-
skip(
|
|
239
|
-
if skip(
|
|
226
|
+
skip(/\(/)
|
|
227
|
+
if skip(/\)/)
|
|
240
228
|
values << nil
|
|
241
229
|
else
|
|
230
|
+
# :nocov:
|
|
242
231
|
until eos?
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
232
|
+
# :nocov:
|
|
233
|
+
if skip(/"/)
|
|
234
|
+
values << scan(/(\\.|""|[^"])*/).gsub(/\\(.)|"(")/, '\1\2')
|
|
235
|
+
skip(/"[,)]/)
|
|
246
236
|
else
|
|
247
|
-
v = scan(
|
|
237
|
+
v = scan(/[^,)]*/)
|
|
248
238
|
values << (v unless v.empty?)
|
|
249
|
-
skip(
|
|
239
|
+
skip(/[,)]/)
|
|
250
240
|
end
|
|
251
241
|
end
|
|
252
242
|
end
|
|
@@ -373,10 +363,6 @@ module Sequel
|
|
|
373
363
|
end
|
|
374
364
|
|
|
375
365
|
module DatabaseMethods
|
|
376
|
-
ESCAPE_RE = /("|\\)/.freeze
|
|
377
|
-
ESCAPE_REPLACEMENT = '\\\\\1'.freeze
|
|
378
|
-
COMMA = ','.freeze
|
|
379
|
-
|
|
380
366
|
# A hash mapping row type keys (usually symbols), to option
|
|
381
367
|
# hashes. At the least, the values will contain the :parser
|
|
382
368
|
# option for the Parser instance that the type will use.
|
|
@@ -384,17 +370,14 @@ module Sequel
|
|
|
384
370
|
|
|
385
371
|
# Do some setup for the data structures the module uses.
|
|
386
372
|
def self.extended(db)
|
|
387
|
-
|
|
388
|
-
# makes things not break if a user extends the database with
|
|
389
|
-
# this module more than once (since extended is called every
|
|
390
|
-
# time).
|
|
391
|
-
return if db.row_types
|
|
392
|
-
|
|
393
|
-
db.instance_eval do
|
|
373
|
+
db.instance_exec do
|
|
394
374
|
@row_types = {}
|
|
395
375
|
@row_schema_types = {}
|
|
396
376
|
extend(@row_type_method_module = Module.new)
|
|
397
|
-
|
|
377
|
+
add_conversion_proc(2249, PGRow::Parser.new(:converter=>PGRow::ArrayRow))
|
|
378
|
+
if respond_to?(:register_array_type)
|
|
379
|
+
register_array_type('record', :oid=>2287, :scalar_oid=>2249)
|
|
380
|
+
end
|
|
398
381
|
end
|
|
399
382
|
end
|
|
400
383
|
|
|
@@ -402,15 +385,23 @@ module Sequel
|
|
|
402
385
|
def bound_variable_arg(arg, conn)
|
|
403
386
|
case arg
|
|
404
387
|
when ArrayRow
|
|
405
|
-
"(#{arg.map{|v| bound_variable_array(v) if v}.join(
|
|
388
|
+
"(#{arg.map{|v| bound_variable_array(v) if v}.join(',')})"
|
|
406
389
|
when HashRow
|
|
407
390
|
arg.check_columns!
|
|
408
|
-
"(#{arg.values_at(*arg.columns).map{|v| bound_variable_array(v) if v}.join(
|
|
391
|
+
"(#{arg.values_at(*arg.columns).map{|v| bound_variable_array(v) if v}.join(',')})"
|
|
409
392
|
else
|
|
410
393
|
super
|
|
411
394
|
end
|
|
412
395
|
end
|
|
413
396
|
|
|
397
|
+
# Freeze the row types and row schema types to prevent adding new ones.
|
|
398
|
+
def freeze
|
|
399
|
+
@row_types.freeze
|
|
400
|
+
@row_schema_types.freeze
|
|
401
|
+
@row_type_method_module.freeze
|
|
402
|
+
super
|
|
403
|
+
end
|
|
404
|
+
|
|
414
405
|
# Register a new row type for the Database instance. db_type should be the type
|
|
415
406
|
# symbol. This parses the PostgreSQL system tables to get information the
|
|
416
407
|
# composite type, and by default has the type return instances of a subclass
|
|
@@ -432,7 +423,7 @@ module Sequel
|
|
|
432
423
|
|
|
433
424
|
# Get basic oid information for the composite type.
|
|
434
425
|
ds = from(:pg_type).
|
|
435
|
-
select
|
|
426
|
+
select{[pg_type[:oid], :typrelid, :typarray]}.
|
|
436
427
|
where([[:typtype, 'c'], [:typname, type_name.to_s]])
|
|
437
428
|
if type_schema
|
|
438
429
|
ds = ds.join(:pg_namespace, [[:oid, :typnamespace], [:nspname, type_schema.to_s]])
|
|
@@ -454,7 +445,7 @@ module Sequel
|
|
|
454
445
|
where{attnum > 0}.
|
|
455
446
|
exclude(:attisdropped).
|
|
456
447
|
order(:attnum).
|
|
457
|
-
select_map
|
|
448
|
+
select_map{[:attname, Sequel.case({0=>:atttypid}, pg_type[:typbasetype], pg_type[:typbasetype]).as(:atttypid)]}
|
|
458
449
|
if res.empty?
|
|
459
450
|
raise Error, "no columns for row type #{db_type.inspect} in database"
|
|
460
451
|
end
|
|
@@ -463,13 +454,7 @@ module Sequel
|
|
|
463
454
|
|
|
464
455
|
# Using the conversion_procs, lookup converters for each member of the composite type
|
|
465
456
|
parser_opts[:column_converters] = parser_opts[:column_oids].map do |oid|
|
|
466
|
-
|
|
467
|
-
pr
|
|
468
|
-
elsif !Sequel::Postgres::STRING_TYPES.include?(oid)
|
|
469
|
-
# It's not a string type, and it's possible a conversion proc for this
|
|
470
|
-
# oid will be added later, so do a runtime check for it.
|
|
471
|
-
lambda{|s| (pr = procs[oid]) ? pr.call(s) : s}
|
|
472
|
-
end
|
|
457
|
+
procs[oid]
|
|
473
458
|
end
|
|
474
459
|
|
|
475
460
|
# Setup the converter and typecaster
|
|
@@ -477,18 +462,18 @@ module Sequel
|
|
|
477
462
|
parser_opts[:typecaster] = opts.fetch(:typecaster, parser_opts[:converter])
|
|
478
463
|
|
|
479
464
|
parser = Parser.new(parser_opts)
|
|
480
|
-
|
|
465
|
+
add_conversion_proc(parser.oid, parser)
|
|
481
466
|
|
|
482
|
-
if
|
|
467
|
+
if respond_to?(:register_array_type) && array_oid && array_oid > 0
|
|
483
468
|
array_type_name = if type_schema
|
|
484
469
|
"#{type_schema}.#{type_name}"
|
|
485
470
|
else
|
|
486
471
|
type_name
|
|
487
472
|
end
|
|
488
|
-
|
|
473
|
+
register_array_type(array_type_name, :oid=>array_oid, :converter=>parser, :scalar_typecast=>schema_type_symbol)
|
|
489
474
|
end
|
|
490
475
|
|
|
491
|
-
@row_types[db_type] = opts.merge(:parser=>parser)
|
|
476
|
+
@row_types[literal(db_type)] = opts.merge(:parser=>parser, :type=>db_type)
|
|
492
477
|
@row_schema_types[schema_type_string] = schema_type_symbol
|
|
493
478
|
@schema_type_classes[schema_type_symbol] = ROW_TYPE_CLASSES
|
|
494
479
|
@row_type_method_module.class_eval do
|
|
@@ -499,27 +484,14 @@ module Sequel
|
|
|
499
484
|
private meth
|
|
500
485
|
end
|
|
501
486
|
|
|
502
|
-
conversion_procs_updated
|
|
503
487
|
nil
|
|
504
488
|
end
|
|
505
489
|
|
|
506
|
-
# When reseting conversion procs, reregister all the row types so that
|
|
507
|
-
# the system tables are introspected again, picking up database changes.
|
|
508
|
-
def reset_conversion_procs
|
|
509
|
-
procs = super
|
|
510
|
-
|
|
511
|
-
row_types.each do |db_type, opts|
|
|
512
|
-
register_row_type(db_type, opts)
|
|
513
|
-
end
|
|
514
|
-
|
|
515
|
-
procs
|
|
516
|
-
end
|
|
517
|
-
|
|
518
490
|
# Handle typecasting of the given object to the given database type.
|
|
519
491
|
# In general, the given database type should already be registered,
|
|
520
492
|
# but if obj is an array, this will handled unregistered types.
|
|
521
493
|
def row_type(db_type, obj)
|
|
522
|
-
(type_hash = @row_types[db_type]) &&
|
|
494
|
+
(type_hash = @row_types[literal(db_type)]) &&
|
|
523
495
|
(parser = type_hash[:parser])
|
|
524
496
|
|
|
525
497
|
case obj
|
|
@@ -550,10 +522,10 @@ module Sequel
|
|
|
550
522
|
def bound_variable_array(arg)
|
|
551
523
|
case arg
|
|
552
524
|
when ArrayRow
|
|
553
|
-
"\"(#{arg.map{|v| bound_variable_array(v) if v}.join(
|
|
525
|
+
"\"(#{arg.map{|v| bound_variable_array(v) if v}.join(',').gsub(/("|\\)/, '\\\\\1')})\""
|
|
554
526
|
when HashRow
|
|
555
527
|
arg.check_columns!
|
|
556
|
-
"\"(#{arg.values_at(*arg.columns).map{|v| bound_variable_array(v) if v}.join(
|
|
528
|
+
"\"(#{arg.values_at(*arg.columns).map{|v| bound_variable_array(v) if v}.join(',').gsub(/("|\\)/, '\\\\\1')})\""
|
|
557
529
|
else
|
|
558
530
|
super
|
|
559
531
|
end
|
|
@@ -569,12 +541,6 @@ module Sequel
|
|
|
569
541
|
end
|
|
570
542
|
end
|
|
571
543
|
end
|
|
572
|
-
|
|
573
|
-
# Register the default anonymous record type
|
|
574
|
-
PG_TYPES[2249] = PGRow::Parser.new(:converter=>PGRow::ArrayRow)
|
|
575
|
-
if defined?(PGArray) && PGArray.respond_to?(:register)
|
|
576
|
-
PGArray.register('record', :oid=>2287, :scalar_oid=>2249)
|
|
577
|
-
end
|
|
578
544
|
end
|
|
579
545
|
|
|
580
546
|
module SQL::Builders
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The pg_row_ops extension adds support to Sequel's DSL to make
|
|
2
4
|
# it easier to deal with PostgreSQL row-valued/composite types.
|
|
3
5
|
#
|
|
@@ -17,7 +19,7 @@
|
|
|
17
19
|
# Also, on most Sequel expression objects, you can call the pg_row
|
|
18
20
|
# method:
|
|
19
21
|
#
|
|
20
|
-
# r = Sequel
|
|
22
|
+
# r = Sequel[:row_column].pg_row
|
|
21
23
|
#
|
|
22
24
|
# If you have loaded the {core_extensions extension}[rdoc-ref:doc/core_extensions.rdoc],
|
|
23
25
|
# or you have loaded the core_refinements extension
|
|
@@ -68,31 +70,28 @@
|
|
|
68
70
|
#
|
|
69
71
|
# By casting the expression, you can get a composite type returned:
|
|
70
72
|
#
|
|
71
|
-
# DB[:a].select(a.splat).first # SELECT (a.*)::a FROM a
|
|
73
|
+
# DB[:a].select(a.splat(:a)).first # SELECT (a.*)::a FROM a
|
|
72
74
|
# # => {:a=>"(1,2)"} # or {:a=>{:a=>1, :b=>2}} if the "a" type has been registered
|
|
73
75
|
# # with the pg_row extension
|
|
74
76
|
#
|
|
75
77
|
# This feature is mostly useful for a different way to graph tables:
|
|
76
78
|
#
|
|
77
|
-
# DB[:a].join(:b, :
|
|
78
|
-
#
|
|
79
|
+
# DB[:a].join(:b, id: :b_id).select(Sequel.pg_row_op(:a).splat(:a),
|
|
80
|
+
# Sequel.pg_row_op(:b).splat(:b))
|
|
79
81
|
# # SELECT (a.*)::a, (b.*)::b FROM a INNER JOIN b ON (b.id = a.b_id)
|
|
80
82
|
# # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
|
|
83
|
+
#
|
|
84
|
+
# Related module: Sequel::Postgres::PGRowOp
|
|
81
85
|
|
|
82
86
|
#
|
|
83
87
|
module Sequel
|
|
84
88
|
module Postgres
|
|
85
89
|
# This class represents a composite type expression reference.
|
|
86
90
|
class PGRowOp < SQL::PlaceholderLiteralString
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
EMPTY = "".freeze
|
|
92
|
-
ROW = [OPEN, CLOSE_STAR].freeze
|
|
93
|
-
ROW_CAST = [OPEN, CLOSE_STAR_CAST].freeze
|
|
94
|
-
QUALIFY = [OPEN, CLOSE_DOT].freeze
|
|
95
|
-
WRAP = [EMPTY].freeze
|
|
91
|
+
ROW = ['(', '.*)'].freeze.each(&:freeze)
|
|
92
|
+
ROW_CAST = ['(', '.*)::'].freeze.each(&:freeze)
|
|
93
|
+
QUALIFY = ['(', ').'].freeze.each(&:freeze)
|
|
94
|
+
WRAP = [""].freeze.each(&:freeze)
|
|
96
95
|
|
|
97
96
|
# Wrap the expression in a PGRowOp, without changing the
|
|
98
97
|
# SQL it would use.
|
|
@@ -159,6 +158,30 @@ module Sequel
|
|
|
159
158
|
end
|
|
160
159
|
end
|
|
161
160
|
end
|
|
161
|
+
|
|
162
|
+
# :nocov:
|
|
163
|
+
if defined?(PGRow::ArrayRow)
|
|
164
|
+
# :nocov:
|
|
165
|
+
class PGRow::ArrayRow
|
|
166
|
+
# Wrap the PGRow::ArrayRow instance in an PGRowOp, allowing you to easily use
|
|
167
|
+
# the PostgreSQL row functions and operators with literal rows.
|
|
168
|
+
def op
|
|
169
|
+
Sequel.pg_row_op(self)
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# :nocov:
|
|
175
|
+
if defined?(PGRow::HashRow)
|
|
176
|
+
# :nocov:
|
|
177
|
+
class PGRow::HashRow
|
|
178
|
+
# Wrap the PGRow::ArrayRow instance in an PGRowOp, allowing you to easily use
|
|
179
|
+
# the PostgreSQL row functions and operators with literal rows.
|
|
180
|
+
def op
|
|
181
|
+
Sequel.pg_row_op(self)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
162
185
|
end
|
|
163
186
|
|
|
164
187
|
module SQL::Builders
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The pg_static_cache_updater extension is designed to
|
|
2
4
|
# automatically update the caches in the models using the
|
|
3
5
|
# static_cache plugin when changes to the underlying tables
|
|
@@ -61,6 +63,8 @@
|
|
|
61
63
|
# with the pg driver (the model classes do not have to
|
|
62
64
|
# use the same Database).
|
|
63
65
|
# * Must be using a thread-safe connection pool (the default).
|
|
66
|
+
#
|
|
67
|
+
# Related module: Sequel::Postgres::StaticCacheUpdater
|
|
64
68
|
|
|
65
69
|
#
|
|
66
70
|
module Sequel
|
|
@@ -117,7 +121,7 @@ SQL
|
|
|
117
121
|
|
|
118
122
|
oid_map = {}
|
|
119
123
|
models.each do |model|
|
|
120
|
-
raise Error, "#{model.inspect} does not use the static_cache plugin" unless model.respond_to?(:load_cache
|
|
124
|
+
raise Error, "#{model.inspect} does not use the static_cache plugin" unless model.respond_to?(:load_cache)
|
|
121
125
|
oid_map[get(regclass_oid(model.dataset.first_source_table))] = model
|
|
122
126
|
end
|
|
123
127
|
|
|
@@ -125,7 +129,7 @@ SQL
|
|
|
125
129
|
begin
|
|
126
130
|
listen(opts[:channel_name]||default_static_cache_update_name, {:loop=>true}.merge!(opts)) do |_, _, oid|
|
|
127
131
|
if model = oid_map[oid.to_i]
|
|
128
|
-
model.
|
|
132
|
+
model.load_cache
|
|
129
133
|
end
|
|
130
134
|
end
|
|
131
135
|
ensure
|