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,4 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The select_remove extension adds select_remove for removing existing selected
|
|
2
4
|
# columns from a dataset. It's not part of Sequel core as it is rarely needed and has
|
|
3
5
|
# some corner cases where it can't work correctly.
|
|
4
6
|
#
|
|
@@ -11,6 +13,8 @@
|
|
|
11
13
|
# is probably the desired behavior if you are using this extension:
|
|
12
14
|
#
|
|
13
15
|
# DB.extension(:select_remove)
|
|
16
|
+
#
|
|
17
|
+
# Related module: Sequel::SelectRemove
|
|
14
18
|
|
|
15
19
|
#
|
|
16
20
|
module Sequel
|
|
@@ -22,8 +26,8 @@ module Sequel
|
|
|
22
26
|
# # Assume columns a, b, and c in items table
|
|
23
27
|
# DB[:items] # SELECT * FROM items
|
|
24
28
|
# DB[:items].select_remove(:c) # SELECT a, b FROM items
|
|
25
|
-
# DB[:items].select(:a, :
|
|
26
|
-
# DB[:items].select(:a, :
|
|
29
|
+
# DB[:items].select(:a, Sequel[:b].as(:c), Sequel[:c].as(:b)).select_remove(:c) # SELECT a, c AS b FROM items
|
|
30
|
+
# DB[:items].select(:a, Sequel[:b][:c], Sequel[:c][:b]).select_remove(Sequel[:c][:b]) # SELECT a, b AS c FROM items
|
|
27
31
|
#
|
|
28
32
|
# Note that there are a few cases where this method may not work correctly:
|
|
29
33
|
#
|
|
@@ -31,7 +35,7 @@ module Sequel
|
|
|
31
35
|
# In this case, the code will currently use unqualified column names for all columns
|
|
32
36
|
# the dataset returns, except for the columns given.
|
|
33
37
|
# * This dataset has an existing explicit selection containing an item that returns
|
|
34
|
-
# multiple database columns (e.g. Sequel
|
|
38
|
+
# multiple database columns (e.g. Sequel[:table].*, Sequel.lit('column1, column2')). In this case,
|
|
35
39
|
# the behavior is undefined and this method should not be used.
|
|
36
40
|
#
|
|
37
41
|
# There may be other cases where this method does not work correctly, use it with caution.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# This adds the following dataset methods:
|
|
4
|
+
#
|
|
5
|
+
# and :: alias for where
|
|
6
|
+
# exclude_where :: alias for exclude
|
|
7
|
+
# interval :: Returns max - min, using a single query
|
|
8
|
+
# range :: Returns min..max, using a single query
|
|
9
|
+
#
|
|
10
|
+
# It is only recommended to use this for backwards compatibility.
|
|
11
|
+
#
|
|
12
|
+
# You can load this extension into specific datasets:
|
|
13
|
+
#
|
|
14
|
+
# ds = DB[:table]
|
|
15
|
+
# ds = ds.extension(:sequel_4_dataset_methods)
|
|
16
|
+
#
|
|
17
|
+
# Or you can load it into all of a database's datasets, which
|
|
18
|
+
# is probably the desired behavior if you are using this extension:
|
|
19
|
+
#
|
|
20
|
+
# DB.extension(:sequel_4_dataset_methods)
|
|
21
|
+
#
|
|
22
|
+
# Related module: Sequel::Sequel4DatasetMethods
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
module Sequel
|
|
26
|
+
module Sequel4DatasetMethods
|
|
27
|
+
# Alias for where.
|
|
28
|
+
def and(*cond, &block)
|
|
29
|
+
where(*cond, &block)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Alias for exclude.
|
|
33
|
+
def exclude_where(*cond, &block)
|
|
34
|
+
exclude(*cond, &block)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Returns the interval between minimum and maximum values for the given
|
|
38
|
+
# column/expression. Uses a virtual row block if no argument is given.
|
|
39
|
+
#
|
|
40
|
+
# DB[:table].interval(:id) # SELECT (max(id) - min(id)) FROM table LIMIT 1
|
|
41
|
+
# # => 6
|
|
42
|
+
# DB[:table].interval{function(column)} # SELECT (max(function(column)) - min(function(column))) FROM table LIMIT 1
|
|
43
|
+
# # => 7
|
|
44
|
+
def interval(column=(no_arg = true), &block)
|
|
45
|
+
column = Sequel.virtual_row(&block) if no_arg
|
|
46
|
+
if loader = cached_placeholder_literalizer(:_interval_loader) do |pl|
|
|
47
|
+
arg = pl.arg
|
|
48
|
+
aggregate_dataset.limit(1).select((SQL::Function.new(:max, arg) - SQL::Function.new(:min, arg)).as(:interval))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
loader.get(column)
|
|
52
|
+
else
|
|
53
|
+
aggregate_dataset.get{(max(column) - min(column)).as(:interval)}
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Returns a +Range+ instance made from the minimum and maximum values for the
|
|
58
|
+
# given column/expression. Uses a virtual row block if no argument is given.
|
|
59
|
+
#
|
|
60
|
+
# DB[:table].range(:id) # SELECT max(id) AS v1, min(id) AS v2 FROM table LIMIT 1
|
|
61
|
+
# # => 1..10
|
|
62
|
+
# DB[:table].interval{function(column)} # SELECT max(function(column)) AS v1, min(function(column)) AS v2 FROM table LIMIT 1
|
|
63
|
+
# # => 0..7
|
|
64
|
+
def range(column=(no_arg = true), &block)
|
|
65
|
+
column = Sequel.virtual_row(&block) if no_arg
|
|
66
|
+
r = if loader = cached_placeholder_literalizer(:_range_loader) do |pl|
|
|
67
|
+
arg = pl.arg
|
|
68
|
+
aggregate_dataset.limit(1).select(SQL::Function.new(:min, arg).as(:v1), SQL::Function.new(:max, arg).as(:v2))
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
loader.first(column)
|
|
72
|
+
else
|
|
73
|
+
aggregate_dataset.select{[min(column).as(v1), max(column).as(v2)]}.first
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
if r
|
|
77
|
+
(r[:v1]..r[:v2])
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
Dataset.register_extension(:sequel_4_dataset_methods, Sequel4DatasetMethods)
|
|
84
|
+
end
|
|
85
|
+
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The server_block extension adds the Database#with_server method, which takes a shard
|
|
2
4
|
# argument and a block, and makes it so that access inside the block will use the
|
|
3
5
|
# specified shard by default.
|
|
@@ -14,7 +16,7 @@
|
|
|
14
16
|
# end
|
|
15
17
|
# DB[:a].all # Uses default
|
|
16
18
|
#
|
|
17
|
-
# You can
|
|
19
|
+
# You can nest calls to with_server:
|
|
18
20
|
#
|
|
19
21
|
# DB.with_server(:shard1) do
|
|
20
22
|
# DB[:a].all # Uses shard1
|
|
@@ -36,6 +38,28 @@
|
|
|
36
38
|
# DB[:a].server(:default).all # Uses shard1
|
|
37
39
|
# DB[:a].server(:read_only).all # Uses shard1
|
|
38
40
|
# end
|
|
41
|
+
#
|
|
42
|
+
# If you pass two separate shards to with_server, the second shard will
|
|
43
|
+
# be used instead of the :read_only shard, and the first shard will be
|
|
44
|
+
# used instead of the :default shard:
|
|
45
|
+
#
|
|
46
|
+
# DB.with_server(:shard1, :shard2) do
|
|
47
|
+
# DB[:a].all # Uses shard2
|
|
48
|
+
# DB[:a].delete # Uses shard1
|
|
49
|
+
# DB[:a].server(:shard3).all # Uses shard3
|
|
50
|
+
# DB[:a].server(:shard3).delete # Uses shard3
|
|
51
|
+
# DB[:a].server(:default).all # Uses shard1
|
|
52
|
+
# DB[:a].server(:read_only).delete # Uses shard2
|
|
53
|
+
# end
|
|
54
|
+
#
|
|
55
|
+
# If you use an invalid server when calling with_server, it will be
|
|
56
|
+
# treated the same way as if you called Dataset#server with an invalid
|
|
57
|
+
# server. By default, the default server will be used in such cases.
|
|
58
|
+
# If you would like a different server to be used, or an exception to
|
|
59
|
+
# be raised, then use the :servers_hash Database option.
|
|
60
|
+
#
|
|
61
|
+
# Related modules: Sequel::ServerBlock, Sequel::UnthreadedServerBlock,
|
|
62
|
+
# Sequel::ThreadedServerBlock
|
|
39
63
|
|
|
40
64
|
#
|
|
41
65
|
module Sequel
|
|
@@ -55,17 +79,17 @@ module Sequel
|
|
|
55
79
|
end
|
|
56
80
|
|
|
57
81
|
# Delegate to the connection pool
|
|
58
|
-
def with_server(
|
|
59
|
-
pool.with_server(
|
|
82
|
+
def with_server(default_server, read_only_server=default_server, &block)
|
|
83
|
+
pool.with_server(default_server, read_only_server, &block)
|
|
60
84
|
end
|
|
61
85
|
end
|
|
62
86
|
|
|
63
87
|
# Adds with_server support for the sharded single connection pool.
|
|
64
88
|
module UnthreadedServerBlock
|
|
65
89
|
# Set a default server/shard to use inside the block.
|
|
66
|
-
def with_server(
|
|
90
|
+
def with_server(default_server, read_only_server=default_server)
|
|
67
91
|
begin
|
|
68
|
-
set_default_server(
|
|
92
|
+
set_default_server(default_server, read_only_server)
|
|
69
93
|
yield
|
|
70
94
|
ensure
|
|
71
95
|
clear_default_server
|
|
@@ -75,8 +99,8 @@ module Sequel
|
|
|
75
99
|
private
|
|
76
100
|
|
|
77
101
|
# Make the given server the new default server.
|
|
78
|
-
def set_default_server(
|
|
79
|
-
@default_servers <<
|
|
102
|
+
def set_default_server(default_server, read_only_server=default_server)
|
|
103
|
+
@default_servers << [default_server, read_only_server]
|
|
80
104
|
end
|
|
81
105
|
|
|
82
106
|
# Remove the current default server, restoring the
|
|
@@ -91,8 +115,10 @@ module Sequel
|
|
|
91
115
|
super
|
|
92
116
|
else
|
|
93
117
|
case server
|
|
94
|
-
when :default, nil
|
|
95
|
-
@default_servers
|
|
118
|
+
when :default, nil
|
|
119
|
+
@servers[@default_servers[-1][0]]
|
|
120
|
+
when :read_only
|
|
121
|
+
@servers[@default_servers[-1][1]]
|
|
96
122
|
else
|
|
97
123
|
super
|
|
98
124
|
end
|
|
@@ -104,9 +130,9 @@ module Sequel
|
|
|
104
130
|
module ThreadedServerBlock
|
|
105
131
|
# Set a default server/shard to use inside the block for the current
|
|
106
132
|
# thread.
|
|
107
|
-
def with_server(
|
|
133
|
+
def with_server(default_server, read_only_server=default_server)
|
|
108
134
|
begin
|
|
109
|
-
set_default_server(
|
|
135
|
+
set_default_server(default_server, read_only_server)
|
|
110
136
|
yield
|
|
111
137
|
ensure
|
|
112
138
|
clear_default_server
|
|
@@ -116,14 +142,14 @@ module Sequel
|
|
|
116
142
|
private
|
|
117
143
|
|
|
118
144
|
# Make the given server the new default server for the current thread.
|
|
119
|
-
def set_default_server(
|
|
120
|
-
sync{(@default_servers[
|
|
145
|
+
def set_default_server(default_server, read_only_server=default_server)
|
|
146
|
+
sync{(@default_servers[Sequel.current] ||= [])} << [default_server, read_only_server]
|
|
121
147
|
end
|
|
122
148
|
|
|
123
149
|
# Remove the current default server for the current thread, restoring the
|
|
124
150
|
# previous default server.
|
|
125
151
|
def clear_default_server
|
|
126
|
-
t =
|
|
152
|
+
t = Sequel.current
|
|
127
153
|
a = sync{@default_servers[t]}
|
|
128
154
|
a.pop
|
|
129
155
|
sync{@default_servers.delete(t)} if a.empty?
|
|
@@ -131,13 +157,20 @@ module Sequel
|
|
|
131
157
|
|
|
132
158
|
# Use the server given to with_server for the given thread, if appropriate.
|
|
133
159
|
def pick_server(server)
|
|
134
|
-
a = sync{@default_servers[
|
|
160
|
+
a = sync{@default_servers[Sequel.current]}
|
|
135
161
|
if !a || a.empty?
|
|
136
162
|
super
|
|
137
163
|
else
|
|
164
|
+
# Hash handling required to work when loaded after arbitrary servers plugin.
|
|
138
165
|
case server
|
|
139
|
-
when :default, nil
|
|
140
|
-
a
|
|
166
|
+
when :default, nil
|
|
167
|
+
v = a[-1][0]
|
|
168
|
+
v = @servers[v] unless v.is_a?(Hash)
|
|
169
|
+
v
|
|
170
|
+
when :read_only
|
|
171
|
+
v = a[-1][1]
|
|
172
|
+
v = @servers[v] unless v.is_a?(Hash)
|
|
173
|
+
v
|
|
141
174
|
else
|
|
142
175
|
super
|
|
143
176
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The server_logging extension makes the logger include the server/shard
|
|
4
|
+
# the query was issued on. This makes it easier to use the logs when
|
|
5
|
+
# using sharding.
|
|
6
|
+
#
|
|
7
|
+
# Example:
|
|
8
|
+
#
|
|
9
|
+
# DB.opts[:server]
|
|
10
|
+
# # {:read_only=>{}, :b=>{}}
|
|
11
|
+
# DB.extension :server_logging
|
|
12
|
+
# DB[:a].all
|
|
13
|
+
# # (0.000005s) (conn: 1014942550, server: read_only) SELECT * FROM a
|
|
14
|
+
# DB[:a].server(:b).all
|
|
15
|
+
# # (0.000004s) (conn: 997304100, server: b) SELECT * FROM a
|
|
16
|
+
# DB[:a].insert
|
|
17
|
+
# # (0.000004s) (conn: 1014374750, server: default) INSERT INTO a DEFAULT VALUES
|
|
18
|
+
#
|
|
19
|
+
# In order for the server/shard to be correct for all connections, you need to
|
|
20
|
+
# use this before connections to the database are made, or you need to call
|
|
21
|
+
# <tt>Database#disconnect</tt> after loading this extension.
|
|
22
|
+
#
|
|
23
|
+
# Related module: Sequel::ServerLogging
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
module Sequel
|
|
27
|
+
module ServerLogging
|
|
28
|
+
# Initialize the hash mapping connections to shards, and turn on logging
|
|
29
|
+
# of connection info unless it has specifically been turned off.
|
|
30
|
+
def self.extended(db)
|
|
31
|
+
db.instance_exec do
|
|
32
|
+
@server_connection_map ||= {}
|
|
33
|
+
self.log_connection_info = true if log_connection_info.nil?
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# When setting up a new connection, associate the connection with the
|
|
38
|
+
# shard.
|
|
39
|
+
def connect(server)
|
|
40
|
+
conn = super
|
|
41
|
+
Sequel.synchronize{@server_connection_map[conn] = server}
|
|
42
|
+
conn
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# When disconnecting a connection, remove the related connection from the mapping.
|
|
46
|
+
def disconnect_connection(conn)
|
|
47
|
+
super
|
|
48
|
+
ensure
|
|
49
|
+
Sequel.synchronize{@server_connection_map.delete(conn)}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
# Include the server with the connection's id.
|
|
55
|
+
def connection_info(conn)
|
|
56
|
+
"(conn: #{conn.__id__}, server: #{Sequel.synchronize{@server_connection_map[conn]}}) "
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Database.register_extension(:server_logging, ServerLogging)
|
|
61
|
+
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The split_array_nil extension overrides Sequel's default handling of
|
|
2
4
|
# IN/NOT IN with arrays of values to do specific nil checking. For example,
|
|
3
5
|
#
|
|
4
|
-
# ds = DB[:table].where(:
|
|
6
|
+
# ds = DB[:table].where(column: [1, nil])
|
|
5
7
|
#
|
|
6
8
|
# By default, that produces the following SQL:
|
|
7
9
|
#
|
|
@@ -17,7 +19,7 @@
|
|
|
17
19
|
#
|
|
18
20
|
# Similarly, for NOT IN queries:
|
|
19
21
|
#
|
|
20
|
-
# ds = DB[:table].exclude(:
|
|
22
|
+
# ds = DB[:table].exclude(column: [1, nil])
|
|
21
23
|
# # Default:
|
|
22
24
|
# # SELECT * FROM table WHERE (column NOT IN (1, NULL))
|
|
23
25
|
# # with split_array_nils extension:
|
|
@@ -30,6 +32,8 @@
|
|
|
30
32
|
# To use this extension for all of a database's datasets:
|
|
31
33
|
#
|
|
32
34
|
# DB.extension(:split_array_nil)
|
|
35
|
+
#
|
|
36
|
+
# Related module: Sequel::Dataset::SplitArrayNil
|
|
33
37
|
|
|
34
38
|
#
|
|
35
39
|
module Sequel
|
|
@@ -42,9 +46,9 @@ module Sequel
|
|
|
42
46
|
def complex_expression_sql_append(sql, op, args)
|
|
43
47
|
case op
|
|
44
48
|
when :IN, :"NOT IN"
|
|
45
|
-
vals = args
|
|
49
|
+
vals = args[1]
|
|
46
50
|
if vals.is_a?(Array) && vals.any?(&:nil?)
|
|
47
|
-
cols = args
|
|
51
|
+
cols = args[0]
|
|
48
52
|
vals = vals.compact
|
|
49
53
|
c = Sequel::SQL::BooleanExpression
|
|
50
54
|
if op == :IN
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The sql_comments extension adds Dataset#comment to the datasets,
|
|
4
|
+
# allowing you to set SQL comments in the resulting query. These
|
|
5
|
+
# comments are appended to the end of the SQL query:
|
|
6
|
+
#
|
|
7
|
+
# ds = DB[:table].comment("Some Comment").all
|
|
8
|
+
# # SELECT * FROM table -- Some Comment
|
|
9
|
+
# #
|
|
10
|
+
#
|
|
11
|
+
# As you can see, this uses single line SQL comments (--) suffixed
|
|
12
|
+
# by a newline. This plugin transforms all consecutive whitespace
|
|
13
|
+
# in the comment to a single string:
|
|
14
|
+
#
|
|
15
|
+
# ds = DB[:table].comment("Some\r\nComment Here").all
|
|
16
|
+
# # SELECT * FROM table -- Some Comment Here
|
|
17
|
+
# #
|
|
18
|
+
#
|
|
19
|
+
# The reason for the prefixing and suffixing by newlines is to
|
|
20
|
+
# work correctly when used in subqueries:
|
|
21
|
+
#
|
|
22
|
+
# ds = DB[:table].comment("Some\r\nComment Here")
|
|
23
|
+
# ds.where(id: ds).all
|
|
24
|
+
# # SELECT * FROM table WHERE (id IN (SELECT * FROM table -- Some Comment Here
|
|
25
|
+
# # )) -- Some Comment Here
|
|
26
|
+
# #
|
|
27
|
+
#
|
|
28
|
+
# In addition to working on SELECT queries, it also works when
|
|
29
|
+
# inserting, updating, and deleting.
|
|
30
|
+
#
|
|
31
|
+
# Due to the use of single line SQL comments and converting all
|
|
32
|
+
# whitespace to spaces, this should correctly handle even
|
|
33
|
+
# malicious input. However, it would be unwise to rely on that,
|
|
34
|
+
# you should ensure that the argument given
|
|
35
|
+
# to Dataset#comment is not derived from user input.
|
|
36
|
+
#
|
|
37
|
+
# You can load this extension into specific datasets:
|
|
38
|
+
#
|
|
39
|
+
# ds = DB[:table]
|
|
40
|
+
# ds = ds.extension(:sql_comments)
|
|
41
|
+
#
|
|
42
|
+
# Or you can load it into all of a database's datasets, which
|
|
43
|
+
# is probably the desired behavior if you are using this extension:
|
|
44
|
+
#
|
|
45
|
+
# DB.extension(:sql_comments)
|
|
46
|
+
#
|
|
47
|
+
# Note that Microsoft Access does not support inline comments,
|
|
48
|
+
# and attempting to use comments on it will result in SQL syntax
|
|
49
|
+
# errors.
|
|
50
|
+
#
|
|
51
|
+
# Related module: Sequel::SQLComments
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
module Sequel
|
|
55
|
+
module SQLComments
|
|
56
|
+
# Return a modified copy of the dataset that will use the given comment.
|
|
57
|
+
# To uncomment a commented dataset, pass nil as the argument.
|
|
58
|
+
def comment(comment)
|
|
59
|
+
clone(:comment=>(format_sql_comment(comment) if comment))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
%w'select insert update delete'.each do |type|
|
|
63
|
+
define_method(:"#{type}_sql") do |*a|
|
|
64
|
+
sql = super(*a)
|
|
65
|
+
if comment = @opts[:comment]
|
|
66
|
+
# This assumes that the comment stored in the dataset has
|
|
67
|
+
# already been formatted. If not, this could result in SQL
|
|
68
|
+
# injection.
|
|
69
|
+
#
|
|
70
|
+
# Additionally, due to the use of an SQL comment, if any
|
|
71
|
+
# SQL is appened to the query after the comment is added,
|
|
72
|
+
# it will become part of the comment unless it is preceded
|
|
73
|
+
# by a newline.
|
|
74
|
+
if sql.frozen?
|
|
75
|
+
sql += comment
|
|
76
|
+
sql.freeze
|
|
77
|
+
else
|
|
78
|
+
sql << comment
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
sql
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
# Format the comment. For maximum compatibility, this uses a
|
|
88
|
+
# single line SQL comment, and converts all consecutive whitespace
|
|
89
|
+
# in the comment to a single space.
|
|
90
|
+
def format_sql_comment(comment)
|
|
91
|
+
" -- #{comment.to_s.gsub(/\s+/, ' ')}\n"
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
Dataset.register_extension(:sql_comments, SQLComments)
|
|
96
|
+
end
|