activerecord-jdbc-adapter 70.0-java → 70.1-java

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/activerecord-jdbc-adapter.gemspec +1 -1
  4. data/lib/arel/visitors/compat.rb +5 -33
  5. data/lib/arel/visitors/h2.rb +1 -13
  6. data/lib/arel/visitors/hsqldb.rb +1 -21
  7. data/lib/arel/visitors/sql_server.rb +2 -103
  8. data/lib/arjdbc/abstract/database_statements.rb +8 -0
  9. data/lib/arjdbc/discover.rb +0 -67
  10. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  11. data/lib/arjdbc/jdbc/column.rb +1 -26
  12. data/lib/arjdbc/jdbc.rb +0 -7
  13. data/lib/arjdbc/oracle/adapter.rb +3 -22
  14. data/lib/arjdbc/postgresql/adapter.rb +152 -3
  15. data/lib/arjdbc/postgresql/oid_types.rb +155 -108
  16. data/lib/arjdbc/sqlite3/adapter.rb +27 -18
  17. data/lib/arjdbc/tasks/database_tasks.rb +0 -15
  18. data/lib/arjdbc/util/serialized_attributes.rb +0 -22
  19. data/lib/arjdbc/version.rb +1 -1
  20. data/rakelib/02-test.rake +3 -18
  21. data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +5 -0
  22. metadata +2 -35
  23. data/lib/active_record/connection_adapters/as400_adapter.rb +0 -2
  24. data/lib/active_record/connection_adapters/db2_adapter.rb +0 -1
  25. data/lib/active_record/connection_adapters/derby_adapter.rb +0 -1
  26. data/lib/active_record/connection_adapters/informix_adapter.rb +0 -1
  27. data/lib/arel/visitors/db2.rb +0 -137
  28. data/lib/arel/visitors/derby.rb +0 -112
  29. data/lib/arel/visitors/firebird.rb +0 -79
  30. data/lib/arjdbc/db2/adapter.rb +0 -808
  31. data/lib/arjdbc/db2/as400.rb +0 -142
  32. data/lib/arjdbc/db2/column.rb +0 -131
  33. data/lib/arjdbc/db2/connection_methods.rb +0 -48
  34. data/lib/arjdbc/db2.rb +0 -4
  35. data/lib/arjdbc/derby/active_record_patch.rb +0 -13
  36. data/lib/arjdbc/derby/adapter.rb +0 -521
  37. data/lib/arjdbc/derby/connection_methods.rb +0 -20
  38. data/lib/arjdbc/derby/schema_creation.rb +0 -15
  39. data/lib/arjdbc/derby.rb +0 -3
  40. data/lib/arjdbc/firebird/adapter.rb +0 -413
  41. data/lib/arjdbc/firebird/connection_methods.rb +0 -23
  42. data/lib/arjdbc/firebird.rb +0 -4
  43. data/lib/arjdbc/informix/adapter.rb +0 -139
  44. data/lib/arjdbc/informix/connection_methods.rb +0 -9
  45. data/lib/arjdbc/sybase/adapter.rb +0 -47
  46. data/lib/arjdbc/sybase.rb +0 -2
  47. data/lib/arjdbc/tasks/db2_database_tasks.rb +0 -104
  48. data/lib/arjdbc/tasks/derby_database_tasks.rb +0 -95
  49. data/src/java/arjdbc/derby/DerbyModule.java +0 -178
  50. data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +0 -152
  51. data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +0 -174
  52. data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +0 -75
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  require 'thread'
4
3
 
5
4
  module ArJdbc
@@ -91,8 +90,23 @@ module ArJdbc
91
90
  end
92
91
 
93
92
  def get_oid_type(oid, fmod, column_name, sql_type = '') # :nodoc:
94
- if !type_map.key?(oid)
95
- load_additional_types(type_map, oid)
93
+ # Note: type_map is storing a bunch of oid type prefixed with a namespace even
94
+ # if they are not namespaced (e.g. ""."oidvector"). builtin types which are
95
+ # common seem to not be prefixed (e.g. "varchar"). OID numbers are also keys
96
+ # but JDBC never returns those. So the current scheme is to check with
97
+ # what we got and that covers number and plain strings and otherwise we will
98
+ # wrap with the namespace form.
99
+ found = type_map.key?(oid)
100
+
101
+ if !found
102
+ key = oid.kind_of?(String) && oid != "oid" ? "\"\".\"#{oid}\"" : oid
103
+ found = type_map.key?(key)
104
+
105
+ if !found
106
+ load_additional_types([oid])
107
+ else
108
+ oid = key
109
+ end
96
110
  end
