sequel 4.26.0 → 5.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/error_splitter.rb +19 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -179
- data/spec/core/schema_spec.rb +0 -1659
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -712
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -395
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -229
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -404
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -789
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,55 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'mysql'
|
|
5
|
-
end
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require 'mysql'
|
|
6
4
|
raise(LoadError, "require 'mysql' did not define Mysql::CLIENT_MULTI_RESULTS!\n You are probably using the pure ruby mysql.rb driver,\n which Sequel does not support. You need to install\n the C based adapter, and make sure that the mysql.so\n file is loaded instead of the mysql.rb file.\n") unless defined?(Mysql::CLIENT_MULTI_RESULTS)
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
require_relative 'utils/mysql_mysql2'
|
|
7
|
+
require_relative 'utils/mysql_prepared_statements'
|
|
9
8
|
|
|
10
9
|
module Sequel
|
|
11
|
-
# Module for holding all MySQL-related classes and modules for Sequel.
|
|
12
10
|
module MySQL
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
end
|
|
11
|
+
boolean = Object.new
|
|
12
|
+
def boolean.call(s) s.to_i != 0 end
|
|
13
|
+
TYPE_TRANSLATOR_BOOLEAN = boolean.freeze
|
|
14
|
+
integer = Object.new
|
|
15
|
+
def integer.call(s) s.to_i end
|
|
16
|
+
TYPE_TRANSLATOR_INTEGER = integer.freeze
|
|
17
|
+
float = Object.new
|
|
18
|
+
def float.call(s) s.to_f end
|
|
18
19
|
|
|
19
20
|
# Hash with integer keys and callable values for converting MySQL types.
|
|
20
21
|
MYSQL_TYPES = {}
|
|
21
22
|
{
|
|
22
|
-
[0, 246] => ::
|
|
23
|
-
[2, 3, 8, 9, 13, 247, 248] =>
|
|
24
|
-
[4, 5] =>
|
|
25
|
-
[249, 250, 251, 252] => ::Sequel::SQL::Blob
|
|
23
|
+
[0, 246] => ::Kernel.method(:BigDecimal),
|
|
24
|
+
[2, 3, 8, 9, 13, 247, 248] => integer,
|
|
25
|
+
[4, 5] => float,
|
|
26
|
+
[249, 250, 251, 252] => ::Sequel::SQL::Blob
|
|
26
27
|
}.each do |k,v|
|
|
27
28
|
k.each{|n| MYSQL_TYPES[n] = v}
|
|
28
29
|
end
|
|
30
|
+
MYSQL_TYPES.freeze
|
|
29
31
|
|
|
30
|
-
class << self
|
|
31
|
-
# Whether to convert invalid date time values by default.
|
|
32
|
-
#
|
|
33
|
-
# Only applies to Sequel::Database instances created after this
|
|
34
|
-
# has been set.
|
|
35
|
-
attr_accessor :convert_invalid_date_time
|
|
36
|
-
end
|
|
37
|
-
self.convert_invalid_date_time = false
|
|
38
|
-
|
|
39
|
-
# Database class for MySQL databases used with Sequel.
|
|
40
32
|
class Database < Sequel::Database
|
|
41
33
|
include Sequel::MySQL::DatabaseMethods
|
|
34
|
+
include Sequel::MySQL::MysqlMysql2::DatabaseMethods
|
|
42
35
|
include Sequel::MySQL::PreparedStatements::DatabaseMethods
|
|
43
36
|
|
|
44
|
-
# Regular expression used for getting accurate number of rows
|
|
45
|
-
# matched by an update statement.
|
|
46
|
-
AFFECTED_ROWS_RE = /Rows matched:\s+(\d+)\s+Changed:\s+\d+\s+Warnings:\s+\d+/.freeze
|
|
47
|
-
|
|
48
37
|
set_adapter_scheme :mysql
|
|
49
38
|
|
|
50
39
|
# Hash of conversion procs for the current database
|
|
51
40
|
attr_reader :conversion_procs
|
|
52
|
-
|
|
41
|
+
|
|
53
42
|
# Whether to convert tinyint columns to bool for the current database
|
|
54
43
|
attr_reader :convert_tinyint_to_bool
|
|
55
44
|
|
|
@@ -116,13 +105,12 @@ module Sequel
|
|
|
116
105
|
# that feature.
|
|
117
106
|
sqls.unshift("SET NAMES #{literal(encoding.to_s)}") if encoding
|
|
118
107
|
|
|
119
|
-
sqls.each{|sql|
|
|
108
|
+
sqls.each{|sql| log_connection_yield(sql, conn){conn.query(sql)}}
|
|
120
109
|
|
|
121
110
|
add_prepared_statements_cache(conn)
|
|
122
111
|
conn
|
|
123
112
|
end
|
|
124
113
|
|
|
125
|
-
# Closes given database connection.
|
|
126
114
|
def disconnect_connection(c)
|
|
127
115
|
c.close
|
|
128
116
|
rescue Mysql::Error
|
|
@@ -146,21 +134,25 @@ module Sequel
|
|
|
146
134
|
# Modify the type translator used for the tinyint type based
|
|
147
135
|
# on the value given.
|
|
148
136
|
def convert_tinyint_to_bool=(v)
|
|
149
|
-
@conversion_procs[1] =
|
|
137
|
+
@conversion_procs[1] = v ? TYPE_TRANSLATOR_BOOLEAN : TYPE_TRANSLATOR_INTEGER
|
|
150
138
|
@convert_tinyint_to_bool = v
|
|
151
139
|
end
|
|
152
140
|
|
|
153
|
-
# Return the number of matched rows when executing a delete/update statement.
|
|
154
141
|
def execute_dui(sql, opts=OPTS)
|
|
155
142
|
execute(sql, opts){|c| return affected_rows(c)}
|
|
156
143
|
end
|
|
157
144
|
|
|
158
|
-
# Return the last inserted id when executing an insert statement.
|
|
159
145
|
def execute_insert(sql, opts=OPTS)
|
|
160
146
|
execute(sql, opts){|c| return c.insert_id}
|
|
161
147
|
end
|
|
162
148
|
|
|
163
|
-
|
|
149
|
+
def freeze
|
|
150
|
+
server_version
|
|
151
|
+
@conversion_procs.freeze
|
|
152
|
+
super
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Return the version of the MySQL server to which we are connecting.
|
|
164
156
|
def server_version(server=nil)
|
|
165
157
|
@server_version ||= (synchronize(server){|conn| conn.server_version if conn.respond_to?(:server_version)} || super)
|
|
166
158
|
end
|
|
@@ -172,7 +164,7 @@ module Sequel
|
|
|
172
164
|
# yield the connection if a block is given.
|
|
173
165
|
def _execute(conn, sql, opts)
|
|
174
166
|
begin
|
|
175
|
-
r =
|
|
167
|
+
r = log_connection_yield((log_sql = opts[:log_sql]) ? sql + log_sql : sql, conn){conn.query(sql)}
|
|
176
168
|
if opts[:type] == :select
|
|
177
169
|
yield r if r
|
|
178
170
|
elsif block_given?
|
|
@@ -216,8 +208,8 @@ module Sequel
|
|
|
216
208
|
|
|
217
209
|
def adapter_initialize
|
|
218
210
|
@conversion_procs = MYSQL_TYPES.dup
|
|
219
|
-
self.convert_tinyint_to_bool =
|
|
220
|
-
self.convert_invalid_date_time =
|
|
211
|
+
self.convert_tinyint_to_bool = true
|
|
212
|
+
self.convert_invalid_date_time = false
|
|
221
213
|
end
|
|
222
214
|
|
|
223
215
|
# Try to get an accurate number of rows matched using the query
|
|
@@ -225,7 +217,7 @@ module Sequel
|
|
|
225
217
|
# that may be inaccurate.
|
|
226
218
|
def affected_rows(conn)
|
|
227
219
|
s = conn.info
|
|
228
|
-
if s && s =~
|
|
220
|
+
if s && s =~ /Rows matched:\s+(\d+)\s+Changed:\s+\d+\s+Warnings:\s+\d+/
|
|
229
221
|
$1.to_i
|
|
230
222
|
else
|
|
231
223
|
conn.affected_rows
|
|
@@ -255,7 +247,6 @@ module Sequel
|
|
|
255
247
|
end
|
|
256
248
|
end
|
|
257
249
|
|
|
258
|
-
# The MySQL adapter main error class is Mysql::Error
|
|
259
250
|
def database_error_classes
|
|
260
251
|
[Mysql::Error]
|
|
261
252
|
end
|
|
@@ -264,31 +255,25 @@ module Sequel
|
|
|
264
255
|
exception.sqlstate
|
|
265
256
|
end
|
|
266
257
|
|
|
267
|
-
|
|
268
|
-
|
|
258
|
+
def dataset_class_default
|
|
259
|
+
Dataset
|
|
260
|
+
end
|
|
261
|
+
|
|
269
262
|
def disconnect_error?(e, opts)
|
|
270
263
|
super || (e.is_a?(::Mysql::Error) && MYSQL_DATABASE_DISCONNECT_ERRORS.match(e.message))
|
|
271
264
|
end
|
|
272
265
|
|
|
273
|
-
# The database name when using the native adapter is always stored in
|
|
274
|
-
# the :database option.
|
|
275
|
-
def database_name
|
|
276
|
-
@opts[:database]
|
|
277
|
-
end
|
|
278
|
-
|
|
279
266
|
# Convert tinyint(1) type to boolean if convert_tinyint_to_bool is true
|
|
280
267
|
def schema_column_type(db_type)
|
|
281
268
|
convert_tinyint_to_bool && db_type =~ /\Atinyint\(1\)/ ? :boolean : super
|
|
282
269
|
end
|
|
283
270
|
end
|
|
284
271
|
|
|
285
|
-
# Dataset class for MySQL datasets accessed via the native driver.
|
|
286
272
|
class Dataset < Sequel::Dataset
|
|
287
273
|
include Sequel::MySQL::DatasetMethods
|
|
274
|
+
include Sequel::MySQL::MysqlMysql2::DatasetMethods
|
|
288
275
|
include Sequel::MySQL::PreparedStatements::DatasetMethods
|
|
289
276
|
|
|
290
|
-
Database::DatasetClass = self
|
|
291
|
-
|
|
292
277
|
# Yield all rows matching this dataset. If the dataset is set to
|
|
293
278
|
# split multiple statements, yield arrays of hashes one per statement
|
|
294
279
|
# instead of yielding results for all statements as hashes.
|
|
@@ -298,12 +283,11 @@ module Sequel
|
|
|
298
283
|
cps = db.conversion_procs
|
|
299
284
|
cols = r.fetch_fields.map do |f|
|
|
300
285
|
# Pretend tinyint is another integer type if its length is not 1, to
|
|
301
|
-
# avoid casting to boolean if
|
|
302
|
-
# is set.
|
|
286
|
+
# avoid casting to boolean if convert_tinyint_to_bool is set.
|
|
303
287
|
type_proc = f.type == 1 && cast_tinyint_integer?(f) ? cps[2] : cps[f.type]
|
|
304
288
|
[output_identifier(f.name), type_proc, i+=1]
|
|
305
289
|
end
|
|
306
|
-
|
|
290
|
+
self.columns = cols.map(&:first)
|
|
307
291
|
if opts[:split_multiple_result_sets]
|
|
308
292
|
s = []
|
|
309
293
|
yield_rows(r, cols){|h| s << h}
|
|
@@ -333,7 +317,7 @@ module Sequel
|
|
|
333
317
|
def split_multiple_result_sets
|
|
334
318
|
raise(Error, "Can't split multiple statements on a graphed dataset") if opts[:graph]
|
|
335
319
|
ds = clone(:split_multiple_result_sets=>true)
|
|
336
|
-
ds
|
|
320
|
+
ds = ds.with_row_proc(proc{|x| x.map{|h| row_proc.call(h)}}) if row_proc
|
|
337
321
|
ds
|
|
338
322
|
end
|
|
339
323
|
|
|
@@ -346,7 +330,6 @@ module Sequel
|
|
|
346
330
|
field.length != 1
|
|
347
331
|
end
|
|
348
332
|
|
|
349
|
-
# Set the :type option to :select if it hasn't been set.
|
|
350
333
|
def execute(sql, opts=OPTS)
|
|
351
334
|
opts = Hash[opts]
|
|
352
335
|
opts[:type] = :select
|
|
@@ -355,9 +338,7 @@ module Sequel
|
|
|
355
338
|
|
|
356
339
|
# Handle correct quoting of strings using ::MySQL.quote.
|
|
357
340
|
def literal_string_append(sql, v)
|
|
358
|
-
sql << "'"
|
|
359
|
-
sql << ::Mysql.quote(v)
|
|
360
|
-
sql << "'"
|
|
341
|
+
sql << "'" << ::Mysql.quote(v) << "'"
|
|
361
342
|
end
|
|
362
343
|
|
|
363
344
|
# Yield each row of the given result set r with columns cols
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
require 'mysql2'
|
|
2
|
-
|
|
4
|
+
require_relative 'utils/mysql_mysql2'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
|
-
# Module for holding all Mysql2-related classes and modules for Sequel.
|
|
6
7
|
module Mysql2
|
|
7
|
-
|
|
8
|
+
NativePreparedStatements = if ::Mysql2::VERSION >= '0.4'
|
|
9
|
+
true
|
|
10
|
+
else
|
|
11
|
+
require_relative 'utils/mysql_prepared_statements'
|
|
12
|
+
false
|
|
13
|
+
end
|
|
14
|
+
|
|
8
15
|
class Database < Sequel::Database
|
|
9
16
|
include Sequel::MySQL::DatabaseMethods
|
|
10
|
-
include Sequel::MySQL::
|
|
17
|
+
include Sequel::MySQL::MysqlMysql2::DatabaseMethods
|
|
18
|
+
include Sequel::MySQL::PreparedStatements::DatabaseMethods unless NativePreparedStatements
|
|
11
19
|
|
|
12
20
|
set_adapter_scheme :mysql2
|
|
13
21
|
|
|
@@ -28,13 +36,16 @@ module Sequel
|
|
|
28
36
|
# options such as :local_infile.
|
|
29
37
|
def connect(server)
|
|
30
38
|
opts = server_opts(server)
|
|
31
|
-
opts[:host] ||= 'localhost'
|
|
32
39
|
opts[:username] ||= opts.delete(:user)
|
|
33
40
|
opts[:flags] ||= 0
|
|
34
41
|
opts[:flags] |= ::Mysql2::Client::FOUND_ROWS if ::Mysql2::Client.const_defined?(:FOUND_ROWS)
|
|
35
42
|
opts[:encoding] ||= opts[:charset]
|
|
36
43
|
conn = ::Mysql2::Client.new(opts)
|
|
37
44
|
conn.query_options.merge!(:symbolize_keys=>true, :cache_rows=>false)
|
|
45
|
+
|
|
46
|
+
if NativePreparedStatements
|
|
47
|
+
conn.instance_variable_set(:@sequel_default_query_options, conn.query_options.dup)
|
|
48
|
+
end
|
|
38
49
|
|
|
39
50
|
sqls = mysql_connection_setting_sqls
|
|
40
51
|
|
|
@@ -46,36 +57,85 @@ module Sequel
|
|
|
46
57
|
sqls.unshift("SET NAMES #{conn.escape(encoding.to_s)}")
|
|
47
58
|
end
|
|
48
59
|
|
|
49
|
-
sqls.each{|sql|
|
|
60
|
+
sqls.each{|sql| log_connection_yield(sql, conn){conn.query(sql)}}
|
|
50
61
|
|
|
51
62
|
add_prepared_statements_cache(conn)
|
|
52
63
|
conn
|
|
53
64
|
end
|
|
54
65
|
|
|
55
|
-
# Return the number of matched rows when executing a delete/update statement.
|
|
56
66
|
def execute_dui(sql, opts=OPTS)
|
|
57
67
|
execute(sql, opts){|c| return c.affected_rows}
|
|
58
68
|
end
|
|
59
69
|
|
|
60
|
-
# Return the last inserted id when executing an insert statement.
|
|
61
70
|
def execute_insert(sql, opts=OPTS)
|
|
62
71
|
execute(sql, opts){|c| return c.last_id}
|
|
63
72
|
end
|
|
64
73
|
|
|
74
|
+
def freeze
|
|
75
|
+
server_version
|
|
76
|
+
super
|
|
77
|
+
end
|
|
78
|
+
|
|
65
79
|
# Return the version of the MySQL server to which we are connecting.
|
|
66
|
-
def server_version(
|
|
67
|
-
@server_version ||= (
|
|
80
|
+
def server_version(_server=nil)
|
|
81
|
+
@server_version ||= super()
|
|
68
82
|
end
|
|
69
83
|
|
|
70
84
|
private
|
|
71
85
|
|
|
86
|
+
if NativePreparedStatements
|
|
87
|
+
# Use a native mysql2 prepared statement to implement prepared statements.
|
|
88
|
+
def execute_prepared_statement(ps_name, opts, &block)
|
|
89
|
+
ps = prepared_statement(ps_name)
|
|
90
|
+
sql = ps.prepared_sql
|
|
91
|
+
|
|
92
|
+
synchronize(opts[:server]) do |conn|
|
|
93
|
+
stmt, ps_sql = conn.prepared_statements[ps_name]
|
|
94
|
+
unless ps_sql == sql
|
|
95
|
+
stmt.close if stmt
|
|
96
|
+
stmt = log_connection_yield(conn, "Preparing #{ps_name}: #{sql}"){conn.prepare(sql)}
|
|
97
|
+
conn.prepared_statements[ps_name] = [stmt, sql]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
if ps.log_sql
|
|
101
|
+
opts = Hash[opts]
|
|
102
|
+
opts = opts[:log_sql] = " (#{sql})"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
_execute(conn, stmt, opts, &block)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
72
110
|
# Execute the given SQL on the given connection. If the :type
|
|
73
111
|
# option is :select, yield the result of the query, otherwise
|
|
74
112
|
# yield the connection if a block is given.
|
|
75
113
|
def _execute(conn, sql, opts)
|
|
76
114
|
begin
|
|
77
115
|
stream = opts[:stream]
|
|
78
|
-
|
|
116
|
+
if NativePreparedStatements
|
|
117
|
+
if args = opts[:arguments]
|
|
118
|
+
args = args.map{|arg| bound_variable_value(arg)}
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
case sql
|
|
122
|
+
when ::Mysql2::Statement
|
|
123
|
+
stmt = sql
|
|
124
|
+
when Dataset
|
|
125
|
+
sql = sql.sql
|
|
126
|
+
close_stmt = true
|
|
127
|
+
stmt = conn.prepare(sql)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
r = log_connection_yield((log_sql = opts[:log_sql]) ? sql + log_sql : sql, conn, args) do
|
|
132
|
+
if stmt
|
|
133
|
+
conn.query_options.merge!(:cache_rows=>true, :database_timezone => timezone, :application_timezone => Sequel.application_timezone, :stream=>stream, :cast_booleans=>convert_tinyint_to_bool)
|
|
134
|
+
stmt.execute(*args)
|
|
135
|
+
else
|
|
136
|
+
conn.query(sql, :database_timezone => timezone, :application_timezone => Sequel.application_timezone, :stream=>stream)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
79
139
|
if opts[:type] == :select
|
|
80
140
|
if r
|
|
81
141
|
if stream
|
|
@@ -96,26 +156,50 @@ module Sequel
|
|
|
96
156
|
end
|
|
97
157
|
rescue ::Mysql2::Error => e
|
|
98
158
|
raise_error(e)
|
|
159
|
+
ensure
|
|
160
|
+
if stmt
|
|
161
|
+
conn.query_options.replace(conn.instance_variable_get(:@sequel_default_query_options))
|
|
162
|
+
stmt.close if close_stmt
|
|
163
|
+
end
|
|
99
164
|
end
|
|
100
165
|
end
|
|
101
166
|
|
|
102
167
|
# Set the convert_tinyint_to_bool setting based on the default value.
|
|
103
168
|
def adapter_initialize
|
|
104
|
-
self.convert_tinyint_to_bool =
|
|
169
|
+
self.convert_tinyint_to_bool = true
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
if NativePreparedStatements
|
|
173
|
+
# Handle bound variable arguments that Mysql2 does not handle natively.
|
|
174
|
+
def bound_variable_value(arg)
|
|
175
|
+
case arg
|
|
176
|
+
when true
|
|
177
|
+
1
|
|
178
|
+
when false
|
|
179
|
+
0
|
|
180
|
+
when DateTime, Time
|
|
181
|
+
literal(arg)[1...-1]
|
|
182
|
+
else
|
|
183
|
+
arg
|
|
184
|
+
end
|
|
185
|
+
end
|
|
105
186
|
end
|
|
106
187
|
|
|
107
|
-
# MySQL connections use the query method to execute SQL without a result
|
|
108
188
|
def connection_execute_method
|
|
109
189
|
:query
|
|
110
190
|
end
|
|
111
191
|
|
|
112
|
-
# The MySQL adapter main error class is Mysql2::Error
|
|
113
192
|
def database_error_classes
|
|
114
193
|
[::Mysql2::Error]
|
|
115
194
|
end
|
|
116
195
|
|
|
117
196
|
def database_exception_sqlstate(exception, opts)
|
|
118
|
-
exception.sql_state
|
|
197
|
+
state = exception.sql_state
|
|
198
|
+
state unless state == 'HY000'
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def dataset_class_default
|
|
202
|
+
Dataset
|
|
119
203
|
end
|
|
120
204
|
|
|
121
205
|
# If a connection object is available, try pinging it. Otherwise, if the
|
|
@@ -129,42 +213,40 @@ module Sequel
|
|
|
129
213
|
MYSQL_DATABASE_DISCONNECT_ERRORS.match(e.message)))
|
|
130
214
|
end
|
|
131
215
|
|
|
132
|
-
# The database name when using the native adapter is always stored in
|
|
133
|
-
# the :database option.
|
|
134
|
-
def database_name
|
|
135
|
-
@opts[:database]
|
|
136
|
-
end
|
|
137
|
-
|
|
138
216
|
# Convert tinyint(1) type to boolean if convert_tinyint_to_bool is true
|
|
139
217
|
def schema_column_type(db_type)
|
|
140
218
|
convert_tinyint_to_bool && db_type =~ /\Atinyint\(1\)/ ? :boolean : super
|
|
141
219
|
end
|
|
142
220
|
end
|
|
143
221
|
|
|
144
|
-
# Dataset class for MySQL datasets accessed via the native driver.
|
|
145
222
|
class Dataset < Sequel::Dataset
|
|
146
223
|
include Sequel::MySQL::DatasetMethods
|
|
147
|
-
include Sequel::MySQL::
|
|
224
|
+
include Sequel::MySQL::MysqlMysql2::DatasetMethods
|
|
225
|
+
include Sequel::MySQL::PreparedStatements::DatasetMethods unless NativePreparedStatements
|
|
148
226
|
STREAMING_SUPPORTED = ::Mysql2::VERSION >= '0.3.12'
|
|
149
227
|
|
|
150
|
-
|
|
228
|
+
if NativePreparedStatements
|
|
229
|
+
PreparedStatementMethods = prepared_statements_module(
|
|
230
|
+
"sql = self; opts = Hash[opts]; opts[:arguments] = bind_arguments",
|
|
231
|
+
Sequel::Dataset::UnnumberedArgumentMapper,
|
|
232
|
+
%w"execute execute_dui execute_insert")
|
|
233
|
+
end
|
|
151
234
|
|
|
152
|
-
# Yield all rows matching this dataset.
|
|
153
235
|
def fetch_rows(sql)
|
|
154
236
|
execute(sql) do |r|
|
|
155
|
-
|
|
156
|
-
r.fields.map!{|c| output_identifier(c.to_s)}
|
|
157
|
-
else
|
|
158
|
-
r.fields
|
|
159
|
-
end
|
|
237
|
+
self.columns = r.fields.map!{|c| output_identifier(c.to_s)}
|
|
160
238
|
r.each(:cast_booleans=>convert_tinyint_to_bool?){|h| yield h}
|
|
161
239
|
end
|
|
162
240
|
self
|
|
163
241
|
end
|
|
164
242
|
|
|
165
|
-
# Use streaming to implement paging if Mysql2 supports it
|
|
243
|
+
# Use streaming to implement paging if Mysql2 supports it and
|
|
244
|
+
# it hasn't been disabled.
|
|
166
245
|
def paged_each(opts=OPTS, &block)
|
|
167
|
-
if STREAMING_SUPPORTED
|
|
246
|
+
if STREAMING_SUPPORTED && opts[:stream] != false
|
|
247
|
+
unless block_given?
|
|
248
|
+
return enum_for(:paged_each, opts)
|
|
249
|
+
end
|
|
168
250
|
stream.each(&block)
|
|
169
251
|
else
|
|
170
252
|
super
|
|
@@ -181,13 +263,12 @@ module Sequel
|
|
|
181
263
|
private
|
|
182
264
|
|
|
183
265
|
# Whether to cast tinyint(1) columns to integer instead of boolean.
|
|
184
|
-
# By default, uses the
|
|
266
|
+
# By default, uses the database's convert_tinyint_to_bool
|
|
185
267
|
# setting. Exists for compatibility with the mysql adapter.
|
|
186
268
|
def convert_tinyint_to_bool?
|
|
187
269
|
@db.convert_tinyint_to_bool
|
|
188
270
|
end
|
|
189
271
|
|
|
190
|
-
# Set the :type option to :select if it hasn't been set.
|
|
191
272
|
def execute(sql, opts=OPTS)
|
|
192
273
|
opts = Hash[opts]
|
|
193
274
|
opts[:type] = :select
|
|
@@ -195,9 +276,19 @@ module Sequel
|
|
|
195
276
|
super
|
|
196
277
|
end
|
|
197
278
|
|
|
279
|
+
if NativePreparedStatements
|
|
280
|
+
def bound_variable_modules
|
|
281
|
+
[PreparedStatementMethods]
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def prepared_statement_modules
|
|
285
|
+
[PreparedStatementMethods]
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
|
|
198
289
|
# Handle correct quoting of strings using ::Mysql2::Client#escape.
|
|
199
290
|
def literal_string_append(sql, v)
|
|
200
|
-
sql <<
|
|
291
|
+
sql << "'" << db.synchronize(@opts[:server]){|c| c.escape(v)} << "'"
|
|
201
292
|
end
|
|
202
293
|
end
|
|
203
294
|
end
|