sequel 5.83.0 → 5.106.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/MIT-LICENSE +1 -1
- data/lib/sequel/adapters/ado/access.rb +2 -2
- data/lib/sequel/adapters/ado.rb +2 -2
- data/lib/sequel/adapters/amalgalite.rb +16 -1
- data/lib/sequel/adapters/ibmdb.rb +2 -1
- data/lib/sequel/adapters/jdbc/db2.rb +2 -2
- data/lib/sequel/adapters/jdbc/derby.rb +4 -2
- data/lib/sequel/adapters/jdbc/h2.rb +4 -4
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -2
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +3 -3
- data/lib/sequel/adapters/jdbc/oracle.rb +6 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +5 -5
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +6 -6
- data/lib/sequel/adapters/jdbc/sqlite.rb +3 -3
- data/lib/sequel/adapters/jdbc/sqlserver.rb +3 -3
- data/lib/sequel/adapters/jdbc.rb +29 -15
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +10 -3
- data/lib/sequel/adapters/odbc.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +16 -0
- data/lib/sequel/adapters/postgres.rb +2 -1
- data/lib/sequel/adapters/shared/access.rb +1 -0
- data/lib/sequel/adapters/shared/db2.rb +8 -3
- data/lib/sequel/adapters/shared/mssql.rb +9 -8
- data/lib/sequel/adapters/shared/mysql.rb +16 -11
- data/lib/sequel/adapters/shared/oracle.rb +1 -0
- data/lib/sequel/adapters/shared/postgres.rb +438 -47
- data/lib/sequel/adapters/shared/sqlite.rb +9 -7
- data/lib/sequel/adapters/sqlite.rb +20 -2
- data/lib/sequel/adapters/tinytds.rb +2 -2
- data/lib/sequel/adapters/trilogy.rb +2 -3
- data/lib/sequel/ast_transformer.rb +2 -0
- data/lib/sequel/connection_pool/sharded_timed_queue.rb +42 -11
- data/lib/sequel/connection_pool/timed_queue.rb +33 -10
- data/lib/sequel/connection_pool.rb +8 -2
- data/lib/sequel/core.rb +31 -2
- data/lib/sequel/database/connecting.rb +1 -1
- data/lib/sequel/database/dataset_defaults.rb +3 -3
- data/lib/sequel/database/misc.rb +29 -11
- data/lib/sequel/database/query.rb +12 -12
- data/lib/sequel/database/schema_generator.rb +117 -16
- data/lib/sequel/database/schema_methods.rb +85 -30
- data/lib/sequel/dataset/actions.rb +83 -11
- data/lib/sequel/dataset/deprecated_singleton_class_methods.rb +1 -1
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -0
- data/lib/sequel/dataset/prepared_statements.rb +76 -28
- data/lib/sequel/dataset/query.rb +26 -11
- data/lib/sequel/dataset/sql.rb +40 -17
- data/lib/sequel/extensions/async_thread_pool.rb +1 -1
- data/lib/sequel/extensions/caller_logging.rb +1 -3
- data/lib/sequel/extensions/connection_checkout_event_callback.rb +151 -0
- data/lib/sequel/extensions/connection_expiration.rb +44 -5
- data/lib/sequel/extensions/connection_validator.rb +15 -10
- data/lib/sequel/extensions/constraint_validations.rb +3 -3
- data/lib/sequel/extensions/dataset_run.rb +41 -0
- data/lib/sequel/extensions/date_arithmetic.rb +6 -6
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -0
- data/lib/sequel/extensions/eval_inspect.rb +3 -1
- data/lib/sequel/extensions/inflector.rb +2 -2
- data/lib/sequel/extensions/lit_require_frozen.rb +131 -0
- data/lib/sequel/extensions/looser_typecasting.rb +5 -12
- data/lib/sequel/extensions/migration.rb +38 -21
- data/lib/sequel/extensions/null_dataset.rb +2 -2
- data/lib/sequel/extensions/pg_array_ops.rb +41 -0
- data/lib/sequel/extensions/pg_auto_parameterize.rb +10 -3
- data/lib/sequel/extensions/pg_auto_parameterize_duplicate_query_detection.rb +191 -0
- data/lib/sequel/extensions/pg_auto_parameterize_in_array.rb +94 -10
- data/lib/sequel/extensions/pg_enum.rb +4 -4
- data/lib/sequel/extensions/pg_hstore.rb +1 -1
- data/lib/sequel/extensions/pg_hstore_ops.rb +10 -5
- data/lib/sequel/extensions/pg_json_ops.rb +674 -18
- data/lib/sequel/extensions/pg_multirange.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +14 -2
- data/lib/sequel/extensions/pg_row.rb +5 -3
- data/lib/sequel/extensions/pg_schema_caching.rb +90 -0
- data/lib/sequel/extensions/provenance.rb +1 -3
- data/lib/sequel/extensions/query_blocker.rb +172 -0
- data/lib/sequel/extensions/schema_caching.rb +24 -9
- data/lib/sequel/extensions/schema_dumper.rb +17 -5
- data/lib/sequel/extensions/set_literalizer.rb +20 -39
- data/lib/sequel/extensions/split_array_nil.rb +12 -2
- data/lib/sequel/extensions/sqlite_json_ops.rb +1 -1
- data/lib/sequel/extensions/string_agg.rb +2 -2
- data/lib/sequel/extensions/to_dot.rb +5 -0
- data/lib/sequel/extensions/virtual_row_method_block.rb +1 -0
- data/lib/sequel/model/associations.rb +215 -15
- data/lib/sequel/model/base.rb +198 -35
- data/lib/sequel/model/plugins.rb +12 -1
- data/lib/sequel/model.rb +1 -0
- data/lib/sequel/plugins/accessed_columns.rb +4 -0
- data/lib/sequel/plugins/active_model.rb +5 -6
- data/lib/sequel/plugins/association_pks.rb +2 -0
- data/lib/sequel/plugins/auto_validations.rb +2 -0
- data/lib/sequel/plugins/class_table_inheritance_constraint_validations.rb +82 -0
- data/lib/sequel/plugins/columns_updated.rb +4 -0
- data/lib/sequel/plugins/composition.rb +3 -1
- data/lib/sequel/plugins/constraint_validations.rb +15 -10
- data/lib/sequel/plugins/dataset_associations.rb +20 -1
- data/lib/sequel/plugins/deprecated_associations.rb +151 -0
- data/lib/sequel/plugins/detect_unnecessary_association_options.rb +164 -0
- data/lib/sequel/plugins/dirty.rb +9 -2
- data/lib/sequel/plugins/enum.rb +1 -1
- data/lib/sequel/plugins/forbid_lazy_load.rb +15 -1
- data/lib/sequel/plugins/insert_conflict.rb +4 -0
- data/lib/sequel/plugins/insert_returning_select.rb +10 -1
- data/lib/sequel/plugins/inspect_pk.rb +44 -0
- data/lib/sequel/plugins/instance_filters.rb +8 -1
- data/lib/sequel/plugins/instance_hooks.rb +4 -0
- data/lib/sequel/plugins/inverted_subsets.rb +1 -0
- data/lib/sequel/plugins/json_serializer.rb +6 -10
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +21 -0
- data/lib/sequel/plugins/modification_detection.rb +2 -0
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +1 -1
- data/lib/sequel/plugins/nested_attributes.rb +10 -5
- data/lib/sequel/plugins/paged_operations.rb +5 -2
- data/lib/sequel/plugins/pg_array_associations.rb +2 -2
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +6 -1
- data/lib/sequel/plugins/pg_auto_validate_enums.rb +88 -0
- data/lib/sequel/plugins/pg_eager_any_typed_array.rb +95 -0
- data/lib/sequel/plugins/pg_xmin_optimistic_locking.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +6 -6
- data/lib/sequel/plugins/serialization.rb +23 -6
- data/lib/sequel/plugins/serialization_modification_detection.rb +4 -0
- data/lib/sequel/plugins/single_statement_dataset_destroy.rb +49 -0
- data/lib/sequel/plugins/split_values.rb +12 -0
- data/lib/sequel/plugins/sql_comments.rb +7 -2
- data/lib/sequel/plugins/static_cache.rb +13 -0
- data/lib/sequel/plugins/static_cache_cache.rb +50 -13
- data/lib/sequel/plugins/subset_conditions.rb +85 -5
- data/lib/sequel/plugins/subset_static_cache.rb +278 -0
- data/lib/sequel/plugins/table_select.rb +7 -0
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -0
- data/lib/sequel/plugins/unused_associations.rb +11 -3
- data/lib/sequel/plugins/update_primary_key.rb +4 -0
- data/lib/sequel/plugins/validation_class_methods.rb +1 -1
- data/lib/sequel/plugins/validation_contexts.rb +4 -0
- data/lib/sequel/sql.rb +27 -12
- data/lib/sequel/version.rb +1 -1
- metadata +17 -240
- data/CHANGELOG +0 -1393
- data/README.rdoc +0 -936
- data/doc/advanced_associations.rdoc +0 -884
- data/doc/association_basics.rdoc +0 -1859
- data/doc/bin_sequel.rdoc +0 -146
- data/doc/cheat_sheet.rdoc +0 -255
- data/doc/code_order.rdoc +0 -104
- data/doc/core_extensions.rdoc +0 -405
- data/doc/dataset_basics.rdoc +0 -96
- data/doc/dataset_filtering.rdoc +0 -222
- data/doc/extensions.rdoc +0 -77
- data/doc/fork_safety.rdoc +0 -84
- data/doc/mass_assignment.rdoc +0 -98
- data/doc/migration.rdoc +0 -660
- data/doc/model_dataset_method_design.rdoc +0 -129
- data/doc/model_hooks.rdoc +0 -254
- data/doc/model_plugins.rdoc +0 -270
- data/doc/mssql_stored_procedures.rdoc +0 -43
- data/doc/object_model.rdoc +0 -563
- data/doc/opening_databases.rdoc +0 -439
- data/doc/postgresql.rdoc +0 -611
- data/doc/prepared_statements.rdoc +0 -144
- data/doc/querying.rdoc +0 -1070
- data/doc/reflection.rdoc +0 -120
- data/doc/release_notes/5.0.0.txt +0 -159
- data/doc/release_notes/5.1.0.txt +0 -31
- data/doc/release_notes/5.10.0.txt +0 -84
- data/doc/release_notes/5.11.0.txt +0 -83
- data/doc/release_notes/5.12.0.txt +0 -141
- data/doc/release_notes/5.13.0.txt +0 -27
- data/doc/release_notes/5.14.0.txt +0 -63
- data/doc/release_notes/5.15.0.txt +0 -39
- data/doc/release_notes/5.16.0.txt +0 -110
- data/doc/release_notes/5.17.0.txt +0 -31
- data/doc/release_notes/5.18.0.txt +0 -69
- data/doc/release_notes/5.19.0.txt +0 -28
- data/doc/release_notes/5.2.0.txt +0 -33
- data/doc/release_notes/5.20.0.txt +0 -89
- data/doc/release_notes/5.21.0.txt +0 -87
- data/doc/release_notes/5.22.0.txt +0 -48
- data/doc/release_notes/5.23.0.txt +0 -56
- data/doc/release_notes/5.24.0.txt +0 -56
- data/doc/release_notes/5.25.0.txt +0 -32
- data/doc/release_notes/5.26.0.txt +0 -35
- data/doc/release_notes/5.27.0.txt +0 -21
- data/doc/release_notes/5.28.0.txt +0 -16
- data/doc/release_notes/5.29.0.txt +0 -22
- data/doc/release_notes/5.3.0.txt +0 -121
- data/doc/release_notes/5.30.0.txt +0 -20
- data/doc/release_notes/5.31.0.txt +0 -148
- data/doc/release_notes/5.32.0.txt +0 -46
- data/doc/release_notes/5.33.0.txt +0 -24
- data/doc/release_notes/5.34.0.txt +0 -40
- data/doc/release_notes/5.35.0.txt +0 -56
- data/doc/release_notes/5.36.0.txt +0 -60
- data/doc/release_notes/5.37.0.txt +0 -30
- data/doc/release_notes/5.38.0.txt +0 -28
- data/doc/release_notes/5.39.0.txt +0 -19
- data/doc/release_notes/5.4.0.txt +0 -80
- data/doc/release_notes/5.40.0.txt +0 -40
- data/doc/release_notes/5.41.0.txt +0 -25
- data/doc/release_notes/5.42.0.txt +0 -136
- data/doc/release_notes/5.43.0.txt +0 -98
- data/doc/release_notes/5.44.0.txt +0 -32
- data/doc/release_notes/5.45.0.txt +0 -34
- data/doc/release_notes/5.46.0.txt +0 -87
- data/doc/release_notes/5.47.0.txt +0 -59
- data/doc/release_notes/5.48.0.txt +0 -14
- data/doc/release_notes/5.49.0.txt +0 -59
- data/doc/release_notes/5.5.0.txt +0 -61
- data/doc/release_notes/5.50.0.txt +0 -78
- data/doc/release_notes/5.51.0.txt +0 -47
- data/doc/release_notes/5.52.0.txt +0 -87
- data/doc/release_notes/5.53.0.txt +0 -23
- data/doc/release_notes/5.54.0.txt +0 -27
- data/doc/release_notes/5.55.0.txt +0 -21
- data/doc/release_notes/5.56.0.txt +0 -51
- data/doc/release_notes/5.57.0.txt +0 -23
- data/doc/release_notes/5.58.0.txt +0 -31
- data/doc/release_notes/5.59.0.txt +0 -73
- data/doc/release_notes/5.6.0.txt +0 -31
- data/doc/release_notes/5.60.0.txt +0 -22
- data/doc/release_notes/5.61.0.txt +0 -43
- data/doc/release_notes/5.62.0.txt +0 -132
- data/doc/release_notes/5.63.0.txt +0 -33
- data/doc/release_notes/5.64.0.txt +0 -50
- data/doc/release_notes/5.65.0.txt +0 -21
- data/doc/release_notes/5.66.0.txt +0 -24
- data/doc/release_notes/5.67.0.txt +0 -32
- data/doc/release_notes/5.68.0.txt +0 -61
- data/doc/release_notes/5.69.0.txt +0 -26
- data/doc/release_notes/5.7.0.txt +0 -108
- data/doc/release_notes/5.70.0.txt +0 -35
- data/doc/release_notes/5.71.0.txt +0 -21
- data/doc/release_notes/5.72.0.txt +0 -33
- data/doc/release_notes/5.73.0.txt +0 -66
- data/doc/release_notes/5.74.0.txt +0 -45
- data/doc/release_notes/5.75.0.txt +0 -35
- data/doc/release_notes/5.76.0.txt +0 -86
- data/doc/release_notes/5.77.0.txt +0 -63
- data/doc/release_notes/5.78.0.txt +0 -67
- data/doc/release_notes/5.79.0.txt +0 -28
- data/doc/release_notes/5.8.0.txt +0 -170
- data/doc/release_notes/5.80.0.txt +0 -40
- data/doc/release_notes/5.81.0.txt +0 -31
- data/doc/release_notes/5.82.0.txt +0 -61
- data/doc/release_notes/5.83.0.txt +0 -56
- data/doc/release_notes/5.9.0.txt +0 -99
- data/doc/schema_modification.rdoc +0 -679
- data/doc/security.rdoc +0 -443
- data/doc/sharding.rdoc +0 -286
- data/doc/sql.rdoc +0 -648
- data/doc/testing.rdoc +0 -204
- data/doc/thread_safety.rdoc +0 -15
- data/doc/transactions.rdoc +0 -250
- data/doc/validations.rdoc +0 -558
- data/doc/virtual_rows.rdoc +0 -265
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 93dd74cb4407d389f289342898c26327d91db1ddd733478461bd8620a3a1771b
|
|
4
|
+
data.tar.gz: b00796ca61d19f2d9aeaaa764565893e73f5dd4c0752e11bd38635fdb94b1cea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2502a507d57a7f64dae3ddc9e736254461a3a05f15f95a4835e2ddd83cb3cf3a9f6719f97e6b05239508d4e8445cff8b502198d40eea9f2c0af9d7ea385f829f
|
|
7
|
+
data.tar.gz: 8f3e230dc402a4e9d4b2c1d60fb5bdcac580f8368a2ad79a132a29348df8bce6b78f983658c6cf1e406b53164f79f1103cdbfb8ccfd29d0ec90db48a57f348a2
|
data/MIT-LICENSE
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Copyright (c) 2007-2008 Sharon Rosner
|
|
2
|
-
Copyright (c) 2008-
|
|
2
|
+
Copyright (c) 2008-2026 Jeremy Evans and contributors
|
|
3
3
|
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
of this software and associated documentation files (the "Software"), to
|
|
@@ -281,7 +281,7 @@ module Sequel
|
|
|
281
281
|
fetch_ado_schema(:columns, [nil,nil,table_name.to_s,nil]) do |row|
|
|
282
282
|
rows << AdoSchema::Column.new(row)
|
|
283
283
|
end
|
|
284
|
-
rows.
|
|
284
|
+
rows.sort_by! { |a| a["ORDINAL_POSITION"] }
|
|
285
285
|
end
|
|
286
286
|
|
|
287
287
|
def ado_schema_foreign_keys(table_name)
|
|
@@ -289,7 +289,7 @@ module Sequel
|
|
|
289
289
|
fetch_ado_schema(:foreign_keys, [nil,nil,nil,nil,nil,table_name.to_s]) do |row|
|
|
290
290
|
rows << row
|
|
291
291
|
end
|
|
292
|
-
rows.
|
|
292
|
+
rows.sort_by! { |a| a["ORDINAL"] }
|
|
293
293
|
end
|
|
294
294
|
|
|
295
295
|
def fetch_ado_schema(type, criteria=[])
|
data/lib/sequel/adapters/ado.rb
CHANGED
|
@@ -179,7 +179,7 @@ module Sequel
|
|
|
179
179
|
|
|
180
180
|
def adapter_initialize
|
|
181
181
|
case @opts[:conn_string]
|
|
182
|
-
when /Microsoft\.(Jet|ACE)\.OLEDB/
|
|
182
|
+
when /Microsoft\.(Jet|ACE)\.OLEDB/i
|
|
183
183
|
require_relative 'ado/access'
|
|
184
184
|
extend Sequel::ADO::Access::DatabaseMethods
|
|
185
185
|
self.dataset_class = ADO::Access::Dataset
|
|
@@ -234,7 +234,7 @@ module Sequel
|
|
|
234
234
|
end
|
|
235
235
|
|
|
236
236
|
def disconnect_error?(e, opts)
|
|
237
|
-
super || (e.is_a?(::WIN32OLERuntimeError) && e.message
|
|
237
|
+
super || (e.is_a?(::WIN32OLERuntimeError) && e.message.include?('Communication link failure'))
|
|
238
238
|
end
|
|
239
239
|
|
|
240
240
|
def rollback_transaction(conn, opts=OPTS)
|
|
@@ -62,11 +62,26 @@ module Sequel
|
|
|
62
62
|
|
|
63
63
|
# Mimic the file:// uri, by having 2 preceding slashes specify a relative
|
|
64
64
|
# path, and 3 preceding slashes specify an absolute path.
|
|
65
|
+
# Also support no preceding slashes to specify a relative path.
|
|
65
66
|
def self.uri_to_options(uri) # :nodoc:
|
|
66
|
-
|
|
67
|
+
database = if uri.host.nil?
|
|
68
|
+
case uri.path
|
|
69
|
+
when '/'
|
|
70
|
+
nil
|
|
71
|
+
when nil
|
|
72
|
+
uri.opaque
|
|
73
|
+
else
|
|
74
|
+
uri.path
|
|
75
|
+
end
|
|
76
|
+
else
|
|
77
|
+
"#{uri.host}#{uri.path}"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
{ :database => database }
|
|
67
81
|
end
|
|
68
82
|
private_class_method :uri_to_options
|
|
69
83
|
|
|
84
|
+
|
|
70
85
|
# Connect to the database. Since SQLite is a file based database,
|
|
71
86
|
# the only options available are :database (to specify the database
|
|
72
87
|
# name), and :timeout, to specify how long to wait for the database to
|
|
@@ -7,6 +7,7 @@ module Sequel
|
|
|
7
7
|
|
|
8
8
|
module IBMDB
|
|
9
9
|
tt = Class.new do
|
|
10
|
+
Sequel.set_temp_name(self){"Sequel::IBMDB::_TypeTranslator"}
|
|
10
11
|
def boolean(s) !s.to_i.zero? end
|
|
11
12
|
def int(s) s.to_i end
|
|
12
13
|
end.new
|
|
@@ -323,7 +324,7 @@ module Sequel
|
|
|
323
324
|
when Numeric
|
|
324
325
|
v.to_s
|
|
325
326
|
when Date, Time
|
|
326
|
-
literal(v).
|
|
327
|
+
literal(v).delete("'")
|
|
327
328
|
else
|
|
328
329
|
v
|
|
329
330
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('
|
|
3
|
+
Sequel::JDBC.load_driver('Java::ComIbmDb2Jcc::DB2Driver')
|
|
4
4
|
require_relative '../shared/db2'
|
|
5
5
|
require_relative 'transactions'
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ module Sequel
|
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
db.extend_datasets Sequel::DB2::DatasetMethods
|
|
28
|
-
|
|
28
|
+
Java::ComIbmDb2Jcc::DB2Driver
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# SEQUEL6: Remove
|
|
4
|
+
|
|
5
|
+
Sequel::JDBC.load_driver('Java::OrgApacheDerbyJdbc::EmbeddedDriver', :Derby)
|
|
4
6
|
require_relative 'transactions'
|
|
5
7
|
require_relative '../utils/columns_limit_1'
|
|
6
8
|
|
|
@@ -10,7 +12,7 @@ module Sequel
|
|
|
10
12
|
DATABASE_SETUP[:derby] = proc do |db|
|
|
11
13
|
db.extend(Sequel::JDBC::Derby::DatabaseMethods)
|
|
12
14
|
db.dataset_class = Sequel::JDBC::Derby::Dataset
|
|
13
|
-
|
|
15
|
+
Java::OrgApacheDerbyJdbc::EmbeddedDriver
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('
|
|
3
|
+
Sequel::JDBC.load_driver('Java::OrgH2::Driver', :H2)
|
|
4
4
|
require_relative '../../extensions/auto_cast_date_and_time'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
@@ -9,7 +9,7 @@ module Sequel
|
|
|
9
9
|
DATABASE_SETUP[:h2] = proc do |db|
|
|
10
10
|
db.extend(Sequel::JDBC::H2::DatabaseMethods)
|
|
11
11
|
db.dataset_class = Sequel::JDBC::H2::Dataset
|
|
12
|
-
|
|
12
|
+
Java::OrgH2::Driver
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -18,7 +18,7 @@ module Sequel
|
|
|
18
18
|
include AutoCastDateAndTime
|
|
19
19
|
|
|
20
20
|
def commit_prepared_transaction(transaction_id, opts=OPTS)
|
|
21
|
-
run("COMMIT TRANSACTION #{transaction_id}", opts)
|
|
21
|
+
run("COMMIT TRANSACTION #{transaction_id}".freeze, opts)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def database_type
|
|
@@ -36,7 +36,7 @@ module Sequel
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def rollback_prepared_transaction(transaction_id, opts=OPTS)
|
|
39
|
-
run("ROLLBACK TRANSACTION #{transaction_id}", opts)
|
|
39
|
+
run("ROLLBACK TRANSACTION #{transaction_id}".freeze, opts)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# H2 uses an IDENTITY type for primary keys
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('
|
|
3
|
+
Sequel::JDBC.load_driver('Java::OrgHsqldb::jdbcDriver', :HSQLDB)
|
|
4
4
|
require_relative 'transactions'
|
|
5
5
|
require_relative '../../extensions/auto_cast_date_and_time'
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ module Sequel
|
|
|
10
10
|
DATABASE_SETUP[:hsqldb] = proc do |db|
|
|
11
11
|
db.extend(Sequel::JDBC::HSQLDB::DatabaseMethods)
|
|
12
12
|
db.dataset_class = Sequel::JDBC::HSQLDB::Dataset
|
|
13
|
-
|
|
13
|
+
Java::OrgHsqldb::jdbcDriver
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('Java::
|
|
3
|
+
Sequel::JDBC.load_driver('Java::NetSourceforgeJtdsJdbc::Driver', :JTDS)
|
|
4
4
|
require_relative 'mssql'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
@@ -10,7 +10,7 @@ module Sequel
|
|
|
10
10
|
db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
|
|
11
11
|
db.extend_datasets Sequel::MSSQL::DatasetMethods
|
|
12
12
|
db.send(:set_mssql_unicode_strings)
|
|
13
|
-
Java::
|
|
13
|
+
Java::NetSourceforgeJtdsJdbc::Driver
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Sequel
|
|
4
4
|
module JDBC
|
|
5
|
-
driver = Sequel::JDBC.load_driver(%w'
|
|
5
|
+
driver = Sequel::JDBC.load_driver(%w'Java::ComMysqlCjJdbc::Driver Java::ComMysqlJdbc::Driver', :MySQL)
|
|
6
6
|
require_relative '../shared/mysql'
|
|
7
7
|
|
|
8
8
|
Sequel.synchronize do
|
|
@@ -26,7 +26,7 @@ module Sequel
|
|
|
26
26
|
|
|
27
27
|
# Raise a disconnect error if the SQL state of the cause of the exception indicates so.
|
|
28
28
|
def disconnect_error?(exception, opts)
|
|
29
|
-
exception.message
|
|
29
|
+
exception.message.start_with?("Communications link failure") || super
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Get the last inserted id using LAST_INSERT_ID().
|
|
@@ -64,7 +64,7 @@ module Sequel
|
|
|
64
64
|
|
|
65
65
|
# Convert tinyint(1) type to boolean
|
|
66
66
|
def schema_column_type(db_type)
|
|
67
|
-
db_type
|
|
67
|
+
db_type.start_with?("tinyint(1)") ? :boolean : super
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
# Run the default connection setting SQL statements.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('Java::
|
|
3
|
+
Sequel::JDBC.load_driver('Java::OracleJdbcDriver::OracleDriver')
|
|
4
4
|
require_relative '../shared/oracle'
|
|
5
5
|
require_relative 'transactions'
|
|
6
6
|
|
|
@@ -10,12 +10,12 @@ module Sequel
|
|
|
10
10
|
DATABASE_SETUP[:oracle] = proc do |db|
|
|
11
11
|
db.extend(Sequel::JDBC::Oracle::DatabaseMethods)
|
|
12
12
|
db.dataset_class = Sequel::JDBC::Oracle::Dataset
|
|
13
|
-
Java::
|
|
13
|
+
Java::OracleJdbcDriver::OracleDriver
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
module Oracle
|
|
18
|
-
JAVA_BIG_DECIMAL_CONSTRUCTOR =
|
|
18
|
+
JAVA_BIG_DECIMAL_CONSTRUCTOR = Java::JavaMath::BigDecimal.java_class.constructor(Java::long).method(:new_instance)
|
|
19
19
|
ORACLE_DECIMAL = Object.new
|
|
20
20
|
def ORACLE_DECIMAL.call(r, i)
|
|
21
21
|
if v = r.getBigDecimal(i)
|
|
@@ -55,7 +55,7 @@ module Sequel
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def disconnect_error?(exception, opts)
|
|
58
|
-
super || exception.message
|
|
58
|
+
super || exception.message.start_with?("Closed Connection")
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
# Default the fetch size for statements to 100, similar to the oci8-based oracle adapter.
|
|
@@ -76,7 +76,7 @@ module Sequel
|
|
|
76
76
|
rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
|
|
77
77
|
rs.next
|
|
78
78
|
rs.getLong(1)
|
|
79
|
-
rescue
|
|
79
|
+
rescue Java::JavaSql::SQLException
|
|
80
80
|
nil
|
|
81
81
|
end
|
|
82
82
|
end
|
|
@@ -122,7 +122,7 @@ module Sequel
|
|
|
122
122
|
NUMERIC_TYPE = Java::JavaSQL::Types::NUMERIC
|
|
123
123
|
TIMESTAMP_TYPE = Java::JavaSQL::Types::TIMESTAMP
|
|
124
124
|
CLOB_TYPE = Java::JavaSQL::Types::CLOB
|
|
125
|
-
TIMESTAMPTZ_TYPES = [Java::
|
|
125
|
+
TIMESTAMPTZ_TYPES = [Java::OracleJdbc::OracleTypes::TIMESTAMPTZ, Java::OracleJdbc::OracleTypes::TIMESTAMPLTZ].freeze
|
|
126
126
|
|
|
127
127
|
def type_convertor(map, meta, type, i)
|
|
128
128
|
case type
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('
|
|
3
|
+
Sequel::JDBC.load_driver('Java::OrgPostgresql::Driver', :Postgres)
|
|
4
4
|
require_relative '../shared/postgres'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
@@ -9,7 +9,7 @@ module Sequel
|
|
|
9
9
|
DATABASE_SETUP[:postgresql] = proc do |db|
|
|
10
10
|
db.dataset_class = Sequel::JDBC::Postgres::Dataset
|
|
11
11
|
db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
|
|
12
|
-
|
|
12
|
+
Java::OrgPostgresql::Driver
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -43,7 +43,7 @@ module Sequel
|
|
|
43
43
|
|
|
44
44
|
synchronize(opts[:server]) do |conn|
|
|
45
45
|
begin
|
|
46
|
-
copy_manager =
|
|
46
|
+
copy_manager = Java::OrgPostgresqlCopy::CopyManager.new(conn)
|
|
47
47
|
copier = copy_manager.copy_in(copy_into_sql(table, opts))
|
|
48
48
|
if defined?(yield)
|
|
49
49
|
while buf = yield
|
|
@@ -74,7 +74,7 @@ module Sequel
|
|
|
74
74
|
# See Sequel::Postgres::Adapter#copy_table
|
|
75
75
|
def copy_table(table, opts=OPTS)
|
|
76
76
|
synchronize(opts[:server]) do |conn|
|
|
77
|
-
copy_manager =
|
|
77
|
+
copy_manager = Java::OrgPostgresqlCopy::CopyManager.new(conn)
|
|
78
78
|
copier = copy_manager.copy_out(copy_table_sql(table, opts))
|
|
79
79
|
begin
|
|
80
80
|
if defined?(yield)
|
|
@@ -148,7 +148,7 @@ module Sequel
|
|
|
148
148
|
# and set that as the prepared statement argument.
|
|
149
149
|
def set_ps_arg(cps, arg, i)
|
|
150
150
|
if v = bound_variable_arg(arg, nil)
|
|
151
|
-
obj =
|
|
151
|
+
obj = Java::OrgPostgresqlUtil::PGobject.new
|
|
152
152
|
obj.setType("unknown")
|
|
153
153
|
obj.setValue(v)
|
|
154
154
|
cps.setObject(i, obj)
|
|
@@ -6,12 +6,12 @@ require_relative 'transactions'
|
|
|
6
6
|
module Sequel
|
|
7
7
|
module JDBC
|
|
8
8
|
drv = [
|
|
9
|
-
lambda{Java::
|
|
10
|
-
lambda{Java::
|
|
11
|
-
lambda{Java::
|
|
12
|
-
lambda{Java::
|
|
13
|
-
lambda{Java::
|
|
14
|
-
lambda{Java::
|
|
9
|
+
lambda{Java::SybaseJdbc4Sqlanywhere::IDriver},
|
|
10
|
+
lambda{Java::IanywhereMlJdbcodbcJdbc4::IDriver},
|
|
11
|
+
lambda{Java::SybaseJdbcSqlanywhere::IDriver},
|
|
12
|
+
lambda{Java::IanywhereMlJdbcodbcJdbc::IDriver},
|
|
13
|
+
lambda{Java::ComSybaseJdbc4Jdbc::Sybdriver},
|
|
14
|
+
lambda{Java::ComSybaseJdbc3Jdbc::Sybdriver}
|
|
15
15
|
].each do |class_proc|
|
|
16
16
|
begin
|
|
17
17
|
break class_proc.call
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('
|
|
3
|
+
Sequel::JDBC.load_driver('Java::OrgSqlite::JDBC', :SQLite3)
|
|
4
4
|
require_relative '../shared/sqlite'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
@@ -10,7 +10,7 @@ module Sequel
|
|
|
10
10
|
db.extend(Sequel::JDBC::SQLite::DatabaseMethods)
|
|
11
11
|
db.extend_datasets Sequel::SQLite::DatasetMethods
|
|
12
12
|
db.set_integer_booleans
|
|
13
|
-
|
|
13
|
+
Java::OrgSqlite::JDBC
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
@@ -98,7 +98,7 @@ module Sequel
|
|
|
98
98
|
|
|
99
99
|
# Whether the given exception is due to a foreign key error.
|
|
100
100
|
def foreign_key_error?(exception)
|
|
101
|
-
exception.message
|
|
101
|
+
exception.message.include?('query does not return ResultSet')
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
# Use getLong instead of getInt for converting integers on SQLite, since SQLite does not enforce a limit of 2**32.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
Sequel::JDBC.load_driver('
|
|
3
|
+
Sequel::JDBC.load_driver('Java::ComMicrosoftSqlserverJdbc::SQLServerDriver')
|
|
4
4
|
require_relative 'mssql'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
@@ -10,7 +10,7 @@ module Sequel
|
|
|
10
10
|
db.extend(Sequel::JDBC::SQLServer::DatabaseMethods)
|
|
11
11
|
db.extend_datasets Sequel::MSSQL::DatasetMethods
|
|
12
12
|
db.send(:set_mssql_unicode_strings)
|
|
13
|
-
|
|
13
|
+
Java::ComMicrosoftSqlserverJdbc::SQLServerDriver
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
@@ -84,7 +84,7 @@ module Sequel
|
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
def disconnect_error?(exception, opts)
|
|
87
|
-
super || (exception.message
|
|
87
|
+
super || (exception.message.include?('connection is closed'))
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
end
|
data/lib/sequel/adapters/jdbc.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Sequel
|
|
|
20
20
|
|
|
21
21
|
# Create custom NativeException alias for nicer access, and also so that
|
|
22
22
|
# JRuby 9.2+ so it doesn't use the deprecated ::NativeException
|
|
23
|
-
NativeException =
|
|
23
|
+
NativeException = Java::JavaLang::Exception
|
|
24
24
|
|
|
25
25
|
# Default database error classes
|
|
26
26
|
DATABASE_ERROR_CLASSES = [NativeException]
|
|
@@ -227,7 +227,7 @@ module Sequel
|
|
|
227
227
|
raise e unless driver
|
|
228
228
|
# If the DriverManager can't get the connection - use the connect
|
|
229
229
|
# method of the driver. (This happens under Tomcat for instance)
|
|
230
|
-
props =
|
|
230
|
+
props = Java::JavaUtil::Properties.new
|
|
231
231
|
if opts && opts[:user] && opts[:password]
|
|
232
232
|
props.setProperty("user", opts[:user])
|
|
233
233
|
props.setProperty("password", opts[:password])
|
|
@@ -305,17 +305,31 @@ module Sequel
|
|
|
305
305
|
m = output_identifier_meth
|
|
306
306
|
schema, table = metadata_schema_and_table(table, opts)
|
|
307
307
|
foreign_keys = {}
|
|
308
|
+
|
|
308
309
|
metadata(:getImportedKeys, nil, schema, table) do |r|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
310
|
+
next unless fk_name = r[:fk_name]
|
|
311
|
+
|
|
312
|
+
key_seq = r[:key_seq]
|
|
313
|
+
columns = [key_seq, m.call(r[:fkcolumn_name])]
|
|
314
|
+
key = [key_seq, m.call(r[:pkcolumn_name])]
|
|
315
|
+
|
|
316
|
+
if fk = foreign_keys[fk_name]
|
|
317
|
+
fk[:columns] << columns
|
|
318
|
+
fk[:key] << key
|
|
319
|
+
else
|
|
320
|
+
foreign_keys[fk_name] = {
|
|
321
|
+
:name=>m.call(fk_name),
|
|
322
|
+
:columns=>[columns],
|
|
323
|
+
:table=>m.call(r[:pktable_name]),
|
|
324
|
+
:key=>[key]
|
|
325
|
+
}
|
|
314
326
|
end
|
|
315
327
|
end
|
|
328
|
+
|
|
329
|
+
fk_keys = [:columns, :key]
|
|
316
330
|
foreign_keys.values.each do |fk|
|
|
317
|
-
|
|
318
|
-
fk[k]
|
|
331
|
+
fk_keys.each do |k|
|
|
332
|
+
fk[k].sort!.map!{|_, v| v}
|
|
319
333
|
end
|
|
320
334
|
end
|
|
321
335
|
end
|
|
@@ -506,7 +520,7 @@ module Sequel
|
|
|
506
520
|
# Gets the connection from JNDI.
|
|
507
521
|
def get_connection_from_jndi
|
|
508
522
|
jndi_name = JNDI_URI_REGEXP.match(uri)[1]
|
|
509
|
-
|
|
523
|
+
Java::JavaxNaming::InitialContext.new.lookup(jndi_name).connection
|
|
510
524
|
end
|
|
511
525
|
|
|
512
526
|
# Gets the JDBC connection uri from the JNDI resource.
|
|
@@ -530,19 +544,19 @@ module Sequel
|
|
|
530
544
|
|
|
531
545
|
# Support Date objects used in bound variables
|
|
532
546
|
def java_sql_date(date)
|
|
533
|
-
|
|
547
|
+
Java::JavaSql::Date.new(Time.local(date.year, date.month, date.day).to_i * 1000)
|
|
534
548
|
end
|
|
535
549
|
|
|
536
550
|
# Support DateTime objects used in bound variables
|
|
537
551
|
def java_sql_datetime(datetime)
|
|
538
|
-
ts =
|
|
552
|
+
ts = Java::JavaSql::Timestamp.new(Time.local(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min, datetime.sec).to_i * 1000)
|
|
539
553
|
ts.setNanos((datetime.sec_fraction * 1000000000).to_i)
|
|
540
554
|
ts
|
|
541
555
|
end
|
|
542
556
|
|
|
543
557
|
# Support fractional seconds for Time objects used in bound variables
|
|
544
558
|
def java_sql_timestamp(time)
|
|
545
|
-
ts =
|
|
559
|
+
ts = Java::JavaSql::Timestamp.new(time.to_i * 1000)
|
|
546
560
|
ts.setNanos(time.nsec)
|
|
547
561
|
ts
|
|
548
562
|
end
|
|
@@ -636,11 +650,11 @@ module Sequel
|
|
|
636
650
|
def schema_column_set_db_type(schema)
|
|
637
651
|
case schema[:type]
|
|
638
652
|
when :string
|
|
639
|
-
if schema[:db_type] =~ /\A(character( varying)?|n?(var)?char2?)\z/
|
|
653
|
+
if schema[:db_type] =~ /\A(character( varying)?|n?(var)?char2?)\z/i && schema[:column_size] > 0
|
|
640
654
|
schema[:db_type] += "(#{schema[:column_size]})"
|
|
641
655
|
end
|
|
642
656
|
when :decimal
|
|
643
|
-
if schema[:db_type] =~ /\A(decimal|numeric)\z/
|
|
657
|
+
if schema[:db_type] =~ /\A(decimal|numeric)\z/i && schema[:column_size] > 0 && schema[:scale] >= 0
|
|
644
658
|
schema[:db_type] += "(#{schema[:column_size]}, #{schema[:scale]})"
|
|
645
659
|
end
|
|
646
660
|
end
|
|
@@ -290,7 +290,7 @@ module Sequel
|
|
|
290
290
|
|
|
291
291
|
# Convert tinyint(1) type to boolean if convert_tinyint_to_bool is true
|
|
292
292
|
def schema_column_type(db_type)
|
|
293
|
-
convert_tinyint_to_bool && db_type
|
|
293
|
+
convert_tinyint_to_bool && db_type.start_with?("tinyint(1)") ? :boolean : super
|
|
294
294
|
end
|
|
295
295
|
end
|
|
296
296
|
|
|
@@ -97,7 +97,14 @@ module Sequel
|
|
|
97
97
|
synchronize(opts[:server]) do |conn|
|
|
98
98
|
stmt, ps_sql = conn.prepared_statements[ps_name]
|
|
99
99
|
unless ps_sql == sql
|
|
100
|
-
|
|
100
|
+
if stmt
|
|
101
|
+
begin
|
|
102
|
+
stmt.close
|
|
103
|
+
rescue ::Mysql2::Error
|
|
104
|
+
# probably Invalid statement handle, can happen from dropping
|
|
105
|
+
# related table, ignore as we won't be using it again.
|
|
106
|
+
end
|
|
107
|
+
end
|
|
101
108
|
stmt = log_connection_yield("Preparing #{ps_name}: #{sql}", conn){conn.prepare(sql)}
|
|
102
109
|
conn.prepared_statements[ps_name] = [stmt, sql]
|
|
103
110
|
end
|
|
@@ -214,13 +221,13 @@ module Sequel
|
|
|
214
221
|
super ||
|
|
215
222
|
((conn = opts[:conn]) && !conn.ping) ||
|
|
216
223
|
(e.is_a?(::Mysql2::Error) &&
|
|
217
|
-
(e.sql_state
|
|
224
|
+
((e.sql_state && e.sql_state.start_with?("08")) ||
|
|
218
225
|
MYSQL_DATABASE_DISCONNECT_ERRORS.match(e.message)))
|
|
219
226
|
end
|
|
220
227
|
|
|
221
228
|
# Convert tinyint(1) type to boolean if convert_tinyint_to_bool is true
|
|
222
229
|
def schema_column_type(db_type)
|
|
223
|
-
convert_tinyint_to_bool && db_type
|
|
230
|
+
convert_tinyint_to_bool && db_type.start_with?("tinyint(1)") ? :boolean : super
|
|
224
231
|
end
|
|
225
232
|
end
|
|
226
233
|
|
data/lib/sequel/adapters/odbc.rb
CHANGED
|
@@ -353,6 +353,20 @@ module Sequel
|
|
|
353
353
|
i = prepared_args.length
|
|
354
354
|
LiteralString.new(":#{i}")
|
|
355
355
|
end
|
|
356
|
+
|
|
357
|
+
# Avoid infinite recursion on Oracle <12 for datasets with limits
|
|
358
|
+
# (which are implemented via subqueries). If the given dataset's
|
|
359
|
+
# prepared args are the same object as current dataset's, call the
|
|
360
|
+
# standard Sequel::Dataset#subselect_sql_append method, instead
|
|
361
|
+
# of calling super (which will call prepared_sql and result in
|
|
362
|
+
# infinite recursion).
|
|
363
|
+
def subselect_sql_append(sql, ds)
|
|
364
|
+
if !supports_fetch_next_rows? && ds.opts[:prepared_args].equal?(@opts[:prepared_args])
|
|
365
|
+
orig_subselect_sql_append(sql, ds)
|
|
366
|
+
else
|
|
367
|
+
super
|
|
368
|
+
end
|
|
369
|
+
end
|
|
356
370
|
end
|
|
357
371
|
|
|
358
372
|
BindArgumentMethods = prepared_statements_module(:bind, ArgumentMapper)
|
|
@@ -383,6 +397,8 @@ module Sequel
|
|
|
383
397
|
|
|
384
398
|
private
|
|
385
399
|
|
|
400
|
+
alias orig_subselect_sql_append subselect_sql_append
|
|
401
|
+
|
|
386
402
|
def literal_other_append(sql, v)
|
|
387
403
|
case v
|
|
388
404
|
when OraDate
|
|
@@ -516,6 +516,7 @@ module Sequel
|
|
|
516
516
|
end
|
|
517
517
|
ensure
|
|
518
518
|
conn.execute("UNLISTEN *")
|
|
519
|
+
true while conn.wait_for_notify(0)
|
|
519
520
|
end
|
|
520
521
|
end
|
|
521
522
|
end
|
|
@@ -726,7 +727,7 @@ module Sequel
|
|
|
726
727
|
prepared_args << y
|
|
727
728
|
i = prepared_args.length
|
|
728
729
|
end
|
|
729
|
-
LiteralString.new("#{prepared_arg_placeholder}#{i}")
|
|
730
|
+
LiteralString.new("#{prepared_arg_placeholder}#{i}".freeze)
|
|
730
731
|
end
|
|
731
732
|
end
|
|
732
733
|
|
|
@@ -88,6 +88,7 @@ module Sequel
|
|
|
88
88
|
|
|
89
89
|
module DatasetMethods
|
|
90
90
|
include(Module.new do
|
|
91
|
+
Sequel.set_temp_name(self){"Sequel::Access::DatasetMethods::_SQLMethods"}
|
|
91
92
|
Dataset.def_sql_method(self, :select, %w'select distinct limit columns into from join where group order having compounds')
|
|
92
93
|
end)
|
|
93
94
|
include EmulateOffsetWithReverseAndCount
|
|
@@ -108,7 +108,7 @@ module Sequel
|
|
|
108
108
|
from(name).first
|
|
109
109
|
true
|
|
110
110
|
rescue DatabaseError => e
|
|
111
|
-
if e.to_s
|
|
111
|
+
if e.to_s.include?('Operation not allowed for reason code "7" on table') && v == false
|
|
112
112
|
# table probably needs reorg
|
|
113
113
|
reorg(name)
|
|
114
114
|
v = true
|
|
@@ -175,8 +175,13 @@ module Sequel
|
|
|
175
175
|
# Supply columns with NOT NULL if they are part of a composite
|
|
176
176
|
# primary key or unique constraint
|
|
177
177
|
def column_list_sql(g)
|
|
178
|
-
ks =
|
|
179
|
-
g.constraints.each
|
|
178
|
+
ks = {}
|
|
179
|
+
g.constraints.each do |c|
|
|
180
|
+
case c[:type]
|
|
181
|
+
when :primary_key, :unique
|
|
182
|
+
c[:columns].each{|c| ks[c] = true}
|
|
183
|
+
end
|
|
184
|
+
end
|
|
180
185
|
g.columns.each{|c| c[:null] = false if ks.include?(c[:name]) }
|
|
181
186
|
super
|
|
182
187
|
end
|