97
111
 
98
112
  type_map.fetch(oid, fmod, sql_type) {
@@ -103,132 +117,165 @@ module ArJdbc
103
117
  }
104
118
  end
105
119
 
120
+ def reload_type_map
121
+ type_map.clear
122
+ initialize_type_map
123
+ end
124
+
125
+ def initialize_type_map_inner(m)
126
+ m.register_type "int2", Type::Integer.new(limit: 2)
127
+ m.register_type "int4", Type::Integer.new(limit: 4)
128
+ m.register_type "int8", Type::Integer.new(limit: 8)
129
+ m.register_type "oid", OID::Oid.new
130
+ m.register_type "float4", Type::Float.new
131
+ m.alias_type "float8", "float4"
132
+ m.register_type "text", Type::Text.new
133
+ register_class_with_limit m, "varchar", Type::String
134
+ m.alias_type "char", "varchar"
135
+ m.alias_type "name", "varchar"
136
+ m.alias_type "bpchar", "varchar"
137
+ m.register_type "bool", Type::Boolean.new
138
+ register_class_with_limit m, "bit", OID::Bit
139
+ register_class_with_limit m, "varbit", OID::BitVarying
140
+ m.register_type "date", OID::Date.new
141
+
142
+ m.register_type "money", OID::Money.new
143
+ m.register_type "bytea", OID::Bytea.new
144
+ m.register_type "point", OID::Point.new
145
+ m.register_type "hstore", OID::Hstore.new
146
+ m.register_type "json", Type::Json.new
147
+ m.register_type "jsonb", OID::Jsonb.new
148
+ m.register_type "cidr", OID::Cidr.new
149
+ m.register_type "inet", OID::Inet.new
150
+ m.register_type "uuid", OID::Uuid.new
151
+ m.register_type "xml", OID::Xml.new
152
+ m.register_type "tsvector", OID::SpecializedString.new(:tsvector)
153
+ m.register_type "macaddr", OID::Macaddr.new
154
+ m.register_type "citext", OID::SpecializedString.new(:citext)
155
+ m.register_type "ltree", OID::SpecializedString.new(:ltree)
156
+ m.register_type "line", OID::SpecializedString.new(:line)
157
+ m.register_type "lseg", OID::SpecializedString.new(:lseg)
158
+ m.register_type "box", OID::SpecializedString.new(:box)
159
+ m.register_type "path", OID::SpecializedString.new(:path)
160
+ m.register_type "polygon", OID::SpecializedString.new(:polygon)
161
+ m.register_type "circle", OID::SpecializedString.new(:circle)
162
+ m.register_type "regproc", OID::Enum.new
163
+ # FIXME: adding this vector type leads to quoting not handlign Array data in quoting.
164
+ #m.register_type "_int4", OID::Vector.new(",", m.lookup("int4"))
165
+ register_class_with_precision m, "time", Type::Time
166
+ register_class_with_precision m, "timestamp", OID::Timestamp
167
+ register_class_with_precision m, "timestamptz", OID::TimestampWithTimeZone
168
+
169
+ m.register_type "numeric" do |_, fmod, sql_type|
170
+ precision = extract_precision(sql_type)
171
+ scale = extract_scale(sql_type)
172
+
173
+ # The type for the numeric depends on the width of the field,
174
+ # so we'll do something special here.
175
+ #
176
+ # When dealing with decimal columns:
177
+ #
178
+ # places after decimal = fmod - 4 & 0xffff
179
+ # places before decimal = (fmod - 4) >> 16 & 0xffff
180
+ if fmod && (fmod - 4 & 0xffff).zero?
181
+ # FIXME: Remove this class, and the second argument to
182
+ # lookups on PG
183
+ Type::DecimalWithoutScale.new(precision: precision)
184
+ else
185
+ OID::Decimal.new(precision: precision, scale: scale)
186
+ end
187
+ end
188
+
189
+ m.register_type "interval" do |*args, sql_type|
190
+ precision = extract_precision(sql_type)
191
+ OID::Interval.new(precision: precision)
192
+ end
193
+
194
+ # pgjdbc returns these if the column is auto-incrmenting
195
+ m.alias_type 'serial', 'int4'
196
+ m.alias_type 'bigserial', 'int8'
197
+ end
198
+
199
+
200
+ # We differ from AR here because we will initialize type_map when adapter initializes
106
201
  def type_map
