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
data/lib/sequel/database/misc.rb
CHANGED
@@ -26,16 +26,8 @@ module Sequel
|
|
26
26
|
:time=>Sequel::SQLTime, :boolean=>[TrueClass, FalseClass].freeze, :float=>Float, :decimal=>BigDecimal,
|
27
27
|
:blob=>Sequel::SQL::Blob}.freeze
|
28
28
|
|
29
|
-
# Module to be included in shared adapters so that when the DatabaseMethods are
|
30
|
-
# included in the database, the identifier mangling defaults are reset correctly.
|
31
|
-
module ResetIdentifierMangling
|
32
|
-
def extended(obj)
|
33
|
-
obj.send(:reset_identifier_mangling)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
29
|
# Nested hook Proc; each new hook Proc just wraps the previous one.
|
38
|
-
@initialize_hook =
|
30
|
+
@initialize_hook = proc{|db| }
|
39
31
|
|
40
32
|
# Register a hook that will be run when a new Database is instantiated. It is
|
41
33
|
# called with the new database handle.
|
@@ -43,7 +35,7 @@ module Sequel
|
|
43
35
|
raise Error, "must provide block to after_initialize" unless block
|
44
36
|
Sequel.synchronize do
|
45
37
|
previous = @initialize_hook
|
46
|
-
@initialize_hook =
|
38
|
+
@initialize_hook = proc do |db|
|
47
39
|
previous.call(db)
|
48
40
|
block.call(db)
|
49
41
|
end
|
@@ -84,7 +76,7 @@ module Sequel
|
|
84
76
|
:user => uri.user,
|
85
77
|
:password => uri.password,
|
86
78
|
:port => uri.port,
|
87
|
-
:host =>
|
79
|
+
:host => uri.hostname,
|
88
80
|
:database => (m = /\/(.*)/.match(uri.path)) && (m[1])
|
89
81
|
}
|
90
82
|
end
|
@@ -99,23 +91,44 @@ module Sequel
|
|
99
91
|
# The specific default size of string columns for this Sequel::Database, usually 255 by default.
|
100
92
|
attr_accessor :default_string_column_size
|
101
93
|
|
94
|
+
# Whether to check the bytesize of strings before typecasting (to avoid typecasting strings that
|
95
|
+
# would be too long for the given type), true by default. Strings that are too long will raise
|
96
|
+
# a typecasting error.
|
97
|
+
attr_accessor :check_string_typecast_bytesize
|
98
|
+
|
102
99
|
# Constructs a new instance of a database connection with the specified
|
103
100
|
# options hash.
|
104
101
|
#
|
105
102
|
# Accepts the following options:
|
103
|
+
# :before_preconnect :: Callable that runs after extensions from :preconnect_extensions are loaded,
|
104
|
+
# but before any connections are created.
|
105
|
+
# :cache_schema :: Whether schema should be cached for this Database instance
|
106
|
+
# :check_string_typecast_bytesize :: Whether to check the bytesize of strings before typecasting.
|
106
107
|
# :default_string_column_size :: The default size of string columns, 255 by default.
|
107
|
-
# :
|
108
|
-
#
|
108
|
+
# :extensions :: Extensions to load into this Database instance. Can be a symbol, array of symbols,
|
109
|
+
# or string with extensions separated by columns. These extensions are loaded after
|
110
|
+
# connections are made by the :preconnect option.
|
111
|
+
# :keep_reference :: Whether to keep a reference to this instance in Sequel::DATABASES, true by default.
|
109
112
|
# :logger :: A specific logger to use.
|
110
113
|
# :loggers :: An array of loggers to use.
|
111
|
-
# :
|
112
|
-
# :
|
114
|
+
# :log_connection_info :: Whether connection information should be logged when logging queries.
|
115
|
+
# :log_warn_duration :: The number of elapsed seconds after which queries should be logged at warn level.
|
116
|
+
# :name :: A name to use for the Database object, displayed in PoolTimeout.
|
117
|
+
# :preconnect :: Automatically create the maximum number of connections, so that they don't
|
118
|
+
# need to be created as needed. This is useful when connecting takes a long time
|
119
|
+
# and you want to avoid possible latency during runtime.
|
120
|
+
# Set to :concurrently to create the connections in separate threads. Otherwise
|
121
|
+
# they'll be created sequentially.
|
122
|
+
# :preconnect_extensions :: Similar to the :extensions option, but loads the extensions before the
|
123
|
+
# connections are made by the :preconnect option.
|
113
124
|
# :quote_identifiers :: Whether to quote identifiers.
|
114
|
-
# :servers :: A hash specifying a server/shard specific options, keyed by shard symbol
|
125
|
+
# :servers :: A hash specifying a server/shard specific options, keyed by shard symbol.
|
115
126
|
# :single_threaded :: Whether to use a single-threaded connection pool.
|
116
127
|
# :sql_log_level :: Method to use to log SQL to a logger, :info by default.
|
117
128
|
#
|
118
|
-
# All options given are also passed to the connection pool.
|
129
|
+
# All options given are also passed to the connection pool. Additional options respected by
|
130
|
+
# the connection pool are :after_connect, :connect_sqls, :max_connections, :pool_timeout,
|
131
|
+
# :servers, and :servers_hash. See the connection pool documentation for details.
|
119
132
|
def initialize(opts = OPTS)
|
120
133
|
@opts ||= opts
|
121
134
|
@opts = connection_pool_default_options.merge(@opts)
|
@@ -123,22 +136,21 @@ module Sequel
|
|
123
136
|
@opts[:servers] = {} if @opts[:servers].is_a?(String)
|
124
137
|
@sharded = !!@opts[:servers]
|
125
138
|
@opts[:adapter_class] = self.class
|
126
|
-
@opts[:single_threaded] = @single_threaded = typecast_value_boolean(@opts.fetch(:single_threaded,
|
139
|
+
@opts[:single_threaded] = @single_threaded = typecast_value_boolean(@opts.fetch(:single_threaded, Sequel.single_threaded))
|
127
140
|
@default_string_column_size = @opts[:default_string_column_size] || DEFAULT_STRING_COLUMN_SIZE
|
141
|
+
@check_string_typecast_bytesize = typecast_value_boolean(@opts.fetch(:check_string_typecast_bytesize, true))
|
128
142
|
|
129
143
|
@schemas = {}
|
130
144
|
@prepared_statements = {}
|
131
145
|
@transactions = {}
|
132
146
|
@symbol_literal_cache = {}
|
133
147
|
|
134
|
-
@identifier_input_method = nil
|
135
|
-
@identifier_output_method = nil
|
136
|
-
@quote_identifiers = nil
|
137
148
|
@timezone = nil
|
138
149
|
|
139
150
|
@dataset_class = dataset_class_default
|
140
151
|
@cache_schema = typecast_value_boolean(@opts.fetch(:cache_schema, true))
|
141
152
|
@dataset_modules = []
|
153
|
+
@loaded_extensions = []
|
142
154
|
@schema_type_classes = SCHEMA_TYPE_CLASSES.dup
|
143
155
|
|
144
156
|
self.sql_log_level = @opts[:sql_log_level] ? @opts[:sql_log_level].to_sym : :info
|
@@ -147,55 +159,60 @@ module Sequel
|
|
147
159
|
|
148
160
|
@pool = ConnectionPool.get_pool(self, @opts)
|
149
161
|
|
150
|
-
|
162
|
+
reset_default_dataset
|
151
163
|
adapter_initialize
|
152
164
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
if typecast_value_boolean(@opts[:preconnect]) && @pool.respond_to?(:preconnect, true)
|
158
|
-
concurrent = typecast_value_string(@opts[:preconnect]) == "concurrently"
|
159
|
-
@pool.send(:preconnect, concurrent)
|
160
|
-
end
|
161
|
-
end
|
165
|
+
keep_reference = typecast_value_boolean(@opts[:keep_reference]) != false
|
166
|
+
begin
|
167
|
+
Sequel.synchronize{::Sequel::DATABASES.push(self)} if keep_reference
|
168
|
+
Sequel::Database.run_after_initialize(self)
|
162
169
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
# :server :: The server/shard to use.
|
168
|
-
def after_commit(opts=OPTS, &block)
|
169
|
-
raise Error, "must provide block to after_commit" unless block
|
170
|
-
synchronize(opts[:server]) do |conn|
|
171
|
-
if h = _trans(conn)
|
172
|
-
raise Error, "cannot call after_commit in a prepared transaction" if h[:prepare]
|
173
|
-
add_transaction_hook(conn, :after_commit, block)
|
174
|
-
else
|
175
|
-
yield
|
170
|
+
initialize_load_extensions(:preconnect_extensions)
|
171
|
+
|
172
|
+
if before_preconnect = @opts[:before_preconnect]
|
173
|
+
before_preconnect.call(self)
|
176
174
|
end
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
# Otherwise, add the block to the list of the blocks to call after the currently
|
182
|
-
# in progress transaction rolls back (and only if it rolls back).
|
183
|
-
# Options:
|
184
|
-
# :server :: The server/shard to use.
|
185
|
-
def after_rollback(opts=OPTS, &block)
|
186
|
-
raise Error, "must provide block to after_rollback" unless block
|
187
|
-
synchronize(opts[:server]) do |conn|
|
188
|
-
if h = _trans(conn)
|
189
|
-
raise Error, "cannot call after_rollback in a prepared transaction" if h[:prepare]
|
190
|
-
add_transaction_hook(conn, :after_rollback, block)
|
175
|
+
|
176
|
+
if typecast_value_boolean(@opts[:preconnect]) && @pool.respond_to?(:preconnect, true)
|
177
|
+
concurrent = typecast_value_string(@opts[:preconnect]) == "concurrently"
|
178
|
+
@pool.send(:preconnect, concurrent)
|
191
179
|
end
|
180
|
+
|
181
|
+
initialize_load_extensions(:extensions)
|
182
|
+
test_connection if typecast_value_boolean(@opts.fetch(:test, true)) && respond_to?(:connect, true)
|
183
|
+
rescue
|
184
|
+
Sequel.synchronize{::Sequel::DATABASES.delete(self)} if keep_reference
|
185
|
+
raise
|
192
186
|
end
|
193
187
|
end
|
194
|
-
|
188
|
+
|
189
|
+
# Freeze internal data structures for the Database instance.
|
190
|
+
def freeze
|
191
|
+
valid_connection_sql
|
192
|
+
metadata_dataset
|
193
|
+
@opts.freeze
|
194
|
+
@loggers.freeze
|
195
|
+
@pool.freeze
|
196
|
+
@dataset_class.freeze
|
197
|
+
@dataset_modules.freeze
|
198
|
+
@schema_type_classes.freeze
|
199
|
+
@loaded_extensions.freeze
|
200
|
+
metadata_dataset
|
201
|
+
super
|
202
|
+
end
|
203
|
+
|
204
|
+
# Disallow dup/clone for Database instances
|
205
|
+
undef_method :dup, :clone, :initialize_copy
|
206
|
+
# :nocov:
|
207
|
+
if RUBY_VERSION >= '1.9.3'
|
208
|
+
# :nocov:
|
209
|
+
undef_method :initialize_clone, :initialize_dup
|
210
|
+
end
|
211
|
+
|
195
212
|
# Cast the given type to a literal type
|
196
213
|
#
|
197
214
|
# DB.cast_type_literal(Float) # double precision
|
198
|
-
# DB.cast_type_literal(:foo)
|
215
|
+
# DB.cast_type_literal(:foo) # foo
|
199
216
|
def cast_type_literal(type)
|
200
217
|
type_literal(:type=>type)
|
201
218
|
end
|
@@ -209,7 +226,9 @@ module Sequel
|
|
209
226
|
Sequel.extension(*exts)
|
210
227
|
exts.each do |ext|
|
211
228
|
if pr = Sequel.synchronize{EXTENSIONS[ext]}
|
212
|
-
|
229
|
+
if Sequel.synchronize{@loaded_extensions.include?(ext) ? false : (@loaded_extensions << ext)}
|
230
|
+
pr.call(self)
|
231
|
+
end
|
213
232
|
else
|
214
233
|
raise(Error, "Extension #{ext} does not have specific support handling individual databases (try: Sequel.extension #{ext.inspect})")
|
215
234
|
end
|
@@ -224,13 +243,6 @@ module Sequel
|
|
224
243
|
Sequel.convert_output_timestamp(v, timezone)
|
225
244
|
end
|
226
245
|
|
227
|
-
# Return true if already in a transaction given the options,
|
228
|
-
# false otherwise. Respects the :server option for selecting
|
229
|
-
# a shard.
|
230
|
-
def in_transaction?(opts=OPTS)
|
231
|
-
synchronize(opts[:server]){|conn| !!_trans(conn)}
|
232
|
-
end
|
233
|
-
|
234
246
|
# Returns a string representation of the database object including the
|
235
247
|
# class name and connection URI and options used when connecting (if any).
|
236
248
|
def inspect
|
@@ -244,8 +256,8 @@ module Sequel
|
|
244
256
|
|
245
257
|
# Proxy the literal call to the dataset.
|
246
258
|
#
|
247
|
-
# DB.literal(1)
|
248
|
-
# DB.literal(:a)
|
259
|
+
# DB.literal(1) # 1
|
260
|
+
# DB.literal(:a) # a
|
249
261
|
# DB.literal('a') # 'a'
|
250
262
|
def literal(v)
|
251
263
|
schema_utility_dataset.literal(v)
|
@@ -279,20 +291,18 @@ module Sequel
|
|
279
291
|
@schema_type_classes[type]
|
280
292
|
end
|
281
293
|
|
282
|
-
# Default serial primary key options, used by the table creation
|
283
|
-
# code.
|
294
|
+
# Default serial primary key options, used by the table creation code.
|
284
295
|
def serial_primary_key_options
|
285
296
|
{:primary_key => true, :type => Integer, :auto_increment => true}
|
286
297
|
end
|
287
298
|
|
288
299
|
# Cache the prepared statement object at the given name.
|
289
300
|
def set_prepared_statement(name, ps)
|
290
|
-
ps.prepared_sql
|
291
301
|
Sequel.synchronize{prepared_statements[name] = ps}
|
292
302
|
end
|
293
303
|
|
294
304
|
# Whether this database instance uses multiple servers, either for sharding
|
295
|
-
# or for
|
305
|
+
# or for primary/replica configurations.
|
296
306
|
def sharded?
|
297
307
|
@sharded
|
298
308
|
end
|
@@ -318,6 +328,7 @@ module Sequel
|
|
318
328
|
return nil if value.nil?
|
319
329
|
meth = "typecast_value_#{column_type}"
|
320
330
|
begin
|
331
|
+
# Allow calling private methods as per-type typecasting methods are private
|
321
332
|
respond_to?(meth, true) ? send(meth, value) : value
|
322
333
|
rescue ArgumentError, TypeError => e
|
323
334
|
raise Sequel.convert_exception_class(e, InvalidValue)
|
@@ -341,13 +352,6 @@ module Sequel
|
|
341
352
|
def adapter_initialize
|
342
353
|
end
|
343
354
|
|
344
|
-
# Set the given callable as a hook to be called. Type should be either
|
345
|
-
# :after_commit or :after_rollback.
|
346
|
-
def add_transaction_hook(conn, type, block)
|
347
|
-
hooks = _trans(conn)[type] ||= []
|
348
|
-
hooks << block
|
349
|
-
end
|
350
|
-
|
351
355
|
# Returns true when the object is considered blank.
|
352
356
|
# The only objects that are blank are nil, false,
|
353
357
|
# strings with all whitespace, and ones that respond
|
@@ -366,11 +370,6 @@ module Sequel
|
|
366
370
|
end
|
367
371
|
end
|
368
372
|
|
369
|
-
# Which transaction errors to translate, blank by default.
|
370
|
-
def database_error_classes
|
371
|
-
[]
|
372
|
-
end
|
373
|
-
|
374
373
|
# An enumerable yielding pairs of regexps and exception classes, used
|
375
374
|
# to match against underlying driver exception messages in
|
376
375
|
# order to raise a more specific Sequel::DatabaseError subclass.
|
@@ -384,8 +383,7 @@ module Sequel
|
|
384
383
|
database_specific_error_class(exception, opts) || DatabaseError
|
385
384
|
end
|
386
385
|
|
387
|
-
# Return the SQLState for the given exception, if one can be
|
388
|
-
# determined
|
386
|
+
# Return the SQLState for the given exception, if one can be determined
|
389
387
|
def database_exception_sqlstate(exception, opts)
|
390
388
|
nil
|
391
389
|
end
|
@@ -435,8 +433,24 @@ module Sequel
|
|
435
433
|
opts[:disconnect]
|
436
434
|
end
|
437
435
|
|
436
|
+
# Load extensions during initialization from the given key in opts.
|
437
|
+
def initialize_load_extensions(key)
|
438
|
+
case exts = @opts[key]
|
439
|
+
when String
|
440
|
+
extension(*exts.split(',').map(&:to_sym))
|
441
|
+
when Array
|
442
|
+
extension(*exts)
|
443
|
+
when Symbol
|
444
|
+
extension(exts)
|
445
|
+
when nil
|
446
|
+
# nothing
|
447
|
+
else
|
448
|
+
raise Error, "unsupported Database #{key.inspect} option: #{@opts[key].inspect}"
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
438
452
|
# Convert the given exception to an appropriate Sequel::DatabaseError
|
439
|
-
# subclass, keeping message and
|
453
|
+
# subclass, keeping message and backtrace.
|
440
454
|
def raise_error(exception, opts=OPTS)
|
441
455
|
if !opts[:classes] || Array(opts[:classes]).any?{|c| exception.is_a?(c)}
|
442
456
|
raise Sequel.convert_exception_class(exception, database_error_class(exception, opts))
|
@@ -445,6 +459,34 @@ module Sequel
|
|
445
459
|
end
|
446
460
|
end
|
447
461
|
|
462
|
+
# Swallow database errors, unless they are connect/disconnect errors.
|
463
|
+
def swallow_database_error
|
464
|
+
yield
|
465
|
+
rescue Sequel::DatabaseDisconnectError, DatabaseConnectionError
|
466
|
+
# Always raise disconnect errors
|
467
|
+
raise
|
468
|
+
rescue Sequel::DatabaseError
|
469
|
+
# Don't raise other database errors.
|
470
|
+
nil
|
471
|
+
# else
|
472
|
+
# Don't rescue other exceptions, they will be raised normally.
|
473
|
+
end
|
474
|
+
|
475
|
+
# Check the bytesize of a string before conversion. There is no point
|
476
|
+
# trying to typecast strings that would be way too long.
|
477
|
+
def typecast_check_string_length(string, max_size)
|
478
|
+
if @check_string_typecast_bytesize && string.bytesize > max_size
|
479
|
+
raise InvalidValue, "string too long to typecast (bytesize: #{string.bytesize}, max: #{max_size})"
|
480
|
+
end
|
481
|
+
string
|
482
|
+
end
|
483
|
+
|
484
|
+
# Check the bytesize of the string value, if value is a string.
|
485
|
+
def typecast_check_length(value, max_size)
|
486
|
+
typecast_check_string_length(value, max_size) if String === value
|
487
|
+
value
|
488
|
+
end
|
489
|
+
|
448
490
|
# Typecast the value to an SQL::Blob
|
449
491
|
def typecast_value_blob(value)
|
450
492
|
value.is_a?(Sequel::SQL::Blob) ? value : Sequel::SQL::Blob.new(value)
|
@@ -468,9 +510,9 @@ module Sequel
|
|
468
510
|
when Date
|
469
511
|
value
|
470
512
|
when String
|
471
|
-
Sequel.string_to_date(value)
|
513
|
+
Sequel.string_to_date(typecast_check_string_length(value, 100))
|
472
514
|
when Hash
|
473
|
-
Date.new(*[:year, :month, :day].map{|x| (value[x] || value[x.to_s]).to_i})
|
515
|
+
Date.new(*[:year, :month, :day].map{|x| typecast_check_length(value[x] || value[x.to_s], 100).to_i})
|
474
516
|
else
|
475
517
|
raise InvalidValue, "invalid value for Date: #{value.inspect}"
|
476
518
|
end
|
@@ -478,18 +520,26 @@ module Sequel
|
|
478
520
|
|
479
521
|
# Typecast the value to a DateTime or Time depending on Sequel.datetime_class
|
480
522
|
def typecast_value_datetime(value)
|
481
|
-
Sequel.typecast_to_application_timestamp(value)
|
482
|
-
end
|
483
|
-
|
484
|
-
# Typecast the value to a BigDecimal
|
485
|
-
def typecast_value_decimal(value)
|
486
523
|
case value
|
487
|
-
when BigDecimal
|
488
|
-
value
|
489
|
-
when Numeric
|
490
|
-
BigDecimal.new(value.to_s)
|
491
524
|
when String
|
492
|
-
|
525
|
+
Sequel.typecast_to_application_timestamp(typecast_check_string_length(value, 100))
|
526
|
+
when Hash
|
527
|
+
[:year, :month, :day, :hour, :minute, :second, :nanos, :offset].each do |x|
|
528
|
+
typecast_check_length(value[x] || value[x.to_s], 100)
|
529
|
+
end
|
530
|
+
Sequel.typecast_to_application_timestamp(value)
|
531
|
+
else
|
532
|
+
Sequel.typecast_to_application_timestamp(value)
|
533
|
+
end
|
534
|
+
end
|
535
|
+
|
536
|
+
if RUBY_VERSION >= '2.4'
|
537
|
+
# Typecast a string to a BigDecimal
|
538
|
+
alias _typecast_value_string_to_decimal BigDecimal
|
539
|
+
else
|
540
|
+
# :nocov:
|
541
|
+
def _typecast_value_string_to_decimal(value)
|
542
|
+
d = BigDecimal(value)
|
493
543
|
if d.zero?
|
494
544
|
# BigDecimal parsing is loose by default, returning a 0 value for
|
495
545
|
# invalid input. If a zero value is received, use Float to check
|
@@ -501,6 +551,19 @@ module Sequel
|
|
501
551
|
end
|
502
552
|
end
|
503
553
|
d
|
554
|
+
end
|
555
|
+
# :nocov:
|
556
|
+
end
|
557
|
+
|
558
|
+
# Typecast the value to a BigDecimal
|
559
|
+
def typecast_value_decimal(value)
|
560
|
+
case value
|
561
|
+
when BigDecimal
|
562
|
+
value
|
563
|
+
when Numeric
|
564
|
+
BigDecimal(value.to_s)
|
565
|
+
when String
|
566
|
+
_typecast_value_string_to_decimal(typecast_check_string_length(value, 1000))
|
504
567
|
else
|
505
568
|
raise InvalidValue, "invalid value for BigDecimal: #{value.inspect}"
|
506
569
|
end
|
@@ -508,26 +571,22 @@ module Sequel
|
|
508
571
|
|
509
572
|
# Typecast the value to a Float
|
510
573
|
def typecast_value_float(value)
|
511
|
-
Float(value)
|
574
|
+
Float(typecast_check_length(value, 1000))
|
512
575
|
end
|
513
576
|
|
514
|
-
#
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
# Typecast the value to an Integer
|
527
|
-
def typecast_value_integer(value)
|
528
|
-
Integer(value.is_a?(String) ? value.sub(LEADING_ZERO_RE, LEADING_ZERO_REP) : value)
|
577
|
+
# Typecast the value to an Integer
|
578
|
+
def typecast_value_integer(value)
|
579
|
+
case value
|
580
|
+
when String
|
581
|
+
typecast_check_string_length(value, 100)
|
582
|
+
if value =~ /\A-?0+(\d)/
|
583
|
+
Integer(value, 10)
|
584
|
+
else
|
585
|
+
Integer(value)
|
586
|
+
end
|
587
|
+
else
|
588
|
+
Integer(value)
|
529
589
|
end
|
530
|
-
# :nocov:
|
531
590
|
end
|
532
591
|
|
533
592
|
# Typecast the value to a String
|
@@ -547,13 +606,12 @@ module Sequel
|
|
547
606
|
if value.is_a?(SQLTime)
|
548
607
|
value
|
549
608
|
else
|
550
|
-
|
551
|
-
SQLTime.create(value.hour, value.min, value.sec, (value.respond_to?(:nsec) && value.nsec != 0) ? value.nsec/1000.0 : value.usec)
|
609
|
+
SQLTime.create(value.hour, value.min, value.sec, value.nsec/1000.0)
|
552
610
|
end
|
553
611
|
when String
|
554
|
-
Sequel.string_to_time(value)
|
612
|
+
Sequel.string_to_time(typecast_check_string_length(value, 100))
|
555
613
|
when Hash
|
556
|
-
SQLTime.create(*[:hour, :minute, :second].map{|x| (value[x] || value[x.to_s]).to_i})
|
614
|
+
SQLTime.create(*[:hour, :minute, :second].map{|x| typecast_check_length(value[x] || value[x.to_s], 100).to_i})
|
557
615
|
else
|
558
616
|
raise Sequel::InvalidValue, "invalid value for Time: #{value.inspect}"
|
559
617
|
end
|
@@ -7,10 +7,8 @@ module Sequel
|
|
7
7
|
# This methods generally execute SQL code on the database server.
|
8
8
|
# ---------------------
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
COLUMN_SCHEMA_DATETIME_TYPES = [:date, :datetime]
|
13
|
-
COLUMN_SCHEMA_STRING_TYPES = [:string, :blob, :date, :datetime, :time, :enum, :set, :interval]
|
10
|
+
COLUMN_SCHEMA_DATETIME_TYPES = [:date, :datetime].freeze
|
11
|
+
COLUMN_SCHEMA_STRING_TYPES = [:string, :blob, :date, :datetime, :time, :enum, :set, :interval].freeze
|
14
12
|
|
15
13
|
# The prepared statement object hash for this database, keyed by name symbol
|
16
14
|
attr_reader :prepared_statements
|
@@ -32,9 +30,9 @@ module Sequel
|
|
32
30
|
# Call the prepared statement with the given name with the given hash
|
33
31
|
# of arguments.
|
34
32
|
#
|
35
|
-
# DB[:items].
|
33
|
+
# DB[:items].where(id: 1).prepare(:first, :sa)
|
36
34
|
# DB.call(:sa) # SELECT * FROM items WHERE id = 1
|
37
|
-
def call(ps_name, hash=
|
35
|
+
def call(ps_name, hash=OPTS, &block)
|
38
36
|
prepared_statement(ps_name).call(hash, &block)
|
39
37
|
end
|
40
38
|
|
@@ -45,7 +43,7 @@ module Sequel
|
|
45
43
|
execute_dui(sql, opts, &block)
|
46
44
|
end
|
47
45
|
|
48
|
-
# Method that should be used when issuing a DELETE
|
46
|
+
# Method that should be used when issuing a DELETE or UPDATE
|
49
47
|
# statement. By default, calls execute.
|
50
48
|
# This method should not be called directly by user code.
|
51
49
|
def execute_dui(sql, opts=OPTS, &block)
|
@@ -59,11 +57,11 @@ module Sequel
|
|
59
57
|
execute_dui(sql, opts, &block)
|
60
58
|
end
|
61
59
|
|
62
|
-
# Returns a single value from the database,
|
60
|
+
# Returns a single value from the database, see Dataset#get.
|
63
61
|
#
|
64
62
|
# DB.get(1) # SELECT 1
|
65
63
|
# # => 1
|
66
|
-
# DB.get{server_version
|
64
|
+
# DB.get{server_version.function} # SELECT server_version()
|
67
65
|
def get(*args, &block)
|
68
66
|
@default_dataset.get(*args, &block)
|
69
67
|
end
|
@@ -88,7 +86,7 @@ module Sequel
|
|
88
86
|
# :schema :: An explicit schema to use. It may also be implicitly provided
|
89
87
|
# via the table name.
|
90
88
|
#
|
91
|
-
# If schema parsing is supported by the database, the column information should
|
89
|
+
# If schema parsing is supported by the database, the column information hash should contain at least the
|
92
90
|
# following entries:
|
93
91
|
#
|
94
92
|
# :allow_null :: Whether NULL is an allowed value for the column.
|
@@ -159,7 +157,7 @@ module Sequel
|
|
159
157
|
end
|
160
158
|
|
161
159
|
cols = schema_parse_table(table_name, opts)
|
162
|
-
raise(Error,
|
160
|
+
raise(Error, "schema parsing returned no columns, table #{table_name.inspect} probably doesn't exist") if cols.nil? || cols.empty?
|
163
161
|
|
164
162
|
primary_keys = 0
|
165
163
|
auto_increment_set = false
|
@@ -178,6 +176,8 @@ module Sequel
|
|
178
176
|
c[:max_length] = max_length
|
179
177
|
end
|
180
178
|
end
|
179
|
+
schema_post_process(cols)
|
180
|
+
|
181
181
|
Sequel.synchronize{@schemas[quoted_name] = cols} if cache_schema
|
182
182
|
cols
|
183
183
|
end
|
@@ -236,11 +236,11 @@ module Sequel
|
|
236
236
|
when :date
|
237
237
|
Sequel.string_to_date(default)
|
238
238
|
when :datetime
|
239
|
-
|
239
|
+
Sequel.string_to_datetime(default)
|
240
240
|
when :time
|
241
241
|
Sequel.string_to_time(default)
|
242
242
|
when :decimal
|
243
|
-
BigDecimal
|
243
|
+
BigDecimal(default)
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
@@ -248,7 +248,7 @@ module Sequel
|
|
248
248
|
# and return the normalized value.
|
249
249
|
def column_schema_normalize_default(default, type)
|
250
250
|
if column_schema_default_string_type?(type)
|
251
|
-
return unless m =
|
251
|
+
return unless m = /\A'(.*)'\z/.match(default)
|
252
252
|
m[1].gsub("''", "'")
|
253
253
|
else
|
254
254
|
default
|
@@ -260,7 +260,7 @@ module Sequel
|
|
260
260
|
def column_schema_to_ruby_default(default, type)
|
261
261
|
return default unless default.is_a?(String)
|
262
262
|
if COLUMN_SCHEMA_DATETIME_TYPES.include?(type)
|
263
|
-
if
|
263
|
+
if /now|today|CURRENT|getdate|\ADate\(\)\z/i.match(default)
|
264
264
|
if type == :date
|
265
265
|
return Sequel::CURRENT_DATE
|
266
266
|
else
|
@@ -287,16 +287,16 @@ module Sequel
|
|
287
287
|
(ds || dataset).method(:input_identifier)
|
288
288
|
end
|
289
289
|
|
290
|
+
# Uncached version of metadata_dataset, designed for overriding.
|
291
|
+
def _metadata_dataset
|
292
|
+
dataset
|
293
|
+
end
|
294
|
+
|
290
295
|
# Return a dataset that uses the default identifier input and output methods
|
291
296
|
# for this database. Used when parsing metadata so that column symbols are
|
292
297
|
# returned as expected.
|
293
298
|
def metadata_dataset
|
294
|
-
@metadata_dataset ||=
|
295
|
-
ds = dataset;
|
296
|
-
ds.identifier_input_method = identifier_input_method_default;
|
297
|
-
ds.identifier_output_method = identifier_output_method_default;
|
298
|
-
ds
|
299
|
-
)
|
299
|
+
@metadata_dataset ||= _metadata_dataset
|
300
300
|
end
|
301
301
|
|
302
302
|
# Return a Method object for the dataset's output_identifier_method.
|
@@ -308,10 +308,10 @@ module Sequel
|
|
308
308
|
|
309
309
|
# Remove the cached schema for the given schema name
|
310
310
|
def remove_cached_schema(table)
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
311
|
+
cache = @default_dataset.send(:cache)
|
312
|
+
Sequel.synchronize{cache.clear}
|
313
|
+
k = quote_schema_table(table)
|
314
|
+
Sequel.synchronize{@schemas.delete(k)}
|
315
315
|
end
|
316
316
|
|
317
317
|
# Match the database's column type to a ruby type via a
|
@@ -325,13 +325,13 @@ module Sequel
|
|
325
325
|
:integer
|
326
326
|
when /\Adate\z/io
|
327
327
|
:date
|
328
|
-
when /\A((small)?datetime|timestamp( with(out)? time zone)?)
|
328
|
+
when /\A((small)?datetime|timestamp(\(\d\))?( with(out)? time zone)?)\z/io
|
329
329
|
:datetime
|
330
330
|
when /\Atime( with(out)? time zone)?\z/io
|
331
331
|
:time
|
332
332
|
when /\A(bool(ean)?)\z/io
|
333
333
|
:boolean
|
334
|
-
when /\A(real|float
|
334
|
+
when /\A(real|float( unsigned)?|double( precision)?|double\(\d+,\d+\)( unsigned)?)\z/io
|
335
335
|
:float
|
336
336
|
when /\A(?:(?:(?:num(?:ber|eric)?|decimal)(?:\(\d+,\s*(\d+|false|true)\))?))\z/io
|
337
337
|
$1 && ['0', 'false'].include?($1) ? :integer : :decimal
|
@@ -341,5 +341,25 @@ module Sequel
|
|
341
341
|
:enum
|
342
342
|
end
|
343
343
|
end
|
344
|
+
|
345
|
+
# Post process the schema values.
|
346
|
+
def schema_post_process(cols)
|
347
|
+
# :nocov:
|
348
|
+
if RUBY_VERSION >= '2.5'
|
349
|
+
# :nocov:
|
350
|
+
cols.each do |_, h|
|
351
|
+
db_type = h[:db_type]
|
352
|
+
if db_type.is_a?(String)
|
353
|
+
h[:db_type] = -db_type
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
cols.each do |_,c|
|
359
|
+
c.each_value do |val|
|
360
|
+
val.freeze if val.is_a?(String)
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
344
364
|
end
|
345
365
|
end
|