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
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
3
|
require 'tiny_tds'
|
4
|
-
|
4
|
+
require_relative 'shared/mssql'
|
5
5
|
|
6
6
|
module Sequel
|
7
7
|
module TinyTDS
|
@@ -16,6 +16,19 @@ module Sequel
|
|
16
16
|
c = TinyTds::Client.new(opts)
|
17
17
|
c.query_options.merge!(:cache_rows=>false)
|
18
18
|
|
19
|
+
# SEQUEL6: Default to ansi: true
|
20
|
+
if opts[:ansi]
|
21
|
+
sql = %w(
|
22
|
+
ANSI_NULLS
|
23
|
+
ANSI_PADDING
|
24
|
+
ANSI_WARNINGS
|
25
|
+
ANSI_NULL_DFLT_ON
|
26
|
+
QUOTED_IDENTIFIER
|
27
|
+
CONCAT_NULL_YIELDS_NULL
|
28
|
+
).map{|v| "SET #{v} ON"}.join(";")
|
29
|
+
log_connection_yield(sql, c){c.execute(sql)}
|
30
|
+
end
|
31
|
+
|
19
32
|
if (ts = opts[:textsize])
|
20
33
|
sql = "SET TEXTSIZE #{typecast_value_integer(ts)}"
|
21
34
|
log_connection_yield(sql, c){c.execute(sql)}
|
@@ -59,10 +72,10 @@ module Sequel
|
|
59
72
|
else
|
60
73
|
log_connection_yield(sql, c) do
|
61
74
|
r = c.execute(sql)
|
62
|
-
return r.
|
75
|
+
return r.public_send(m) if m
|
63
76
|
end
|
64
77
|
end
|
65
|
-
yield(r) if
|
78
|
+
yield(r) if defined?(yield)
|
66
79
|
rescue TinyTds::Error => e
|
67
80
|
raise_error(e, :disconnect=>!c.active?)
|
68
81
|
ensure
|
@@ -71,22 +84,18 @@ module Sequel
|
|
71
84
|
end
|
72
85
|
end
|
73
86
|
|
74
|
-
# Return the number of rows modified by the given +sql+.
|
75
87
|
def execute_dui(sql, opts=OPTS)
|
76
88
|
opts = Hash[opts]
|
77
89
|
opts[:return] = :do
|
78
90
|
execute(sql, opts)
|
79
91
|
end
|
80
92
|
|
81
|
-
# Return the value of the autogenerated primary key (if any)
|
82
|
-
# for the row inserted by the given +sql+.
|
83
93
|
def execute_insert(sql, opts=OPTS)
|
84
94
|
opts = Hash[opts]
|
85
95
|
opts[:return] = :insert
|
86
96
|
execute(sql, opts)
|
87
97
|
end
|
88
98
|
|
89
|
-
# Execute the DDL +sql+ on the database and return nil.
|
90
99
|
def execute_ddl(sql, opts=OPTS)
|
91
100
|
opts = Hash[opts]
|
92
101
|
opts[:return] = :each
|
@@ -131,10 +140,13 @@ module Sequel
|
|
131
140
|
end
|
132
141
|
end
|
133
142
|
|
134
|
-
|
143
|
+
def dataset_class_default
|
144
|
+
Dataset
|
145
|
+
end
|
146
|
+
|
135
147
|
# Return true if the :conn argument is present and not active.
|
136
148
|
def disconnect_error?(e, opts)
|
137
|
-
super || (opts[:conn] && !opts[:conn].active?) || ((e.is_a?(::TinyTds::Error) &&
|
149
|
+
super || (opts[:conn] && !opts[:conn].active?) || ((e.is_a?(::TinyTds::Error) && /\A(Attempt to initiate a new Adaptive Server operation with results pending|The request failed to run because the batch is aborted, this can be caused by abort signal sent from client|Adaptive Server connection timed out|DBPROCESS is dead or not enabled)/.match(e.message)))
|
138
150
|
end
|
139
151
|
|
140
152
|
# Dispose of any possible results of execution.
|
@@ -179,16 +191,11 @@ module Sequel
|
|
179
191
|
class Dataset < Sequel::Dataset
|
180
192
|
include Sequel::MSSQL::DatasetMethods
|
181
193
|
|
182
|
-
Database::DatasetClass = self
|
183
|
-
|
184
|
-
# SQLite already supports named bind arguments, so use directly.
|
185
194
|
module ArgumentMapper
|
186
195
|
include Sequel::Dataset::ArgumentMapper
|
187
196
|
|
188
197
|
protected
|
189
198
|
|
190
|
-
# Return a hash with the same values as the given hash,
|
191
|
-
# but with the keys converted to strings.
|
192
199
|
def map_to_prepared_args(hash)
|
193
200
|
args = {}
|
194
201
|
hash.each{|k,v| args[k.to_s.gsub('.', '__')] = v}
|
@@ -197,24 +204,17 @@ module Sequel
|
|
197
204
|
|
198
205
|
private
|
199
206
|
|
200
|
-
# SQLite uses a : before the name of the argument for named
|
201
|
-
# arguments.
|
202
207
|
def prepared_arg(k)
|
203
208
|
LiteralString.new("@#{k.to_s.gsub('.', '__')}")
|
204
209
|
end
|
205
|
-
|
206
|
-
# Always assume a prepared argument.
|
207
|
-
def prepared_arg?(k)
|
208
|
-
true
|
209
|
-
end
|
210
210
|
end
|
211
211
|
|
212
212
|
PreparedStatementMethods = prepared_statements_module("sql = prepared_sql; opts = Hash[opts]; opts[:arguments] = bind_arguments", ArgumentMapper)
|
213
213
|
|
214
|
-
# Yield hashes with symbol keys, attempting to optimize for
|
215
|
-
# various cases.
|
216
214
|
def fetch_rows(sql)
|
217
215
|
execute(sql) do |result|
|
216
|
+
# Mutating an array in the result is questionable, but supported
|
217
|
+
# by tiny_tds developers (tiny_tds issue #57)
|
218
218
|
columns = result.fields.map!{|c| output_identifier(c)}
|
219
219
|
if columns.empty?
|
220
220
|
args = []
|
@@ -243,24 +243,16 @@ module Sequel
|
|
243
243
|
self
|
244
244
|
end
|
245
245
|
|
246
|
-
# Create a named prepared statement that is stored in the
|
247
|
-
# database (and connection) for reuse.
|
248
|
-
def prepare(type, name=nil, *values)
|
249
|
-
ps = to_prepared_statement(type, values)
|
250
|
-
ps.extend(PreparedStatementMethods)
|
251
|
-
if name
|
252
|
-
ps.prepared_statement_name = name
|
253
|
-
db.set_prepared_statement(name, ps)
|
254
|
-
end
|
255
|
-
ps
|
256
|
-
end
|
257
|
-
|
258
246
|
private
|
259
247
|
|
260
|
-
# Properly escape the given string
|
248
|
+
# Properly escape the given string
|
261
249
|
def literal_string_append(sql, v)
|
262
|
-
sql << (mssql_unicode_strings ?
|
263
|
-
sql << db.synchronize(@opts[:server]){|c| c.escape(v)}.gsub(
|
250
|
+
sql << (mssql_unicode_strings ? "N'" : "'")
|
251
|
+
sql << db.synchronize(@opts[:server]){|c| c.escape(v)}.gsub(/\\((?:\r\n)|\n)/, '\\\\\\\\\\1\\1') << "'"
|
252
|
+
end
|
253
|
+
|
254
|
+
def prepared_statement_modules
|
255
|
+
[PreparedStatementMethods]
|
264
256
|
end
|
265
257
|
end
|
266
258
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
class Dataset
|
5
|
+
module ColumnsLimit1
|
6
|
+
COLUMNS_CLONE_OPTIONS = {:distinct => nil, :limit => 1, :offset=>nil, :where=>nil, :having=>nil, :order=>nil, :row_proc=>nil, :graph=>nil, :eager_graph=>nil}.freeze
|
7
|
+
|
8
|
+
# Use a limit of 1 instead of a limit of 0 when
|
9
|
+
# getting the columns.
|
10
|
+
def columns!
|
11
|
+
ds = clone(COLUMNS_CLONE_OPTIONS)
|
12
|
+
ds.each{break}
|
13
|
+
|
14
|
+
if cols = ds.cache[:_columns]
|
15
|
+
self.columns = cols
|
16
|
+
else
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -32,20 +32,17 @@ module Sequel
|
|
32
32
|
row_count = @opts[:offset_total_count] || ds.clone(:append_sql=>String.new, :placeholder_literal_null=>true).count
|
33
33
|
dsa1 = dataset_alias(1)
|
34
34
|
|
35
|
-
if o.is_a?(Symbol) && @opts[:bind_vars] && (
|
35
|
+
if o.is_a?(Symbol) && @opts[:bind_vars] && /\A\$(.*)\z/ =~ o
|
36
36
|
# Handle use of bound variable offsets. Unfortunately, prepared statement
|
37
37
|
# bound variable offsets cannot be handled, since the bound variable value
|
38
38
|
# isn't available until later.
|
39
|
-
|
40
|
-
if prepared_arg?(s)
|
41
|
-
o = prepared_arg(s)
|
42
|
-
end
|
39
|
+
o = prepared_arg($1.to_sym)
|
43
40
|
end
|
44
41
|
|
45
42
|
reverse_offset = row_count - o
|
46
43
|
ds = if reverse_offset > 0
|
47
44
|
ds.limit(reverse_offset).
|
48
|
-
|
45
|
+
reverse(*order).
|
49
46
|
from_self(:alias=>dsa1).
|
50
47
|
limit(@opts[:limit]).
|
51
48
|
order(*order)
|
@@ -7,7 +7,7 @@ module Sequel
|
|
7
7
|
# when ordering.
|
8
8
|
def empty?
|
9
9
|
return super unless emulate_offset_with_row_number?
|
10
|
-
|
10
|
+
select(Dataset::EMPTY_SELECT).limit(1).single_value!.nil?
|
11
11
|
end
|
12
12
|
|
13
13
|
# Emulate OFFSET support with the ROW_NUMBER window function
|
@@ -36,7 +36,7 @@ module Sequel
|
|
36
36
|
sql = @opts[:append_sql] || String.new
|
37
37
|
subselect_sql_append(sql, unlimited.
|
38
38
|
unordered.
|
39
|
-
select_append
|
39
|
+
select_append(Sequel.function(:ROW_NUMBER).over(:order=>order).as(rn)).
|
40
40
|
from_self(:alias=>dsa1).
|
41
41
|
select(*columns).
|
42
42
|
limit(@opts[:limit]).
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
require_relative '../shared/mysql'
|
4
|
+
require_relative 'stored_procedures'
|
5
|
+
|
6
|
+
module Sequel
|
7
|
+
module MySQL
|
8
|
+
# This module is used by the mysql and mysql2 adapters to support
|
9
|
+
# prepared statements and stored procedures.
|
10
|
+
module MysqlMysql2
|
11
|
+
module DatabaseMethods
|
12
|
+
disconnect_errors = <<-END.split("\n").map(&:strip)
|
13
|
+
Commands out of sync; you can't run this command now
|
14
|
+
Can't connect to local MySQL server through socket
|
15
|
+
MySQL server has gone away
|
16
|
+
Lost connection to MySQL server during query
|
17
|
+
MySQL client is not connected
|
18
|
+
This connection is still waiting for a result, try again once you have the result
|
19
|
+
closed MySQL connection
|
20
|
+
The MySQL server is running with the --read-only option so it cannot execute this statement
|
21
|
+
Connection was killed
|
22
|
+
END
|
23
|
+
# Error messages for mysql and mysql2 that indicate the current connection should be disconnected
|
24
|
+
MYSQL_DATABASE_DISCONNECT_ERRORS = /\A#{Regexp.union(disconnect_errors)}/
|
25
|
+
|
26
|
+
# Support stored procedures on MySQL
|
27
|
+
def call_sproc(name, opts=OPTS, &block)
|
28
|
+
args = opts[:args] || []
|
29
|
+
execute("CALL #{name}#{args.empty? ? '()' : literal(args)}", opts.merge(:sproc=>false), &block)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Executes the given SQL using an available connection, yielding the
|
33
|
+
# connection if the block is given.
|
34
|
+
def execute(sql, opts=OPTS, &block)
|
35
|
+
if opts[:sproc]
|
36
|
+
call_sproc(sql, opts, &block)
|
37
|
+
elsif sql.is_a?(Symbol) || sql.is_a?(Sequel::Dataset::ArgumentMapper)
|
38
|
+
execute_prepared_statement(sql, opts, &block)
|
39
|
+
else
|
40
|
+
synchronize(opts[:server]){|conn| _execute(conn, sql, opts, &block)}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def add_prepared_statements_cache(conn)
|
47
|
+
class << conn
|
48
|
+
attr_accessor :prepared_statements
|
49
|
+
end
|
50
|
+
conn.prepared_statements = {}
|
51
|
+
end
|
52
|
+
|
53
|
+
def database_specific_error_class(exception, opts)
|
54
|
+
case exception.errno
|
55
|
+
when 1048
|
56
|
+
NotNullConstraintViolation
|
57
|
+
when 1062
|
58
|
+
UniqueConstraintViolation
|
59
|
+
when 1451, 1452, 1216, 1217
|
60
|
+
ForeignKeyConstraintViolation
|
61
|
+
when 4025
|
62
|
+
CheckConstraintViolation
|
63
|
+
when 1205
|
64
|
+
DatabaseLockTimeout
|
65
|
+
else
|
66
|
+
super
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
module DatasetMethods
|
72
|
+
include Sequel::Dataset::StoredProcedures
|
73
|
+
|
74
|
+
StoredProcedureMethods = Sequel::Dataset.send(:prepared_statements_module,
|
75
|
+
"sql = @opts[:sproc_name]; opts = Hash[opts]; opts[:args] = @opts[:sproc_args]; opts[:sproc] = true",
|
76
|
+
Sequel::Dataset::StoredProcedureMethods, %w'execute execute_dui')
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
# Extend the dataset with the MySQL stored procedure methods.
|
81
|
+
def prepare_extend_sproc(ds)
|
82
|
+
ds.with_extend(StoredProcedureMethods)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
module MySQL
|
5
|
+
module PreparedStatements
|
6
|
+
module DatabaseMethods
|
7
|
+
private
|
8
|
+
|
9
|
+
# Executes a prepared statement on an available connection. If the
|
10
|
+
# prepared statement already exists for the connection and has the same
|
11
|
+
# SQL, reuse it, otherwise, prepare the new statement. Issue a SET
|
12
|
+
# query with literalized values for each argument, then an EXECUTE to
|
13
|
+
# execute the query with the arguments.
|
14
|
+
def execute_prepared_statement(ps_name, opts, &block)
|
15
|
+
args = opts[:arguments]
|
16
|
+
ps = prepared_statement(ps_name)
|
17
|
+
sql = ps.prepared_sql
|
18
|
+
synchronize(opts[:server]) do |conn|
|
19
|
+
unless conn.prepared_statements[ps_name] == sql
|
20
|
+
_execute(conn, "PREPARE #{ps_name} FROM #{literal(sql)}", opts)
|
21
|
+
conn.prepared_statements[ps_name] = sql
|
22
|
+
end
|
23
|
+
i = 0
|
24
|
+
_execute(conn, "SET " + args.map {|arg| "@sequel_arg_#{i+=1} = #{literal(arg)}"}.join(", "), opts) unless args.empty?
|
25
|
+
opts = opts.merge(:log_sql=>" (#{sql})") if ps.log_sql
|
26
|
+
_execute(conn, "EXECUTE #{ps_name}#{" USING #{(1..i).map{|j| "@sequel_arg_#{j}"}.join(', ')}" unless i == 0}", opts, &block)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module DatasetMethods
|
32
|
+
module CallableStatementMethods
|
33
|
+
# Extend given dataset with this module so subselects inside subselects in
|
34
|
+
# prepared statements work.
|
35
|
+
def subselect_sql_append(sql, ds)
|
36
|
+
ds.clone(:append_sql=>sql, :prepared_args=>prepared_args, :bind_vars=>@opts[:bind_vars]).
|
37
|
+
send(:to_prepared_statement, :select, nil, :extend=>bound_variable_modules).
|
38
|
+
prepared_sql
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
PreparedStatementMethods = Sequel::Dataset.send(:prepared_statements_module, :prepare_bind, Sequel::Dataset::UnnumberedArgumentMapper)
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def bound_variable_modules
|
47
|
+
[CallableStatementMethods]
|
48
|
+
end
|
49
|
+
|
50
|
+
def prepared_statement_modules
|
51
|
+
[PreparedStatementMethods]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -3,9 +3,6 @@
|
|
3
3
|
module Sequel
|
4
4
|
class Dataset
|
5
5
|
module Replace
|
6
|
-
INSERT = Dataset::INSERT
|
7
|
-
REPLACE = 'REPLACE'.freeze
|
8
|
-
|
9
6
|
# Execute a REPLACE statement on the database (deletes any duplicate
|
10
7
|
# rows before inserting).
|
11
8
|
def replace(*values)
|
@@ -31,7 +28,7 @@ module Sequel
|
|
31
28
|
|
32
29
|
# If this is an replace instead of an insert, use replace instead
|
33
30
|
def insert_insert_sql(sql)
|
34
|
-
sql << (@opts[:replace] ? REPLACE : INSERT)
|
31
|
+
sql << (@opts[:replace] ? 'REPLACE' : 'INSERT')
|
35
32
|
end
|
36
33
|
end
|
37
34
|
end
|
@@ -4,16 +4,13 @@ module Sequel
|
|
4
4
|
class Dataset
|
5
5
|
module StoredProcedureMethods
|
6
6
|
# The name of the stored procedure to call
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
attr_writer :sproc_args
|
7
|
+
def sproc_name
|
8
|
+
@opts[:sproc_name]
|
9
|
+
end
|
11
10
|
|
12
11
|
# Call the stored procedure with the given args
|
13
12
|
def call(*args, &block)
|
14
|
-
|
15
|
-
sp.sproc_args = args
|
16
|
-
sp.run(&block)
|
13
|
+
clone(:sproc_args=>args).run(&block)
|
17
14
|
end
|
18
15
|
|
19
16
|
# Programmer friendly string showing this is a stored procedure,
|
@@ -24,7 +21,7 @@ module Sequel
|
|
24
21
|
|
25
22
|
# Run the stored procedure with the current args on the database
|
26
23
|
def run(&block)
|
27
|
-
case @sproc_type
|
24
|
+
case @opts[:sproc_type]
|
28
25
|
when :select, :all
|
29
26
|
all(&block)
|
30
27
|
when :first
|
@@ -37,14 +34,6 @@ module Sequel
|
|
37
34
|
delete
|
38
35
|
end
|
39
36
|
end
|
40
|
-
|
41
|
-
# Set the type of the stored procedure and override the corresponding _sql
|
42
|
-
# method to return the empty string (since the result will be
|
43
|
-
# ignored anyway).
|
44
|
-
def sproc_type=(type)
|
45
|
-
@sproc_type = type
|
46
|
-
@opts[:sql] = ''
|
47
|
-
end
|
48
37
|
end
|
49
38
|
|
50
39
|
module StoredProcedures
|
@@ -58,18 +47,14 @@ module Sequel
|
|
58
47
|
# Transform this dataset into a stored procedure that you can call
|
59
48
|
# multiple times with new arguments.
|
60
49
|
def prepare_sproc(type, name)
|
61
|
-
|
62
|
-
prepare_extend_sproc(sp)
|
63
|
-
sp.sproc_type = type
|
64
|
-
sp.sproc_name = name
|
65
|
-
sp
|
50
|
+
prepare_extend_sproc(self).clone(:sproc_type=>type, :sproc_name=>name, :sql=>'')
|
66
51
|
end
|
67
52
|
|
68
53
|
private
|
69
54
|
|
70
55
|
# Extend the dataset with the stored procedure methods.
|
71
56
|
def prepare_extend_sproc(ds)
|
72
|
-
ds.
|
57
|
+
ds.with_extend(StoredProcedureMethods)
|
73
58
|
end
|
74
59
|
end
|
75
60
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
module UnmodifiedIdentifiers
|
5
|
+
module DatabaseMethods
|
6
|
+
private
|
7
|
+
|
8
|
+
# Databases that use this module for unquoted identifiers to lowercase.
|
9
|
+
def folds_unquoted_identifiers_to_uppercase?
|
10
|
+
false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module DatasetMethods
|
15
|
+
private
|
16
|
+
|
17
|
+
# Turn the given symbol/string into a symbol, keeping the current case.
|
18
|
+
def output_identifier(v)
|
19
|
+
v == '' ? :untitled : v.to_sym
|
20
|
+
end
|
21
|
+
|
22
|
+
# Turn the given symbol/string into a string, keeping the current case.
|
23
|
+
def input_identifier(v)
|
24
|
+
v.to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -26,8 +26,14 @@ module Sequel
|
|
26
26
|
h = {}
|
27
27
|
o.each{|k, val| h[v(k)] = v(val)}
|
28
28
|
h
|
29
|
+
when SQL::NumericExpression
|
30
|
+
if o.op == :extract
|
31
|
+
o.class.new(o.op, o.args[0], v(o.args[1]))
|
32
|
+
else
|
33
|
+
o.class.new(o.op, *v(o.args))
|
34
|
+
end
|
29
35
|
when SQL::ComplexExpression
|
30
|
-
|
36
|
+
o.class.new(o.op, *v(o.args))
|
31
37
|
when SQL::Identifier
|
32
38
|
SQL::Identifier.new(v(o.value))
|
33
39
|
when SQL::QualifiedIdentifier
|
@@ -49,7 +55,7 @@ module Sequel
|
|
49
55
|
end
|
50
56
|
SQL::Function.new!(o.name, v(o.args), h)
|
51
57
|
when SQL::Subscript
|
52
|
-
SQL::Subscript.new(v(o.
|
58
|
+
SQL::Subscript.new(v(o.expression), v(o.sub))
|
53
59
|
when SQL::Window
|
54
60
|
opts = o.opts.dup
|
55
61
|
opts[:partition] = v(opts[:partition]) if opts[:partition]
|
@@ -74,6 +80,12 @@ module Sequel
|
|
74
80
|
SQL::DelayedEvaluation.new(lambda{|ds| v(o.call(ds))})
|
75
81
|
when SQL::Wrapper
|
76
82
|
SQL::Wrapper.new(v(o.value))
|
83
|
+
when SQL::Expression
|
84
|
+
if o.respond_to?(:sequel_ast_transform)
|
85
|
+
o.sequel_ast_transform(method(:v))
|
86
|
+
else
|
87
|
+
o
|
88
|
+
end
|
77
89
|
else
|
78
90
|
o
|
79
91
|
end
|
@@ -83,10 +95,8 @@ module Sequel
|
|
83
95
|
# Handles qualifying existing datasets, so that unqualified columns
|
84
96
|
# in the dataset are qualified with a given table name.
|
85
97
|
class Qualifier < ASTTransformer
|
86
|
-
#
|
87
|
-
|
88
|
-
def initialize(ds, table)
|
89
|
-
@ds = ds
|
98
|
+
# Set the table used to qualify unqualified columns
|
99
|
+
def initialize(table)
|
90
100
|
@table = table
|
91
101
|
end
|
92
102
|
|
@@ -99,7 +109,7 @@ module Sequel
|
|
99
109
|
def v(o)
|
100
110
|
case o
|
101
111
|
when Symbol
|
102
|
-
t, column, aliaz =
|
112
|
+
t, column, aliaz = Sequel.split_symbol(o)
|
103
113
|
if t
|
104
114
|
o
|
105
115
|
elsif aliaz
|
@@ -117,86 +127,4 @@ module Sequel
|
|
117
127
|
end
|
118
128
|
end
|
119
129
|
end
|
120
|
-
|
121
|
-
# +Unbinder+ is used to take a dataset filter and return a modified version
|
122
|
-
# that unbinds already bound values and returns a dataset with bound value
|
123
|
-
# placeholders and a hash of bind values. You can then prepare the dataset
|
124
|
-
# and use the bound variables to execute it with the same values.
|
125
|
-
#
|
126
|
-
# This class only does a limited form of unbinding where the variable names
|
127
|
-
# and values can be associated unambiguously. The only cases it handles
|
128
|
-
# are <tt>SQL::ComplexExpression<tt> with an operator in +UNBIND_OPS+, a
|
129
|
-
# first argument that's an instance of a member of +UNBIND_KEY_CLASSES+, and
|
130
|
-
# a second argument that's an instance of a member of +UNBIND_VALUE_CLASSES+.
|
131
|
-
#
|
132
|
-
# So it can handle cases like:
|
133
|
-
#
|
134
|
-
# DB.filter(:a=>1).exclude(:b=>2).where{c > 3}
|
135
|
-
#
|
136
|
-
# But it cannot handle cases like:
|
137
|
-
#
|
138
|
-
# DB.filter(:a + 1 < 0)
|
139
|
-
class Unbinder < ASTTransformer
|
140
|
-
# The <tt>SQL::ComplexExpression<tt> operates that will be considered
|
141
|
-
# for transformation.
|
142
|
-
UNBIND_OPS = [:'=', :'!=', :<, :>, :<=, :>=]
|
143
|
-
|
144
|
-
# The key classes (first argument of the ComplexExpression) that will
|
145
|
-
# considered for transformation.
|
146
|
-
UNBIND_KEY_CLASSES = [Symbol, SQL::Identifier, SQL::QualifiedIdentifier]
|
147
|
-
|
148
|
-
# The value classes (second argument of the ComplexExpression) that
|
149
|
-
# will be considered for transformation.
|
150
|
-
UNBIND_VALUE_CLASSES = [Numeric, String, Date, Time]
|
151
|
-
|
152
|
-
# The hash of bind variables that were extracted from the dataset filter.
|
153
|
-
attr_reader :binds
|
154
|
-
|
155
|
-
# Intialize an empty +binds+ hash.
|
156
|
-
def initialize
|
157
|
-
@binds = {}
|
158
|
-
end
|
159
|
-
|
160
|
-
private
|
161
|
-
|
162
|
-
# Create a suitable bound variable key for the object, which should be
|
163
|
-
# an instance of one of the +UNBIND_KEY_CLASSES+.
|
164
|
-
def bind_key(obj)
|
165
|
-
case obj
|
166
|
-
when Symbol
|
167
|
-
obj
|
168
|
-
when String
|
169
|
-
obj.to_sym
|
170
|
-
when SQL::Identifier
|
171
|
-
bind_key(obj.value)
|
172
|
-
when SQL::QualifiedIdentifier
|
173
|
-
:"#{bind_key(obj.table)}.#{bind_key(obj.column)}"
|
174
|
-
else
|
175
|
-
raise Error, "unhandled object in Sequel::Unbinder#bind_key: #{obj}"
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
# Handle <tt>SQL::ComplexExpression</tt> instances with suitable ops
|
180
|
-
# and arguments, substituting the value with a bound variable placeholder
|
181
|
-
# and assigning it an entry in the +binds+ hash with a matching key.
|
182
|
-
def v(o)
|
183
|
-
if o.is_a?(SQL::ComplexExpression) && UNBIND_OPS.include?(o.op)
|
184
|
-
l, r = o.args
|
185
|
-
l = l.value if l.is_a?(Sequel::SQL::Wrapper)
|
186
|
-
r = r.value if r.is_a?(Sequel::SQL::Wrapper)
|
187
|
-
if UNBIND_KEY_CLASSES.any?{|c| l.is_a?(c)} && UNBIND_VALUE_CLASSES.any?{|c| r.is_a?(c)} && !r.is_a?(LiteralString)
|
188
|
-
key = bind_key(l)
|
189
|
-
if (old = binds[key]) && old != r
|
190
|
-
raise UnbindDuplicate, "two different values for #{key.inspect}: #{[r, old].inspect}"
|
191
|
-
end
|
192
|
-
binds[key] = r
|
193
|
-
SQL::ComplexExpression.new(o.op, l, :"$#{key}")
|
194
|
-
else
|
195
|
-
super
|
196
|
-
end
|
197
|
-
else
|
198
|
-
super
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
130
|
end
|
@@ -19,9 +19,9 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
19
19
|
add_servers(opts[:servers].keys) if opts[:servers]
|
20
20
|
end
|
21
21
|
|
22
|
-
# Adds new servers to the connection pool. Primarily used in conjunction with
|
23
|
-
# or
|
24
|
-
# at runtime. servers argument should be an array of symbols.
|
22
|
+
# Adds new servers to the connection pool. Primarily used in conjunction with primary/replica
|
23
|
+
# or sharded configurations. Allows for dynamic expansion of the potential replicas/shards
|
24
|
+
# at runtime. +servers+ argument should be an array of symbols.
|
25
25
|
def add_servers(servers)
|
26
26
|
servers.each{|s| @servers[s] = s}
|
27
27
|
end
|
@@ -41,19 +41,25 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
41
41
|
# :server :: Should be a symbol specifing the server to disconnect from,
|
42
42
|
# or an array of symbols to specify multiple servers.
|
43
43
|
def disconnect(opts=OPTS)
|
44
|
-
(opts[:server] ? Array(opts[:server]) : servers).each
|
44
|
+
(opts[:server] ? Array(opts[:server]) : servers).each do |s|
|
45
|
+
raise Sequel::Error, "invalid server: #{s}" unless @servers.has_key?(s)
|
46
|
+
disconnect_server(s)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def freeze
|
51
|
+
@servers.freeze
|
52
|
+
super
|
45
53
|
end
|
46
54
|
|
47
55
|
# Yields the connection to the supplied block for the given server.
|
48
56
|
# This method simulates the ConnectionPool#hold API.
|
49
57
|
def hold(server=:default)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
raise
|
56
|
-
end
|
58
|
+
server = pick_server(server)
|
59
|
+
yield(@conns[server] ||= make_new(server))
|
60
|
+
rescue Sequel::DatabaseDisconnectError, *@error_classes => e
|
61
|
+
disconnect_server(server) if disconnect_error?(e)
|
62
|
+
raise
|
57
63
|
end
|
58
64
|
|
59
65
|
# The ShardedSingleConnectionPool always has a maximum size of 1.
|
@@ -61,8 +67,7 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
61
67
|
1
|
62
68
|
end
|
63
69
|
|
64
|
-
# Remove servers from the connection pool.
|
65
|
-
# or shard configurations. Similar to disconnecting from all given servers,
|
70
|
+
# Remove servers from the connection pool. Similar to disconnecting from all given servers,
|
66
71
|
# except that after it is used, future requests for the server will use the
|
67
72
|
# :default server instead.
|
68
73
|
def remove_servers(servers)
|
@@ -105,6 +110,4 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
|
|
105
110
|
def preconnect(concurrent = nil)
|
106
111
|
servers.each{|s| hold(s){}}
|
107
112
|
end
|
108
|
-
|
109
|
-
CONNECTION_POOL_MAP[[true, true]] = self
|
110
113
|
end
|