107
202
  @type_map
108
203
  end
109
204
 
110
- def reload_type_map
111
- if ( @type_map ||= nil )
112
- @type_map.clear
113
- initialize_type_map(@type_map)
114
- end
205
+ def initialize_type_map(m = type_map)
206
+ initialize_type_map_inner(m)
207
+ load_additional_types
115
208
  end
116
209
 
117
210
  private
118
211
 
119
- def initialize_type_map(m = type_map)
120
- register_class_with_limit m, 'int2', Type::Integer
121
- register_class_with_limit m, 'int4', Type::Integer
122
- register_class_with_limit m, 'int8', Type::Integer
123
- m.register_type 'oid', OID::Oid.new
124
- m.register_type 'float4', Type::Float.new
125
- m.alias_type 'float8', 'float4'
126
- m.register_type 'text', Type::Text.new
127
- register_class_with_limit m, 'varchar', Type::String
128
- m.alias_type 'char', 'varchar'
129
- m.alias_type 'name', 'varchar'
130
- m.alias_type 'bpchar', 'varchar'
131
- m.register_type 'bool', Type::Boolean.new
132
- register_class_with_limit m, 'bit', OID::Bit
133
- register_class_with_limit m, 'varbit', OID::BitVarying
134
- m.alias_type 'timestamptz', 'timestamp'
135
- m.register_type 'date', OID::Date.new
136
-
137
- m.register_type 'money', OID::Money.new
138
- m.register_type 'bytea', OID::Bytea.new
139
- m.register_type 'point', OID::Point.new
140
- m.register_type 'hstore', OID::Hstore.new
141
- m.register_type 'json', Type::Json.new
142
- m.register_type 'jsonb', OID::Jsonb.new
143
- m.register_type 'cidr', OID::Cidr.new
144
- m.register_type 'inet', OID::Inet.new
145
- m.register_type 'uuid', OID::Uuid.new
146
- m.register_type 'xml', OID::Xml.new
147
- m.register_type 'tsvector', OID::SpecializedString.new(:tsvector)
148
- m.register_type 'macaddr', OID::Macaddr.new
149
- m.register_type 'citext', OID::SpecializedString.new(:citext)
150
- m.register_type 'ltree', OID::SpecializedString.new(:ltree)
151
- m.register_type 'line', OID::SpecializedString.new(:line)
152
- m.register_type 'lseg', OID::SpecializedString.new(:lseg)
153
- m.register_type 'box', OID::SpecializedString.new(:box)
154
- m.register_type 'path', OID::SpecializedString.new(:path)
155
- m.register_type 'polygon', OID::SpecializedString.new(:polygon)
156
- m.register_type 'circle', OID::SpecializedString.new(:circle)
157
-
158
- m.register_type 'interval' do |*args, sql_type|
159
- precision = extract_precision(sql_type)
160
- OID::Interval.new(precision: precision)
212
+ def register_class_with_limit(...)
213
+ ::ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:register_class_with_limit, ...)
214
+ end
215
+
216
+ def register_class_with_precision(...)
217
+ ::ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:register_class_with_precision, ...)
218
+ end
219
+
220
+ def load_additional_types(oids = nil) # :nodoc:
221
+ initializer = ArjdbcTypeMapInitializer.new(type_map)
222
+ load_types_queries(initializer, oids) do |query|
223
+ execute_and_clear(query, "SCHEMA", []) do |records|
224
+ initializer.run(records)
225
+ end
161
226
  end
227
+ end
162
228
 
