activerecord-jdbc-adapter 70.2-java → 71.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord::ConnectionAdapters
4
+ class SQLite3Column < JdbcColumn
5
+
6
+ attr_reader :rowid
7
+
8
+ def initialize(name, default, sql_type_metadata = nil, null = true, default_function = nil, collation: nil, comment: nil, auto_increment: nil, rowid: false, **)
9
+ super
10
+ @auto_increment = auto_increment
11
+ @default = nil if default =~ /NULL/
12
+ @rowid = rowid
13
+ end
14
+
15
+ def self.string_to_binary(value)
16
+ value
17
+ end
18
+
19
+ def self.binary_to_string(value)
20
+ if value.respond_to?(:encoding) && value.encoding != Encoding::ASCII_8BIT
21
+ value = value.force_encoding(Encoding::ASCII_8BIT)
22
+ end
23
+ value
24
+ end
25
+
26
+ # @override {ActiveRecord::ConnectionAdapters::JdbcColumn#default_value}
27
+ def default_value(value)
28
+ # JDBC returns column default strings with actual single quotes :
29
+ return $1 if value =~ /^'(.*)'$/
30
+
31
+ value
32
+ end
33
+
34
+ def auto_increment?
35
+ @auto_increment
36
+ end
37
+
38
+ def auto_incremented_by_db?
39
+ auto_increment? || rowid
40
+ end
41
+
42
+ def init_with(coder)
43
+ @auto_increment = coder["auto_increment"]
44
+ super
45
+ end
46
+
47
+ def encode_with(coder)
48
+ coder["auto_increment"] = @auto_increment
49
+ super
50
+ end
51
+
52
+ def ==(other)
53
+ other.is_a?(Column) &&
54
+ super &&
55
+ auto_increment? == other.auto_increment?
56
+ end
57
+ alias :eql? :==
58
+
59
+ def hash
60
+ Column.hash ^
61
+ super.hash ^
62
+ auto_increment?.hash ^
63
+ rowid.hash
64
+ end
65
+
66
+ # @override {ActiveRecord::ConnectionAdapters::Column#type_cast}
67
+ def type_cast(value)
68
+ return nil if value.nil?
69
+ case type
70
+ when :string then value
71
+ when :primary_key
72
+ value.respond_to?(:to_i) ? value.to_i : ( value ? 1 : 0 )
73
+ when :float then value.to_f
74
+ when :decimal then self.class.value_to_decimal(value)
75
+ when :boolean then self.class.value_to_boolean(value)
76
+ else super
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ # @override {ActiveRecord::ConnectionAdapters::Column#extract_limit}
83
+ def extract_limit(sql_type)
84
+ return nil if sql_type =~ /^(real)\(\d+/i
85
+ super
86
+ end
87
+
88
+ def extract_precision(sql_type)
89
+ case sql_type
90
+ when /^(real)\((\d+)(,\d+)?\)/i then $2.to_i
91
+ else super
92
+ end
93
+ end
94
+
95
+ def extract_scale(sql_type)
96
+ case sql_type
97
+ when /^(real)\((\d+)\)/i then 0
98
+ when /^(real)\((\d+)(,(\d+))\)/i then $4.to_i
99
+ else super
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  ArJdbc::ConnectionMethods.module_eval do
3
3
  def sqlite3_connection(config)
4
+ raise ArgumentError, 'Configuration must not be empty' if config.blank?
5
+
4
6
  config = config.deep_dup
5
7
  config[:adapter_spec] ||= ::ArJdbc::SQLite3
6
8
  config[:adapter_class] = ActiveRecord::ConnectionAdapters::SQLite3Adapter unless config.key?(:adapter_class)
@@ -18,7 +20,7 @@ ArJdbc::ConnectionMethods.module_eval do
18
20
  parse_sqlite3_config!(config)
19
21
  rescue Errno::ENOENT => error
20
22
  if error.message.include?('No such file or directory')
21
- raise ActiveRecord::NoDatabaseError
23
+ raise ActiveRecord::NoDatabaseError.new(connection_pool: ActiveRecord::ConnectionAdapters::NullPool.new)
22
24
  else
23
25
  raise
24
26
  end
@@ -50,7 +52,10 @@ ArJdbc::ConnectionMethods.module_eval do
50
52
 
51
53
  timeout = config[:timeout]
52
54
  if timeout && timeout.to_s !~ /\A\d+\Z/
53
- raise TypeError.new "Timeout must be nil or a number (got: #{timeout})."
55
+ raise ActiveRecord::StatementInvalid.new(
56
+ "TypeError: Timeout must be nil or a number (got: #{timeout}).",
57
+ connection_pool: ActiveRecord::ConnectionAdapters::NullPool.new
58
+ )
54
59
  end
55
60
 
56
61
  options = config[:properties]
@@ -1,3 +1,3 @@
1
1
  module ArJdbc
2
- VERSION = '70.2'
2
+ VERSION = '71.0'
3
3
  end
data/rakelib/02-test.rake CHANGED
@@ -40,7 +40,7 @@ def test_task_for(adapter, options = {})
40
40
  test_task.libs.push *FileList["activerecord-jdbc#{adapter}*/lib"]
41
41
  end
42
42
  test_task.libs << 'test'
43
- test_task.options = '--use-color=t'
43
+ test_task.options = '--use-color=t --progress-style=mark'
44
44
  test_task.verbose = true if $VERBOSE
45
45
  yield(test_task) if block_given?
46
46
  end
data/rakelib/rails.rake CHANGED
@@ -34,6 +34,7 @@ namespace :rails do
34
34
  File.join(root_dir, 'lib'),
35
35
  File.join(root_dir, driver, 'lib'),
36
36
  File.join(root_dir, 'test/rails'),
37
+ File.join(root_dir, 'jdbc-sqlite3', 'lib'), # Added for connection management tests which hardcode sqlite3
37
38
  ar_test_dir
38
39
  ]
