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
@@ -41,7 +41,7 @@ module Sequel
|
|
41
41
|
# direction.
|
42
42
|
def self.apply(db, direction)
|
43
43
|
raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
|
44
|
-
new(db).
|
44
|
+
new(db).public_send(direction)
|
45
45
|
end
|
46
46
|
|
47
47
|
# Returns the list of Migration descendants.
|
@@ -65,8 +65,12 @@ module Sequel
|
|
65
65
|
|
66
66
|
# Intercepts method calls intended for the database and sends them along.
|
67
67
|
def method_missing(method_sym, *args, &block)
|
68
|
+
# Allow calling private methods for backwards compatibility
|
68
69
|
@db.send(method_sym, *args, &block)
|
69
70
|
end
|
71
|
+
# :nocov:
|
72
|
+
ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
|
73
|
+
# :nocov:
|
70
74
|
|
71
75
|
# This object responds to all methods the database responds to.
|
72
76
|
def respond_to_missing?(meth, include_private)
|
@@ -99,29 +103,29 @@ module Sequel
|
|
99
103
|
end
|
100
104
|
|
101
105
|
# Apply the appropriate block on the +Database+
|
102
|
-
# instance using
|
106
|
+
# instance using instance_exec.
|
103
107
|
def apply(db, direction)
|
104
108
|
raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
|
105
|
-
if prok =
|
106
|
-
db.
|
109
|
+
if prok = public_send(direction)
|
110
|
+
db.instance_exec(&prok)
|
107
111
|
end
|
108
112
|
end
|
109
113
|
end
|
110
114
|
|
111
115
|
# Internal class used by the Sequel.migration DSL, part of the +migration+ extension.
|
112
116
|
class MigrationDSL < BasicObject
|
113
|
-
# The underlying
|
117
|
+
# The underlying SimpleMigration instance
|
114
118
|
attr_reader :migration
|
115
119
|
|
116
120
|
def self.create(&block)
|
117
121
|
new(&block).migration
|
118
122
|
end
|
119
123
|
|
120
|
-
# Create a new migration class, and
|
124
|
+
# Create a new migration class, and instance_exec the block.
|
121
125
|
def initialize(&block)
|
122
126
|
@migration = SimpleMigration.new
|
123
127
|
Migration.descendants << migration
|
124
|
-
|
128
|
+
instance_exec(&block)
|
125
129
|
end
|
126
130
|
|
127
131
|
# Defines the migration's down action.
|
@@ -150,7 +154,7 @@ module Sequel
|
|
150
154
|
# the block.
|
151
155
|
#
|
152
156
|
# There are no guarantees that this will work perfectly
|
153
|
-
# in all cases, but it
|
157
|
+
# in all cases, but it works for some simple cases.
|
154
158
|
def change(&block)
|
155
159
|
migration.up = block
|
156
160
|
migration.down = MigrationReverser.new.reverse(&block)
|
@@ -170,22 +174,19 @@ module Sequel
|
|
170
174
|
# the given block.
|
171
175
|
def reverse(&block)
|
172
176
|
begin
|
173
|
-
|
177
|
+
instance_exec(&block)
|
174
178
|
rescue
|
175
179
|
just_raise = true
|
176
180
|
end
|
177
181
|
if just_raise
|
178
|
-
Proc.new{raise Sequel::Error,
|
182
|
+
Proc.new{raise Sequel::Error, "irreversible migration method used in #{block.source_location.first}, you may need to write your own down method"}
|
179
183
|
else
|
180
184
|
actions = @actions.reverse
|
181
185
|
Proc.new do
|
182
186
|
actions.each do |a|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
else
|
187
|
-
send(*a)
|
188
|
-
end
|
187
|
+
pr = a.last.is_a?(Proc) ? a.pop : nil
|
188
|
+
# Allow calling private methods as the reversing methods are private
|
189
|
+
send(*a, &pr)
|
189
190
|
end
|
190
191
|
end
|
191
192
|
end
|
@@ -233,8 +234,9 @@ module Sequel
|
|
233
234
|
end
|
234
235
|
|
235
236
|
def reverse(&block)
|
236
|
-
|
237
|
+
instance_exec(&block)
|
237
238
|
actions = @actions.reverse
|
239
|
+
# Allow calling private methods as the reversing methods are private
|
238
240
|
Proc.new{actions.each{|a| send(*a)}}
|
239
241
|
end
|
240
242
|
|
@@ -245,7 +247,9 @@ module Sequel
|
|
245
247
|
end
|
246
248
|
|
247
249
|
def add_constraint(*args)
|
248
|
-
|
250
|
+
name = args.first
|
251
|
+
name = name.is_a?(Hash) ? name[:name] : name
|
252
|
+
@actions << [:drop_constraint, name]
|
249
253
|
end
|
250
254
|
|
251
255
|
def add_foreign_key(key, table, *args)
|
@@ -328,30 +332,32 @@ module Sequel
|
|
328
332
|
# schema_migrations for timestamped migrations). in the database to keep track
|
329
333
|
# of the current migration version. If no migration version is stored in the
|
330
334
|
# database, the version is considered to be 0. If no target version is
|
331
|
-
# specified, the
|
335
|
+
# specified, or the target version specified is greater than the latest
|
336
|
+
# version available, the database is migrated to the latest version available in the
|
332
337
|
# migration directory.
|
333
338
|
#
|
334
339
|
# For example, to migrate the database to the latest version:
|
335
340
|
#
|
336
|
-
# Sequel::Migrator.
|
341
|
+
# Sequel::Migrator.run(DB, '.')
|
337
342
|
#
|
338
343
|
# For example, to migrate the database all the way down:
|
339
344
|
#
|
340
|
-
# Sequel::Migrator.
|
345
|
+
# Sequel::Migrator.run(DB, '.', target: 0)
|
341
346
|
#
|
342
347
|
# For example, to migrate the database to version 4:
|
343
348
|
#
|
344
|
-
# Sequel::Migrator.
|
349
|
+
# Sequel::Migrator.run(DB, '.', target: 4)
|
345
350
|
#
|
346
351
|
# To migrate the database from version 1 to version 5:
|
347
352
|
#
|
348
|
-
# Sequel::Migrator.
|
353
|
+
# Sequel::Migrator.run(DB, '.', target: 5, current: 1)
|
349
354
|
#
|
350
355
|
# Part of the +migration+ extension.
|
351
356
|
class Migrator
|
352
357
|
MIGRATION_FILE_PATTERN = /\A(\d+)_.+\.rb\z/i.freeze
|
353
|
-
|
354
|
-
|
358
|
+
|
359
|
+
# Mutex used around migration file loading
|
360
|
+
MUTEX = Mutex.new
|
355
361
|
|
356
362
|
# Exception class raised when there is an error with the migrator's
|
357
363
|
# file structure, database, or arguments.
|
@@ -382,29 +388,35 @@ module Sequel
|
|
382
388
|
|
383
389
|
# Migrates the supplied database using the migration files in the specified directory. Options:
|
384
390
|
# :allow_missing_migration_files :: Don't raise an error if there are missing migration files.
|
391
|
+
# It is very risky to use this option, since it can result in
|
392
|
+
# the database schema version number not matching the expected
|
393
|
+
# database schema.
|
385
394
|
# :column :: The column in the :table argument storing the migration version (default: :version).
|
386
395
|
# :current :: The current version of the database. If not given, it is retrieved from the database
|
387
396
|
# using the :table and :column options.
|
388
|
-
# :
|
397
|
+
# :relative :: Run the given number of migrations, with a positive number being migrations to migrate
|
398
|
+
# up, and a negative number being migrations to migrate down (IntegerMigrator only).
|
399
|
+
# :table :: The table containing the schema version (default: :schema_info for integer migrations and
|
400
|
+
# :schema_migrations for timestamped migrations).
|
389
401
|
# :target :: The target version to which to migrate. If not given, migrates to the maximum version.
|
390
402
|
#
|
391
403
|
# Examples:
|
392
404
|
# Sequel::Migrator.run(DB, "migrations")
|
393
|
-
# Sequel::Migrator.run(DB, "migrations", :
|
394
|
-
# Sequel::Migrator.run(DB, "app1/migrations", :
|
395
|
-
# Sequel::Migrator.run(DB, "app2/migrations", :
|
405
|
+
# Sequel::Migrator.run(DB, "migrations", target: 15, current: 10)
|
406
|
+
# Sequel::Migrator.run(DB, "app1/migrations", column: :app2_version)
|
407
|
+
# Sequel::Migrator.run(DB, "app2/migrations", column: :app2_version, table: :schema_info2)
|
396
408
|
def self.run(db, directory, opts=OPTS)
|
397
409
|
migrator_class(directory).new(db, directory, opts).run
|
398
410
|
end
|
399
411
|
|
400
412
|
# Choose the Migrator subclass to use. Uses the TimestampMigrator
|
401
|
-
# if the version number
|
402
|
-
# after 2005, otherwise uses the IntegerMigrator.
|
413
|
+
# if the version number is greater than 20000101, otherwise uses the IntegerMigrator.
|
403
414
|
def self.migrator_class(directory)
|
404
415
|
if self.equal?(Migrator)
|
416
|
+
raise(Error, "Must supply a valid migration path") unless File.directory?(directory)
|
405
417
|
Dir.new(directory).each do |file|
|
406
418
|
next unless MIGRATION_FILE_PATTERN.match(file)
|
407
|
-
return TimestampMigrator if file.split(
|
419
|
+
return TimestampMigrator if file.split('_', 2).first.to_i > 20000101
|
408
420
|
end
|
409
421
|
IntegerMigrator
|
410
422
|
else
|
@@ -444,9 +456,9 @@ module Sequel
|
|
444
456
|
@directory = directory
|
445
457
|
@allow_missing_migration_files = opts[:allow_missing_migration_files]
|
446
458
|
@files = get_migration_files
|
447
|
-
schema, table = @db.send(:schema_and_table, opts[:table]
|
459
|
+
schema, table = @db.send(:schema_and_table, opts[:table] || default_schema_table)
|
448
460
|
@table = schema ? Sequel::SQL::QualifiedIdentifier.new(schema, table) : table
|
449
|
-
@column = opts[:column] ||
|
461
|
+
@column = opts[:column] || default_schema_column
|
450
462
|
@ds = schema_dataset
|
451
463
|
@use_transactions = opts[:use_transactions]
|
452
464
|
end
|
@@ -476,24 +488,21 @@ module Sequel
|
|
476
488
|
# Load the migration file, raising an exception if the file does not define
|
477
489
|
# a single migration.
|
478
490
|
def load_migration_file(file)
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
Migration.descendants.each do |c|
|
489
|
-
Object.send(:remove_const, c.to_s) rescue nil
|
491
|
+
MUTEX.synchronize do
|
492
|
+
n = Migration.descendants.length
|
493
|
+
load(file)
|
494
|
+
raise Error, "Migration file #{file.inspect} not containing a single migration detected" unless n + 1 == Migration.descendants.length
|
495
|
+
c = Migration.descendants.pop
|
496
|
+
if c.is_a?(Class) && !c.name.to_s.empty? && Object.const_defined?(c.name)
|
497
|
+
Object.send(:remove_const, c.name)
|
498
|
+
end
|
499
|
+
c
|
490
500
|
end
|
491
|
-
Migration.descendants.clear # remove any defined migration classes
|
492
501
|
end
|
493
502
|
|
494
503
|
# Return the integer migration version based on the filename.
|
495
504
|
def migration_version_from_file(filename)
|
496
|
-
filename.split(
|
505
|
+
filename.split('_', 2).first.to_i
|
497
506
|
end
|
498
507
|
end
|
499
508
|
|
@@ -501,9 +510,6 @@ module Sequel
|
|
501
510
|
# version number starting with 1, where missing or duplicate migration file
|
502
511
|
# versions are not allowed. Part of the +migration+ extension.
|
503
512
|
class IntegerMigrator < Migrator
|
504
|
-
DEFAULT_SCHEMA_COLUMN = :version
|
505
|
-
DEFAULT_SCHEMA_TABLE = :schema_info
|
506
|
-
|
507
513
|
Error = Migrator::Error
|
508
514
|
|
509
515
|
# The current version for this migrator
|
@@ -518,13 +524,31 @@ module Sequel
|
|
518
524
|
# Set up all state for the migrator instance
|
519
525
|
def initialize(db, directory, opts=OPTS)
|
520
526
|
super
|
521
|
-
@target = opts[:target] || latest_migration_version
|
522
527
|
@current = opts[:current] || current_migration_version
|
523
528
|
|
524
|
-
|
525
|
-
|
529
|
+
latest_version = latest_migration_version
|
530
|
+
@target = if opts[:target]
|
531
|
+
opts[:target]
|
532
|
+
elsif opts[:relative]
|
533
|
+
@current + opts[:relative]
|
534
|
+
else
|
535
|
+
latest_version
|
536
|
+
end
|
537
|
+
|
538
|
+
raise(Error, "No target and/or latest version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target && latest_version
|
539
|
+
|
540
|
+
if @target > latest_version
|
541
|
+
@target = latest_version
|
542
|
+
elsif @target < 0
|
543
|
+
@target = 0
|
544
|
+
end
|
526
545
|
|
527
546
|
@direction = current < target ? :up : :down
|
547
|
+
|
548
|
+
if @direction == :down && @current >= @files.length && !@allow_missing_migration_files
|
549
|
+
raise Migrator::Error, "Missing migration version(s) needed to migrate down to target version (current: #{current}, target: #{target})"
|
550
|
+
end
|
551
|
+
|
528
552
|
@migrations = get_migrations
|
529
553
|
end
|
530
554
|
|
@@ -536,13 +560,13 @@ module Sequel
|
|
536
560
|
# Apply all migrations on the database
|
537
561
|
def run
|
538
562
|
migrations.zip(version_numbers).each do |m, v|
|
539
|
-
|
563
|
+
timer = Sequel.start_timer
|
540
564
|
db.log_info("Begin applying migration version #{v}, direction: #{direction}")
|
541
565
|
checked_transaction(m) do
|
542
566
|
m.apply(db, direction)
|
543
567
|
set_migration_version(up? ? v : v-1)
|
544
568
|
end
|
545
|
-
db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f',
|
569
|
+
db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f', Sequel.elapsed_seconds_since(timer))} seconds")
|
546
570
|
end
|
547
571
|
|
548
572
|
target
|
@@ -556,6 +580,16 @@ module Sequel
|
|
556
580
|
ds.get(column) || 0
|
557
581
|
end
|
558
582
|
|
583
|
+
# The default column storing schema version.
|
584
|
+
def default_schema_column
|
585
|
+
:version
|
586
|
+
end
|
587
|
+
|
588
|
+
# The default table storing schema version.
|
589
|
+
def default_schema_table
|
590
|
+
:schema_info
|
591
|
+
end
|
592
|
+
|
559
593
|
# Returns any found migration files in the supplied directory.
|
560
594
|
def get_migration_files
|
561
595
|
files = []
|
@@ -575,13 +609,7 @@ module Sequel
|
|
575
609
|
# Returns a list of migration classes filtered for the migration range and
|
576
610
|
# ordered according to the migration direction.
|
577
611
|
def get_migrations
|
578
|
-
|
579
|
-
|
580
|
-
# load migration files
|
581
|
-
version_numbers.each{|n| load_migration_file(files[n])}
|
582
|
-
|
583
|
-
# get migration classes
|
584
|
-
Migration.descendants
|
612
|
+
version_numbers.map{|n| load_migration_file(files[n])}
|
585
613
|
end
|
586
614
|
|
587
615
|
# Returns the latest version available in the specified directory.
|
@@ -604,7 +632,7 @@ module Sequel
|
|
604
632
|
ds
|
605
633
|
end
|
606
634
|
|
607
|
-
# Sets the current migration
|
635
|
+
# Sets the current migration version stored in the database.
|
608
636
|
def set_migration_version(version)
|
609
637
|
ds.update(column=>version)
|
610
638
|
end
|
@@ -630,15 +658,12 @@ module Sequel
|
|
630
658
|
end
|
631
659
|
end
|
632
660
|
|
633
|
-
# The migrator used if any migration file version
|
661
|
+
# The migrator used if any migration file version is greater than 20000101.
|
634
662
|
# Stores filenames of migration files, and can figure out which migrations
|
635
663
|
# have not been applied and apply them, even if earlier migrations are added
|
636
664
|
# after later migrations. If you plan to do that, the responsibility is on
|
637
665
|
# you to make sure the migrations don't conflict. Part of the +migration+ extension.
|
638
666
|
class TimestampMigrator < Migrator
|
639
|
-
DEFAULT_SCHEMA_COLUMN = :filename
|
640
|
-
DEFAULT_SCHEMA_TABLE = :schema_migrations
|
641
|
-
|
642
667
|
Error = Migrator::Error
|
643
668
|
|
644
669
|
# Array of strings of applied migration filenames
|
@@ -669,7 +694,7 @@ module Sequel
|
|
669
694
|
checked_transaction(m) do
|
670
695
|
m.apply(db, direction)
|
671
696
|
fi = f.downcase
|
672
|
-
direction == :up ? ds.insert(column=>fi) : ds.
|
697
|
+
direction == :up ? ds.insert(column=>fi) : ds.where(column=>fi).delete
|
673
698
|
end
|
674
699
|
db.log_info("Finished applying migration #{f}, direction: #{direction}, took #{sprintf('%0.6f', Time.now - t)} seconds")
|
675
700
|
end
|
@@ -681,7 +706,7 @@ module Sequel
|
|
681
706
|
# Convert the schema_info table to the new schema_migrations table format,
|
682
707
|
# using the version of the schema_info table and the current migration files.
|
683
708
|
def convert_from_schema_info
|
684
|
-
v = db[
|
709
|
+
v = db[:schema_info].get(:version)
|
685
710
|
ds = db.from(table)
|
686
711
|
files.each do |path|
|
687
712
|
f = File.basename(path)
|
@@ -691,6 +716,16 @@ module Sequel
|
|
691
716
|
end
|
692
717
|
end
|
693
718
|
|
719
|
+
# The default column storing migration filenames.
|
720
|
+
def default_schema_column
|
721
|
+
:filename
|
722
|
+
end
|
723
|
+
|
724
|
+
# The default table storing migration filenames.
|
725
|
+
def default_schema_table
|
726
|
+
:schema_migrations
|
727
|
+
end
|
728
|
+
|
694
729
|
# Returns filenames of all applied migrations
|
695
730
|
def get_applied_migrations
|
696
731
|
am = ds.select_order_map(column)
|
@@ -711,26 +746,21 @@ module Sequel
|
|
711
746
|
|
712
747
|
# Returns tuples of migration, filename, and direction
|
713
748
|
def get_migration_tuples
|
714
|
-
remove_migration_classes
|
715
749
|
up_mts = []
|
716
750
|
down_mts = []
|
717
|
-
ms = Migration.descendants
|
718
751
|
files.each do |path|
|
719
752
|
f = File.basename(path)
|
720
753
|
fi = f.downcase
|
721
754
|
if target
|
722
755
|
if migration_version_from_file(f) > target
|
723
756
|
if applied_migrations.include?(fi)
|
724
|
-
load_migration_file(path)
|
725
|
-
down_mts << [ms.last, f, :down]
|
757
|
+
down_mts << [load_migration_file(path), f, :down]
|
726
758
|
end
|
727
759
|
elsif !applied_migrations.include?(fi)
|
728
|
-
load_migration_file(path)
|
729
|
-
up_mts << [ms.last, f, :up]
|
760
|
+
up_mts << [load_migration_file(path), f, :up]
|
730
761
|
end
|
731
762
|
elsif !applied_migrations.include?(fi)
|
732
|
-
load_migration_file(path)
|
733
|
-
up_mts << [ms.last, f, :up]
|
763
|
+
up_mts << [load_migration_file(path), f, :up]
|
734
764
|
end
|
735
765
|
end
|
736
766
|
up_mts + down_mts.reverse
|
@@ -742,7 +772,18 @@ module Sequel
|
|
742
772
|
c = column
|
743
773
|
ds = db.from(table)
|
744
774
|
if !db.table_exists?(table)
|
745
|
-
|
775
|
+
begin
|
776
|
+
db.create_table(table){String c, :primary_key=>true}
|
777
|
+
rescue Sequel::DatabaseError => e
|
778
|
+
if db.database_type == :mysql && e.message =~ /max key length/
|
779
|
+
# Handle case where MySQL is used with utf8mb4 charset default, which
|
780
|
+
# only allows a maximum length of about 190 characters for string
|
781
|
+
# primary keys due to InnoDB limitations.
|
782
|
+
db.create_table(table){String c, :primary_key=>true, :size=>190}
|
783
|
+
else
|
784
|
+
raise e
|
785
|
+
end
|
786
|
+
end
|
746
787
|
if db.table_exists?(:schema_info) and vha = db[:schema_info].all and vha.length == 1 and
|
747
788
|
vha.first.keys == [:version] and vha.first.values.first.is_a?(Integer)
|
748
789
|
convert_from_schema_info
|
@@ -2,18 +2,21 @@
|
|
2
2
|
#
|
3
3
|
# Allows the use of named timezones via TZInfo (requires tzinfo).
|
4
4
|
# Forces the use of DateTime as Sequel's datetime_class, since
|
5
|
-
#
|
6
|
-
# and UTC.
|
5
|
+
# historically, Ruby's Time class doesn't support timezones other
|
6
|
+
# than local and UTC. To continue using Ruby's Time class when using
|
7
|
+
# the named_timezones extension:
|
8
|
+
#
|
9
|
+
# # Load the extension
|
10
|
+
# Sequel.extension :named_timezones
|
11
|
+
#
|
12
|
+
# # Set Sequel.datetime_class back to Time
|
13
|
+
# Sequel.datetime_class = Time
|
7
14
|
#
|
8
15
|
# This allows you to either pass strings or TZInfo::Timezone
|
9
16
|
# instance to Sequel.database_timezone=, application_timezone=, and
|
10
17
|
# typecast_timezone=. If a string is passed, it is converted to a
|
11
18
|
# TZInfo::Timezone using TZInfo::Timezone.get.
|
12
19
|
#
|
13
|
-
# To load the extension:
|
14
|
-
#
|
15
|
-
# Sequel.extension :named_timezones
|
16
|
-
#
|
17
20
|
# Let's say you have the database server in New York and the
|
18
21
|
# application server in Los Angeles. For historical reasons, data
|
19
22
|
# is stored in local New York time, but the application server only
|
@@ -37,7 +40,8 @@
|
|
37
40
|
# Note that typecasting from the database timezone to the application
|
38
41
|
# timezone when fetching rows is dependent on the database adapter,
|
39
42
|
# and only works on adapters where Sequel itself does the conversion.
|
40
|
-
# It should work
|
43
|
+
# It should work with the mysql, postgres, sqlite, ibmdb, and jdbc
|
44
|
+
# adapters.
|
41
45
|
#
|
42
46
|
# Related module: Sequel::NamedTimezones
|
43
47
|
|
@@ -63,24 +67,85 @@ module Sequel
|
|
63
67
|
|
64
68
|
private
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
if RUBY_VERSION >= '2.6'
|
71
|
+
# Convert the given input Time (which must be in UTC) to the given input timezone,
|
72
|
+
# which should be a TZInfo::Timezone instance.
|
73
|
+
def convert_input_time_other(v, input_timezone)
|
74
|
+
Time.new(v.year, v.mon, v.day, v.hour, v.min, (v.sec + Rational(v.nsec, 1000000000)), input_timezone)
|
75
|
+
rescue TZInfo::AmbiguousTime
|
76
|
+
raise unless disamb = tzinfo_disambiguator_for(v)
|
77
|
+
period = input_timezone.period_for_local(v, &disamb)
|
78
|
+
offset = period.utc_total_offset
|
79
|
+
Time.at(v.to_i - offset, :in => input_timezone)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Convert the given input Time to the given output timezone,
|
83
|
+
# which should be a TZInfo::Timezone instance.
|
84
|
+
def convert_output_time_other(v, output_timezone)
|
85
|
+
Time.at(v.to_i, :in => output_timezone)
|
86
|
+
end
|
87
|
+
# :nodoc:
|
88
|
+
# :nocov:
|
89
|
+
else
|
90
|
+
def convert_input_time_other(v, input_timezone)
|
91
|
+
local_offset = input_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset
|
92
|
+
Time.new(1970, 1, 1, 0, 0, 0, local_offset) + v.to_i
|
93
|
+
end
|
94
|
+
|
95
|
+
if defined?(TZInfo::VERSION) && TZInfo::VERSION > '2'
|
96
|
+
def convert_output_time_other(v, output_timezone)
|
97
|
+
v = output_timezone.utc_to_local(v.getutc)
|
98
|
+
local_offset = output_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset
|
99
|
+
Time.new(1970, 1, 1, 0, 0, 0, local_offset) + v.to_i + local_offset
|
100
|
+
end
|
101
|
+
else
|
102
|
+
def convert_output_time_other(v, output_timezone)
|
103
|
+
v = output_timezone.utc_to_local(v.getutc)
|
104
|
+
local_offset = output_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset
|
105
|
+
Time.new(1970, 1, 1, 0, 0, 0, local_offset) + v.to_i
|
106
|
+
end
|
107
|
+
end
|
108
|
+
# :nodoc:
|
109
|
+
# :nocov:
|
73
110
|
end
|
74
111
|
|
75
|
-
#
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
112
|
+
# Handle both TZInfo 1 and TZInfo 2
|
113
|
+
if defined?(TZInfo::VERSION) && TZInfo::VERSION > '2'
|
114
|
+
def convert_input_datetime_other(v, input_timezone)
|
115
|
+
local_offset = Rational(input_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset, 86400)
|
116
|
+
(v - local_offset).new_offset(local_offset)
|
117
|
+
end
|
118
|
+
|
119
|
+
def convert_output_datetime_other(v, output_timezone)
|
120
|
+
v = output_timezone.utc_to_local(v.new_offset(0))
|
121
|
+
|
122
|
+
# Force DateTime output instead of TZInfo::DateTimeWithOffset
|
123
|
+
DateTime.jd(v.jd, v.hour, v.minute, v.second + v.sec_fraction, v.offset, v.start)
|
124
|
+
end
|
125
|
+
# :nodoc:
|
126
|
+
# :nocov:
|
127
|
+
else
|
128
|
+
# Assume the given DateTime has a correct time but a wrong timezone. It is
|
129
|
+
# currently in UTC timezone, but it should be converted to the input_timezone.
|
130
|
+
# Keep the time the same but convert the timezone to the input_timezone.
|
131
|
+
# Expects the input_timezone to be a TZInfo::Timezone instance.
|
132
|
+
def convert_input_datetime_other(v, input_timezone)
|
133
|
+
local_offset = input_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset_rational
|
134
|
+
(v - local_offset).new_offset(local_offset)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Convert the given DateTime to use the given output_timezone.
|
138
|
+
# Expects the output_timezone to be a TZInfo::Timezone instance.
|
139
|
+
def convert_output_datetime_other(v, output_timezone)
|
140
|
+
# TZInfo 1 converts times, but expects the given DateTime to have an offset
|
141
|
+
# of 0 and always leaves the timezone offset as 0
|
142
|
+
v = output_timezone.utc_to_local(v.new_offset(0))
|
143
|
+
local_offset = output_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset_rational
|
144
|
+
# Convert timezone offset from UTC to the offset for the output_timezone
|
145
|
+
(v - local_offset).new_offset(local_offset)
|
146
|
+
end
|
147
|
+
# :nodoc:
|
148
|
+
# :nocov:
|
84
149
|
end
|
85
150
|
|
86
151
|
# Returns TZInfo::Timezone instance if given a String.
|
@@ -1,84 +1,4 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
|
-
#
|
3
|
-
# The no_auto_literal_strings extension removes Sequel's automatic conversion
|
4
|
-
# of strings to literal strings in the dataset filter methods. By default,
|
5
|
-
# Sequel considers a string passed to a filter method as a literal string:
|
6
|
-
#
|
7
|
-
# DB[:table].where("name > 'A'")
|
8
|
-
#
|
9
|
-
# This is fine, except when the string is derived from user input:
|
10
|
-
#
|
11
|
-
# DB[:table].where("name > '#{params[:user]}'") # SQL Injection!
|
12
|
-
#
|
13
|
-
# Sequel does support using placeholders for such strings:
|
14
|
-
#
|
15
|
-
# DB[:table].where("name > ?", params[:user].to_s) # Safe
|
16
|
-
#
|
17
|
-
# However, if you forget to user placeholders, and pass a string to a filter
|
18
|
-
# method that is derived from user input, you open yourself up to SQL injection.
|
19
|
-
# With this extension, using a plain string in a filter method will result
|
20
|
-
# in an exception being raised. You either need to explicitly use a literal
|
21
|
-
# string:
|
22
|
-
#
|
23
|
-
# DB[:table].where(Sequel.lit("name > ?", params[:user].to_s))
|
24
|
-
#
|
25
|
-
# or you need to construct the same SQL using a non-string based approach:
|
26
|
-
#
|
27
|
-
# DB[:table].where{|o| o.name > params[:user].to_s}
|
28
|
-
#
|
29
|
-
# Note that as listed in Sequel's security guide, a large number of dataset
|
30
|
-
# methods call down to a filtering method, and this protects all of those
|
31
|
-
# cases.
|
32
|
-
#
|
33
|
-
# This extension also protects the use of a plain string passed to Dataset#update:
|
34
|
-
#
|
35
|
-
# DB[:table].update("column = column + 1")
|
36
|
-
#
|
37
|
-
# Again, you either need to explicitly use a literal string:
|
38
|
-
#
|
39
|
-
# DB[:table].update(Sequel.lit("column = column + 1"))
|
40
|
-
#
|
41
|
-
# or construct the same SQL using a non-string based approach:
|
42
|
-
#
|
43
|
-
# DB[:table].update(:column => Sequel.expr(:column) + 1)
|
44
|
-
#
|
45
|
-
# Related module: Sequel::Dataset::NoAutoLiteralStrings
|
46
2
|
|
47
|
-
|
48
|
-
|
49
|
-
class Dataset
|
50
|
-
module NoAutoLiteralStrings
|
51
|
-
# Raise an error if passing a plain string or an array whose first
|
52
|
-
# entry is a plain string.
|
53
|
-
def filter_expr(expr = nil)
|
54
|
-
case expr
|
55
|
-
when LiteralString
|
56
|
-
super
|
57
|
-
when String
|
58
|
-
raise Error, "plain string passed to a dataset filtering method"
|
59
|
-
when Array
|
60
|
-
if expr.first.is_a?(String) && !expr.first.is_a?(LiteralString)
|
61
|
-
raise Error, "plain string passed to a dataset filtering method"
|
62
|
-
end
|
63
|
-
super
|
64
|
-
else
|
65
|
-
super
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Raise an error if passing a plain string.
|
70
|
-
def update_sql(values=OPTS)
|
71
|
-
case values
|
72
|
-
when LiteralString
|
73
|
-
super
|
74
|
-
when String
|
75
|
-
raise Error, "plain string passed to a dataset filtering method"
|
76
|
-
else
|
77
|
-
super
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
register_extension(:no_auto_literal_strings, NoAutoLiteralStrings)
|
83
|
-
end
|
84
|
-
end
|
3
|
+
Sequel::Database.register_extension(:no_auto_literal_strings){}
|
4
|
+
Sequel::Dataset.register_extension(:no_auto_literal_strings){}
|