163
- register_class_with_precision m, 'time', Type::Time
164
- register_class_with_precision m, 'timestamp', OID::DateTime
165
-
166
- m.register_type 'numeric' do |_, fmod, sql_type|
167
- precision = extract_precision(sql_type)
168
- scale = extract_scale(sql_type)
169
-
170
- # The type for the numeric depends on the width of the field,
171
- # so we'll do something special here.
172
- #
173
- # When dealing with decimal columns:
174
- #
175
- # places after decimal = fmod - 4 & 0xffff
176
- # places before decimal = (fmod - 4) >> 16 & 0xffff
177
- if fmod && (fmod - 4 & 0xffff).zero?
178
- # FIXME: Remove this class, and the second argument to
179
- # lookups on PG
180
- Type::DecimalWithoutScale.new(precision: precision)
229
+ def load_types_queries(initializer, oids)
230
+ query = <<~SQL
231
+ SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype
232
+ FROM pg_type as t
233
+ LEFT JOIN pg_range as r ON oid = rngtypid
234
+ SQL
235
+ if oids
236
+ if oids.all? { |e| e.kind_of? Numeric }
237
+ yield query + "WHERE t.oid IN (%s)" % oids.join(", ")
181
238
  else
182
- OID::Decimal.new(precision: precision, scale: scale)
239
+ in_list = oids.map { |e| %Q{'#{e}'} }.join(", ")
240
+ yield query + "WHERE t.typname IN (%s)" % in_list
183
241
  end
242
+ else
243
+ yield query + initializer.query_conditions_for_known_type_names
244
+ yield query + initializer.query_conditions_for_known_type_types
245
+ yield query + initializer.query_conditions_for_array_types
184
246
  end
185
-
186
- load_additional_types(m)
187
-
188
- # pgjdbc returns these if the column is auto-incrmenting
189
- m.alias_type 'serial', 'int4'
190
- m.alias_type 'bigserial', 'int8'
191
247
  end
192
248
 
193
- def load_additional_types(type_map, oid = nil) # :nodoc:
194
- initializer = ArjdbcTypeMapInitializer.new(type_map)
249
+ def update_typemap_for_default_timezone
250
+ if @default_timezone != ActiveRecord.default_timezone && @timestamp_decoder
251
+ decoder_class = ActiveRecord.default_timezone == :utc ?
252
+ PG::TextDecoder::TimestampUtc :
253
+ PG::TextDecoder::TimestampWithoutTimeZone
195
254
 
196
- if supports_ranges?
197
- query = <<-SQL
198
- SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype,
199
- ns.nspname, ns.nspname = ANY(current_schemas(true)) in_ns
200
- FROM pg_type as t
201
- LEFT JOIN pg_range as r ON oid = rngtypid
202
- JOIN pg_namespace AS ns ON t.typnamespace = ns.oid
203
- SQL
204
- else
205
- query = <<-SQL
206
- SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, t.typtype, t.typbasetype,
207
- ns.nspname, ns.nspname = ANY(current_schemas(true)) in_ns
208
- FROM pg_type as t
209
- JOIN pg_namespace AS ns ON t.typnamespace = ns.oid
210
- SQL
211
- end
255
+ @timestamp_decoder = decoder_class.new(@timestamp_decoder.to_h)
256
+ @connection.type_map_for_results.add_coder(@timestamp_decoder)
212
257
 
213
- if oid
214
- if oid.is_a? Numeric || oid.match(/^\d+$/)
215
- # numeric OID
216
- query += "WHERE t.oid = %s" % oid
258
+ @default_timezone = ActiveRecord.default_timezone
217
259
 
218
- elsif m = oid.match(/"?(\w+)"?\."?(\w+)"?/)
219
- # namespace and type name
220
- query += "WHERE ns.nspname = '%s' AND t.typname = '%s'" % [m[1], m[2]]
260
+ # if default timezone has changed, we need to reconfigure the connection
261
+ # (specifically, the session time zone)
262
+ configure_connection
263
+ end
264
+ end
221
265
 
222
- else
223
- # only type name
224
- query += "WHERE t.typname = '%s' AND ns.nspname = ANY(current_schemas(true))" % oid
225
- end
226
- else
227
- query += initializer.query_conditions_for_initial_load
266
+ def extract_scale(sql_type)
267
+ case sql_type
268
+ when /\((\d+)\)/ then 0
269
+ when /\((\d+)(,(\d+))\)/ then $3.to_i
228
270
  end