39
40
 
@@ -51,6 +52,7 @@ namespace :rails do
51
52
  ruby_opts_string += " -C \"#{ar_path}\""
52
53
  ruby_opts_string += " -rbundler/setup"
53
54
  ruby_opts_string += " -rminitest -rminitest/excludes" unless ENV['NO_EXCLUDES'].eql?('true')
55
+ ruby_opts_string += " -rmonkey_patches"
54
56
  file_list = ENV["TEST"] ? FileList[ ENV["TEST"].split(',') ] : test_files_finder.call
55
57
  file_list_string = file_list.map { |fn| "\"#{fn}\"" }.join(' ')
56
58
  # test_loader_code = "-e \"ARGV.each{|f| require f}\"" # :direct
@@ -793,7 +793,8 @@ public class RubyJdbcConnection extends RubyObject {
793
793
  // Unfortunately the result set gets closed when getMoreResults()
794
794
  // is called, so we have to process the result sets as we get them
795
795
  // this shouldn't be an issue in most cases since we're only getting 1 result set anyways
796
- result = mapExecuteResult(context, connection, resultSet);
796
+ //result = mapExecuteResult(context, connection, resultSet);
797
+ result = mapToRawResult(context, connection, resultSet, false);
797
798
  resultSet.close();
798
799
  } else {
799
800
  result = context.runtime.newFixnum(updateCount);
@@ -2726,8 +2727,9 @@ public class RubyJdbcConnection extends RubyObject {
2726
2727
  statement.setDouble(index, ((RubyNumeric) value).getDoubleValue());
2727
2728
  }
2728
2729
  else { // e.g. `BigDecimal '42.00000000000000000001'`
2730
+ Ruby runtime = context.runtime;
2729
2731
  statement.setBigDecimal(index,
2730
- RubyBigDecimal.newInstance(context, context.runtime.getModule("BigDecimal"), value, RubyFixnum.newFixnum(context.runtime, Integer.MAX_VALUE)).getValue());
2732
+ RubyBigDecimal.newInstance(context, runtime.getModule("BigDecimal"), value, RubyFixnum.zero(runtime)).getValue());
2731
2733
  }
2732
2734
  }
2733
2735
 
@@ -119,6 +119,17 @@ public class MySQLRubyJdbcConnection extends RubyJdbcConnection {
119
119
  return driverWrapper;
120
120
  }
121
121
 
122
+ @JRubyMethod(name = "ping")
123
+ public RubyBoolean db_ping(final ThreadContext context) {
124
+ final Connection connection = getConnection(true);
125
+ if (connection == null) return context.fals;
126
+
127
+ // NOTE: It seems only `connection.isValid(aliveTimeout)` is needed
128
+ // for JDBC 4.0 and up. https://jira.mariadb.org/browse/CONJ-51
129
+
130
+ return context.runtime.newBoolean(isConnectionValid(context, connection));
131
+ }
132
+
122
133
  private static transient Class MYSQL_CONNECTION;
