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,17 +1,16 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
class Dataset
|
|
3
5
|
module StoredProcedureMethods
|
|
4
6
|
# The name of the stored procedure to call
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
attr_writer :sproc_args
|
|
7
|
+
def sproc_name
|
|
8
|
+
@opts[:sproc_name]
|
|
9
|
+
end
|
|
9
10
|
|
|
10
11
|
# Call the stored procedure with the given args
|
|
11
12
|
def call(*args, &block)
|
|
12
|
-
|
|
13
|
-
sp.sproc_args = args
|
|
14
|
-
sp.run(&block)
|
|
13
|
+
clone(:sproc_args=>args).run(&block)
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
# Programmer friendly string showing this is a stored procedure,
|
|
@@ -22,7 +21,7 @@ module Sequel
|
|
|
22
21
|
|
|
23
22
|
# Run the stored procedure with the current args on the database
|
|
24
23
|
def run(&block)
|
|
25
|
-
case @sproc_type
|
|
24
|
+
case @opts[:sproc_type]
|
|
26
25
|
when :select, :all
|
|
27
26
|
all(&block)
|
|
28
27
|
when :first
|
|
@@ -35,14 +34,6 @@ module Sequel
|
|
|
35
34
|
delete
|
|
36
35
|
end
|
|
37
36
|
end
|
|
38
|
-
|
|
39
|
-
# Set the type of the stored procedure and override the corresponding _sql
|
|
40
|
-
# method to return the empty string (since the result will be
|
|
41
|
-
# ignored anyway).
|
|
42
|
-
def sproc_type=(type)
|
|
43
|
-
@sproc_type = type
|
|
44
|
-
@opts[:sql] = ''
|
|
45
|
-
end
|
|
46
37
|
end
|
|
47
38
|
|
|
48
39
|
module StoredProcedures
|
|
@@ -56,18 +47,14 @@ module Sequel
|
|
|
56
47
|
# Transform this dataset into a stored procedure that you can call
|
|
57
48
|
# multiple times with new arguments.
|
|
58
49
|
def prepare_sproc(type, name)
|
|
59
|
-
|
|
60
|
-
prepare_extend_sproc(sp)
|
|
61
|
-
sp.sproc_type = type
|
|
62
|
-
sp.sproc_name = name
|
|
63
|
-
sp
|
|
50
|
+
prepare_extend_sproc(self).clone(:sproc_type=>type, :sproc_name=>name, :sql=>'')
|
|
64
51
|
end
|
|
65
52
|
|
|
66
53
|
private
|
|
67
54
|
|
|
68
55
|
# Extend the dataset with the stored procedure methods.
|
|
69
56
|
def prepare_extend_sproc(ds)
|
|
70
|
-
ds.
|
|
57
|
+
ds.with_extend(StoredProcedureMethods)
|
|
71
58
|
end
|
|
72
59
|
end
|
|
73
60
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Sequel
|
|
4
|
+
module UnmodifiedIdentifiers
|
|
5
|
+
module DatabaseMethods
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
# Databases that use this module for unquoted identifiers to lowercase.
|
|
9
|
+
def folds_unquoted_identifiers_to_uppercase?
|
|
10
|
+
false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module DatasetMethods
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
# Turn the given symbol/string into a symbol, keeping the current case.
|
|
18
|
+
def output_identifier(v)
|
|
19
|
+
v == '' ? :untitled : v.to_sym
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Turn the given symbol/string into a string, keeping the current case.
|
|
23
|
+
def input_identifier(v)
|
|
24
|
+
v.to_s
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
# The +ASTTransformer+ class is designed to handle the abstract syntax trees
|
|
3
5
|
# that Sequel uses internally and produce modified copies of them. By itself
|
|
@@ -24,8 +26,14 @@ module Sequel
|
|
|
24
26
|
h = {}
|
|
25
27
|
o.each{|k, val| h[v(k)] = v(val)}
|
|
26
28
|
h
|
|
29
|
+
when SQL::NumericExpression
|
|
30
|
+
if o.op == :extract
|
|
31
|
+
o.class.new(o.op, o.args[0], v(o.args[1]))
|
|
32
|
+
else
|
|
33
|
+
o.class.new(o.op, *v(o.args))
|
|
34
|
+
end
|
|
27
35
|
when SQL::ComplexExpression
|
|
28
|
-
|
|
36
|
+
o.class.new(o.op, *v(o.args))
|
|
29
37
|
when SQL::Identifier
|
|
30
38
|
SQL::Identifier.new(v(o.value))
|
|
31
39
|
when SQL::QualifiedIdentifier
|
|
@@ -47,7 +55,7 @@ module Sequel
|
|
|
47
55
|
end
|
|
48
56
|
SQL::Function.new!(o.name, v(o.args), h)
|
|
49
57
|
when SQL::Subscript
|
|
50
|
-
SQL::Subscript.new(v(o.
|
|
58
|
+
SQL::Subscript.new(v(o.expression), v(o.sub))
|
|
51
59
|
when SQL::Window
|
|
52
60
|
opts = o.opts.dup
|
|
53
61
|
opts[:partition] = v(opts[:partition]) if opts[:partition]
|
|
@@ -81,10 +89,8 @@ module Sequel
|
|
|
81
89
|
# Handles qualifying existing datasets, so that unqualified columns
|
|
82
90
|
# in the dataset are qualified with a given table name.
|
|
83
91
|
class Qualifier < ASTTransformer
|
|
84
|
-
#
|
|
85
|
-
|
|
86
|
-
def initialize(ds, table)
|
|
87
|
-
@ds = ds
|
|
92
|
+
# Set the table used to qualify unqualified columns
|
|
93
|
+
def initialize(table)
|
|
88
94
|
@table = table
|
|
89
95
|
end
|
|
90
96
|
|
|
@@ -97,7 +103,7 @@ module Sequel
|
|
|
97
103
|
def v(o)
|
|
98
104
|
case o
|
|
99
105
|
when Symbol
|
|
100
|
-
t, column, aliaz =
|
|
106
|
+
t, column, aliaz = Sequel.split_symbol(o)
|
|
101
107
|
if t
|
|
102
108
|
o
|
|
103
109
|
elsif aliaz
|
|
@@ -115,86 +121,4 @@ module Sequel
|
|
|
115
121
|
end
|
|
116
122
|
end
|
|
117
123
|
end
|
|
118
|
-
|
|
119
|
-
# +Unbinder+ is used to take a dataset filter and return a modified version
|
|
120
|
-
# that unbinds already bound values and returns a dataset with bound value
|
|
121
|
-
# placeholders and a hash of bind values. You can then prepare the dataset
|
|
122
|
-
# and use the bound variables to execute it with the same values.
|
|
123
|
-
#
|
|
124
|
-
# This class only does a limited form of unbinding where the variable names
|
|
125
|
-
# and values can be associated unambiguously. The only cases it handles
|
|
126
|
-
# are <tt>SQL::ComplexExpression<tt> with an operator in +UNBIND_OPS+, a
|
|
127
|
-
# first argument that's an instance of a member of +UNBIND_KEY_CLASSES+, and
|
|
128
|
-
# a second argument that's an instance of a member of +UNBIND_VALUE_CLASSES+.
|
|
129
|
-
#
|
|
130
|
-
# So it can handle cases like:
|
|
131
|
-
#
|
|
132
|
-
# DB.filter(:a=>1).exclude(:b=>2).where{c > 3}
|
|
133
|
-
#
|
|
134
|
-
# But it cannot handle cases like:
|
|
135
|
-
#
|
|
136
|
-
# DB.filter(:a + 1 < 0)
|
|
137
|
-
class Unbinder < ASTTransformer
|
|
138
|
-
# The <tt>SQL::ComplexExpression<tt> operates that will be considered
|
|
139
|
-
# for transformation.
|
|
140
|
-
UNBIND_OPS = [:'=', :'!=', :<, :>, :<=, :>=]
|
|
141
|
-
|
|
142
|
-
# The key classes (first argument of the ComplexExpression) that will
|
|
143
|
-
# considered for transformation.
|
|
144
|
-
UNBIND_KEY_CLASSES = [Symbol, SQL::Identifier, SQL::QualifiedIdentifier]
|
|
145
|
-
|
|
146
|
-
# The value classes (second argument of the ComplexExpression) that
|
|
147
|
-
# will be considered for transformation.
|
|
148
|
-
UNBIND_VALUE_CLASSES = [Numeric, String, Date, Time]
|
|
149
|
-
|
|
150
|
-
# The hash of bind variables that were extracted from the dataset filter.
|
|
151
|
-
attr_reader :binds
|
|
152
|
-
|
|
153
|
-
# Intialize an empty +binds+ hash.
|
|
154
|
-
def initialize
|
|
155
|
-
@binds = {}
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
private
|
|
159
|
-
|
|
160
|
-
# Create a suitable bound variable key for the object, which should be
|
|
161
|
-
# an instance of one of the +UNBIND_KEY_CLASSES+.
|
|
162
|
-
def bind_key(obj)
|
|
163
|
-
case obj
|
|
164
|
-
when Symbol
|
|
165
|
-
obj
|
|
166
|
-
when String
|
|
167
|
-
obj.to_sym
|
|
168
|
-
when SQL::Identifier
|
|
169
|
-
bind_key(obj.value)
|
|
170
|
-
when SQL::QualifiedIdentifier
|
|
171
|
-
:"#{bind_key(obj.table)}.#{bind_key(obj.column)}"
|
|
172
|
-
else
|
|
173
|
-
raise Error, "unhandled object in Sequel::Unbinder#bind_key: #{obj}"
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
# Handle <tt>SQL::ComplexExpression</tt> instances with suitable ops
|
|
178
|
-
# and arguments, substituting the value with a bound variable placeholder
|
|
179
|
-
# and assigning it an entry in the +binds+ hash with a matching key.
|
|
180
|
-
def v(o)
|
|
181
|
-
if o.is_a?(SQL::ComplexExpression) && UNBIND_OPS.include?(o.op)
|
|
182
|
-
l, r = o.args
|
|
183
|
-
l = l.value if l.is_a?(Sequel::SQL::Wrapper)
|
|
184
|
-
r = r.value if r.is_a?(Sequel::SQL::Wrapper)
|
|
185
|
-
if UNBIND_KEY_CLASSES.any?{|c| l.is_a?(c)} && UNBIND_VALUE_CLASSES.any?{|c| r.is_a?(c)} && !r.is_a?(LiteralString)
|
|
186
|
-
key = bind_key(l)
|
|
187
|
-
if (old = binds[key]) && old != r
|
|
188
|
-
raise UnbindDuplicate, "two different values for #{key.inspect}: #{[r, old].inspect}"
|
|
189
|
-
end
|
|
190
|
-
binds[key] = r
|
|
191
|
-
SQL::ComplexExpression.new(o.op, l, :"$#{key}")
|
|
192
|
-
else
|
|
193
|
-
super
|
|
194
|
-
end
|
|
195
|
-
else
|
|
196
|
-
super
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
124
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
# The base connection pool class, which all other connection pools are based
|
|
2
4
|
# on. This class is not instantiated directly, but subclasses should at
|
|
3
5
|
# the very least implement the following API:
|
|
@@ -24,16 +26,13 @@
|
|
|
24
26
|
# specified by the array of symbols.
|
|
25
27
|
class Sequel::ConnectionPool
|
|
26
28
|
OPTS = Sequel::OPTS
|
|
29
|
+
POOL_CLASS_MAP = {
|
|
30
|
+
:threaded => :ThreadedConnectionPool,
|
|
31
|
+
:single => :SingleConnectionPool,
|
|
32
|
+
:sharded_threaded => :ShardedThreadedConnectionPool,
|
|
33
|
+
:sharded_single => :ShardedSingleConnectionPool
|
|
34
|
+
}.freeze
|
|
27
35
|
|
|
28
|
-
# The default server to use
|
|
29
|
-
DEFAULT_SERVER = :default
|
|
30
|
-
|
|
31
|
-
# A map of [single threaded, sharded] values to symbols or ConnectionPool subclasses.
|
|
32
|
-
CONNECTION_POOL_MAP = {[true, false] => :single,
|
|
33
|
-
[true, true] => :sharded_single,
|
|
34
|
-
[false, false] => :threaded,
|
|
35
|
-
[false, true] => :sharded_threaded}
|
|
36
|
-
|
|
37
36
|
# Class methods used to return an appropriate pool subclass, separated
|
|
38
37
|
# into a module for easier overridding by extensions.
|
|
39
38
|
module ClassMethods
|
|
@@ -42,20 +41,33 @@ class Sequel::ConnectionPool
|
|
|
42
41
|
# use a new instance of an appropriate pool subclass based on the
|
|
43
42
|
# <tt>:single_threaded</tt> and <tt>:servers</tt> options.
|
|
44
43
|
def get_pool(db, opts = OPTS)
|
|
45
|
-
|
|
46
|
-
when Class
|
|
47
|
-
v.new(db, opts)
|
|
48
|
-
when Symbol
|
|
49
|
-
require("sequel/connection_pool/#{v}")
|
|
50
|
-
connection_pool_class(opts).new(db, opts) || raise(Sequel::Error, "No connection pool class found")
|
|
51
|
-
end
|
|
44
|
+
connection_pool_class(opts).new(db, opts)
|
|
52
45
|
end
|
|
53
46
|
|
|
54
47
|
private
|
|
55
48
|
|
|
56
49
|
# Return a connection pool class based on the given options.
|
|
57
50
|
def connection_pool_class(opts)
|
|
58
|
-
|
|
51
|
+
if pc = opts[:pool_class]
|
|
52
|
+
unless pc.is_a?(Class)
|
|
53
|
+
unless name = POOL_CLASS_MAP[pc]
|
|
54
|
+
raise Sequel::Error, "unsupported connection pool type, please pass appropriate class as the :pool_class option"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
require_relative "connection_pool/#{pc}"
|
|
58
|
+
pc = Sequel.const_get(name)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
pc
|
|
62
|
+
else
|
|
63
|
+
pc = if opts[:single_threaded]
|
|
64
|
+
opts[:servers] ? :sharded_single : :single
|
|
65
|
+
else
|
|
66
|
+
opts[:servers] ? :sharded_threaded : :threaded
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
connection_pool_class(:pool_class=>pc)
|
|
70
|
+
end
|
|
59
71
|
end
|
|
60
72
|
end
|
|
61
73
|
extend ClassMethods
|
|
@@ -64,6 +76,9 @@ class Sequel::ConnectionPool
|
|
|
64
76
|
# connection made, and is usually used to set custom per-connection settings.
|
|
65
77
|
attr_accessor :after_connect
|
|
66
78
|
|
|
79
|
+
# An array of sql strings to execute on each new connection.
|
|
80
|
+
attr_accessor :connect_sqls
|
|
81
|
+
|
|
67
82
|
# The Sequel::Database object tied to this connection pool.
|
|
68
83
|
attr_accessor :db
|
|
69
84
|
|
|
@@ -74,31 +89,38 @@ class Sequel::ConnectionPool
|
|
|
74
89
|
# :after_connect :: A callable object called after each new connection is made, with the
|
|
75
90
|
# connection object (and server argument if the callable accepts 2 arguments),
|
|
76
91
|
# useful for customizations that you want to apply to all connections.
|
|
77
|
-
# :
|
|
78
|
-
# need to be created as needed. This is useful when connecting takes a long time
|
|
79
|
-
# and you want to avoid possible latency during runtime.
|
|
92
|
+
# :connect_sqls :: An array of sql strings to execute on each new connection, after :after_connect runs.
|
|
80
93
|
def initialize(db, opts=OPTS)
|
|
81
94
|
@db = db
|
|
82
95
|
@after_connect = opts[:after_connect]
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
# Alias for +size+, not aliased directly for ease of subclass implementation
|
|
86
|
-
def created_count(*args)
|
|
87
|
-
size(*args)
|
|
96
|
+
@connect_sqls = opts[:connect_sqls]
|
|
97
|
+
@error_classes = db.send(:database_error_classes).dup.freeze
|
|
88
98
|
end
|
|
89
99
|
|
|
90
100
|
# An array of symbols for all shards/servers, which is a single <tt>:default</tt> by default.
|
|
91
101
|
def servers
|
|
92
|
-
[
|
|
102
|
+
[:default]
|
|
93
103
|
end
|
|
94
104
|
|
|
95
105
|
private
|
|
106
|
+
|
|
107
|
+
# Remove the connection from the pool. For threaded connections, this should be
|
|
108
|
+
# called without the mutex, because the disconnection may block.
|
|
109
|
+
def disconnect_connection(conn)
|
|
110
|
+
db.disconnect_connection(conn)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Whether the given exception is a disconnect exception.
|
|
114
|
+
def disconnect_error?(exception)
|
|
115
|
+
exception.is_a?(Sequel::DatabaseDisconnectError) || db.send(:disconnect_error?, exception, OPTS)
|
|
116
|
+
end
|
|
96
117
|
|
|
97
118
|
# Return a new connection by calling the connection proc with the given server name,
|
|
98
119
|
# and checking for connection errors.
|
|
99
120
|
def make_new(server)
|
|
100
121
|
begin
|
|
101
122
|
conn = @db.connect(server)
|
|
123
|
+
|
|
102
124
|
if ac = @after_connect
|
|
103
125
|
if ac.arity == 2
|
|
104
126
|
ac.call(conn, server)
|
|
@@ -106,6 +128,12 @@ class Sequel::ConnectionPool
|
|
|
106
128
|
ac.call(conn)
|
|
107
129
|
end
|
|
108
130
|
end
|
|
131
|
+
|
|
132
|
+
if cs = @connect_sqls
|
|
133
|
+
cs.each do |sql|
|
|
134
|
+
db.send(:log_connection_execute, conn, sql)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
109
137
|
rescue Exception=>exception
|
|
110
138
|
raise Sequel.convert_exception_class(exception, Sequel::DatabaseConnectionError)
|
|
111
139
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
# A ShardedSingleConnectionPool is a single threaded connection pool that
|
|
2
4
|
# works with multiple shards/servers.
|
|
3
5
|
class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
@@ -17,9 +19,9 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
|
17
19
|
add_servers(opts[:servers].keys) if opts[:servers]
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
# Adds new servers to the connection pool. Primarily used in conjunction with
|
|
21
|
-
# or
|
|
22
|
-
# at runtime. servers argument should be an array of symbols.
|
|
22
|
+
# Adds new servers to the connection pool. Primarily used in conjunction with primary/replica
|
|
23
|
+
# or sharded configurations. Allows for dynamic expansion of the potential replicas/shards
|
|
24
|
+
# at runtime. +servers+ argument should be an array of symbols.
|
|
23
25
|
def add_servers(servers)
|
|
24
26
|
servers.each{|s| @servers[s] = s}
|
|
25
27
|
end
|
|
@@ -39,7 +41,15 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
|
39
41
|
# :server :: Should be a symbol specifing the server to disconnect from,
|
|
40
42
|
# or an array of symbols to specify multiple servers.
|
|
41
43
|
def disconnect(opts=OPTS)
|
|
42
|
-
(opts[:server] ? Array(opts[:server]) : servers).each
|
|
44
|
+
(opts[:server] ? Array(opts[:server]) : servers).each do |s|
|
|
45
|
+
raise Sequel::Error, "invalid server: #{s}" unless @servers.has_key?(s)
|
|
46
|
+
disconnect_server(s)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def freeze
|
|
51
|
+
@servers.freeze
|
|
52
|
+
super
|
|
43
53
|
end
|
|
44
54
|
|
|
45
55
|
# Yields the connection to the supplied block for the given server.
|
|
@@ -48,8 +58,8 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
|
48
58
|
begin
|
|
49
59
|
server = pick_server(server)
|
|
50
60
|
yield(@conns[server] ||= make_new(server))
|
|
51
|
-
rescue Sequel::DatabaseDisconnectError
|
|
52
|
-
disconnect_server(server)
|
|
61
|
+
rescue Sequel::DatabaseDisconnectError, *@error_classes => e
|
|
62
|
+
disconnect_server(server) if disconnect_error?(e)
|
|
53
63
|
raise
|
|
54
64
|
end
|
|
55
65
|
end
|
|
@@ -59,8 +69,7 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
|
59
69
|
1
|
|
60
70
|
end
|
|
61
71
|
|
|
62
|
-
# Remove servers from the connection pool.
|
|
63
|
-
# or shard configurations. Similar to disconnecting from all given servers,
|
|
72
|
+
# Remove servers from the connection pool. Similar to disconnecting from all given servers,
|
|
64
73
|
# except that after it is used, future requests for the server will use the
|
|
65
74
|
# :default server instead.
|
|
66
75
|
def remove_servers(servers)
|
|
@@ -90,7 +99,7 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
|
90
99
|
# Disconnect from the given server, if connected.
|
|
91
100
|
def disconnect_server(server)
|
|
92
101
|
if conn = @conns.delete(server)
|
|
93
|
-
|
|
102
|
+
disconnect_connection(conn)
|
|
94
103
|
end
|
|
95
104
|
end
|
|
96
105
|
|
|
@@ -100,9 +109,7 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
|
100
109
|
end
|
|
101
110
|
|
|
102
111
|
# Make sure there is a valid connection for each server.
|
|
103
|
-
def preconnect
|
|
112
|
+
def preconnect(concurrent = nil)
|
|
104
113
|
servers.each{|s| hold(s){}}
|
|
105
114
|
end
|
|
106
|
-
|
|
107
|
-
CONNECTION_POOL_MAP[[true, true]] = self
|
|
108
115
|
end
|