271
+ end
272
+
273
+ def extract_precision(sql_type)
274
+ $1.to_i if sql_type =~ /\((\d+)(,\d+)?\)/
275
+ end
229
276
 
230
- records = execute(query, 'SCHEMA')
231
- initializer.run(records)
277
+ def extract_limit(sql_type)
278
+ $1.to_i if sql_type =~ /\((.*)\)/
232
279
  end
233
280
 
234
281
  # Support arrays/ranges for defining attributes that don't exist in the db
@@ -756,6 +756,29 @@ module ActiveRecord::ConnectionAdapters
756
756
  # Note: This is not an override of ours but a moved line from AR Sqlite3Adapter to register ours vs our copied module (which would be their class).
757
757
  # ActiveSupport.run_load_hooks(:active_record_sqlite3adapter, SQLite3Adapter)
758
758
 
759
+ # DIFFERENCE: FQN
760
+ class SQLite3Integer < ::ActiveRecord::Type::Integer # :nodoc:
761
+ private
762
+ def _limit
763
+ # INTEGER storage class can be stored 8 bytes value.
764
+ # See https://www.sqlite.org/datatype3.html#storage_classes_and_datatypes
765
+ limit || 8
766
+ end
767
+ end
768
+
769
+ # DIFFERENCE: FQN
770
+ ::ActiveRecord::Type.register(:integer, SQLite3Integer, adapter: :sqlite3)
771
+
772
+ class << self
773
+ private
774
+ def initialize_type_map(m)
775
+ super
776
+ register_class_with_limit m, %r(int)i, SQLite3Integer
777
+ end
778
+ end
779
+
780
+ TYPE_MAP = ActiveRecord::Type::TypeMap.new.tap { |m| initialize_type_map(m) }
781
+
759
782
  private
760
783
 
761
784
  # because the JDBC driver doesn't like multiple SQL statements in one JDBC statement
@@ -763,6 +786,10 @@ module ActiveRecord::ConnectionAdapters
763
786
  total_sql
764
787
  end
765
788
 
789
+ def type_map
790
+ TYPE_MAP
791
+ end
792
+
766
793
  # combine
767
794
  def write_query?(sql) # :nodoc:
768
795
  return sql.any? { |stmt| super(stmt) } if sql.kind_of? Array
@@ -770,23 +797,5 @@ module ActiveRecord::ConnectionAdapters
770
797
  rescue ArgumentError # Invalid encoding
771
798
  !READ_QUERY.match?(sql.b)
772
799
  end
773
-
774
- def initialize_type_map(m = type_map)
775
- super
776
- register_class_with_limit m, %r(int)i, SQLite3Integer
777
- end
778
-
779
- # DIFFERENCE: FQN
780
- class SQLite3Integer < ::ActiveRecord::Type::Integer # :nodoc:
781
- private
782
- def _limit
783
- # INTEGER storage class can be stored 8 bytes value.
784
- # See https://www.sqlite.org/datatype3.html#storage_classes_and_datatypes
785
- limit || 8
786
- end
787
- end
788
-
789
- # DIFFERENCE: FQN
790
- ::ActiveRecord::Type.register(:integer, SQLite3Integer, adapter: :sqlite3)
791
800
  end
792
801
  end
@@ -10,21 +10,6 @@ module ArJdbc
10
10
 
11
11
  require 'arjdbc/tasks/jdbc_database_tasks'
12
12
  require 'arjdbc/tasks/sqlite_database_tasks_patch'
13
- #require 'arjdbc/tasks/db2_database_tasks'
14
- #require 'arjdbc/tasks/derby_database_tasks'
15
- #require 'arjdbc/tasks/h2_database_tasks'
16
- #require 'arjdbc/tasks/hsqldb_database_tasks'
17
- #require 'arjdbc/tasks/mssql_database_tasks'
18
-
19
- # re-invent built-in (but deprecated on 4.0) tasks :
20
- #register_tasks(/sqlserver/, MSSQLDatabaseTasks)
21
- #register_tasks(/mssql/, MSSQLDatabaseTasks) # (built-in) alias
22
- # tasks for custom (JDBC) adapters :
23
- #register_tasks(/db2/, DB2DatabaseTasks)
24
- #register_tasks(/derby/, DerbyDatabaseTasks)
25
- #register_tasks(/h2/, H2DatabaseTasks)
26
- #register_tasks(/hsqldb/, HSQLDBDatabaseTasks)
27
- # (default) generic JDBC task :
28
13
  register_tasks(/^jdbc$/, JdbcDatabaseTasks)
