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
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('org.hsqldb.jdbcDriver', :HSQLDB)
|
|
2
|
-
|
|
4
|
+
require_relative 'transactions'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
7
|
module JDBC
|
|
@@ -11,20 +13,19 @@ module Sequel
|
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
|
|
14
|
-
# Database and Dataset support for HSQLDB databases accessed via JDBC.
|
|
15
16
|
module HSQLDB
|
|
16
|
-
# Instance methods for HSQLDB Database objects accessed via JDBC.
|
|
17
17
|
module DatabaseMethods
|
|
18
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
19
|
-
PRIMARY_KEY_INDEX_RE = /\Asys_idx_sys_pk_/i.freeze
|
|
20
|
-
|
|
21
18
|
include ::Sequel::JDBC::Transactions
|
|
22
19
|
|
|
23
|
-
# HSQLDB uses the :hsqldb database type.
|
|
24
20
|
def database_type
|
|
25
21
|
:hsqldb
|
|
26
22
|
end
|
|
27
23
|
|
|
24
|
+
def freeze
|
|
25
|
+
db_version
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
|
|
28
29
|
# HSQLDB uses an IDENTITY sequence as the default value for primary
|
|
29
30
|
# key columns.
|
|
30
31
|
def serial_primary_key_options
|
|
@@ -33,11 +34,10 @@ module Sequel
|
|
|
33
34
|
|
|
34
35
|
# The version of the database, as an integer (e.g 2.2.5 -> 20205)
|
|
35
36
|
def db_version
|
|
36
|
-
@db_version
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
37
|
+
return @db_version if defined?(@db_version)
|
|
38
|
+
v = get(Sequel.function(:DATABASE_VERSION))
|
|
39
|
+
@db_version = if v =~ /(\d+)\.(\d+)\.(\d+)/
|
|
40
|
+
$1.to_i * 10000 + $2.to_i * 100 + $3.to_i
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -48,13 +48,12 @@ module Sequel
|
|
|
48
48
|
|
|
49
49
|
private
|
|
50
50
|
|
|
51
|
-
# HSQLDB specific SQL for renaming columns, and changing column types and/or nullity.
|
|
52
51
|
def alter_table_sql(table, op)
|
|
53
52
|
case op[:op]
|
|
54
53
|
when :add_column
|
|
55
54
|
if op[:table]
|
|
56
55
|
[super(table, op.merge(:table=>nil)),
|
|
57
|
-
alter_table_sql(table, op.merge(:op=>:add_constraint, :type=>:foreign_key, :name=>op[:
|
|
56
|
+
alter_table_sql(table, op.merge(:op=>:add_constraint, :type=>:foreign_key, :name=>op[:foreign_key_constraint_name], :columns=>[op[:name]], :table=>op[:table]))]
|
|
58
57
|
else
|
|
59
58
|
super
|
|
60
59
|
end
|
|
@@ -99,7 +98,7 @@ module Sequel
|
|
|
99
98
|
def last_insert_id(conn, opts=OPTS)
|
|
100
99
|
statement(conn) do |stmt|
|
|
101
100
|
sql = 'CALL IDENTITY()'
|
|
102
|
-
rs =
|
|
101
|
+
rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
|
|
103
102
|
rs.next
|
|
104
103
|
rs.getLong(1)
|
|
105
104
|
end
|
|
@@ -107,7 +106,7 @@ module Sequel
|
|
|
107
106
|
|
|
108
107
|
# Primary key indexes appear to start with sys_idx_sys_pk_ on HSQLDB
|
|
109
108
|
def primary_key_index_re
|
|
110
|
-
|
|
109
|
+
/\Asys_idx_sys_pk_/i
|
|
111
110
|
end
|
|
112
111
|
|
|
113
112
|
# If an :identity option is present in the column, add the necessary IDENTITY SQL.
|
|
@@ -117,7 +116,7 @@ module Sequel
|
|
|
117
116
|
if column[:identity]
|
|
118
117
|
sql = "#{super} GENERATED BY DEFAULT AS IDENTITY"
|
|
119
118
|
if sw = column[:start_with]
|
|
120
|
-
sql
|
|
119
|
+
sql += " (START WITH #{sw.to_i}"
|
|
121
120
|
sql << " INCREMENT BY #{column[:increment_by].to_i}" if column[:increment_by]
|
|
122
121
|
sql << ")"
|
|
123
122
|
end
|
|
@@ -138,17 +137,7 @@ module Sequel
|
|
|
138
137
|
end
|
|
139
138
|
end
|
|
140
139
|
|
|
141
|
-
# Dataset class for HSQLDB datasets accessed via JDBC.
|
|
142
140
|
class Dataset < JDBC::Dataset
|
|
143
|
-
BOOL_TRUE = 'TRUE'.freeze
|
|
144
|
-
BOOL_FALSE = 'FALSE'.freeze
|
|
145
|
-
SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
|
|
146
|
-
APOS = Dataset::APOS
|
|
147
|
-
HSTAR = "H*".freeze
|
|
148
|
-
BLOB_OPEN = "X'".freeze
|
|
149
|
-
DEFAULT_FROM = " FROM (VALUES (0))".freeze
|
|
150
|
-
TIME_FORMAT = "'%H:%M:%S'".freeze
|
|
151
|
-
|
|
152
141
|
# Handle HSQLDB specific case insensitive LIKE and bitwise operator support.
|
|
153
142
|
def complex_expression_sql_append(sql, op, args)
|
|
154
143
|
case op
|
|
@@ -193,27 +182,27 @@ module Sequel
|
|
|
193
182
|
private
|
|
194
183
|
|
|
195
184
|
def empty_from_sql
|
|
196
|
-
|
|
185
|
+
" FROM (VALUES (0))"
|
|
197
186
|
end
|
|
198
187
|
|
|
199
188
|
# Use string in hex format for blob data.
|
|
200
189
|
def literal_blob_append(sql, v)
|
|
201
|
-
sql <<
|
|
190
|
+
sql << "X'" << v.unpack("H*").first << "'"
|
|
202
191
|
end
|
|
203
192
|
|
|
204
193
|
# HSQLDB uses FALSE for false values.
|
|
205
194
|
def literal_false
|
|
206
|
-
|
|
195
|
+
'FALSE'
|
|
207
196
|
end
|
|
208
197
|
|
|
209
198
|
# HSQLDB handles fractional seconds in timestamps, but not in times
|
|
210
199
|
def literal_sqltime(v)
|
|
211
|
-
v.strftime(
|
|
200
|
+
v.strftime("'%H:%M:%S'")
|
|
212
201
|
end
|
|
213
202
|
|
|
214
203
|
# HSQLDB uses TRUE for true values.
|
|
215
204
|
def literal_true
|
|
216
|
-
|
|
205
|
+
'TRUE'
|
|
217
206
|
end
|
|
218
207
|
|
|
219
208
|
# HSQLDB supports multiple rows in INSERT.
|
|
@@ -223,7 +212,7 @@ module Sequel
|
|
|
223
212
|
|
|
224
213
|
# Use WITH RECURSIVE instead of WITH if any of the CTEs is recursive
|
|
225
214
|
def select_with_sql_base
|
|
226
|
-
opts[:with].any?{|w| w[:recursive]} ?
|
|
215
|
+
opts[:with].any?{|w| w[:recursive]} ? "WITH RECURSIVE " : super
|
|
227
216
|
end
|
|
228
217
|
end
|
|
229
218
|
end
|
|
@@ -1,22 +1,21 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('Java::net.sourceforge.jtds.jdbc.Driver', :JTDS)
|
|
2
|
-
|
|
4
|
+
require_relative 'mssql'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
7
|
module JDBC
|
|
6
8
|
Sequel.synchronize do
|
|
7
9
|
DATABASE_SETUP[:jtds] = proc do |db|
|
|
8
10
|
db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
|
|
9
|
-
db.
|
|
11
|
+
db.extend_datasets Sequel::MSSQL::DatasetMethods
|
|
10
12
|
db.send(:set_mssql_unicode_strings)
|
|
11
13
|
Java::net.sourceforge.jtds.jdbc.Driver
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
# Database and Dataset instance methods for JTDS specific
|
|
16
|
-
# support via JDBC.
|
|
17
17
|
module JTDS
|
|
18
18
|
module DatabaseMethods
|
|
19
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
20
19
|
include Sequel::JDBC::MSSQL::DatabaseMethods
|
|
21
20
|
|
|
22
21
|
private
|
|
@@ -35,11 +34,6 @@ module Sequel
|
|
|
35
34
|
cps.setNull(i, cps.getParameterMetaData.getParameterType(i))
|
|
36
35
|
end
|
|
37
36
|
end
|
|
38
|
-
|
|
39
|
-
# Dataset class for JTDS datasets accessed via JDBC.
|
|
40
|
-
class Dataset < JDBC::Dataset
|
|
41
|
-
include Sequel::MSSQL::DatasetMethods
|
|
42
|
-
end
|
|
43
37
|
end
|
|
44
38
|
end
|
|
45
39
|
end
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../shared/mssql'
|
|
2
4
|
|
|
3
5
|
module Sequel
|
|
4
6
|
module JDBC
|
|
5
|
-
# Database and Dataset instance methods for MSSQL specific
|
|
6
|
-
# support via JDBC.
|
|
7
7
|
module MSSQL
|
|
8
|
-
# Database instance methods for MSSQL databases accessed via JDBC.
|
|
9
8
|
module DatabaseMethods
|
|
10
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
11
|
-
PRIMARY_KEY_INDEX_RE = /\Apk__/i.freeze
|
|
12
|
-
ATAT_IDENTITY = 'SELECT @@IDENTITY'.freeze
|
|
13
|
-
SCOPE_IDENTITY = 'SELECT SCOPE_IDENTITY()'.freeze
|
|
14
|
-
|
|
15
9
|
include Sequel::MSSQL::DatabaseMethods
|
|
16
10
|
|
|
17
11
|
private
|
|
@@ -19,8 +13,8 @@ module Sequel
|
|
|
19
13
|
# Get the last inserted id using SCOPE_IDENTITY().
|
|
20
14
|
def last_insert_id(conn, opts=OPTS)
|
|
21
15
|
statement(conn) do |stmt|
|
|
22
|
-
sql = opts[:prepared] ?
|
|
23
|
-
rs =
|
|
16
|
+
sql = opts[:prepared] ? 'SELECT @@IDENTITY' : 'SELECT SCOPE_IDENTITY()'
|
|
17
|
+
rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
|
|
24
18
|
rs.next
|
|
25
19
|
rs.getLong(1)
|
|
26
20
|
end
|
|
@@ -28,7 +22,7 @@ module Sequel
|
|
|
28
22
|
|
|
29
23
|
# Primary key indexes appear to start with pk__ on MSSQL
|
|
30
24
|
def primary_key_index_re
|
|
31
|
-
|
|
25
|
+
/\Apk__/i
|
|
32
26
|
end
|
|
33
27
|
end
|
|
34
28
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('com.mysql.jdbc.Driver', :MySQL)
|
|
2
|
-
|
|
4
|
+
require_relative '../shared/mysql'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
7
|
module JDBC
|
|
@@ -11,25 +13,12 @@ module Sequel
|
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
|
|
14
|
-
# Database and Dataset instance methods for MySQL specific
|
|
15
|
-
# support via JDBC.
|
|
16
16
|
module MySQL
|
|
17
|
-
# Database instance methods for MySQL databases accessed via JDBC.
|
|
18
17
|
module DatabaseMethods
|
|
19
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
20
18
|
include Sequel::MySQL::DatabaseMethods
|
|
21
|
-
LAST_INSERT_ID = 'SELECT LAST_INSERT_ID()'.freeze
|
|
22
19
|
|
|
23
20
|
private
|
|
24
21
|
|
|
25
|
-
# The database name for the given database. Need to parse it out
|
|
26
|
-
# of the connection string, since the JDBC does no parsing on the
|
|
27
|
-
# given connection string by default.
|
|
28
|
-
def database_name
|
|
29
|
-
u = URI.parse(uri.sub(/\Ajdbc:/, ''))
|
|
30
|
-
(m = /\/(.*)/.match(u.path)) && m[1]
|
|
31
|
-
end
|
|
32
|
-
|
|
33
22
|
# MySQL exception handling with SQLState is less accurate than with regexps.
|
|
34
23
|
def database_exception_use_sqlstates?
|
|
35
24
|
false
|
|
@@ -55,7 +44,7 @@ module Sequel
|
|
|
55
44
|
end
|
|
56
45
|
else
|
|
57
46
|
statement(conn) do |st|
|
|
58
|
-
rs = st.executeQuery(LAST_INSERT_ID)
|
|
47
|
+
rs = st.executeQuery('SELECT LAST_INSERT_ID()')
|
|
59
48
|
rs.next
|
|
60
49
|
rs.getLong(1)
|
|
61
50
|
end
|
|
@@ -65,12 +54,12 @@ module Sequel
|
|
|
65
54
|
# MySQL 5.1.12 JDBC adapter requires generated keys
|
|
66
55
|
# and previous versions don't mind.
|
|
67
56
|
def execute_statement_insert(stmt, sql)
|
|
68
|
-
stmt.executeUpdate(sql, JavaSQL::Statement
|
|
57
|
+
stmt.executeUpdate(sql, JavaSQL::Statement::RETURN_GENERATED_KEYS)
|
|
69
58
|
end
|
|
70
59
|
|
|
71
60
|
# Return generated keys for insert statements.
|
|
72
61
|
def prepare_jdbc_statement(conn, sql, opts)
|
|
73
|
-
opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement
|
|
62
|
+
opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement::RETURN_GENERATED_KEYS) : super
|
|
74
63
|
end
|
|
75
64
|
|
|
76
65
|
# Convert tinyint(1) type to boolean
|
|
@@ -81,8 +70,18 @@ module Sequel
|
|
|
81
70
|
# Run the default connection setting SQL statements.
|
|
82
71
|
# Apply the connectiong setting SQLs for every new connection.
|
|
83
72
|
def setup_connection(conn)
|
|
84
|
-
mysql_connection_setting_sqls.each{|sql| statement(conn){|s|
|
|
73
|
+
mysql_connection_setting_sqls.each{|sql| statement(conn){|s| log_connection_yield(sql, conn){s.execute(sql)}}}
|
|
74
|
+
super
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Handle unsigned integer values
|
|
78
|
+
def setup_type_convertor_map
|
|
85
79
|
super
|
|
80
|
+
TypeConvertor::BASIC_MAP.dup
|
|
81
|
+
@type_convertor_map[Java::JavaSQL::Types::SMALLINT] = @type_convertor_map[Java::JavaSQL::Types::INTEGER]
|
|
82
|
+
@type_convertor_map[Java::JavaSQL::Types::INTEGER] = @type_convertor_map[Java::JavaSQL::Types::BIGINT]
|
|
83
|
+
@basic_type_convertor_map[Java::JavaSQL::Types::SMALLINT] = @basic_type_convertor_map[Java::JavaSQL::Types::INTEGER]
|
|
84
|
+
@basic_type_convertor_map[Java::JavaSQL::Types::INTEGER] = @basic_type_convertor_map[Java::JavaSQL::Types::BIGINT]
|
|
86
85
|
end
|
|
87
86
|
end
|
|
88
87
|
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('Java::oracle.jdbc.driver.OracleDriver')
|
|
2
|
-
|
|
3
|
-
|
|
4
|
+
require_relative '../shared/oracle'
|
|
5
|
+
require_relative 'transactions'
|
|
4
6
|
|
|
5
7
|
module Sequel
|
|
6
8
|
module JDBC
|
|
@@ -12,33 +14,34 @@ module Sequel
|
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
module Oracle
|
|
16
18
|
JAVA_BIG_DECIMAL_CONSTRUCTOR = java.math.BigDecimal.java_class.constructor(Java::long).method(:new_instance)
|
|
17
|
-
|
|
18
|
-
def
|
|
19
|
+
ORACLE_DECIMAL = Object.new
|
|
20
|
+
def ORACLE_DECIMAL.call(r, i)
|
|
19
21
|
if v = r.getBigDecimal(i)
|
|
20
22
|
i = v.long_value
|
|
21
23
|
if v == JAVA_BIG_DECIMAL_CONSTRUCTOR.call(i)
|
|
22
24
|
i
|
|
23
25
|
else
|
|
24
|
-
BigDecimal
|
|
26
|
+
::Kernel::BigDecimal(v.to_string)
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
end
|
|
28
|
-
end
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
ORACLE_CLOB = Object.new
|
|
32
|
+
def ORACLE_CLOB.call(r, i)
|
|
33
|
+
return unless clob = r.getClob(i)
|
|
34
|
+
str = clob.getSubString(1, clob.length)
|
|
35
|
+
clob.freeTemporary if clob.isTemporary
|
|
36
|
+
str
|
|
37
|
+
end
|
|
36
38
|
|
|
39
|
+
module DatabaseMethods
|
|
37
40
|
include Sequel::Oracle::DatabaseMethods
|
|
38
41
|
include Sequel::JDBC::Transactions
|
|
39
42
|
|
|
40
43
|
def self.extended(db)
|
|
41
|
-
db.
|
|
44
|
+
db.instance_exec do
|
|
42
45
|
@autosequence = opts[:autosequence]
|
|
43
46
|
@primary_key_sequences = {}
|
|
44
47
|
end
|
|
@@ -70,7 +73,7 @@ module Sequel
|
|
|
70
73
|
sql = "SELECT #{literal(sequence)}.currval FROM dual"
|
|
71
74
|
statement(conn) do |stmt|
|
|
72
75
|
begin
|
|
73
|
-
rs =
|
|
76
|
+
rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
|
|
74
77
|
rs.next
|
|
75
78
|
rs.getLong(1)
|
|
76
79
|
rescue java.sql.SQLException
|
|
@@ -82,7 +85,7 @@ module Sequel
|
|
|
82
85
|
|
|
83
86
|
# Primary key indexes appear to start with sys_ on Oracle
|
|
84
87
|
def primary_key_index_re
|
|
85
|
-
|
|
88
|
+
/\Asys_/i
|
|
86
89
|
end
|
|
87
90
|
|
|
88
91
|
def schema_parse_table(*)
|
|
@@ -108,17 +111,18 @@ module Sequel
|
|
|
108
111
|
|
|
109
112
|
def setup_type_convertor_map
|
|
110
113
|
super
|
|
111
|
-
@type_convertor_map[:OracleDecimal] =
|
|
114
|
+
@type_convertor_map[:OracleDecimal] = ORACLE_DECIMAL
|
|
115
|
+
@type_convertor_map[:OracleClob] = ORACLE_CLOB
|
|
112
116
|
end
|
|
113
117
|
end
|
|
114
118
|
|
|
115
|
-
# Dataset class for Oracle datasets accessed via JDBC.
|
|
116
119
|
class Dataset < JDBC::Dataset
|
|
117
120
|
include Sequel::Oracle::DatasetMethods
|
|
118
121
|
|
|
119
122
|
NUMERIC_TYPE = Java::JavaSQL::Types::NUMERIC
|
|
120
123
|
TIMESTAMP_TYPE = Java::JavaSQL::Types::TIMESTAMP
|
|
121
|
-
|
|
124
|
+
CLOB_TYPE = Java::JavaSQL::Types::CLOB
|
|
125
|
+
TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ].freeze
|
|
122
126
|
|
|
123
127
|
def type_convertor(map, meta, type, i)
|
|
124
128
|
case type
|
|
@@ -130,6 +134,8 @@ module Sequel
|
|
|
130
134
|
end
|
|
131
135
|
when *TIMESTAMPTZ_TYPES
|
|
132
136
|
map[TIMESTAMP_TYPE]
|
|
137
|
+
when CLOB_TYPE
|
|
138
|
+
map[:OracleClob]
|
|
133
139
|
else
|
|
134
140
|
super
|
|
135
141
|
end
|
|
@@ -1,45 +1,20 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
Sequel::JDBC.load_driver('org.postgresql.Driver', :Postgres)
|
|
2
|
-
|
|
4
|
+
require_relative '../shared/postgres'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
|
-
Postgres::CONVERTED_EXCEPTIONS << NativeException
|
|
6
|
-
|
|
7
7
|
module JDBC
|
|
8
8
|
Sequel.synchronize do
|
|
9
9
|
DATABASE_SETUP[:postgresql] = proc do |db|
|
|
10
|
-
db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
|
|
11
10
|
db.dataset_class = Sequel::JDBC::Postgres::Dataset
|
|
11
|
+
db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
|
|
12
12
|
org.postgresql.Driver
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
class TypeConvertor
|
|
17
|
-
# Return PostgreSQL array types as ruby Arrays instead of
|
|
18
|
-
# JDBC PostgreSQL driver-specific array type. Only used if the
|
|
19
|
-
# database does not have a conversion proc for the type.
|
|
20
|
-
def RubyPGArray(r, i)
|
|
21
|
-
if v = r.getArray(i)
|
|
22
|
-
v.array.to_ary
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Return PostgreSQL hstore types as ruby Hashes instead of
|
|
27
|
-
# Java HashMaps. Only used if the database does not have a
|
|
28
|
-
# conversion proc for the type.
|
|
29
|
-
def RubyPGHstore(r, i)
|
|
30
|
-
if v = r.getObject(i)
|
|
31
|
-
v.to_hash
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Adapter, Database, and Dataset support for accessing a PostgreSQL
|
|
37
|
-
# database via JDBC.
|
|
38
16
|
module Postgres
|
|
39
|
-
# Methods to add to Database instances that access PostgreSQL via
|
|
40
|
-
# JDBC.
|
|
41
17
|
module DatabaseMethods
|
|
42
|
-
extend Sequel::Database::ResetIdentifierMangling
|
|
43
18
|
include Sequel::Postgres::DatabaseMethods
|
|
44
19
|
|
|
45
20
|
# Add the primary_keys and primary_key_sequences instance variables,
|
|
@@ -49,6 +24,12 @@ module Sequel
|
|
|
49
24
|
db.send(:initialize_postgres_adapter)
|
|
50
25
|
end
|
|
51
26
|
|
|
27
|
+
# Remove any current entry for the oid in the oid_convertor_map.
|
|
28
|
+
def add_conversion_proc(oid, *)
|
|
29
|
+
super
|
|
30
|
+
Sequel.synchronize{@oid_convertor_map.delete(oid)}
|
|
31
|
+
end
|
|
32
|
+
|
|
52
33
|
# See Sequel::Postgres::Adapter#copy_into
|
|
53
34
|
def copy_into(table, opts=OPTS)
|
|
54
35
|
data = opts[:data]
|
|
@@ -60,19 +41,23 @@ module Sequel
|
|
|
60
41
|
raise Error, "Must provide either a :data option or a block to copy_into"
|
|
61
42
|
end
|
|
62
43
|
|
|
63
|
-
synchronize(opts) do |conn|
|
|
44
|
+
synchronize(opts[:server]) do |conn|
|
|
64
45
|
begin
|
|
65
46
|
copy_manager = org.postgresql.copy.CopyManager.new(conn)
|
|
66
47
|
copier = copy_manager.copy_in(copy_into_sql(table, opts))
|
|
67
48
|
if block_given?
|
|
68
49
|
while buf = yield
|
|
69
|
-
|
|
50
|
+
java_bytes = buf.to_java_bytes
|
|
51
|
+
copier.writeToCopy(java_bytes, 0, java_bytes.length)
|
|
70
52
|
end
|
|
71
53
|
else
|
|
72
|
-
data.each
|
|
54
|
+
data.each do |d|
|
|
55
|
+
java_bytes = d.to_java_bytes
|
|
56
|
+
copier.writeToCopy(java_bytes, 0, java_bytes.length)
|
|
57
|
+
end
|
|
73
58
|
end
|
|
74
59
|
rescue Exception => e
|
|
75
|
-
copier.cancelCopy
|
|
60
|
+
copier.cancelCopy if copier
|
|
76
61
|
raise
|
|
77
62
|
ensure
|
|
78
63
|
unless e
|
|
@@ -98,14 +83,18 @@ module Sequel
|
|
|
98
83
|
end
|
|
99
84
|
nil
|
|
100
85
|
else
|
|
101
|
-
b =
|
|
86
|
+
b = String.new
|
|
102
87
|
while buf = copier.readFromCopy
|
|
103
88
|
b << String.from_java_bytes(buf)
|
|
104
89
|
end
|
|
105
90
|
b
|
|
106
91
|
end
|
|
92
|
+
rescue => e
|
|
93
|
+
raise_error(e, :disconnect=>true)
|
|
107
94
|
ensure
|
|
108
|
-
|
|
95
|
+
if buf && !e
|
|
96
|
+
raise DatabaseDisconnectError, "disconnecting as a partial COPY may leave the connection in an unusable state"
|
|
97
|
+
end
|
|
109
98
|
end
|
|
110
99
|
end
|
|
111
100
|
end
|
|
@@ -121,21 +110,51 @@ module Sequel
|
|
|
121
110
|
else
|
|
122
111
|
false
|
|
123
112
|
end
|
|
124
|
-
|
|
113
|
+
Sequel.synchronize{@oid_convertor_map[oid] = conv}
|
|
125
114
|
end
|
|
126
115
|
conv
|
|
127
116
|
end
|
|
128
117
|
|
|
129
118
|
private
|
|
130
119
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
super
|
|
134
|
-
Sequel.synchronize{@oid_convertor_map = {}}
|
|
120
|
+
def disconnect_error?(exception, opts)
|
|
121
|
+
super || exception.message =~ /\A(This connection has been closed\.|FATAL: terminating connection due to administrator command|An I\/O error occurred while sending to the backend\.)\z/
|
|
135
122
|
end
|
|
136
123
|
|
|
137
|
-
|
|
138
|
-
|
|
124
|
+
# For PostgreSQL-specific types, return the string that should be used
|
|
125
|
+
# as the PGObject value. Returns nil by default, loading pg_* extensions
|
|
126
|
+
# will override this to add support for specific types.
|
|
127
|
+
def bound_variable_arg(arg, conn)
|
|
128
|
+
nil
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Work around issue when using Sequel's bound variable support where the
|
|
132
|
+
# same SQL is used in different bound variable calls, but the schema has
|
|
133
|
+
# changed between the calls. This is necessary as jdbc-postgres versions
|
|
134
|
+
# after 9.4.1200 violate the JDBC API. These versions cache separate
|
|
135
|
+
# PreparedStatement instances, which are eventually prepared server side after the
|
|
136
|
+
# prepareThreshold is met. The JDBC API violation is that PreparedStatement#close
|
|
137
|
+
# does not release the server side prepared statement.
|
|
138
|
+
def prepare_jdbc_statement(conn, sql, opts)
|
|
139
|
+
ps = super
|
|
140
|
+
unless opts[:name]
|
|
141
|
+
ps.prepare_threshold = 0
|
|
142
|
+
end
|
|
143
|
+
ps
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# If the given argument is a recognized PostgreSQL-specific type, create
|
|
147
|
+
# a PGObject instance with unknown type and the bound argument string value,
|
|
148
|
+
# and set that as the prepared statement argument.
|
|
149
|
+
def set_ps_arg(cps, arg, i)
|
|
150
|
+
if v = bound_variable_arg(arg, nil)
|
|
151
|
+
obj = org.postgresql.util.PGobject.new
|
|
152
|
+
obj.setType("unknown")
|
|
153
|
+
obj.setValue(v)
|
|
154
|
+
cps.setObject(i, obj)
|
|
155
|
+
else
|
|
156
|
+
super
|
|
157
|
+
end
|
|
139
158
|
end
|
|
140
159
|
|
|
141
160
|
# Use setNull for nil arguments as the default behavior of setString
|
|
@@ -145,10 +164,10 @@ module Sequel
|
|
|
145
164
|
end
|
|
146
165
|
|
|
147
166
|
# Execute the connection configuration SQL queries on the connection.
|
|
148
|
-
def
|
|
149
|
-
conn = super
|
|
167
|
+
def setup_connection_with_opts(conn, opts)
|
|
168
|
+
conn = super
|
|
150
169
|
statement(conn) do |stmt|
|
|
151
|
-
connection_configuration_sqls.each{|sql|
|
|
170
|
+
connection_configuration_sqls(opts).each{|sql| log_connection_yield(sql, conn){stmt.execute(sql)}}
|
|
152
171
|
end
|
|
153
172
|
conn
|
|
154
173
|
end
|
|
@@ -156,52 +175,54 @@ module Sequel
|
|
|
156
175
|
def setup_type_convertor_map
|
|
157
176
|
super
|
|
158
177
|
@oid_convertor_map = {}
|
|
159
|
-
@type_convertor_map[:RubyPGArray] = TypeConvertor::INSTANCE.method(:RubyPGArray)
|
|
160
|
-
@type_convertor_map[:RubyPGHstore] = TypeConvertor::INSTANCE.method(:RubyPGHstore)
|
|
161
178
|
end
|
|
162
179
|
end
|
|
163
180
|
|
|
164
|
-
# Dataset subclass used for datasets that connect to PostgreSQL via JDBC.
|
|
165
181
|
class Dataset < JDBC::Dataset
|
|
166
182
|
include Sequel::Postgres::DatasetMethods
|
|
167
|
-
APOS = Dataset::APOS
|
|
168
|
-
|
|
169
|
-
# Add the shared PostgreSQL prepared statement methods
|
|
170
|
-
def prepare(type, name=nil, *values)
|
|
171
|
-
ps = to_prepared_statement(type, values)
|
|
172
|
-
ps.extend(JDBC::Dataset::PreparedStatementMethods)
|
|
173
|
-
ps.extend(::Sequel::Postgres::DatasetMethods::PreparedStatementMethods)
|
|
174
|
-
if name
|
|
175
|
-
ps.prepared_statement_name = name
|
|
176
|
-
db.set_prepared_statement(name, ps)
|
|
177
|
-
end
|
|
178
|
-
ps
|
|
179
|
-
end
|
|
180
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
|
|
189
|
+
|
|
181
190
|
private
|
|
182
191
|
|
|
183
192
|
# Literalize strings similar to the native postgres adapter
|
|
184
193
|
def literal_string_append(sql, v)
|
|
185
|
-
sql <<
|
|
194
|
+
sql << "'" << db.synchronize(@opts[:server]){|c| c.escape_string(v)} << "'"
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# SQL fragment for Sequel::SQLTime, containing just the time part
|
|
198
|
+
def literal_sqltime(v)
|
|
199
|
+
v.strftime("'%H:%M:%S#{sprintf(".%03d", (v.usec/1000.0).round)}'")
|
|
186
200
|
end
|
|
187
201
|
|
|
188
202
|
STRING_TYPE = Java::JavaSQL::Types::VARCHAR
|
|
189
203
|
ARRAY_TYPE = Java::JavaSQL::Types::ARRAY
|
|
190
|
-
PG_SPECIFIC_TYPES = [
|
|
191
|
-
|
|
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
|
|
205
|
+
|
|
206
|
+
# Return PostgreSQL hstore types as ruby Hashes instead of
|
|
207
|
+
# Java HashMaps. Only used if the database does not have a
|
|
208
|
+
# conversion proc for the type.
|
|
209
|
+
HSTORE_METHOD = Object.new
|
|
210
|
+
def HSTORE_METHOD.call(r, i)
|
|
211
|
+
if v = r.getObject(i)
|
|
212
|
+
v.to_hash
|
|
213
|
+
end
|
|
214
|
+
end
|
|
192
215
|
|
|
193
216
|
def type_convertor(map, meta, type, i)
|
|
194
217
|
case type
|
|
195
218
|
when *PG_SPECIFIC_TYPES
|
|
196
|
-
oid = meta.
|
|
219
|
+
oid = meta.getField(i).getOID
|
|
197
220
|
if pr = db.oid_convertor_proc(oid)
|
|
198
221
|
pr
|
|
199
|
-
elsif type == ARRAY_TYPE
|
|
200
|
-
map[:RubyPGArray]
|
|
201
222
|
elsif oid == 2950 # UUID
|
|
202
223
|
map[STRING_TYPE]
|
|
203
|
-
elsif meta.getPGType(i) ==
|
|
204
|
-
|
|
224
|
+
elsif meta.getPGType(i) == 'hstore'
|
|
225
|
+
HSTORE_METHOD
|
|
205
226
|
else
|
|
206
227
|
super
|
|
207
228
|
end
|