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

Sign up to get free protection for your applications and to get access to all the features.
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'