29
14
 
30
15
  # NOTE: no need to register "built-in" adapters such as MySQL
@@ -31,33 +31,11 @@ module ArJdbc
31
31
  SerializedAttributes.dump_column_value(self, column)
32
32
  end
33
33
 
34
- if defined? ActiveRecord::Type::Serialized # ArJdbc::AR42
35
-
36
34
  def self.dump_column_value(record, column)
37
35
  value = record[ column.name.to_s ]
38
36
  column.cast_type.type_cast_for_database(value)
39
37
  end
40
38
 
41
- else
42
-
43
- def self.dump_column_value(record, column)
44
- value = record[ name = column.name.to_s ]
45
- if record.class.respond_to?(:serialized_attributes)
46
- if coder = record.class.serialized_attributes[name]
47
- value = coder.respond_to?(:dump) ? coder.dump(value) : value.to_yaml
48
- end
49
- else
50
- if record.respond_to?(:unserializable_attribute?)
51
- value = value.to_yaml if record.unserializable_attribute?(name, column)
52
- else
53
- value = value.to_yaml if value.is_a?(Hash)
54
- end
55
- end
56
- value
57
- end
58
-
59
- end
60
-
61
39
  def self.setup(lob_type = nil, after_save_alias = nil)
62
40
  ActiveRecord::Base.send :include, self # include SerializedAttributes
63
41
  ActiveRecord::Base.lob_type = lob_type unless lob_type.nil?
@@ -1,3 +1,3 @@
1
1
  module ArJdbc
2
- VERSION = '70.0'
2
+ VERSION = '70.1'
3
3
  end
data/rakelib/02-test.rake CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  test_tasks = [ 'test_mysql', 'test_sqlite3', 'test_postgresql_with_hint' ]
3
3
  if defined?(JRUBY_VERSION)
4
- test_tasks.push :test_derby, :test_hsqldb, :test_h2
4
+ test_tasks.push :test_hsqldb, :test_h2
5
5
  test_tasks.push :test_jndi, :test_jdbc
6
6
  end
7
7
 
@@ -55,7 +55,6 @@ def test_task_for(adapter, options = {})
55
55
  test_task
56
56
  end
57
57
 
58
- test_task_for :Derby, :desc => 'Run tests against (embedded) DerbyDB'
59
58
  test_task_for :H2, :desc => 'Run tests against H2 database engine'
60
59
  test_task_for :HSQLDB, :desc => 'Run tests against HyperSQL (Java) database'
61
60
  test_task_for :MySQL #, :prereqs => 'db:mysql'
@@ -64,29 +63,22 @@ test_task_for :PostgreSQL, :driver => ENV['JDBC_POSTGRES_VERSION'] || 'postgres'
64
63
  task :test_postgres => :test_postgresql # alias
65
64
  test_task_for :SQLite3, :driver => ENV['JDBC_SQLITE_VERSION']
66
65
  task :test_sqlite => :test_sqlite3 # alias
67
- test_task_for :Firebird
68
66
 
69
67
  test_task_for :MariaDB, :files => FileList["test/db/mysql/*_test.rb"] do |test_task| #, :prereqs => 'db:mysql'
70
68
  test_task.ruby_opts << '-rdb/mariadb_config'
71
69
  end
72
70
 
73
71
  # ensure driver for these DBs is on your class-path
74
- [ :Oracle, :DB2, :Informix, :CacheDB ].each do |adapter|
72
+ [ :Oracle ].each do |adapter|
75
73
  test_task_for adapter, :desc => "Run tests against #{adapter} (ensure driver is on class-path)"
76
74
  end
77
75
 
78
- test_task_for :AS400, :desc => "Run tests against AS400 (DB2) (ensure driver is on class-path)",
79
- :files => FileList["test/db2*_test.rb"] + FileList["test/db/db2/*_test.rb"]
80
-
81
- #task :test_jdbc => [ :test_jdbc_mysql, :test_jdbc_derby ] if defined?(JRUBY_VERSION)
82
-
83
76
  test_task_for 'JDBC', :desc => 'Run tests against plain JDBC adapter (uses MySQL and Derby)',