123
134
  private static transient Boolean MYSQL_CONNECTION_FOUND;
124
135
 
@@ -511,7 +511,8 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
511
511
  statement.setDouble(index, ((RubyNumeric) value).getDoubleValue());
512
512
  }
513
513
  else { // e.g. `BigDecimal '42.00000000000000000001'`
514
- RubyBigDecimal val = RubyBigDecimal.newInstance(context, context.runtime.getModule("BigDecimal"), value, RubyFixnum.newFixnum(context.runtime, Integer.MAX_VALUE));
514
+ Ruby runtime = context.runtime;
515
+ RubyBigDecimal val = RubyBigDecimal.newInstance(context, runtime.getModule("BigDecimal"), value, RubyFixnum.zero(runtime));
515
516
  statement.setString(index, val.getValue().toString());
516
517
  }
517
518
  }
metadata CHANGED
@@ -1,32 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-jdbc-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: '70.2'
4
+ version: '71.0'
5
5
  platform: java
6
6
  authors:
7
7
  - Nick Sieger, Ola Bini, Karol Bucek and JRuby contributors
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-04-09 00:00:00.000000000 Z
10
+ date: 2025-01-24 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '7.0'
19
- name: activerecord
18
+ version: 7.1.3
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: '7.0'
25
+ version: 7.1.3
27
26
  description: 'AR-JDBC is a database adapter for Rails'' ActiveRecord component designed
28
27
  to be used with JRuby built upon Java''s JDBC API for database access. Provides
29
- (ActiveRecord) built-in adapters: MySQL, PostgreSQL, SQLite3, and SQLServer.'
28
+ (ActiveRecord) built-in adapters: MySQL, PostgreSQL, and SQLite3.'
30
29
  email:
31
30
  - nick@nicksieger.com
32
31
  - ola.bini@gmail.com
@@ -69,6 +68,7 @@ files:
69
68
  - lib/arjdbc/abstract/connection_management.rb
70
69
  - lib/arjdbc/abstract/core.rb
71
70
  - lib/arjdbc/abstract/database_statements.rb
71
+ - lib/arjdbc/abstract/relation_query_attribute_monkey_patch.rb
72
72
  - lib/arjdbc/abstract/statement_cache.rb
73
73
  - lib/arjdbc/abstract/transaction_support.rb
74
74
  - lib/arjdbc/discover.rb
@@ -110,11 +110,14 @@ files:
110
110
  - lib/arjdbc/postgresql/base/pgconn.rb
111
111
  - lib/arjdbc/postgresql/column.rb
112
112
  - lib/arjdbc/postgresql/connection_methods.rb
113
+ - lib/arjdbc/postgresql/database_statements.rb
113
114
  - lib/arjdbc/postgresql/name.rb
114
115
  - lib/arjdbc/postgresql/oid_types.rb
116
+ - lib/arjdbc/postgresql/schema_statements.rb
115
117
  - lib/arjdbc/railtie.rb
116
118
  - lib/arjdbc/sqlite3.rb
117
119
  - lib/arjdbc/sqlite3/adapter.rb
120
+ - lib/arjdbc/sqlite3/column.rb
118
121
  - lib/arjdbc/sqlite3/connection_methods.rb
119
122
  - lib/arjdbc/tasks.rb
120
123
  - lib/arjdbc/tasks/database_tasks.rb
@@ -181,7 +184,6 @@ homepage: https://github.com/jruby/activerecord-jdbc-adapter
181
184
  licenses:
182
185
  - BSD-2-Clause
183
186
  metadata: {}
184
- post_install_message:
185
187
  rdoc_options:
186
188
  - "--main"
187
189
  - README.md
@@ -198,8 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
200
  - !ruby/object:Gem::Version
199
201
  version: '0'
200
202
  requirements: []
201
- rubygems_version: 3.3.26
202
- signing_key:
203
+ rubygems_version: 3.6.0.dev
203
204
  specification_version: 4
204
205
  summary: JDBC adapter for ActiveRecord, for use within JRuby on Rails.
205
206
  test_files: []