sequel 5.20.0 → 5.49.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 +4 -4
- data/CHANGELOG +398 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +7 -7
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +80 -16
- data/doc/cheat_sheet.rdoc +6 -5
- data/doc/code_order.rdoc +10 -12
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/fork_safety.rdoc +84 -0
- data/doc/migration.rdoc +11 -5
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +10 -2
- data/doc/postgresql.rdoc +82 -3
- data/doc/querying.rdoc +4 -4
- 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.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/sharding.rdoc +2 -0
- data/doc/sql.rdoc +13 -1
- data/doc/testing.rdoc +20 -7
- data/doc/transactions.rdoc +0 -8
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +1 -1
- data/lib/sequel/adapters/ado/access.rb +1 -1
- data/lib/sequel/adapters/ado.rb +43 -35
- data/lib/sequel/adapters/ibmdb.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
- data/lib/sequel/adapters/jdbc.rb +24 -6
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +2 -3
- data/lib/sequel/adapters/odbc.rb +8 -6
- data/lib/sequel/adapters/oracle.rb +5 -4
- data/lib/sequel/adapters/postgres.rb +15 -9
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +66 -21
- data/lib/sequel/adapters/shared/mysql.rb +27 -10
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +271 -32
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +161 -19
- data/lib/sequel/adapters/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/sqlite.rb +1 -1
- data/lib/sequel/adapters/tinytds.rb +15 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
- data/lib/sequel/ast_transformer.rb +6 -0
- data/lib/sequel/connection_pool/sharded_single.rb +4 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +2 -2
- data/lib/sequel/core.rb +333 -319
- data/lib/sequel/database/connecting.rb +3 -4
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +31 -12
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +53 -51
- data/lib/sequel/database/schema_methods.rb +38 -23
- data/lib/sequel/database/transactions.rb +17 -18
- data/lib/sequel/dataset/actions.rb +14 -9
- data/lib/sequel/dataset/features.rb +16 -0
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +26 -9
- data/lib/sequel/dataset/sql.rb +76 -25
- data/lib/sequel/dataset.rb +4 -2
- data/lib/sequel/deprecated.rb +3 -1
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +1 -2
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/date_arithmetic.rb +36 -24
- data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
- data/lib/sequel/extensions/eval_inspect.rb +2 -0
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/inflector.rb +9 -1
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +11 -3
- data/lib/sequel/extensions/named_timezones.rb +56 -8
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_array.rb +5 -0
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +11 -3
- data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +36 -8
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +238 -0
- data/lib/sequel/extensions/pg_loose_count.rb +3 -1
- data/lib/sequel/extensions/pg_range.rb +17 -9
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +4 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +3 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +24 -7
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -1
- data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +9 -3
- data/lib/sequel/model/associations.rb +356 -117
- data/lib/sequel/model/base.rb +107 -68
- data/lib/sequel/model/errors.rb +10 -1
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model/plugins.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- 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 +60 -18
- data/lib/sequel/plugins/association_proxies.rb +8 -2
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_validations.rb +39 -5
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/blacklist_security.rb +1 -2
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/caching.rb +3 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/composition.rb +7 -2
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +2 -1
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/dataset_associations.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/json_serializer.rb +57 -35
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +108 -9
- data/lib/sequel/plugins/nested_attributes.rb +15 -3
- data/lib/sequel/plugins/pg_array_associations.rb +58 -41
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
- data/lib/sequel/plugins/prepared_statements.rb +15 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +43 -35
- data/lib/sequel/plugins/serialization.rb +8 -3
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +11 -5
- data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +9 -4
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +1 -1
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/tree.rb +9 -4
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +1 -1
- data/lib/sequel/plugins/validation_class_methods.rb +5 -1
- data/lib/sequel/plugins/validation_helpers.rb +18 -11
- data/lib/sequel/plugins/xml_serializer.rb +1 -1
- data/lib/sequel/sql.rb +20 -5
- data/lib/sequel/timezones.rb +63 -17
- data/lib/sequel/version.rb +1 -1
- metadata +113 -381
- data/Rakefile +0 -151
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- 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/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -804
- data/spec/adapters/mysql_spec.rb +0 -1065
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4125
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2865
- data/spec/core/dataset_spec.rb +0 -5515
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1455
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1826
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -28
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -229
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -273
- data/spec/extensions/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -150
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -189
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/eager_graph_eager_spec.rb +0 -100
- 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/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -402
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -291
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -864
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -111
- data/spec/extensions/nested_attributes_spec.rb +0 -767
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
- data/spec/extensions/pg_enum_spec.rb +0 -118
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -289
- data/spec/extensions/pg_json_spec.rb +0 -262
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -519
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -177
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -381
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -870
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -97
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -189
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -63
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_spec.rb +0 -471
- data/spec/extensions/string_agg_spec.rb +0 -90
- 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 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -334
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1981
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2396
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -889
- data/spec/integration/spec_helper.rb +0 -65
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
data/lib/sequel/adapters/ado.rb
CHANGED
|
@@ -47,34 +47,40 @@ module Sequel
|
|
|
47
47
|
#AdVarWChar = 202
|
|
48
48
|
#AdWChar = 130
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def cp.bigint(v)
|
|
50
|
+
bigint = Object.new
|
|
51
|
+
def bigint.call(v)
|
|
53
52
|
v.to_i
|
|
54
53
|
end
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
numeric = Object.new
|
|
56
|
+
def numeric.call(v)
|
|
57
|
+
if v.include?(',')
|
|
58
|
+
BigDecimal(v.tr(',', '.'))
|
|
59
|
+
else
|
|
60
|
+
BigDecimal(v)
|
|
61
|
+
end
|
|
58
62
|
end
|
|
59
63
|
|
|
60
|
-
|
|
64
|
+
binary = Object.new
|
|
65
|
+
def binary.call(v)
|
|
61
66
|
Sequel.blob(v.pack('c*'))
|
|
62
67
|
end
|
|
63
68
|
|
|
64
|
-
|
|
69
|
+
date = Object.new
|
|
70
|
+
def date.call(v)
|
|
65
71
|
Date.new(v.year, v.month, v.day)
|
|
66
72
|
end
|
|
67
73
|
|
|
68
74
|
CONVERSION_PROCS = {}
|
|
69
75
|
[
|
|
70
|
-
[
|
|
71
|
-
[
|
|
72
|
-
[
|
|
73
|
-
[
|
|
74
|
-
].each do |
|
|
75
|
-
|
|
76
|
+
[bigint, AdBigInt],
|
|
77
|
+
[numeric, AdNumeric, AdVarNumeric],
|
|
78
|
+
[date, AdDBDate],
|
|
79
|
+
[binary, AdBinary, AdVarBinary, AdLongVarBinary]
|
|
80
|
+
].each do |callable, *types|
|
|
81
|
+
callable.freeze
|
|
76
82
|
types.each do |i|
|
|
77
|
-
CONVERSION_PROCS[i] =
|
|
83
|
+
CONVERSION_PROCS[i] = callable
|
|
78
84
|
end
|
|
79
85
|
end
|
|
80
86
|
CONVERSION_PROCS.freeze
|
|
@@ -155,7 +161,7 @@ module Sequel
|
|
|
155
161
|
begin
|
|
156
162
|
r = log_connection_yield(sql, conn){conn.Execute(sql)}
|
|
157
163
|
begin
|
|
158
|
-
yield r if
|
|
164
|
+
yield r if defined?(yield)
|
|
159
165
|
ensure
|
|
160
166
|
begin
|
|
161
167
|
r.close
|
|
@@ -189,10 +195,25 @@ module Sequel
|
|
|
189
195
|
end
|
|
190
196
|
|
|
191
197
|
@conversion_procs = CONVERSION_PROCS.dup
|
|
198
|
+
@conversion_procs[AdDBTimeStamp] = method(:adb_timestamp_to_application_timestamp)
|
|
192
199
|
|
|
193
200
|
super
|
|
194
201
|
end
|
|
195
202
|
|
|
203
|
+
def adb_timestamp_to_application_timestamp(v)
|
|
204
|
+
# This hard codes a timestamp_precision of 6 when converting.
|
|
205
|
+
# That is the default timestamp_precision, but the ado/mssql adapter uses a timestamp_precision
|
|
206
|
+
# of 3. However, timestamps returned by ado/mssql have nsec values that end up rounding to a
|
|
207
|
+
# the same value as if a timestamp_precision of 3 was hard coded (either xxx999yzz, where y is
|
|
208
|
+
# 5-9 or xxx000yzz where y is 0-4).
|
|
209
|
+
#
|
|
210
|
+
# ADO subadapters should override this they would like a different timestamp precision and the
|
|
211
|
+
# this code does not work for them (for example, if they provide full nsec precision).
|
|
212
|
+
#
|
|
213
|
+
# Note that fractional second handling for WIN32OLE objects is not correct on ruby <2.2
|
|
214
|
+
to_application_timestamp([v.year, v.month, v.day, v.hour, v.min, v.sec, (v.nsec/1000.0).round * 1000])
|
|
215
|
+
end
|
|
216
|
+
|
|
196
217
|
def dataset_class_default
|
|
197
218
|
Dataset
|
|
198
219
|
end
|
|
@@ -227,35 +248,22 @@ module Sequel
|
|
|
227
248
|
cols = []
|
|
228
249
|
conversion_procs = db.conversion_procs
|
|
229
250
|
|
|
230
|
-
i = -1
|
|
231
|
-
ts_cp = nil
|
|
232
251
|
recordset.Fields.each do |field|
|
|
233
|
-
|
|
234
|
-
cp = if type == AdDBTimeStamp
|
|
235
|
-
ts_cp ||= begin
|
|
236
|
-
nsec_div = 1000000000.0/(10**(timestamp_precision))
|
|
237
|
-
nsec_mul = 10**(timestamp_precision+3)
|
|
238
|
-
meth = db.method(:to_application_timestamp)
|
|
239
|
-
lambda do |v|
|
|
240
|
-
# Fractional second handling is not correct on ruby <2.2
|
|
241
|
-
meth.call([v.year, v.month, v.day, v.hour, v.min, v.sec, (v.nsec/nsec_div).round * nsec_mul])
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
else
|
|
245
|
-
conversion_procs[type]
|
|
246
|
-
end
|
|
247
|
-
cols << [output_identifier(field.Name), cp, i+=1]
|
|
252
|
+
cols << [output_identifier(field.Name), conversion_procs[field.Type]]
|
|
248
253
|
end
|
|
249
254
|
|
|
250
255
|
self.columns = cols.map(&:first)
|
|
251
256
|
return if recordset.EOF
|
|
257
|
+
max = cols.length
|
|
252
258
|
|
|
253
259
|
recordset.GetRows.transpose.each do |field_values|
|
|
254
260
|
h = {}
|
|
255
261
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
262
|
+
i = -1
|
|
263
|
+
while (i += 1) < max
|
|
264
|
+
name, cp = cols[i]
|
|
265
|
+
h[name] = if (v = field_values[i]) && cp
|
|
266
|
+
cp.call(v)
|
|
259
267
|
else
|
|
260
268
|
v
|
|
261
269
|
end
|
|
@@ -246,7 +246,7 @@ module Sequel
|
|
|
246
246
|
end
|
|
247
247
|
begin
|
|
248
248
|
stmt = log_connection_yield(log_sql, conn, args){conn.execute_prepared(ps_name, *args)}
|
|
249
|
-
if
|
|
249
|
+
if defined?(yield)
|
|
250
250
|
yield(stmt)
|
|
251
251
|
else
|
|
252
252
|
stmt.affected
|
|
@@ -268,7 +268,7 @@ module Sequel
|
|
|
268
268
|
# is given or returning the number of affected rows if not, and ensuring the statement is freed.
|
|
269
269
|
def _execute(conn, sql, opts)
|
|
270
270
|
stmt = log_connection_yield(sql, conn){conn.execute(sql)}
|
|
271
|
-
if
|
|
271
|
+
if defined?(yield)
|
|
272
272
|
yield(stmt)
|
|
273
273
|
else
|
|
274
274
|
stmt.affected
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('com.mysql.jdbc.Driver', :MySQL)
|
|
4
|
-
require_relative '../shared/mysql'
|
|
5
|
-
|
|
6
3
|
module Sequel
|
|
7
4
|
module JDBC
|
|
5
|
+
driver = Sequel::JDBC.load_driver(%w'com.mysql.cj.jdbc.Driver com.mysql.jdbc.Driver', :MySQL)
|
|
6
|
+
require_relative '../shared/mysql'
|
|
7
|
+
|
|
8
8
|
Sequel.synchronize do
|
|
9
9
|
DATABASE_SETUP[:mysql] = proc do |db|
|
|
10
10
|
db.extend(Sequel::JDBC::MySQL::DatabaseMethods)
|
|
11
11
|
db.extend_datasets Sequel::MySQL::DatasetMethods
|
|
12
|
-
|
|
12
|
+
driver
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -54,12 +54,12 @@ module Sequel
|
|
|
54
54
|
# MySQL 5.1.12 JDBC adapter requires generated keys
|
|
55
55
|
# and previous versions don't mind.
|
|
56
56
|
def execute_statement_insert(stmt, sql)
|
|
57
|
-
stmt.executeUpdate(sql, JavaSQL::Statement
|
|
57
|
+
stmt.executeUpdate(sql, JavaSQL::Statement::RETURN_GENERATED_KEYS)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
# Return generated keys for insert statements.
|
|
61
61
|
def prepare_jdbc_statement(conn, sql, opts)
|
|
62
|
-
opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement
|
|
62
|
+
opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement::RETURN_GENERATED_KEYS) : super
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
# Convert tinyint(1) type to boolean
|
|
@@ -35,9 +35,9 @@ module Sequel
|
|
|
35
35
|
data = opts[:data]
|
|
36
36
|
data = Array(data) if data.is_a?(String)
|
|
37
37
|
|
|
38
|
-
if
|
|
38
|
+
if defined?(yield) && data
|
|
39
39
|
raise Error, "Cannot provide both a :data option and a block to copy_into"
|
|
40
|
-
elsif !
|
|
40
|
+
elsif !defined?(yield) && !data
|
|
41
41
|
raise Error, "Must provide either a :data option or a block to copy_into"
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -45,7 +45,7 @@ module Sequel
|
|
|
45
45
|
begin
|
|
46
46
|
copy_manager = org.postgresql.copy.CopyManager.new(conn)
|
|
47
47
|
copier = copy_manager.copy_in(copy_into_sql(table, opts))
|
|
48
|
-
if
|
|
48
|
+
if defined?(yield)
|
|
49
49
|
while buf = yield
|
|
50
50
|
java_bytes = buf.to_java_bytes
|
|
51
51
|
copier.writeToCopy(java_bytes, 0, java_bytes.length)
|
|
@@ -77,7 +77,7 @@ module Sequel
|
|
|
77
77
|
copy_manager = org.postgresql.copy.CopyManager.new(conn)
|
|
78
78
|
copier = copy_manager.copy_out(copy_table_sql(table, opts))
|
|
79
79
|
begin
|
|
80
|
-
if
|
|
80
|
+
if defined?(yield)
|
|
81
81
|
while buf = copier.readFromCopy
|
|
82
82
|
yield(String.from_java_bytes(buf))
|
|
83
83
|
end
|
|
@@ -180,6 +180,12 @@ module Sequel
|
|
|
180
180
|
|
|
181
181
|
class Dataset < JDBC::Dataset
|
|
182
182
|
include Sequel::Postgres::DatasetMethods
|
|
183
|
+
|
|
184
|
+
# Warn when calling as the fetch size is ignored by the JDBC adapter currently.
|
|
185
|
+
def with_fetch_size(size)
|
|
186
|
+
warn("Sequel::JDBC::Postgres::Dataset#with_fetch_size does not currently have an effect.", :uplevel=>1)
|
|
187
|
+
super
|
|
188
|
+
end
|
|
183
189
|
|
|
184
190
|
private
|
|
185
191
|
|
|
@@ -195,17 +201,7 @@ module Sequel
|
|
|
195
201
|
|
|
196
202
|
STRING_TYPE = Java::JavaSQL::Types::VARCHAR
|
|
197
203
|
ARRAY_TYPE = Java::JavaSQL::Types::ARRAY
|
|
198
|
-
PG_SPECIFIC_TYPES = [
|
|
199
|
-
|
|
200
|
-
# Return PostgreSQL array types as ruby Arrays instead of
|
|
201
|
-
# JDBC PostgreSQL driver-specific array type. Only used if the
|
|
202
|
-
# database does not have a conversion proc for the type.
|
|
203
|
-
ARRAY_METHOD = Object.new
|
|
204
|
-
def ARRAY_METHOD.call(r, i)
|
|
205
|
-
if v = r.getArray(i)
|
|
206
|
-
v.array.to_ary
|
|
207
|
-
end
|
|
208
|
-
end
|
|
204
|
+
PG_SPECIFIC_TYPES = [Java::JavaSQL::Types::ARRAY, Java::JavaSQL::Types::OTHER, Java::JavaSQL::Types::STRUCT, Java::JavaSQL::Types::TIME_WITH_TIMEZONE, Java::JavaSQL::Types::TIME].freeze
|
|
209
205
|
|
|
210
206
|
# Return PostgreSQL hstore types as ruby Hashes instead of
|
|
211
207
|
# Java HashMaps. Only used if the database does not have a
|
|
@@ -223,8 +219,6 @@ module Sequel
|
|
|
223
219
|
oid = meta.getField(i).getOID
|
|
224
220
|
if pr = db.oid_convertor_proc(oid)
|
|
225
221
|
pr
|
|
226
|
-
elsif type == ARRAY_TYPE
|
|
227
|
-
ARRAY_METHOD
|
|
228
222
|
elsif oid == 2950 # UUID
|
|
229
223
|
map[STRING_TYPE]
|
|
230
224
|
elsif meta.getPGType(i) == 'hstore'
|
|
@@ -15,6 +15,24 @@ module Sequel
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
module SQLite
|
|
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
37
|
include Sequel::SQLite::DatabaseMethods
|
|
20
38
|
|
|
@@ -37,6 +55,17 @@ module Sequel
|
|
|
37
55
|
end
|
|
38
56
|
|
|
39
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
|
|
40
69
|
|
|
41
70
|
DATABASE_ERROR_REGEXPS = Sequel::SQLite::DatabaseMethods::DATABASE_ERROR_REGEXPS.merge(/Abort due to constraint violation/ => ConstraintViolation).freeze
|
|
42
71
|
def database_error_regexps
|
data/lib/sequel/adapters/jdbc.rb
CHANGED
|
@@ -51,7 +51,19 @@ module Sequel
|
|
|
51
51
|
# Raise a Sequel::AdapterNotFound if evaluating the class name raises a NameError.
|
|
52
52
|
def self.load_driver(drv, gem=nil)
|
|
53
53
|
load_gem(gem) if gem
|
|
54
|
-
|
|
54
|
+
if drv.is_a?(String)
|
|
55
|
+
eval drv
|
|
56
|
+
else
|
|
57
|
+
*try, last = drv
|
|
58
|
+
try.each do |try_drv|
|
|
59
|
+
begin
|
|
60
|
+
return eval(try_drv)
|
|
61
|
+
rescue NameError
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
eval last
|
|
66
|
+
end
|
|
55
67
|
rescue NameError
|
|
56
68
|
raise Sequel::AdapterNotFound, "#{drv} not loaded#{", try installing jdbc-#{gem.to_s.downcase} gem" if gem}"
|
|
57
69
|
end
|
|
@@ -59,11 +71,11 @@ module Sequel
|
|
|
59
71
|
class TypeConvertor
|
|
60
72
|
CONVERTORS = convertors = {}
|
|
61
73
|
%w'Boolean Float Double Int Long Short'.each do |meth|
|
|
62
|
-
x = convertors[meth.to_sym] = Object.new
|
|
74
|
+
x = x = convertors[meth.to_sym] = Object.new
|
|
63
75
|
class_eval("def x.call(r, i) v = r.get#{meth}(i); v unless r.wasNull end", __FILE__, __LINE__)
|
|
64
76
|
end
|
|
65
77
|
%w'Object Array String Time Date Timestamp BigDecimal Blob Bytes Clob'.each do |meth|
|
|
66
|
-
x = convertors[meth.to_sym] = Object.new
|
|
78
|
+
x = x = convertors[meth.to_sym] = Object.new
|
|
67
79
|
class_eval("def x.call(r, i) r.get#{meth}(i) end", __FILE__, __LINE__)
|
|
68
80
|
end
|
|
69
81
|
x = convertors[:RubyTime] = Object.new
|
|
@@ -102,12 +114,17 @@ module Sequel
|
|
|
102
114
|
v.getSubString(1, v.length)
|
|
103
115
|
end
|
|
104
116
|
end
|
|
117
|
+
x = convertors[:RubyArray] = Object.new
|
|
118
|
+
def x.call(r, i)
|
|
119
|
+
if v = r.getArray(i)
|
|
120
|
+
v.array.to_ary
|
|
121
|
+
end
|
|
122
|
+
end
|
|
105
123
|
|
|
106
124
|
MAP = Hash.new(convertors[:Object])
|
|
107
125
|
types = Java::JavaSQL::Types
|
|
108
126
|
|
|
109
127
|
{
|
|
110
|
-
:ARRAY => :Array,
|
|
111
128
|
:BOOLEAN => :Boolean,
|
|
112
129
|
:CHAR => :String,
|
|
113
130
|
:DOUBLE => :Double,
|
|
@@ -126,6 +143,7 @@ module Sequel
|
|
|
126
143
|
BASIC_MAP = MAP.dup
|
|
127
144
|
|
|
128
145
|
{
|
|
146
|
+
:ARRAY => :Array,
|
|
129
147
|
:BINARY => :Blob,
|
|
130
148
|
:BLOB => :Blob,
|
|
131
149
|
:CLOB => :Clob,
|
|
@@ -178,7 +196,7 @@ module Sequel
|
|
|
178
196
|
args.each{|arg| set_ps_arg(cps, arg, i+=1)}
|
|
179
197
|
|
|
180
198
|
begin
|
|
181
|
-
if
|
|
199
|
+
if defined?(yield)
|
|
182
200
|
yield log_connection_yield(sql, conn){cps.executeQuery}
|
|
183
201
|
else
|
|
184
202
|
log_connection_yield(sql, conn){cps.executeUpdate}
|
|
@@ -443,7 +461,7 @@ module Sequel
|
|
|
443
461
|
msg << ")"
|
|
444
462
|
end
|
|
445
463
|
begin
|
|
446
|
-
if
|
|
464
|
+
if defined?(yield)
|
|
447
465
|
yield log_connection_yield(msg, conn, args){cps.executeQuery}
|
|
448
466
|
else
|
|
449
467
|
case opts[:type]
|
|
@@ -167,7 +167,7 @@ module Sequel
|
|
|
167
167
|
r = log_connection_yield((log_sql = opts[:log_sql]) ? sql + log_sql : sql, conn){conn.query(sql)}
|
|
168
168
|
if opts[:type] == :select
|
|
169
169
|
yield r if r
|
|
170
|
-
elsif
|
|
170
|
+
elsif defined?(yield)
|
|
171
171
|
yield conn
|
|
172
172
|
end
|
|
173
173
|
if conn.respond_to?(:more_results?)
|
|
@@ -36,7 +36,6 @@ module Sequel
|
|
|
36
36
|
# options such as :local_infile.
|
|
37
37
|
def connect(server)
|
|
38
38
|
opts = server_opts(server)
|
|
39
|
-
opts[:host] ||= 'localhost'
|
|
40
39
|
opts[:username] ||= opts.delete(:user)
|
|
41
40
|
opts[:flags] ||= 0
|
|
42
41
|
opts[:flags] |= ::Mysql2::Client::FOUND_ROWS if ::Mysql2::Client.const_defined?(:FOUND_ROWS)
|
|
@@ -152,7 +151,7 @@ module Sequel
|
|
|
152
151
|
yield r
|
|
153
152
|
end
|
|
154
153
|
end
|
|
155
|
-
elsif
|
|
154
|
+
elsif defined?(yield)
|
|
156
155
|
yield conn
|
|
157
156
|
end
|
|
158
157
|
rescue ::Mysql2::Error => e
|
|
@@ -245,7 +244,7 @@ module Sequel
|
|
|
245
244
|
# it hasn't been disabled.
|
|
246
245
|
def paged_each(opts=OPTS, &block)
|
|
247
246
|
if STREAMING_SUPPORTED && opts[:stream] != false
|
|
248
|
-
unless
|
|
247
|
+
unless defined?(yield)
|
|
249
248
|
return enum_for(:paged_each, opts)
|
|
250
249
|
end
|
|
251
250
|
stream.each(&block)
|
data/lib/sequel/adapters/odbc.rb
CHANGED
|
@@ -40,7 +40,7 @@ module Sequel
|
|
|
40
40
|
synchronize(opts[:server]) do |conn|
|
|
41
41
|
begin
|
|
42
42
|
r = log_connection_yield(sql, conn){conn.run(sql)}
|
|
43
|
-
yield(r) if
|
|
43
|
+
yield(r) if defined?(yield)
|
|
44
44
|
rescue ::ODBC::Error, ArgumentError => e
|
|
45
45
|
raise_error(e)
|
|
46
46
|
ensure
|
|
@@ -92,12 +92,14 @@ module Sequel
|
|
|
92
92
|
cols = s.columns(true).map{|c| [output_identifier(c.name), c.type, i+=1]}
|
|
93
93
|
columns = cols.map{|c| c[0]}
|
|
94
94
|
self.columns = columns
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
s.each do |row|
|
|
96
|
+
hash = {}
|
|
97
|
+
cols.each do |n,t,j|
|
|
98
|
+
v = row[j]
|
|
99
|
+
# We can assume v is not false, so this shouldn't convert false to nil.
|
|
100
|
+
hash[n] = (convert_odbc_value(v, t) if v)
|
|
100
101
|
end
|
|
102
|
+
yield hash
|
|
101
103
|
end
|
|
102
104
|
end
|
|
103
105
|
self
|
|
@@ -14,7 +14,8 @@ module Sequel
|
|
|
14
14
|
# ORA-02396: exceeded maximum idle time, please connect again
|
|
15
15
|
# ORA-03113: end-of-file on communication channel
|
|
16
16
|
# ORA-03114: not connected to ORACLE
|
|
17
|
-
|
|
17
|
+
# ORA-03135: connection lost contact
|
|
18
|
+
CONNECTION_ERROR_CODES = [ 28, 1012, 2396, 3113, 3114, 3135 ].freeze
|
|
18
19
|
|
|
19
20
|
ORACLE_TYPES = {
|
|
20
21
|
:blob=>lambda{|b| Sequel::SQL::Blob.new(b.read)},
|
|
@@ -87,11 +88,11 @@ module Sequel
|
|
|
87
88
|
r = conn.parse(sql)
|
|
88
89
|
args = cursor_bind_params(conn, r, args)
|
|
89
90
|
nr = log_connection_yield(sql, conn, args){r.exec}
|
|
90
|
-
r = nr unless
|
|
91
|
+
r = nr unless defined?(yield)
|
|
91
92
|
else
|
|
92
93
|
r = log_connection_yield(sql, conn){conn.exec(sql)}
|
|
93
94
|
end
|
|
94
|
-
if
|
|
95
|
+
if defined?(yield)
|
|
95
96
|
yield(r)
|
|
96
97
|
elsif type == :insert
|
|
97
98
|
last_insert_id(conn, opts)
|
|
@@ -191,7 +192,7 @@ module Sequel
|
|
|
191
192
|
log_sql << ")"
|
|
192
193
|
end
|
|
193
194
|
r = log_connection_yield(log_sql, conn, args){cursor.exec}
|
|
194
|
-
if
|
|
195
|
+
if defined?(yield)
|
|
195
196
|
yield(cursor)
|
|
196
197
|
elsif type == :insert
|
|
197
198
|
last_insert_id(conn, opts)
|
|
@@ -70,6 +70,10 @@ module Sequel
|
|
|
70
70
|
# string names of the server side prepared statement, and values
|
|
71
71
|
# are SQL strings.
|
|
72
72
|
attr_reader :prepared_statements
|
|
73
|
+
|
|
74
|
+
unless public_method_defined?(:async_exec_params)
|
|
75
|
+
alias async_exec_params async_exec
|
|
76
|
+
end
|
|
73
77
|
else
|
|
74
78
|
# Make postgres-pr look like pg
|
|
75
79
|
CONNECTION_OK = -1
|
|
@@ -139,7 +143,7 @@ module Sequel
|
|
|
139
143
|
args = args.map{|v| @db.bound_variable_arg(v, self)} if args
|
|
140
144
|
q = check_disconnect_errors{execute_query(sql, args)}
|
|
141
145
|
begin
|
|
142
|
-
|
|
146
|
+
defined?(yield) ? yield(q) : q.cmd_tuples
|
|
143
147
|
ensure
|
|
144
148
|
q.clear if q && q.respond_to?(:clear)
|
|
145
149
|
end
|
|
@@ -149,7 +153,7 @@ module Sequel
|
|
|
149
153
|
|
|
150
154
|
# Return the PGResult containing the query results.
|
|
151
155
|
def execute_query(sql, args)
|
|
152
|
-
@db.log_connection_yield(sql, self, args){args ?
|
|
156
|
+
@db.log_connection_yield(sql, self, args){args ? async_exec_params(sql, args) : async_exec(sql)}
|
|
153
157
|
end
|
|
154
158
|
end
|
|
155
159
|
|
|
@@ -346,7 +350,7 @@ module Sequel
|
|
|
346
350
|
synchronize(opts[:server]) do |conn|
|
|
347
351
|
conn.execute(copy_table_sql(table, opts))
|
|
348
352
|
begin
|
|
349
|
-
if
|
|
353
|
+
if defined?(yield)
|
|
350
354
|
while buf = conn.get_copy_data
|
|
351
355
|
yield buf
|
|
352
356
|
end
|
|
@@ -396,16 +400,16 @@ module Sequel
|
|
|
396
400
|
data = opts[:data]
|
|
397
401
|
data = Array(data) if data.is_a?(String)
|
|
398
402
|
|
|
399
|
-
if
|
|
403
|
+
if defined?(yield) && data
|
|
400
404
|
raise Error, "Cannot provide both a :data option and a block to copy_into"
|
|
401
|
-
elsif !
|
|
405
|
+
elsif !defined?(yield) && !data
|
|
402
406
|
raise Error, "Must provide either a :data option or a block to copy_into"
|
|
403
407
|
end
|
|
404
408
|
|
|
405
409
|
synchronize(opts[:server]) do |conn|
|
|
406
410
|
conn.execute(copy_into_sql(table, opts))
|
|
407
411
|
begin
|
|
408
|
-
if
|
|
412
|
+
if defined?(yield)
|
|
409
413
|
while buf = yield
|
|
410
414
|
conn.put_copy_data(buf)
|
|
411
415
|
end
|
|
@@ -586,7 +590,7 @@ module Sequel
|
|
|
586
590
|
|
|
587
591
|
q = conn.check_disconnect_errors{log_connection_yield(log_sql, conn, args){_execute_prepared_statement(conn, ps_name, args, opts)}}
|
|
588
592
|
begin
|
|
589
|
-
|
|
593
|
+
defined?(yield) ? yield(q) : q.cmd_tuples
|
|
590
594
|
ensure
|
|
591
595
|
q.clear if q && q.respond_to?(:clear)
|
|
592
596
|
end
|
|
@@ -612,7 +616,7 @@ module Sequel
|
|
|
612
616
|
|
|
613
617
|
# Use a cursor for paging.
|
|
614
618
|
def paged_each(opts=OPTS, &block)
|
|
615
|
-
unless
|
|
619
|
+
unless defined?(yield)
|
|
616
620
|
return enum_for(:paged_each, opts)
|
|
617
621
|
end
|
|
618
622
|
use_cursor(opts).each(&block)
|
|
@@ -713,7 +717,9 @@ module Sequel
|
|
|
713
717
|
sql = String.new
|
|
714
718
|
sql << "CALL "
|
|
715
719
|
identifier_append(sql, name)
|
|
716
|
-
|
|
720
|
+
sql << "("
|
|
721
|
+
expression_list_append(sql, args)
|
|
722
|
+
sql << ")"
|
|
717
723
|
with_sql_first(sql)
|
|
718
724
|
end
|
|
719
725
|
|
|
@@ -171,6 +171,12 @@ module Sequel
|
|
|
171
171
|
clone(:into => table)
|
|
172
172
|
end
|
|
173
173
|
|
|
174
|
+
# Access uses [] for quoting identifiers, and can't handle
|
|
175
|
+
# ] inside identifiers.
|
|
176
|
+
def quoted_identifier_append(sql, v)
|
|
177
|
+
sql << '[' << v.to_s << ']'
|
|
178
|
+
end
|
|
179
|
+
|
|
174
180
|
# Access does not support derived column lists.
|
|
175
181
|
def supports_derived_column_lists?
|
|
176
182
|
false
|
|
@@ -279,12 +285,6 @@ module Sequel
|
|
|
279
285
|
literal_append(sql, l)
|
|
280
286
|
end
|
|
281
287
|
end
|
|
282
|
-
|
|
283
|
-
# Access uses [] for quoting identifiers, and can't handle
|
|
284
|
-
# ] inside identifiers.
|
|
285
|
-
def quoted_identifier_append(sql, v)
|
|
286
|
-
sql << '[' << v.to_s << ']'
|
|
287
|
-
end
|
|
288
288
|
end
|
|
289
289
|
end
|
|
290
290
|
end
|