84
77
  :prereqs => [ 'db:mysql' ], :files => FileList['test/*jdbc_*test.rb'] do |test_task|
85
- test_task.libs << 'jdbc-mysql/lib' << 'jdbc-derby/lib'
78
+ test_task.libs << 'jdbc-mysql/lib'
86
79
  end
87
80
 
88
81
  # TODO since Derby AR 5.x support is not implemented we only run JNDI with MySQL :
89
- #task :test_jndi => [ :test_jndi_mysql, :test_jndi_derby ] if defined?(JRUBY_VERSION)
90
82
  task :test_jndi => [ :test_jndi_mysql ] if defined?(JRUBY_VERSION)
91
83
 
92
84
  jndi_classpath = [ 'test/jars/tomcat-juli.jar', 'test/jars/tomcat-catalina.jar' ]
@@ -100,13 +92,6 @@ get_jndi_classpath_opt = lambda do
100
92
  "-J-cp \"#{cp.join(File::PATH_SEPARATOR)}\""
101
93
  end
102
94
 
103
- test_task_for 'JNDI_Derby', :desc => 'Run tests against a Derby JNDI connection',
104
- :prereqs => jndi_classpath, :files => FileList['test/*jndi_derby*test.rb'] do |test_task|
105
- test_task.libs << 'jdbc-derby/lib'
106
- test_task.ruby_opts << get_jndi_classpath_opt.call
107
- #test_task.verbose = true
108
- end
109
-
110
95
  test_task_for 'JNDI_MySQL', :desc => 'Run tests against a MySQL JNDI connection',
111
96
  :prereqs => [ 'db:mysql' ] + jndi_classpath, :files => FileList['test/*jndi_mysql*test.rb'] do |test_task|
112
97
  test_task.libs << 'jdbc-mysql/lib'
@@ -214,6 +214,11 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
214
214
  });
215
215
  }
216
216
 
217
+ @JRubyMethod
218
+ public IRubyObject exec_params(ThreadContext context, IRubyObject sql, IRubyObject binds) {
219
+ return execute_prepared_query(context, sql, binds, null);
220
+ }
221
+
217
222
  private transient RubyClass oidArray; // PostgreSQL::OID::Array
218
223
 
219
224
  private RubyClass oidArray(final ThreadContext context) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-jdbc-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: '70.0'
4
+ version: '70.1'
5
5
  platform: java
6
6
  authors:
7
7
  - Nick Sieger, Ola Bini, Karol Bucek and JRuby contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-29 00:00:00.000000000 Z
11
+ date: 2023-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -48,13 +48,9 @@ files:
48
48
  - Rakefile
49
49
  - Rakefile.jdbc
50
50
  - activerecord-jdbc-adapter.gemspec
51
- - lib/active_record/connection_adapters/as400_adapter.rb
52
- - lib/active_record/connection_adapters/db2_adapter.rb
53
- - lib/active_record/connection_adapters/derby_adapter.rb
54
51
  - lib/active_record/connection_adapters/firebird_adapter.rb
55
52
  - lib/active_record/connection_adapters/h2_adapter.rb
56
53
  - lib/active_record/connection_adapters/hsqldb_adapter.rb
57
- - lib/active_record/connection_adapters/informix_adapter.rb
58
54
  - lib/active_record/connection_adapters/jdbc_adapter.rb
59
55
  - lib/active_record/connection_adapters/jndi_adapter.rb
60
56
  - lib/active_record/connection_adapters/mariadb_adapter.rb
@@ -64,9 +60,6 @@ files:
64
60
  - lib/active_record/connection_adapters/sqlite3_adapter.rb
65
61
  - lib/activerecord-jdbc-adapter.rb
66
62
  - lib/arel/visitors/compat.rb
67
- - lib/arel/visitors/db2.rb
68
- - lib/arel/visitors/derby.rb
69
- - lib/arel/visitors/firebird.rb
70
63
  - lib/arel/visitors/h2.rb
71
64
  - lib/arel/visitors/hsqldb.rb
72
65
  - lib/arel/visitors/postgresql_jdbc.rb
@@ -78,20 +71,7 @@ files:
78
71
  - lib/arjdbc/abstract/database_statements.rb
