sequel 4.36.0 → 5.61.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 +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- 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/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- 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 +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- 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.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -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 +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- 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 +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -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 +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -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 +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- 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 +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -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/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -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 +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -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/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -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 +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- 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.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.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 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- 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 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- 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 -203
- data/spec/core/schema_spec.rb +0 -1676
- 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/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- 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 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- 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/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- 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_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- 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 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- 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 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- 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 -728
- 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/no_auto_literal_strings_spec.rb +0 -65
- 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 -390
- 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 -275
- 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 -473
- 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 -814
- 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/server_logging_spec.rb +0 -45
- 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_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- 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/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- 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/uuid_spec.rb +0 -106
- 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 -554
- 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/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
@@ -10,24 +10,28 @@
|
|
10
10
|
#
|
11
11
|
# DB.extension :duplicate_columns_handler
|
12
12
|
#
|
13
|
+
# or into individual datasets:
|
14
|
+
#
|
15
|
+
# ds = DB[:items].extension(:duplicate_columns_handler)
|
16
|
+
#
|
13
17
|
# A database option is introduced: :on_duplicate_columns. It accepts a Symbol
|
14
18
|
# or any object that responds to :call.
|
15
19
|
#
|
16
|
-
# :
|
17
|
-
# :
|
18
|
-
# :
|
19
|
-
# :
|
20
|
+
# on_duplicate_columns: :raise
|
21
|
+
# on_duplicate_columns: :warn
|
22
|
+
# on_duplicate_columns: :ignore
|
23
|
+
# on_duplicate_columns: lambda{|columns| arbitrary_condition? ? :raise : :warn}
|
20
24
|
#
|
21
25
|
# You may also configure duplicate columns handling for a specific dataset:
|
22
26
|
#
|
23
27
|
# ds.on_duplicate_columns(:warn)
|
24
28
|
# ds.on_duplicate_columns(:raise)
|
25
29
|
# ds.on_duplicate_columns(:ignore)
|
26
|
-
# ds.on_duplicate_columns
|
27
|
-
# ds.on_duplicate_columns(
|
30
|
+
# ds.on_duplicate_columns{|columns| arbitrary_condition? ? :raise : :warn}
|
31
|
+
# ds.on_duplicate_columns(lambda{|columns| arbitrary_condition? ? :raise : :warn})
|
28
32
|
#
|
29
33
|
# If :raise is specified, a Sequel::DuplicateColumnError is raised.
|
30
|
-
# If :warn is specified, you will receive a warning via
|
34
|
+
# If :warn is specified, you will receive a warning via +warn+.
|
31
35
|
# If a callable is specified, it will be called.
|
32
36
|
# If no on_duplicate_columns is specified, the default is :warn.
|
33
37
|
#
|
@@ -35,26 +39,29 @@
|
|
35
39
|
|
36
40
|
module Sequel
|
37
41
|
module DuplicateColumnsHandler
|
42
|
+
# :nocov:
|
43
|
+
CALLER_ARGS = (RUBY_VERSION >= '2.0' ? [0,1] : [0]).freeze
|
44
|
+
# :nocov:
|
45
|
+
|
38
46
|
# Customize handling of duplicate columns for this dataset.
|
39
|
-
def on_duplicate_columns(handler = (raise Error, "Must provide either an argument or a block to on_duplicate_columns" unless
|
47
|
+
def on_duplicate_columns(handler = (raise Error, "Must provide either an argument or a block to on_duplicate_columns" unless defined?(yield); nil), &block)
|
40
48
|
raise Error, "Cannot provide both an argument and a block to on_duplicate_columns" if handler && block
|
41
49
|
clone(:on_duplicate_columns=>handler||block)
|
42
50
|
end
|
43
51
|
|
44
|
-
|
45
|
-
|
52
|
+
private
|
53
|
+
|
54
|
+
# Call handle_duplicate_columns if there are duplicate columns.
|
46
55
|
def columns=(cols)
|
47
56
|
if cols && cols.uniq.size != cols.size
|
48
57
|
handle_duplicate_columns(cols)
|
49
58
|
end
|
50
|
-
|
59
|
+
super
|
51
60
|
end
|
52
61
|
|
53
|
-
private
|
54
|
-
|
55
62
|
# Invoke the appropriate behavior when duplicate columns are present.
|
56
63
|
def handle_duplicate_columns(cols)
|
57
|
-
message = "One or more duplicate columns present in #{cols.inspect}"
|
64
|
+
message = "#{caller(*CALLER_ARGS).first}: One or more duplicate columns present in #{cols.inspect}"
|
58
65
|
|
59
66
|
case duplicate_columns_handler_type(cols)
|
60
67
|
when :raise
|
@@ -4,9 +4,9 @@
|
|
4
4
|
# array value to consider NULL values if one of the referenced
|
5
5
|
# columns is NULL:
|
6
6
|
#
|
7
|
-
# DB[:test].where(:
|
7
|
+
# DB[:test].where(name: [])
|
8
8
|
# # SELECT * FROM test WHERE (name != name)
|
9
|
-
# DB[:test].exclude(:
|
9
|
+
# DB[:test].exclude(name: [])
|
10
10
|
# # SELECT * FROM test WHERE (name = name)
|
11
11
|
#
|
12
12
|
# The default Sequel behavior is to ignore NULLs, as the above
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
#
|
3
|
+
# The escaped_like extension adds +escaped_like+ and +escaped_ilike+
|
4
|
+
# methods to Sequel::SQL::StringMethods, which allow them to be easily
|
5
|
+
# used with most of Sequel's expression objects. Example:
|
6
|
+
#
|
7
|
+
# DB[:table].where{string_column.escaped_like('?%', user_input)}
|
8
|
+
# # user_input is 'foo':
|
9
|
+
# # SELECT * FROM table WHERE string_column LIKE 'foo%' ESCAPE '\'
|
10
|
+
# # user_input is '%foo':
|
11
|
+
# # SELECT * FROM table WHERE string_column LIKE '\%foo%' ESCAPE '\'
|
12
|
+
#
|
13
|
+
# To load the extension:
|
14
|
+
#
|
15
|
+
# Sequel.extension :escaped_like
|
16
|
+
#
|
17
|
+
# Related modules: Sequel::SQL::StringMethods, Sequel::SQL::EscapedLikeExpression
|
18
|
+
|
19
|
+
#
|
20
|
+
module Sequel
|
21
|
+
module SQL
|
22
|
+
# Represents an pattern match SQL expression, where the pattern can depend
|
23
|
+
# upon interpolated values in a database-dependent manner.
|
24
|
+
class EscapedLikeExpression < Expression
|
25
|
+
include AliasMethods
|
26
|
+
include BooleanMethods
|
27
|
+
include CastMethods
|
28
|
+
include OrderMethods
|
29
|
+
|
30
|
+
# Initialize the expression. Arguments:
|
31
|
+
# expr :: Right hand site of LIKE/ILIKE operator, what you are matching against the pattern
|
32
|
+
# case_insensitive :: Whether the match is case sensitive
|
33
|
+
# placeholder_pattern :: The pattern to match against, with +?+ for the placeholders
|
34
|
+
# placeholder_values :: The string values for each +?+ in the placeholder pattern. Should be an
|
35
|
+
# array of strings, though it can be a single string if there is only
|
36
|
+
# a single placeholder.
|
37
|
+
def initialize(expr, case_sensitive, placeholder_pattern, placeholder_values)
|
38
|
+
@expr = expr
|
39
|
+
@method = case_sensitive ? :like : :ilike
|
40
|
+
@pattern = placeholder_pattern
|
41
|
+
unless placeholder_values.is_a?(Array)
|
42
|
+
placeholder_values = [placeholder_values].freeze
|
43
|
+
end
|
44
|
+
@values = placeholder_values
|
45
|
+
freeze
|
46
|
+
end
|
47
|
+
|
48
|
+
# Interpolate the pattern values into the placeholder pattern to get the final pattern,
|
49
|
+
# now that we have access to the dataset. Use the expression and final pattern and
|
50
|
+
# add an appropriate LIKE/ILIKE expression to the SQL being built.
|
51
|
+
def to_s_append(ds, sql)
|
52
|
+
i = -1
|
53
|
+
match_len = @values.length - 1
|
54
|
+
like_pattern = String.new
|
55
|
+
pattern = @pattern
|
56
|
+
while true
|
57
|
+
previous, q, pattern = pattern.partition('?')
|
58
|
+
like_pattern << previous
|
59
|
+
|
60
|
+
unless q.empty?
|
61
|
+
if i == match_len
|
62
|
+
raise Error, "Mismatched number of placeholders (#{i+1}) and placeholder arguments (#{@values.length}) for escaped like expression: #{@pattern.inspect}"
|
63
|
+
end
|
64
|
+
like_pattern << ds.escape_like(@values.at(i+=1))
|
65
|
+
end
|
66
|
+
|
67
|
+
if pattern.empty?
|
68
|
+
unless i == match_len
|
69
|
+
raise Error, "Mismatched number of placeholders (#{i+1}) and placeholder arguments (#{@values.length}) for escaped like expression: #{@pattern.inspect}"
|
70
|
+
end
|
71
|
+
break
|
72
|
+
end
|
73
|
+
end
|
74
|
+
ds.literal_append(sql, Sequel.send(@method, @expr, like_pattern))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
module StringMethods
|
79
|
+
# Create a +EscapedLikeExpression+ case insensitive pattern match of the receiver
|
80
|
+
# with the patterns, interpolated escaped values for each +?+ placeholder in the
|
81
|
+
# pattern.
|
82
|
+
#
|
83
|
+
# Sequel[:a].escaped_ilike('?%', 'A') # "a" ILIKE 'A%' ESCAPE '\'
|
84
|
+
# Sequel[:a].escaped_ilike('?%', '%A') # "a" ILIKE '\%A%' ESCAPE '\'
|
85
|
+
def escaped_ilike(placeholder_pattern, placeholder_values)
|
86
|
+
EscapedLikeExpression.new(self, false, placeholder_pattern, placeholder_values)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Create a +EscapedLikeExpression+ case sensitive pattern match of the receiver
|
90
|
+
# with the patterns, interpolated escaped values for each +?+ placeholder in the
|
91
|
+
# pattern.
|
92
|
+
#
|
93
|
+
# Sequel[:a].escaped_like('?%', 'A') # "a" LIKE 'A%' ESCAPE '\'
|
94
|
+
# Sequel[:a].escaped_like('?%', '%A') # "a" LIKE '\%A%' ESCAPE '\'
|
95
|
+
def escaped_like(placeholder_pattern, placeholder_values)
|
96
|
+
EscapedLikeExpression.new(self, true, placeholder_pattern, placeholder_values)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -26,32 +26,25 @@ module Sequel
|
|
26
26
|
# for eval.
|
27
27
|
def eval_inspect(obj)
|
28
28
|
case obj
|
29
|
-
when
|
30
|
-
"#{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})"
|
31
35
|
when Array
|
32
36
|
"[#{obj.map{|o| eval_inspect(o)}.join(', ')}]"
|
33
37
|
when Hash
|
34
38
|
"{#{obj.map{|k, v| "#{eval_inspect(k)} => #{eval_inspect(v)}"}.join(', ')}}"
|
35
39
|
when Time
|
36
40
|
datepart = "%Y-%m-%dT" unless obj.is_a?(Sequel::SQLTime)
|
37
|
-
if
|
38
|
-
# :nocov:
|
39
|
-
# Time on 1.8 doesn't handle %N (or %z on Windows), manually set the usec value in the string
|
40
|
-
hours, mins = obj.utc_offset.divmod(3600)
|
41
|
-
mins /= 60
|
42
|
-
"#{obj.class}.parse(#{obj.strftime("#{datepart}%H:%M:%S.#{sprintf('%06i%+03i%02i', obj.usec, hours, mins)}").inspect})#{'.utc' if obj.utc?}"
|
43
|
-
# :nocov:
|
44
|
-
else
|
45
|
-
"#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
|
46
|
-
end
|
41
|
+
"#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
|
47
42
|
when DateTime
|
48
43
|
# Ignore date of calendar reform
|
49
44
|
"DateTime.parse(#{obj.strftime('%FT%T.%N%z').inspect})"
|
50
45
|
when Date
|
51
46
|
# Ignore offset and date of calendar reform
|
52
47
|
"Date.new(#{obj.year}, #{obj.month}, #{obj.day})"
|
53
|
-
when BigDecimal
|
54
|
-
"BigDecimal.new(#{obj.to_s.inspect})"
|
55
48
|
else
|
56
49
|
obj.inspect
|
57
50
|
end
|
@@ -62,6 +55,8 @@ module Sequel
|
|
62
55
|
|
63
56
|
module SQL
|
64
57
|
class Expression
|
58
|
+
alias inspect inspect
|
59
|
+
|
65
60
|
# Attempt to produce a string suitable for eval, such that:
|
66
61
|
#
|
67
62
|
# eval(obj.inspect) == obj
|
@@ -73,9 +68,11 @@ module Sequel
|
|
73
68
|
args = inspect_args.map do |arg|
|
74
69
|
if arg.is_a?(String) && arg =~ /\A\*/
|
75
70
|
# Special case string arguments starting with *, indicating that
|
76
|
-
# they should return an array to be splatted as the remaining arguments
|
71
|
+
# they should return an array to be splatted as the remaining arguments.
|
72
|
+
# Allow calling private methods to get inspect output.
|
77
73
|
send(arg.sub('*', '')).map{|a| Sequel.eval_inspect(a)}.join(', ')
|
78
74
|
else
|
75
|
+
# Allow calling private methods to get inspect output.
|
79
76
|
Sequel.eval_inspect(send(arg))
|
80
77
|
end
|
81
78
|
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,36 +1,3 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
|
-
#
|
3
|
-
# The from_block extension changes Database#from so that blocks given
|
4
|
-
# to it are treated as virtual rows applying to the FROM clause,
|
5
|
-
# instead of virtual rows applying to the WHERE clause. This will
|
6
|
-
# probably be made the default in the next major version of Sequel.
|
7
|
-
#
|
8
|
-
# This makes it easier to use table returning functions:
|
9
|
-
#
|
10
|
-
# DB.from{table_function(1)}
|
11
|
-
# # SELECT * FROM table_function(1)
|
12
|
-
#
|
13
|
-
# To load the extension into the database:
|
14
|
-
#
|
15
|
-
# DB.extension :from_block
|
16
|
-
#
|
17
|
-
# Related module: Sequel::Database::FromBlock
|
18
|
-
|
19
|
-
#
|
20
|
-
module Sequel
|
21
|
-
module Database::FromBlock
|
22
|
-
# If a block is given, make it affect the FROM clause:
|
23
|
-
# DB.from{table_function(1)}
|
24
|
-
# # SELECT * FROM table_function(1)
|
25
|
-
def from(*args, &block)
|
26
|
-
if block
|
27
|
-
@default_dataset.from(*args, &block)
|
28
|
-
else
|
29
|
-
super
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
Database.register_extension(:from_block, Database::FromBlock)
|
35
|
-
end
|
36
2
|
|
3
|
+
Sequel::Database.register_extension(:from_block){}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# makes Dataset#each call #graph_each if the dataset has been graphed.
|
5
5
|
# Dataset#graph_each splits result hashes into subhashes per table:
|
6
6
|
#
|
7
|
-
# DB[:a].graph(:b, :
|
7
|
+
# DB[:a].graph(:b, id: :b_id).all
|
8
8
|
# # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
|
9
9
|
#
|
10
10
|
# You can load this extension into specific datasets:
|
@@ -50,13 +50,13 @@ module Sequel
|
|
50
50
|
# the result set
|
51
51
|
datasets = @opts[:graph][:table_aliases].to_a.reject{|ta,ds| ds.nil?}
|
52
52
|
# Get just the list of table aliases into a local variable, for speed
|
53
|
-
table_aliases = datasets.
|
53
|
+
table_aliases = datasets.map{|ta,ds| ta}
|
54
54
|
# Get an array of arrays, one for each dataset, with
|
55
55
|
# the necessary information about each dataset, for speed
|
56
|
-
datasets = datasets.
|
56
|
+
datasets = datasets.map{|ta, ds| [ta, ds, ds.row_proc]}
|
57
57
|
# Use the manually set graph aliases, if any, otherwise
|
58
58
|
# use the ones automatically created by .graph
|
59
|
-
column_aliases = @opts[:
|
59
|
+
column_aliases = @opts[:graph][:column_aliases]
|
60
60
|
fetch_rows(sql) do |r|
|
61
61
|
graph = {}
|
62
62
|
# Create the sub hashes, one per table
|
@@ -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
|