sequel 4.26.0 → 5.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/error_splitter.rb +19 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -179
- data/spec/core/schema_spec.rb +0 -1659
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -712
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -395
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -229
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -404
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -789
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The eval_inspect extension changes #inspect for Sequel::SQL::Expression
|
|
2
4
|
# subclasses to return a string suitable for ruby's eval, such that
|
|
3
5
|
#
|
|
@@ -11,6 +13,8 @@
|
|
|
11
13
|
# To load the extension:
|
|
12
14
|
#
|
|
13
15
|
# Sequel.extension :eval_inspect
|
|
16
|
+
#
|
|
17
|
+
# Related module: Sequel::EvalInspect
|
|
14
18
|
|
|
15
19
|
#
|
|
16
20
|
module Sequel
|
|
@@ -22,32 +26,25 @@ module Sequel
|
|
|
22
26
|
# for eval.
|
|
23
27
|
def eval_inspect(obj)
|
|
24
28
|
case obj
|
|
25
|
-
when
|
|
26
|
-
"#{obj.
|
|
29
|
+
when BigDecimal
|
|
30
|
+
"Kernel::BigDecimal(#{obj.to_s.inspect})"
|
|
31
|
+
when Sequel::SQL::Blob, Sequel::LiteralString
|
|
32
|
+
"#{obj.class}.new(#{obj.to_s.inspect})"
|
|
33
|
+
when Sequel::SQL::ValueList
|
|
34
|
+
"#{obj.class}.new(#{obj.to_a.inspect})"
|
|
27
35
|
when Array
|
|
28
36
|
"[#{obj.map{|o| eval_inspect(o)}.join(', ')}]"
|
|
29
37
|
when Hash
|
|
30
38
|
"{#{obj.map{|k, v| "#{eval_inspect(k)} => #{eval_inspect(v)}"}.join(', ')}}"
|
|
31
39
|
when Time
|
|
32
40
|
datepart = "%Y-%m-%dT" unless obj.is_a?(Sequel::SQLTime)
|
|
33
|
-
if
|
|
34
|
-
# :nocov:
|
|
35
|
-
# Time on 1.8 doesn't handle %N (or %z on Windows), manually set the usec value in the string
|
|
36
|
-
hours, mins = obj.utc_offset.divmod(3600)
|
|
37
|
-
mins /= 60
|
|
38
|
-
"#{obj.class}.parse(#{obj.strftime("#{datepart}%H:%M:%S.#{sprintf('%06i%+03i%02i', obj.usec, hours, mins)}").inspect})#{'.utc' if obj.utc?}"
|
|
39
|
-
# :nocov:
|
|
40
|
-
else
|
|
41
|
-
"#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
|
|
42
|
-
end
|
|
41
|
+
"#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
|
|
43
42
|
when DateTime
|
|
44
43
|
# Ignore date of calendar reform
|
|
45
44
|
"DateTime.parse(#{obj.strftime('%FT%T.%N%z').inspect})"
|
|
46
45
|
when Date
|
|
47
46
|
# Ignore offset and date of calendar reform
|
|
48
47
|
"Date.new(#{obj.year}, #{obj.month}, #{obj.day})"
|
|
49
|
-
when BigDecimal
|
|
50
|
-
"BigDecimal.new(#{obj.to_s.inspect})"
|
|
51
48
|
else
|
|
52
49
|
obj.inspect
|
|
53
50
|
end
|
|
@@ -69,9 +66,11 @@ module Sequel
|
|
|
69
66
|
args = inspect_args.map do |arg|
|
|
70
67
|
if arg.is_a?(String) && arg =~ /\A\*/
|
|
71
68
|
# Special case string arguments starting with *, indicating that
|
|
72
|
-
# they should return an array to be splatted as the remaining arguments
|
|
69
|
+
# they should return an array to be splatted as the remaining arguments.
|
|
70
|
+
# Allow calling private methods to get inspect output.
|
|
73
71
|
send(arg.sub('*', '')).map{|a| Sequel.eval_inspect(a)}.join(', ')
|
|
74
72
|
else
|
|
73
|
+
# Allow calling private methods to get inspect output.
|
|
75
74
|
Sequel.eval_inspect(send(arg))
|
|
76
75
|
end
|
|
77
76
|
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The exclude_or_null extension adds Dataset#exclude_or_null and
|
|
4
|
+
# Dataset#exclude_or_null_having. These methods are similar to
|
|
5
|
+
# Dataset#exclude and Dataset#exclude_having, except that they
|
|
6
|
+
# will also exclude rows where the condition IS NULL.
|
|
7
|
+
#
|
|
8
|
+
# DB[:table].exclude_or_null(foo: 1)
|
|
9
|
+
# # SELECT * FROM table WHERE NOT coalesce((foo = 1), false)
|
|
10
|
+
#
|
|
11
|
+
# DB[:table].exclude_or_null{foo(bar) =~ 1}
|
|
12
|
+
# # SELECT * FROM table HAVING NOT coalesce((foo(bar) = 1), false))
|
|
13
|
+
#
|
|
14
|
+
# You can load this extension into specific datasets:
|
|
15
|
+
#
|
|
16
|
+
# ds = DB[:table]
|
|
17
|
+
# ds = ds.extension(:exclude_or_null)
|
|
18
|
+
#
|
|
19
|
+
# Or you can load it into all of a database's datasets, which
|
|
20
|
+
# is probably the desired behavior if you are using this extension:
|
|
21
|
+
#
|
|
22
|
+
# DB.extension(:exclude_or_null)
|
|
23
|
+
#
|
|
24
|
+
# Note, this extension works correctly on PostgreSQL, SQLite, MySQL,
|
|
25
|
+
# H2, and HSQLDB. However, it does not work correctly on Microsoft SQL Server,
|
|
26
|
+
# Oracle, DB2, SQLAnywhere, or Derby.
|
|
27
|
+
#
|
|
28
|
+
# Related module: Sequel::ExcludeOrNull
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
module Sequel
|
|
32
|
+
module ExcludeOrNull
|
|
33
|
+
# Performs the inverse of Dataset#where, but also excludes rows where the given
|
|
34
|
+
# condition IS NULL.
|
|
35
|
+
#
|
|
36
|
+
# DB[:items].exclude_or_null(category: 'software')
|
|
37
|
+
# # SELECT * FROM items WHERE NOT coalesce((category = 'software'), false)
|
|
38
|
+
#
|
|
39
|
+
# DB[:items].exclude_or_null(category: 'software', id: 3)
|
|
40
|
+
# # SELECT * FROM items WHERE NOT coalesce(((category = 'software') AND (id = 3)), false)
|
|
41
|
+
def exclude_or_null(*cond, &block)
|
|
42
|
+
add_filter(:where, cond, :or_null, &block)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# The same as exclude_or_null, but affecting the HAVING clause instead of the
|
|
46
|
+
# WHERE clause.
|
|
47
|
+
#
|
|
48
|
+
# DB[:items].select_group(:name).exclude_or_null_having{count(name) < 2}
|
|
49
|
+
# # SELECT name FROM items GROUP BY name HAVING NOT coalesce((count(name) < 2), true)
|
|
50
|
+
def exclude_or_null_having(*cond, &block)
|
|
51
|
+
add_filter(:having, cond, :or_null, &block)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
# Recognize :or_null value for invert, returning an expression for
|
|
57
|
+
# the invert of the condition or the condition being null.
|
|
58
|
+
def _invert_filter(cond, invert)
|
|
59
|
+
if invert == :or_null
|
|
60
|
+
~SQL::Function.new(:coalesce, cond, SQL::Constants::SQLFALSE)
|
|
61
|
+
else
|
|
62
|
+
super
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
Dataset.register_extension(:exclude_or_null, ExcludeOrNull)
|
|
68
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The fiber_concurrency extension changes the default concurrency
|
|
4
|
+
# primitive in Sequel to be Fiber.current instead of Thread.current.
|
|
5
|
+
# This is the value used in various hash keys to implement safe
|
|
6
|
+
# concurrency (thread-safe concurrency by default, fiber-safe
|
|
7
|
+
# concurrency with this extension. It can be enabled via:
|
|
8
|
+
#
|
|
9
|
+
# Sequel.extension :fiber_concurrency
|
|
10
|
+
#
|
|
11
|
+
# Related module: Sequel::FiberConcurrency
|
|
12
|
+
|
|
13
|
+
require 'fiber'
|
|
14
|
+
|
|
15
|
+
module Sequel
|
|
16
|
+
module FiberConcurrency
|
|
17
|
+
# Make the current concurrency primitive be Fiber.current.
|
|
18
|
+
def current
|
|
19
|
+
Fiber.current
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
extend FiberConcurrency
|
|
24
|
+
end
|
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
#
|
|
2
|
-
# to it are treated as virtual rows applying to the FROM clause,
|
|
3
|
-
# instead of virtual rows applying to the WHERE clause. This will
|
|
4
|
-
# probably be made the default in the next major version of Sequel.
|
|
5
|
-
#
|
|
6
|
-
# This makes it easier to use table returning functions:
|
|
7
|
-
#
|
|
8
|
-
# DB.from{table_function(1)}
|
|
9
|
-
# # SELECT * FROM table_function(1)
|
|
10
|
-
#
|
|
11
|
-
# To load the extension into the database:
|
|
12
|
-
#
|
|
13
|
-
# DB.extension :from_block
|
|
14
|
-
|
|
15
|
-
#
|
|
16
|
-
module Sequel
|
|
17
|
-
module Database::FromBlock
|
|
18
|
-
# If a block is given, make it affect the FROM clause:
|
|
19
|
-
# DB.from{table_function(1)}
|
|
20
|
-
# # SELECT * FROM table_function(1)
|
|
21
|
-
def from(*args, &block)
|
|
22
|
-
if block
|
|
23
|
-
@default_dataset.from(*args, &block)
|
|
24
|
-
else
|
|
25
|
-
super
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
Database.register_extension(:from_block, Database::FromBlock)
|
|
31
|
-
end
|
|
1
|
+
# frozen-string-literal: true
|
|
32
2
|
|
|
3
|
+
Sequel::Database.register_extension(:from_block){}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The graph_each extension adds Dataset#graph_each and
|
|
2
4
|
# makes Dataset#each call #graph_each if the dataset has been graphed.
|
|
3
5
|
# Dataset#graph_each splits result hashes into subhashes per table:
|
|
4
6
|
#
|
|
5
|
-
# DB[:a].graph(:b, :
|
|
7
|
+
# DB[:a].graph(:b, id: :b_id).all
|
|
6
8
|
# # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
|
|
7
9
|
#
|
|
8
10
|
# You can load this extension into specific datasets:
|
|
@@ -14,6 +16,8 @@
|
|
|
14
16
|
# is probably the desired behavior if you are using this extension:
|
|
15
17
|
#
|
|
16
18
|
# DB.extension(:graph_each)
|
|
19
|
+
#
|
|
20
|
+
# Related module: Sequel::GraphEach
|
|
17
21
|
|
|
18
22
|
#
|
|
19
23
|
module Sequel
|
|
@@ -27,24 +31,33 @@ module Sequel
|
|
|
27
31
|
end
|
|
28
32
|
end
|
|
29
33
|
|
|
34
|
+
# Call graph_each for graphed datasets that are not being eager graphed.
|
|
35
|
+
def with_sql_each(sql)
|
|
36
|
+
if @opts[:graph] && !@opts[:eager_graph]
|
|
37
|
+
graph_each(sql){|r| yield r}
|
|
38
|
+
else
|
|
39
|
+
super
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
30
43
|
private
|
|
31
44
|
|
|
32
45
|
# Fetch the rows, split them into component table parts,
|
|
33
46
|
# tranform and run the row_proc on each part (if applicable),
|
|
34
47
|
# and yield a hash of the parts.
|
|
35
|
-
def graph_each
|
|
48
|
+
def graph_each(sql=select_sql)
|
|
36
49
|
# Reject tables with nil datasets, as they are excluded from
|
|
37
50
|
# the result set
|
|
38
51
|
datasets = @opts[:graph][:table_aliases].to_a.reject{|ta,ds| ds.nil?}
|
|
39
52
|
# Get just the list of table aliases into a local variable, for speed
|
|
40
|
-
table_aliases = datasets.
|
|
53
|
+
table_aliases = datasets.map{|ta,ds| ta}
|
|
41
54
|
# Get an array of arrays, one for each dataset, with
|
|
42
55
|
# the necessary information about each dataset, for speed
|
|
43
|
-
datasets = datasets.
|
|
56
|
+
datasets = datasets.map{|ta, ds| [ta, ds, ds.row_proc]}
|
|
44
57
|
# Use the manually set graph aliases, if any, otherwise
|
|
45
58
|
# use the ones automatically created by .graph
|
|
46
|
-
column_aliases = @opts[:
|
|
47
|
-
fetch_rows(
|
|
59
|
+
column_aliases = @opts[:graph][:column_aliases]
|
|
60
|
+
fetch_rows(sql) do |r|
|
|
48
61
|
graph = {}
|
|
49
62
|
# Create the sub hashes, one per table
|
|
50
63
|
table_aliases.each{|ta| graph[ta]={}}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The identifier_mangling extension adds support for to change
|
|
4
|
+
# the default identifier mangling for datasets, as well as all
|
|
5
|
+
# datasets for a given database.
|
|
6
|
+
#
|
|
7
|
+
# # Use uppercase identifiers in database, and lowercase in ruby.
|
|
8
|
+
# # Default behavior of Sequel, as the SQL standard behavior
|
|
9
|
+
# # folds unquoted identifiers to uppercase.
|
|
10
|
+
# DB.identifier_input_method = :upcase
|
|
11
|
+
# DB.identifier_output_method = :downcase
|
|
12
|
+
#
|
|
13
|
+
# # Don't modify identifiers.
|
|
14
|
+
# # Default behavior of Sequel on PostgreSQL, MySQL, SQLite,
|
|
15
|
+
# # as they fold unquoted identifiers to lowercase.
|
|
16
|
+
# DB.identifier_input_method = nil
|
|
17
|
+
# DB.identifier_output_method = nil
|
|
18
|
+
#
|
|
19
|
+
# You can also choose to turn on or off identifier quoting:
|
|
20
|
+
#
|
|
21
|
+
# # Quote identifiers. Sequel's default behavior.
|
|
22
|
+
# DB.quote_identifiers = true
|
|
23
|
+
#
|
|
24
|
+
# # Don't quote identifiers. Sequel's default behavior on DB2.
|
|
25
|
+
# DB.quote_identifiers = false
|
|
26
|
+
#
|
|
27
|
+
# To modify the identifiers on a per-dataset basis:
|
|
28
|
+
#
|
|
29
|
+
# ds = DB[:a].with_input_indentifier(:upcase).
|
|
30
|
+
# with_output_identifier(:downcase).
|
|
31
|
+
# with_quote_identifiers(true)
|
|
32
|
+
#
|
|
33
|
+
# To load the extension into the database:
|
|
34
|
+
#
|
|
35
|
+
# DB.extension :identifier_mangling
|
|
36
|
+
#
|
|
37
|
+
# Related modules: Sequel::IdentifierMangling::DatabaseMethods,
|
|
38
|
+
# Sequel::IdentifierMangling::DatasetMethods
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
module Sequel
|
|
42
|
+
module IdentifierMangling
|
|
43
|
+
module DatabaseMethods
|
|
44
|
+
def self.extended(db)
|
|
45
|
+
db.instance_exec do
|
|
46
|
+
@identifier_input_method = nil
|
|
47
|
+
@identifier_output_method = nil
|
|
48
|
+
@quote_identifiers = nil
|
|
49
|
+
reset_identifier_mangling
|
|
50
|
+
extend_datasets(DatasetMethods)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# The identifier input method to use by default for this database (default: adapter default)
|
|
55
|
+
attr_reader :identifier_input_method
|
|
56
|
+
|
|
57
|
+
# The identifier output method to use by default for this database (default: adapter default)
|
|
58
|
+
attr_reader :identifier_output_method
|
|
59
|
+
|
|
60
|
+
# Set the method to call on identifiers going into the database:
|
|
61
|
+
#
|
|
62
|
+
# DB[:items] # SELECT * FROM items
|
|
63
|
+
# DB.identifier_input_method = :upcase
|
|
64
|
+
# DB[:items] # SELECT * FROM ITEMS
|
|
65
|
+
def identifier_input_method=(v)
|
|
66
|
+
reset_default_dataset
|
|
67
|
+
@identifier_input_method = v
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Set the method to call on identifiers coming from the database:
|
|
71
|
+
#
|
|
72
|
+
# DB[:items].first # {:id=>1, :name=>'foo'}
|
|
73
|
+
# DB.identifier_output_method = :upcase
|
|
74
|
+
# DB[:items].first # {:ID=>1, :NAME=>'foo'}
|
|
75
|
+
def identifier_output_method=(v)
|
|
76
|
+
reset_default_dataset
|
|
77
|
+
@identifier_output_method = v
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Set whether to quote identifiers (columns and tables) for this database:
|
|
81
|
+
#
|
|
82
|
+
# DB[:items] # SELECT * FROM items
|
|
83
|
+
# DB.quote_identifiers = true
|
|
84
|
+
# DB[:items] # SELECT * FROM "items"
|
|
85
|
+
def quote_identifiers=(v)
|
|
86
|
+
reset_default_dataset
|
|
87
|
+
@quote_identifiers = v
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Returns true if the database quotes identifiers.
|
|
91
|
+
def quote_identifiers?
|
|
92
|
+
@quote_identifiers
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
# Return a dataset that uses the default identifier input and output methods
|
|
98
|
+
# for this database. Used when parsing metadata so that column symbols are
|
|
99
|
+
# returned as expected.
|
|
100
|
+
def _metadata_dataset
|
|
101
|
+
super.
|
|
102
|
+
with_identifier_input_method(identifier_input_method_default).
|
|
103
|
+
with_identifier_output_method(identifier_output_method_default)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Upcase identifiers on input if database folds unquoted identifiers to
|
|
107
|
+
# uppercase.
|
|
108
|
+
def identifier_input_method_default
|
|
109
|
+
return super if defined?(super)
|
|
110
|
+
:upcase if folds_unquoted_identifiers_to_uppercase?
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Downcase identifiers on output if database folds unquoted identifiers to
|
|
114
|
+
# uppercase.
|
|
115
|
+
def identifier_output_method_default
|
|
116
|
+
return super if defined?(super)
|
|
117
|
+
:downcase if folds_unquoted_identifiers_to_uppercase?
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Reset the identifier mangling options. Overrides any already set on
|
|
121
|
+
# the instance. Only for internal use by shared adapters.
|
|
122
|
+
def reset_identifier_mangling
|
|
123
|
+
@quote_identifiers = @opts.fetch(:quote_identifiers, quote_identifiers_default)
|
|
124
|
+
@identifier_input_method = @opts.fetch(:identifier_input_method, identifier_input_method_default)
|
|
125
|
+
@identifier_output_method = @opts.fetch(:identifier_output_method, identifier_output_method_default)
|
|
126
|
+
reset_default_dataset
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
module DatasetMethods
|
|
131
|
+
# The String instance method to call on identifiers before sending them to
|
|
132
|
+
# the database.
|
|
133
|
+
def identifier_input_method
|
|
134
|
+
@opts.fetch(:identifier_input_method, db.identifier_input_method)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# The String instance method to call on identifiers before sending them to
|
|
138
|
+
# the database.
|
|
139
|
+
def identifier_output_method
|
|
140
|
+
@opts.fetch(:identifier_output_method, db.identifier_output_method)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Check with the database to see if identifier quoting is enabled
|
|
144
|
+
def quote_identifiers?
|
|
145
|
+
@opts.fetch(:quote_identifiers, db.quote_identifiers?)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Return a modified dataset with identifier_input_method set.
|
|
149
|
+
def with_identifier_input_method(meth)
|
|
150
|
+
clone(:identifier_input_method=>meth, :skip_symbol_cache=>true)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Return a modified dataset with identifier_output_method set.
|
|
154
|
+
def with_identifier_output_method(meth)
|
|
155
|
+
clone(:identifier_output_method=>meth)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
private
|
|
159
|
+
|
|
160
|
+
# Convert the identifier to the version used in the database via
|
|
161
|
+
# identifier_input_method.
|
|
162
|
+
def input_identifier(v)
|
|
163
|
+
(i = identifier_input_method) ? v.to_s.public_send(i) : v.to_s
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Modify the identifier returned from the database based on the
|
|
167
|
+
# identifier_output_method.
|
|
168
|
+
def output_identifier(v)
|
|
169
|
+
v = 'untitled' if v == ''
|
|
170
|
+
(i = identifier_output_method) ? v.to_s.public_send(i).to_sym : v.to_sym
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def non_sql_option?(key)
|
|
174
|
+
super || key == :identifier_input_method || key == :identifier_output_method
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
Database.register_extension(:identifier_mangling, IdentifierMangling::DatabaseMethods)
|
|
180
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The implicit_subquery extension changes most dataset methods that
|
|
4
|
+
# return modified datasets to implicitly call from_self if the database
|
|
5
|
+
# currently uses raw SQL. Sequel's by default does not do this:
|
|
6
|
+
#
|
|
7
|
+
# DB["SELECT * FROM table"].select(:column).sql
|
|
8
|
+
# # => "SELECT * FROM table"
|
|
9
|
+
#
|
|
10
|
+
# With this extension, datasets that use raw SQL are implicitly wrapped
|
|
11
|
+
# in a subquery:
|
|
12
|
+
#
|
|
13
|
+
# DB["SELECT * FROM table"].select(:column).sql
|
|
14
|
+
# # => "SELECT column FROM (SELECT * FROM table) AS t1"
|
|
15
|
+
#
|
|
16
|
+
# To add this extension to an existing dataset:
|
|
17
|
+
#
|
|
18
|
+
# ds = ds.extension(:implicit_subquery)
|
|
19
|
+
#
|
|
20
|
+
# To set this as the default behavior for all datasets on a single database:
|
|
21
|
+
#
|
|
22
|
+
# DB.extension(:implicit_subquery)
|
|
23
|
+
#
|
|
24
|
+
# Related module: Sequel::Dataset::ImplicitSubquery
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
module Sequel
|
|
28
|
+
class Dataset
|
|
29
|
+
module ImplicitSubquery
|
|
30
|
+
exceptions = [:add_graph_aliases, :filter, :from, :from_self, :naked, :or, :order_more,
|
|
31
|
+
:qualify, :reverse, :reverse_order, :select_all, :select_more, :server,
|
|
32
|
+
:set_graph_aliases, :unfiltered, :ungraphed, :ungrouped, :unlimited, :unordered,
|
|
33
|
+
:with_sql]
|
|
34
|
+
additions = [:join_table]
|
|
35
|
+
(Dataset::QUERY_METHODS - Dataset::JOIN_METHODS - exceptions + additions).each do |meth|
|
|
36
|
+
define_method(meth) do |*a, &b|
|
|
37
|
+
if opts[:sql]
|
|
38
|
+
from_self.public_send(meth, *a, &b)
|
|
39
|
+
else
|
|
40
|
+
super(*a, &b)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
register_extension(:implicit_subquery, ImplicitSubquery)
|
|
47
|
+
end
|
|
48
|
+
end
|