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,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../shared/sqlanywhere'
|
|
4
|
+
require_relative 'transactions'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
7
|
module JDBC
|
|
@@ -21,57 +23,45 @@ module Sequel
|
|
|
21
23
|
Sequel.synchronize do
|
|
22
24
|
DATABASE_SETUP[:sqlanywhere] = proc do |db|
|
|
23
25
|
db.extend(Sequel::JDBC::SqlAnywhere::DatabaseMethods)
|
|
26
|
+
db.convert_smallint_to_bool = true
|
|
24
27
|
db.dataset_class = Sequel::JDBC::SqlAnywhere::Dataset
|
|
25
28
|
drv
|
|
26
29
|
end
|
|
27
30
|
end
|
|
28
31
|
|
|
29
|
-
class TypeConvertor
|
|
30
|
-
def SqlAnywhereBoolean(r, i)
|
|
31
|
-
if v = Short(r, i)
|
|
32
|
-
v != 0
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
32
|
module SqlAnywhere
|
|
38
|
-
# Database instance methods for Sybase databases accessed via JDBC.
|
|
39
33
|
module DatabaseMethods
|
|
40
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
41
34
|
include Sequel::SqlAnywhere::DatabaseMethods
|
|
42
35
|
include Sequel::JDBC::Transactions
|
|
43
36
|
|
|
44
|
-
LAST_INSERT_ID = 'SELECT @@IDENTITY'.freeze
|
|
45
|
-
|
|
46
37
|
private
|
|
47
38
|
|
|
48
|
-
#
|
|
39
|
+
# Use @@IDENTITY to get the last inserted id
|
|
49
40
|
def last_insert_id(conn, opts=OPTS)
|
|
50
41
|
statement(conn) do |stmt|
|
|
51
|
-
sql =
|
|
52
|
-
rs =
|
|
42
|
+
sql = 'SELECT @@IDENTITY'
|
|
43
|
+
rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
|
|
53
44
|
rs.next
|
|
54
45
|
rs.getLong(1)
|
|
55
46
|
end
|
|
56
47
|
end
|
|
57
|
-
|
|
58
|
-
def setup_type_convertor_map
|
|
59
|
-
super
|
|
60
|
-
@type_convertor_map[:SqlAnywhereBoolean] = TypeConvertor::INSTANCE.method(:SqlAnywhereBoolean)
|
|
61
|
-
end
|
|
62
48
|
end
|
|
63
49
|
|
|
64
|
-
#Dataset class for Sybase datasets accessed via JDBC.
|
|
65
50
|
class Dataset < JDBC::Dataset
|
|
66
51
|
include Sequel::SqlAnywhere::DatasetMethods
|
|
67
52
|
|
|
68
53
|
private
|
|
69
54
|
|
|
70
55
|
SMALLINT_TYPE = Java::JavaSQL::Types::SMALLINT
|
|
56
|
+
BOOLEAN_METHOD = Object.new
|
|
57
|
+
def BOOLEAN_METHOD.call(r, i)
|
|
58
|
+
v = r.getShort(i)
|
|
59
|
+
v != 0 unless r.wasNull
|
|
60
|
+
end
|
|
71
61
|
|
|
72
62
|
def type_convertor(map, meta, type, i)
|
|
73
63
|
if convert_smallint_to_bool && type == SMALLINT_TYPE
|
|
74
|
-
|
|
64
|
+
BOOLEAN_METHOD
|
|
75
65
|
else
|
|
76
66
|
super
|
|
77
67
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('org.sqlite.JDBC', :SQLite3)
|
|
2
|
-
|
|
4
|
+
require_relative '../shared/sqlite'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
7
|
module JDBC
|
|
@@ -12,21 +14,34 @@ module Sequel
|
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
# Database and Dataset support for SQLite databases accessed via JDBC.
|
|
16
17
|
module SQLite
|
|
17
|
-
|
|
18
|
+
module ForeignKeyListPragmaConvertorFix
|
|
19
|
+
# For the use of the convertor for String, working around a bug
|
|
20
|
+
# in jdbc-sqlite3 that reports fields are of type
|
|
21
|
+
# java.sql.types.NUMERIC even though they contain non-numeric data.
|
|
22
|
+
def type_convertor(_, _, _, i)
|
|
23
|
+
i > 2 ? TypeConvertor::CONVERTORS[:String] : super
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module TableInfoPragmaConvertorFix
|
|
28
|
+
# For the use of the convertor for String, working around a bug
|
|
29
|
+
# in jdbc-sqlite3 that reports dflt_value field is of type
|
|
30
|
+
# java.sql.types.NUMERIC even though they contain string data.
|
|
31
|
+
def type_convertor(_, _, _, i)
|
|
32
|
+
i == 5 ? TypeConvertor::CONVERTORS[:String] : super
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
18
36
|
module DatabaseMethods
|
|
19
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
20
37
|
include Sequel::SQLite::DatabaseMethods
|
|
21
|
-
LAST_INSERT_ROWID = 'SELECT last_insert_rowid()'.freeze
|
|
22
|
-
FOREIGN_KEY_ERROR_RE = /query does not return ResultSet/.freeze
|
|
23
38
|
|
|
24
39
|
# Swallow pointless exceptions when the foreign key list pragma
|
|
25
40
|
# doesn't return any rows.
|
|
26
41
|
def foreign_key_list(table, opts=OPTS)
|
|
27
42
|
super
|
|
28
43
|
rescue Sequel::DatabaseError => e
|
|
29
|
-
raise unless e
|
|
44
|
+
raise unless foreign_key_error?(e)
|
|
30
45
|
[]
|
|
31
46
|
end
|
|
32
47
|
|
|
@@ -35,11 +50,22 @@ module Sequel
|
|
|
35
50
|
def indexes(table, opts=OPTS)
|
|
36
51
|
super
|
|
37
52
|
rescue Sequel::DatabaseError => e
|
|
38
|
-
raise unless e
|
|
53
|
+
raise unless foreign_key_error?(e)
|
|
39
54
|
{}
|
|
40
55
|
end
|
|
41
56
|
|
|
42
57
|
private
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# Add workaround for bug when running foreign_key_list pragma
|
|
61
|
+
def _foreign_key_list_ds(_)
|
|
62
|
+
super.with_extend(ForeignKeyListPragmaConvertorFix)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Add workaround for bug when running table_info pragma
|
|
66
|
+
def _parse_pragma_ds(_, _)
|
|
67
|
+
super.with_extend(TableInfoPragmaConvertorFix)
|
|
68
|
+
end
|
|
43
69
|
|
|
44
70
|
DATABASE_ERROR_REGEXPS = Sequel::SQLite::DatabaseMethods::DATABASE_ERROR_REGEXPS.merge(/Abort due to constraint violation/ => ConstraintViolation).freeze
|
|
45
71
|
def database_error_regexps
|
|
@@ -49,7 +75,7 @@ module Sequel
|
|
|
49
75
|
# Use last_insert_rowid() to get the last inserted id.
|
|
50
76
|
def last_insert_id(conn, opts=OPTS)
|
|
51
77
|
statement(conn) do |stmt|
|
|
52
|
-
rs = stmt.executeQuery(
|
|
78
|
+
rs = stmt.executeQuery('SELECT last_insert_rowid()')
|
|
53
79
|
rs.next
|
|
54
80
|
rs.getLong(1)
|
|
55
81
|
end
|
|
@@ -65,23 +91,30 @@ module Sequel
|
|
|
65
91
|
def setup_connection(conn)
|
|
66
92
|
conn = super(conn)
|
|
67
93
|
statement(conn) do |stmt|
|
|
68
|
-
connection_pragmas.each{|s|
|
|
94
|
+
connection_pragmas.each{|s| log_connection_yield(s, conn){stmt.execute(s)}}
|
|
69
95
|
end
|
|
70
96
|
conn
|
|
71
97
|
end
|
|
72
98
|
|
|
99
|
+
# Whether the given exception is due to a foreign key error.
|
|
100
|
+
def foreign_key_error?(exception)
|
|
101
|
+
exception.message =~ /query does not return ResultSet/
|
|
102
|
+
end
|
|
103
|
+
|
|
73
104
|
# Use getLong instead of getInt for converting integers on SQLite, since SQLite does not enforce a limit of 2**32.
|
|
74
105
|
# Work around regressions in jdbc-sqlite 3.8.7 for date and blob types.
|
|
75
106
|
def setup_type_convertor_map
|
|
76
107
|
super
|
|
77
108
|
@type_convertor_map[Java::JavaSQL::Types::INTEGER] = @type_convertor_map[Java::JavaSQL::Types::BIGINT]
|
|
78
109
|
@basic_type_convertor_map[Java::JavaSQL::Types::INTEGER] = @basic_type_convertor_map[Java::JavaSQL::Types::BIGINT]
|
|
79
|
-
@type_convertor_map[Java::JavaSQL::Types::DATE] =
|
|
110
|
+
x = @type_convertor_map[Java::JavaSQL::Types::DATE] = Object.new
|
|
111
|
+
def x.call(r, i)
|
|
80
112
|
if v = r.getString(i)
|
|
81
113
|
Sequel.string_to_date(v)
|
|
82
114
|
end
|
|
83
115
|
end
|
|
84
|
-
@type_convertor_map[Java::JavaSQL::Types::BLOB] =
|
|
116
|
+
x = @type_convertor_map[Java::JavaSQL::Types::BLOB] = Object.new
|
|
117
|
+
def x.call(r, i)
|
|
85
118
|
if v = r.getBytes(i)
|
|
86
119
|
Sequel::SQL::Blob.new(String.from_java_bytes(v))
|
|
87
120
|
elsif !r.wasNull
|
|
@@ -89,6 +122,11 @@ module Sequel
|
|
|
89
122
|
end
|
|
90
123
|
end
|
|
91
124
|
end
|
|
125
|
+
|
|
126
|
+
# The result code for the exception, if the jdbc driver supports result codes for exceptions.
|
|
127
|
+
def sqlite_error_code(exception)
|
|
128
|
+
exception.resultCode.code if exception.respond_to?(:resultCode)
|
|
129
|
+
end
|
|
92
130
|
end
|
|
93
131
|
end
|
|
94
132
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('com.microsoft.sqlserver.jdbc.SQLServerDriver')
|
|
2
|
-
|
|
4
|
+
require_relative 'mssql'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
7
|
module JDBC
|
|
@@ -12,14 +14,39 @@ module Sequel
|
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
# Database and Dataset instance methods for SQLServer specific
|
|
16
|
-
# support via JDBC.
|
|
17
17
|
module SQLServer
|
|
18
|
-
|
|
18
|
+
MSSQL_RUBY_TIME = Object.new
|
|
19
|
+
def MSSQL_RUBY_TIME.call(r, i)
|
|
20
|
+
# MSSQL-Server TIME should be fetched as string to keep the precision intact, see:
|
|
21
|
+
# https://docs.microsoft.com/en-us/sql/t-sql/data-types/time-transact-sql#a-namebackwardcompatibilityfordownlevelclientsa-backward-compatibility-for-down-level-clients
|
|
22
|
+
if v = r.getString(i)
|
|
23
|
+
Sequel.string_to_time("#{v}")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
19
27
|
module DatabaseMethods
|
|
20
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
21
28
|
include Sequel::JDBC::MSSQL::DatabaseMethods
|
|
22
29
|
|
|
30
|
+
def setup_type_convertor_map
|
|
31
|
+
super
|
|
32
|
+
map = @type_convertor_map
|
|
33
|
+
map[Java::JavaSQL::Types::TIME] = MSSQL_RUBY_TIME
|
|
34
|
+
|
|
35
|
+
# Work around constant lazy loading in some drivers
|
|
36
|
+
begin
|
|
37
|
+
dto = Java::MicrosoftSql::Types::DATETIMEOFFSET
|
|
38
|
+
rescue NameError
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
if dto
|
|
42
|
+
map[dto] = lambda do |r, i|
|
|
43
|
+
if v = r.getDateTimeOffset(i)
|
|
44
|
+
to_application_timestamp(v.to_s)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
23
50
|
# Work around a bug in SQL Server JDBC Driver 3.0, where the metadata
|
|
24
51
|
# for the getColumns result set specifies an incorrect type for the
|
|
25
52
|
# IS_AUTOINCREMENT column. The column is a string, but the type is
|
|
@@ -46,12 +73,12 @@ module Sequel
|
|
|
46
73
|
end
|
|
47
74
|
end
|
|
48
75
|
|
|
49
|
-
def metadata_dataset
|
|
50
|
-
super.extend(MetadataDatasetMethods)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
76
|
private
|
|
54
77
|
|
|
78
|
+
def _metadata_dataset
|
|
79
|
+
super.with_extend(MetadataDatasetMethods)
|
|
80
|
+
end
|
|
81
|
+
|
|
55
82
|
def disconnect_error?(exception, opts)
|
|
56
83
|
super || (exception.message =~ /connection is closed/)
|
|
57
84
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module JDBC
|
|
3
5
|
module Transactions
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
TRANSACTION_ROLLBACK_SP = 'Transaction.rollback_savepoint'.freeze
|
|
9
|
-
TRANSACTION_SAVEPOINT= 'Transaction.savepoint'.freeze
|
|
6
|
+
def freeze
|
|
7
|
+
supports_savepoints?
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
10
|
|
|
11
11
|
# Check the JDBC DatabaseMetaData for savepoint support
|
|
12
12
|
def supports_savepoints?
|
|
@@ -25,7 +25,7 @@ module Sequel
|
|
|
25
25
|
JDBC_TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>JavaSQL::Connection::TRANSACTION_READ_UNCOMMITTED,
|
|
26
26
|
:committed=>JavaSQL::Connection::TRANSACTION_READ_COMMITTED,
|
|
27
27
|
:repeatable=>JavaSQL::Connection::TRANSACTION_REPEATABLE_READ,
|
|
28
|
-
:serializable=>JavaSQL::Connection::TRANSACTION_SERIALIZABLE}
|
|
28
|
+
:serializable=>JavaSQL::Connection::TRANSACTION_SERIALIZABLE}.freeze
|
|
29
29
|
|
|
30
30
|
# Set the transaction isolation level on the given connection using
|
|
31
31
|
# the JDBC API.
|
|
@@ -34,7 +34,7 @@ module Sequel
|
|
|
34
34
|
if (jdbc_level = JDBC_TRANSACTION_ISOLATION_LEVELS[level]) &&
|
|
35
35
|
conn.getMetaData.supportsTransactionIsolationLevel(jdbc_level)
|
|
36
36
|
_trans(conn)[:original_jdbc_isolation_level] = conn.getTransactionIsolation
|
|
37
|
-
|
|
37
|
+
log_connection_yield("Transaction.isolation_level = #{level}", conn){conn.setTransactionIsolation(jdbc_level)}
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -43,47 +43,38 @@ module Sequel
|
|
|
43
43
|
true
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
+
# JDBC savepoint object for the current savepoint for the connection.
|
|
47
|
+
def savepoint_obj(conn)
|
|
48
|
+
_trans(conn)[:savepoints][-1][:obj]
|
|
49
|
+
end
|
|
50
|
+
|
|
46
51
|
# Use JDBC connection's setAutoCommit to false to start transactions
|
|
47
52
|
def begin_transaction(conn, opts=OPTS)
|
|
48
|
-
if
|
|
49
|
-
|
|
50
|
-
if sps = th[:savepoint_objs]
|
|
51
|
-
sps << log_yield(TRANSACTION_SAVEPOINT){conn.set_savepoint}
|
|
52
|
-
else
|
|
53
|
-
log_yield(TRANSACTION_BEGIN){conn.setAutoCommit(false)}
|
|
54
|
-
th[:savepoint_objs] = []
|
|
55
|
-
set_transaction_isolation(conn, opts)
|
|
56
|
-
end
|
|
53
|
+
if in_savepoint?(conn)
|
|
54
|
+
_trans(conn)[:savepoints][-1][:obj] = log_connection_yield('Transaction.savepoint', conn){conn.set_savepoint}
|
|
57
55
|
else
|
|
58
|
-
|
|
56
|
+
log_connection_yield('Transaction.begin', conn){conn.setAutoCommit(false)}
|
|
59
57
|
set_transaction_isolation(conn, opts)
|
|
60
58
|
end
|
|
61
59
|
end
|
|
62
60
|
|
|
63
61
|
# Use JDBC connection's commit method to commit transactions
|
|
64
62
|
def commit_transaction(conn, opts=OPTS)
|
|
65
|
-
if
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
log_yield(TRANSACTION_COMMIT){conn.commit}
|
|
69
|
-
elsif supports_releasing_savepoints?
|
|
70
|
-
log_yield(TRANSACTION_RELEASE_SP){supports_releasing_savepoints? ? conn.release_savepoint(sps.last) : sps.last}
|
|
63
|
+
if in_savepoint?(conn)
|
|
64
|
+
if supports_releasing_savepoints?
|
|
65
|
+
log_connection_yield('Transaction.release_savepoint', conn){conn.release_savepoint(savepoint_obj(conn))}
|
|
71
66
|
end
|
|
72
67
|
else
|
|
73
|
-
|
|
68
|
+
log_connection_yield('Transaction.commit', conn){conn.commit}
|
|
74
69
|
end
|
|
75
70
|
end
|
|
76
71
|
|
|
77
72
|
# Use JDBC connection's setAutoCommit to true to enable non-transactional behavior
|
|
78
73
|
def remove_transaction(conn, committed)
|
|
79
74
|
if jdbc_level = _trans(conn)[:original_jdbc_isolation_level]
|
|
80
|
-
conn.setTransactionIsolation(jdbc_level)
|
|
75
|
+
log_connection_yield("Transaction.restore_isolation_level", conn){conn.setTransactionIsolation(jdbc_level)}
|
|
81
76
|
end
|
|
82
|
-
|
|
83
|
-
sps = _trans(conn)[:savepoint_objs]
|
|
84
|
-
conn.setAutoCommit(true) if sps.empty?
|
|
85
|
-
sps.pop
|
|
86
|
-
else
|
|
77
|
+
unless in_savepoint?(conn)
|
|
87
78
|
conn.setAutoCommit(true)
|
|
88
79
|
end
|
|
89
80
|
ensure
|
|
@@ -92,15 +83,10 @@ module Sequel
|
|
|
92
83
|
|
|
93
84
|
# Use JDBC connection's rollback method to rollback transactions
|
|
94
85
|
def rollback_transaction(conn, opts=OPTS)
|
|
95
|
-
if
|
|
96
|
-
|
|
97
|
-
if sps.empty?
|
|
98
|
-
log_yield(TRANSACTION_ROLLBACK){conn.rollback}
|
|
99
|
-
else
|
|
100
|
-
log_yield(TRANSACTION_ROLLBACK_SP){conn.rollback(sps.last)}
|
|
101
|
-
end
|
|
86
|
+
if in_savepoint?(conn)
|
|
87
|
+
log_connection_yield('Transaction.rollback_savepoint', conn){conn.rollback(savepoint_obj(conn))}
|
|
102
88
|
else
|
|
103
|
-
|
|
89
|
+
log_connection_yield('Transaction.rollback', conn){conn.rollback}
|
|
104
90
|
end
|
|
105
91
|
end
|
|
106
92
|
end
|
data/lib/sequel/adapters/mock.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'utils/unmodified_identifiers'
|
|
4
|
+
|
|
1
5
|
module Sequel
|
|
2
6
|
module Mock
|
|
3
|
-
# Connection class for Sequel's mock adapter.
|
|
4
7
|
class Connection
|
|
5
8
|
# Sequel::Mock::Database object that created this connection
|
|
6
9
|
attr_reader :db
|
|
@@ -26,66 +29,9 @@ module Sequel
|
|
|
26
29
|
end
|
|
27
30
|
end
|
|
28
31
|
|
|
29
|
-
# Database class for Sequel's mock adapter.
|
|
30
32
|
class Database < Sequel::Database
|
|
31
33
|
set_adapter_scheme :mock
|
|
32
34
|
|
|
33
|
-
# Map of database type names to module names, used for handling
|
|
34
|
-
# mock adapters for specific database types.
|
|
35
|
-
SHARED_ADAPTERS = {
|
|
36
|
-
'access'=>'Access',
|
|
37
|
-
'cubrid'=>'Cubrid',
|
|
38
|
-
'db2'=>'DB2',
|
|
39
|
-
'firebird'=>'Firebird',
|
|
40
|
-
'informix'=>'Informix',
|
|
41
|
-
'mssql'=>'MSSQL',
|
|
42
|
-
'mysql'=>'MySQL',
|
|
43
|
-
'oracle'=>'Oracle',
|
|
44
|
-
'postgres'=>'Postgres',
|
|
45
|
-
'sqlanywhere'=>'SqlAnywhere',
|
|
46
|
-
'sqlite'=>'SQLite'
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
# Procs to run for specific database types to get the mock adapter
|
|
50
|
-
# to work with the shared adapter
|
|
51
|
-
SHARED_ADAPTER_SETUP = {
|
|
52
|
-
'postgres' => lambda do |db|
|
|
53
|
-
db.instance_eval do
|
|
54
|
-
@server_version = 90400
|
|
55
|
-
initialize_postgres_adapter
|
|
56
|
-
end
|
|
57
|
-
db.extend(Module.new do
|
|
58
|
-
def bound_variable_arg(arg, conn)
|
|
59
|
-
arg
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def primary_key(table)
|
|
63
|
-
:id
|
|
64
|
-
end
|
|
65
|
-
end)
|
|
66
|
-
end,
|
|
67
|
-
'oracle' => lambda do |db|
|
|
68
|
-
db.instance_eval do
|
|
69
|
-
@primary_key_sequences = {}
|
|
70
|
-
end
|
|
71
|
-
end,
|
|
72
|
-
'mysql' => lambda do |db|
|
|
73
|
-
db.instance_eval do
|
|
74
|
-
@server_version = 50617
|
|
75
|
-
end
|
|
76
|
-
end,
|
|
77
|
-
'mssql' => lambda do |db|
|
|
78
|
-
db.instance_eval do
|
|
79
|
-
@server_version = 11000000
|
|
80
|
-
end
|
|
81
|
-
end,
|
|
82
|
-
'sqlite' => lambda do |db|
|
|
83
|
-
db.instance_eval do
|
|
84
|
-
@sqlite_version = 30804
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
}
|
|
88
|
-
|
|
89
35
|
# Set the autogenerated primary key integer
|
|
90
36
|
# to be returned when running an insert query.
|
|
91
37
|
# Argument types supported:
|
|
@@ -100,14 +46,22 @@ module Sequel
|
|
|
100
46
|
# the value returned
|
|
101
47
|
# Class :: Should be an Exception subclass, will create a new
|
|
102
48
|
# instance an raise it wrapped in a DatabaseError.
|
|
103
|
-
|
|
49
|
+
def autoid=(v)
|
|
50
|
+
@autoid = case v
|
|
51
|
+
when Integer
|
|
52
|
+
i = v - 1
|
|
53
|
+
proc{@mutex.synchronize{i+=1}}
|
|
54
|
+
else
|
|
55
|
+
v
|
|
56
|
+
end
|
|
57
|
+
end
|
|
104
58
|
|
|
105
59
|
# Set the columns to set in the dataset when the dataset fetches
|
|
106
60
|
# rows. Argument types supported:
|
|
107
61
|
# nil :: Set no columns
|
|
108
|
-
# Array of Symbols
|
|
109
|
-
# Array (otherwise)
|
|
110
|
-
#
|
|
62
|
+
# Array of Symbols :: Used for all datasets
|
|
63
|
+
# Array (otherwise) :: First retrieval gets the first value in the
|
|
64
|
+
# array, second gets the second value, etc.
|
|
111
65
|
# Proc :: Called with the select SQL query, uses the value
|
|
112
66
|
# returned, which should be an array of symbols
|
|
113
67
|
attr_writer :columns
|
|
@@ -172,9 +126,11 @@ module Sequel
|
|
|
172
126
|
# Return all stored SQL queries, and clear the cache
|
|
173
127
|
# of SQL queries.
|
|
174
128
|
def sqls
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
129
|
+
@mutex.synchronize do
|
|
130
|
+
s = @sqls.dup
|
|
131
|
+
@sqls.clear
|
|
132
|
+
s
|
|
133
|
+
end
|
|
178
134
|
end
|
|
179
135
|
|
|
180
136
|
# Enable use of savepoints.
|
|
@@ -184,26 +140,12 @@ module Sequel
|
|
|
184
140
|
|
|
185
141
|
private
|
|
186
142
|
|
|
187
|
-
def _autoid(sql, v, ds=nil)
|
|
188
|
-
case v
|
|
189
|
-
when Integer
|
|
190
|
-
if ds
|
|
191
|
-
ds.autoid += 1 if ds.autoid.is_a?(Integer)
|
|
192
|
-
else
|
|
193
|
-
@autoid += 1
|
|
194
|
-
end
|
|
195
|
-
v
|
|
196
|
-
else
|
|
197
|
-
_nextres(v, sql, nil)
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
|
|
201
143
|
def _execute(c, sql, opts=OPTS, &block)
|
|
202
144
|
sql += " -- args: #{opts[:arguments].inspect}" if opts[:arguments]
|
|
203
145
|
sql += " -- #{@opts[:append]}" if @opts[:append]
|
|
204
146
|
sql += " -- #{c.server.is_a?(Symbol) ? c.server : c.server.inspect}" if c.server != :default
|
|
205
|
-
|
|
206
|
-
@sqls << sql
|
|
147
|
+
log_connection_yield(sql, c){} unless opts[:log] == false
|
|
148
|
+
@mutex.synchronize{@sqls << sql}
|
|
207
149
|
|
|
208
150
|
ds = opts[:dataset]
|
|
209
151
|
begin
|
|
@@ -214,8 +156,15 @@ module Sequel
|
|
|
214
156
|
if meth == :numrows
|
|
215
157
|
_numrows(sql, (ds.numrows if ds) || @numrows)
|
|
216
158
|
else
|
|
217
|
-
|
|
218
|
-
|
|
159
|
+
if ds
|
|
160
|
+
@mutex.synchronize do
|
|
161
|
+
v = ds.autoid
|
|
162
|
+
if v.is_a?(Integer)
|
|
163
|
+
ds.send(:cache_set, :_autoid, v + 1)
|
|
164
|
+
end
|
|
165
|
+
v
|
|
166
|
+
end
|
|
167
|
+
end || _nextres(@autoid, sql, nil)
|
|
219
168
|
end
|
|
220
169
|
end
|
|
221
170
|
rescue => e
|
|
@@ -231,7 +180,7 @@ module Sequel
|
|
|
231
180
|
if f.all?{|h| h.is_a?(Hash)}
|
|
232
181
|
f.each{|h| yield h.dup}
|
|
233
182
|
else
|
|
234
|
-
_fetch(sql, f.shift, &block)
|
|
183
|
+
_fetch(sql, @mutex.synchronize{f.shift}, &block)
|
|
235
184
|
end
|
|
236
185
|
when Proc
|
|
237
186
|
h = f.call(sql)
|
|
@@ -244,7 +193,7 @@ module Sequel
|
|
|
244
193
|
if f < Exception
|
|
245
194
|
raise f
|
|
246
195
|
else
|
|
247
|
-
raise Error, "Invalid @
|
|
196
|
+
raise Error, "Invalid @fetch attribute: #{v.inspect}"
|
|
248
197
|
end
|
|
249
198
|
when nil
|
|
250
199
|
# nothing
|
|
@@ -258,7 +207,7 @@ module Sequel
|
|
|
258
207
|
when Integer
|
|
259
208
|
v
|
|
260
209
|
when Array
|
|
261
|
-
v.empty? ? default : _nextres(v.shift, sql, default)
|
|
210
|
+
v.empty? ? default : _nextres(@mutex.synchronize{v.shift}, sql, default)
|
|
262
211
|
when Proc
|
|
263
212
|
v.call(sql)
|
|
264
213
|
when Class
|
|
@@ -288,18 +237,37 @@ module Sequel
|
|
|
288
237
|
# :sqls :: The array to store the SQL queries in.
|
|
289
238
|
def adapter_initialize
|
|
290
239
|
opts = @opts
|
|
240
|
+
@mutex = Mutex.new
|
|
291
241
|
@sqls = opts[:sqls] || []
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
242
|
+
@shared_adapter = false
|
|
243
|
+
|
|
244
|
+
case db_type = opts[:host]
|
|
245
|
+
when String, Symbol
|
|
246
|
+
db_type = db_type.to_sym
|
|
247
|
+
unless mod = Sequel.synchronize{SHARED_ADAPTER_MAP[db_type]}
|
|
248
|
+
begin
|
|
249
|
+
require "sequel/adapters/shared/#{db_type}"
|
|
250
|
+
rescue LoadError
|
|
251
|
+
else
|
|
252
|
+
mod = Sequel.synchronize{SHARED_ADAPTER_MAP[db_type]}
|
|
253
|
+
end
|
|
299
254
|
end
|
|
300
|
-
|
|
301
|
-
|
|
255
|
+
|
|
256
|
+
if mod
|
|
257
|
+
@shared_adapter = true
|
|
258
|
+
extend(mod::DatabaseMethods)
|
|
259
|
+
extend_datasets(mod::DatasetMethods)
|
|
260
|
+
if mod.respond_to?(:mock_adapter_setup)
|
|
261
|
+
mod.mock_adapter_setup(self)
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
unless @shared_adapter
|
|
267
|
+
extend UnmodifiedIdentifiers::DatabaseMethods
|
|
268
|
+
extend_datasets UnmodifiedIdentifiers::DatasetMethods
|
|
302
269
|
end
|
|
270
|
+
|
|
303
271
|
self.autoid = opts[:autoid]
|
|
304
272
|
self.columns = opts[:columns]
|
|
305
273
|
self.fetch = opts[:fetch]
|
|
@@ -315,7 +283,7 @@ module Sequel
|
|
|
315
283
|
if cs.all?{|c| c.is_a?(Symbol)}
|
|
316
284
|
ds.columns(*cs)
|
|
317
285
|
else
|
|
318
|
-
columns(ds, sql, cs.shift)
|
|
286
|
+
columns(ds, sql, @mutex.synchronize{cs.shift})
|
|
319
287
|
end
|
|
320
288
|
end
|
|
321
289
|
when Proc
|
|
@@ -327,16 +295,12 @@ module Sequel
|
|
|
327
295
|
end
|
|
328
296
|
end
|
|
329
297
|
|
|
330
|
-
def
|
|
331
|
-
|
|
298
|
+
def dataset_class_default
|
|
299
|
+
Dataset
|
|
332
300
|
end
|
|
333
301
|
|
|
334
|
-
def
|
|
335
|
-
shared_adapter? ? super :
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
def identifier_output_method_default
|
|
339
|
-
shared_adapter? ? super : nil
|
|
302
|
+
def quote_identifiers_default
|
|
303
|
+
shared_adapter? ? super : false
|
|
340
304
|
end
|
|
341
305
|
|
|
342
306
|
def shared_adapter?
|
|
@@ -345,16 +309,20 @@ module Sequel
|
|
|
345
309
|
end
|
|
346
310
|
|
|
347
311
|
class Dataset < Sequel::Dataset
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
312
|
+
# The autoid setting for this dataset, if it has been overridden
|
|
313
|
+
def autoid
|
|
314
|
+
cache_get(:_autoid) || @opts[:autoid]
|
|
315
|
+
end
|
|
352
316
|
|
|
353
|
-
#
|
|
354
|
-
|
|
317
|
+
# The fetch setting for this dataset, if it has been overridden
|
|
318
|
+
def _fetch
|
|
319
|
+
cache_get(:_fetch) || @opts[:fetch]
|
|
320
|
+
end
|
|
355
321
|
|
|
356
|
-
#
|
|
357
|
-
|
|
322
|
+
# The numrows setting for this dataset, if it has been overridden
|
|
323
|
+
def numrows
|
|
324
|
+
cache_get(:_numrows) || @opts[:numrows]
|
|
325
|
+
end
|
|
358
326
|
|
|
359
327
|
# If arguments are provided, use them to set the columns
|
|
360
328
|
# for this dataset and return self. Otherwise, use the
|
|
@@ -363,7 +331,7 @@ module Sequel
|
|
|
363
331
|
if cs.empty?
|
|
364
332
|
super
|
|
365
333
|
else
|
|
366
|
-
|
|
334
|
+
self.columns = cs
|
|
367
335
|
self
|
|
368
336
|
end
|
|
369
337
|
end
|
|
@@ -372,6 +340,25 @@ module Sequel
|
|
|
372
340
|
execute(sql, &block)
|
|
373
341
|
end
|
|
374
342
|
|
|
343
|
+
def quote_identifiers?
|
|
344
|
+
@opts.fetch(:quote_identifiers, db.send(:quote_identifiers_default))
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
# Return cloned dataset with the autoid setting modified
|
|
348
|
+
def with_autoid(autoid)
|
|
349
|
+
clone(:autoid=>autoid)
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# Return cloned dataset with the fetch setting modified
|
|
353
|
+
def with_fetch(fetch)
|
|
354
|
+
clone(:fetch=>fetch)
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# Return cloned dataset with the numrows setting modified
|
|
358
|
+
def with_numrows(numrows)
|
|
359
|
+
clone(:numrows=>numrows)
|
|
360
|
+
end
|
|
361
|
+
|
|
375
362
|
private
|
|
376
363
|
|
|
377
364
|
def execute(sql, opts=OPTS, &block)
|
|
@@ -385,6 +372,10 @@ module Sequel
|
|
|
385
372
|
def execute_insert(sql, opts=OPTS, &block)
|
|
386
373
|
super(sql, opts.merge(:dataset=>self), &block)
|
|
387
374
|
end
|
|
375
|
+
|
|
376
|
+
def non_sql_option?(key)
|
|
377
|
+
super || key == :fetch || key == :numrows || key == :autoid
|
|
378
|
+
end
|
|
388
379
|
end
|
|
389
380
|
end
|
|
390
381
|
end
|