79
72
  - lib/arjdbc/abstract/statement_cache.rb
80
73
  - lib/arjdbc/abstract/transaction_support.rb
81
- - lib/arjdbc/db2.rb
82
- - lib/arjdbc/db2/adapter.rb
83
- - lib/arjdbc/db2/as400.rb
84
- - lib/arjdbc/db2/column.rb
85
- - lib/arjdbc/db2/connection_methods.rb
86
- - lib/arjdbc/derby.rb
87
- - lib/arjdbc/derby/active_record_patch.rb
88
- - lib/arjdbc/derby/adapter.rb
89
- - lib/arjdbc/derby/connection_methods.rb
90
- - lib/arjdbc/derby/schema_creation.rb
91
74
  - lib/arjdbc/discover.rb
92
- - lib/arjdbc/firebird.rb
93
- - lib/arjdbc/firebird/adapter.rb
94
- - lib/arjdbc/firebird/connection_methods.rb
95
75
  - lib/arjdbc/h2.rb
96
76
  - lib/arjdbc/h2/adapter.rb
97
77
  - lib/arjdbc/h2/connection_methods.rb
@@ -101,8 +81,6 @@ files:
101
81
  - lib/arjdbc/hsqldb/explain_support.rb
102
82
  - lib/arjdbc/hsqldb/schema_creation.rb
103
83
  - lib/arjdbc/informix.rb
104
- - lib/arjdbc/informix/adapter.rb
105
- - lib/arjdbc/informix/connection_methods.rb
106
84
  - lib/arjdbc/jdbc.rb
107
85
  - lib/arjdbc/jdbc/adapter.rb
108
86
  - lib/arjdbc/jdbc/adapter_java.jar
@@ -138,13 +116,9 @@ files:
138
116
  - lib/arjdbc/sqlite3.rb
139
117
  - lib/arjdbc/sqlite3/adapter.rb
140
118
  - lib/arjdbc/sqlite3/connection_methods.rb
141
- - lib/arjdbc/sybase.rb
142
- - lib/arjdbc/sybase/adapter.rb
143
119
  - lib/arjdbc/tasks.rb
144
120
  - lib/arjdbc/tasks/database_tasks.rb
145
121
  - lib/arjdbc/tasks/databases.rake
146
- - lib/arjdbc/tasks/db2_database_tasks.rb
147
- - lib/arjdbc/tasks/derby_database_tasks.rb
148
122
  - lib/arjdbc/tasks/h2_database_tasks.rb
149
123
  - lib/arjdbc/tasks/hsqldb_database_tasks.rb
150
124
  - lib/arjdbc/tasks/jdbc_database_tasks.rb
@@ -171,13 +145,9 @@ files:
171
145
  - src/java/arjdbc/ArJdbcModule.java
172
146
  - src/java/arjdbc/db2/DB2Module.java
173
147
  - src/java/arjdbc/db2/DB2RubyJdbcConnection.java
174
- - src/java/arjdbc/derby/DerbyModule.java
175
- - src/java/arjdbc/derby/DerbyRubyJdbcConnection.java
176
- - src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java
177
148
  - src/java/arjdbc/h2/H2Module.java
178
149
  - src/java/arjdbc/h2/H2RubyJdbcConnection.java
179
150
  - src/java/arjdbc/hsqldb/HSQLDBModule.java
180
- - src/java/arjdbc/informix/InformixRubyJdbcConnection.java
181
151
  - src/java/arjdbc/jdbc/AdapterJavaService.java
182
152
  - src/java/arjdbc/jdbc/Callable.java
183
153
  - src/java/arjdbc/jdbc/ConnectionFactory.java
@@ -215,9 +185,6 @@ post_install_message:
215
185
  rdoc_options:
216
186
  - "--main"
217
187
  - README.md
218
- - "-SHN"
219
- - "-f"
220
- - darkfish
221
188
  require_paths:
222
189
  - lib
223
190
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,2 +0,0 @@
1
- require 'arjdbc/db2'
2
- require 'arjdbc/db2/as400'
@@ -1 +0,0 @@
1
- require 'arjdbc/db2'
@@ -1 +0,0 @@
1
- require 'arjdbc/derby'
@@ -1 +0,0 @@
1
- require 'arjdbc/informix'