activerecord-jdbc-alt-adapter 71.0.0.alpha2-java → 72.0.0.alpha1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +9 -9
- data/Gemfile +2 -2
- data/README.md +3 -2
- data/activerecord-jdbc-adapter.gemspec +1 -1
- data/activerecord-jdbc-alt-adapter.gemspec +1 -1
- data/lib/arel/visitors/sqlserver.rb +28 -11
- data/lib/arjdbc/abstract/connection_management.rb +5 -6
- data/lib/arjdbc/abstract/database_statements.rb +4 -14
- data/lib/arjdbc/abstract/relation_query_attribute_monkey_patch.rb +24 -0
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/mssql/adapter.rb +8 -2
- data/lib/arjdbc/mssql/adapter_hash_config.rb +53 -0
- data/lib/arjdbc/mssql/database_statements.rb +2 -2
- data/lib/arjdbc/mssql/quoting.rb +56 -36
- data/lib/arjdbc/mssql/schema_statements.rb +1 -18
- data/lib/arjdbc/mssql.rb +1 -1
- data/lib/arjdbc/mysql/adapter.rb +9 -1
- data/lib/arjdbc/mysql/adapter_hash_config.rb +149 -0
- data/lib/arjdbc/mysql.rb +1 -1
- data/lib/arjdbc/postgresql/adapter.rb +188 -74
- data/lib/arjdbc/postgresql/adapter_hash_config.rb +98 -0
- data/lib/arjdbc/postgresql/base/array_encoder.rb +3 -1
- data/lib/arjdbc/postgresql/database_statements.rb +20 -0
- data/lib/arjdbc/postgresql/oid_types.rb +2 -2
- data/lib/arjdbc/postgresql.rb +1 -1
- data/lib/arjdbc/sqlite3/adapter.rb +42 -27
- data/lib/arjdbc/sqlite3/adapter_hash_config.rb +91 -0
- data/lib/arjdbc/sqlite3.rb +1 -1
- data/lib/arjdbc/version.rb +1 -1
- data/lib/arjdbc.rb +7 -1
- metadata +10 -4
data/lib/arjdbc/postgresql.rb
CHANGED
@@ -17,6 +17,9 @@ require "active_record/connection_adapters/sqlite3/schema_dumper"
|
|
17
17
|
require "active_record/connection_adapters/sqlite3/schema_statements"
|
18
18
|
require "active_support/core_ext/class/attribute"
|
19
19
|
require "arjdbc/sqlite3/column"
|
20
|
+
require "arjdbc/sqlite3/adapter_hash_config"
|
21
|
+
|
22
|
+
require "arjdbc/abstract/relation_query_attribute_monkey_patch"
|
20
23
|
|
21
24
|
module SQLite3
|
22
25
|
module Constants
|
@@ -61,13 +64,6 @@ module ArJdbc
|
|
61
64
|
SchemaCreation = ConnectionAdapters::SQLite3::SchemaCreation
|
62
65
|
SQLite3Adapter = ConnectionAdapters::AbstractAdapter
|
63
66
|
|
64
|
-
ADAPTER_NAME = 'SQLite'
|
65
|
-
|
66
|
-
# DIFFERENCE: FQN
|
67
|
-
include ::ActiveRecord::ConnectionAdapters::SQLite3::Quoting
|
68
|
-
include ::ActiveRecord::ConnectionAdapters::SQLite3::SchemaStatements
|
69
|
-
include ::ActiveRecord::ConnectionAdapters::SQLite3::DatabaseStatements
|
70
|
-
|
71
67
|
NATIVE_DATABASE_TYPES = {
|
72
68
|
primary_key: "integer PRIMARY KEY AUTOINCREMENT NOT NULL",
|
73
69
|
string: { name: "varchar" },
|
@@ -82,7 +78,7 @@ module ArJdbc
|
|
82
78
|
boolean: { name: "boolean" },
|
83
79
|
json: { name: "json" },
|
84
80
|
}
|
85
|
-
|
81
|
+
|
86
82
|
class StatementPool < ConnectionAdapters::StatementPool # :nodoc:
|
87
83
|
private
|
88
84
|
def dealloc(stmt)
|
@@ -669,6 +665,14 @@ module ArJdbc
|
|
669
665
|
StatementPool.new(self.class.type_cast_config_to_integer(@config[:statement_limit]))
|
670
666
|
end
|
671
667
|
|
668
|
+
def reconnect
|
669
|
+
if active?
|
670
|
+
@raw_connection.rollback rescue nil
|
671
|
+
else
|
672
|
+
connect
|
673
|
+
end
|
674
|
+
end
|
675
|
+
|
672
676
|
def configure_connection
|
673
677
|
if @config[:timeout] && @config[:retries]
|
674
678
|
raise ArgumentError, "Cannot specify both timeout and retries arguments"
|
@@ -719,13 +723,41 @@ module ActiveRecord::ConnectionAdapters
|
|
719
723
|
# ActiveRecord::ConnectionAdapters::SQLite3Adapter. Once we can do that we can remove the
|
720
724
|
# module SQLite3 above and remove a majority of this file.
|
721
725
|
class SQLite3Adapter < AbstractAdapter
|
726
|
+
ADAPTER_NAME = "SQLite"
|
727
|
+
|
728
|
+
class << self
|
729
|
+
def new_client(conn_params, adapter_instance)
|
730
|
+
jdbc_connection_class.new(conn_params, adapter_instance)
|
731
|
+
end
|
732
|
+
|
733
|
+
def dbconsole(config, options = {})
|
734
|
+
args = []
|
735
|
+
|
736
|
+
args << "-#{options[:mode]}" if options[:mode]
|
737
|
+
args << "-header" if options[:header]
|
738
|
+
args << File.expand_path(config.database, const_defined?(:Rails) && Rails.respond_to?(:root) ? Rails.root : nil)
|
739
|
+
|
740
|
+
find_cmd_and_exec("sqlite3", *args)
|
741
|
+
end
|
742
|
+
|
743
|
+
def jdbc_connection_class
|
744
|
+
::ActiveRecord::ConnectionAdapters::SQLite3JdbcConnection
|
745
|
+
end
|
746
|
+
end
|
747
|
+
|
722
748
|
include ArJdbc::Abstract::Core
|
723
749
|
include ArJdbc::SQLite3
|
750
|
+
include ArJdbc::SQLite3Config
|
751
|
+
|
724
752
|
include ArJdbc::Abstract::ConnectionManagement
|
725
753
|
include ArJdbc::Abstract::DatabaseStatements
|
726
754
|
include ArJdbc::Abstract::StatementCache
|
727
755
|
include ArJdbc::Abstract::TransactionSupport
|
728
756
|
|
757
|
+
include ::ActiveRecord::ConnectionAdapters::SQLite3::Quoting
|
758
|
+
include ::ActiveRecord::ConnectionAdapters::SQLite3::SchemaStatements
|
759
|
+
include ::ActiveRecord::ConnectionAdapters::SQLite3::DatabaseStatements
|
760
|
+
|
729
761
|
##
|
730
762
|
# :singleton-method:
|
731
763
|
# Configure the SQLite3Adapter to be used in a strict strings mode.
|
@@ -739,7 +771,8 @@ module ActiveRecord::ConnectionAdapters
|
|
739
771
|
def initialize(...)
|
740
772
|
super
|
741
773
|
|
742
|
-
|
774
|
+
# assign arjdbc extra connection params
|
775
|
+
conn_params = build_connection_config(@config.compact)
|
743
776
|
|
744
777
|
# NOTE: strict strings is not supported by the jdbc driver yet,
|
745
778
|
# hope it will supported soon, I open a issue in their repository.
|
@@ -810,24 +843,6 @@ module ActiveRecord::ConnectionAdapters
|
|
810
843
|
::ActiveRecord::Type.register(:integer, SQLite3Integer, adapter: :sqlite3)
|
811
844
|
|
812
845
|
class << self
|
813
|
-
def jdbc_connection_class
|
814
|
-
::ActiveRecord::ConnectionAdapters::SQLite3JdbcConnection
|
815
|
-
end
|
816
|
-
|
817
|
-
def new_client(conn_params, adapter_instance)
|
818
|
-
jdbc_connection_class.new(conn_params, adapter_instance)
|
819
|
-
end
|
820
|
-
|
821
|
-
def dbconsole(config, options = {})
|
822
|
-
args = []
|
823
|
-
|
824
|
-
args << "-#{options[:mode]}" if options[:mode]
|
825
|
-
args << "-header" if options[:header]
|
826
|
-
args << File.expand_path(config.database, const_defined?(:Rails) && Rails.respond_to?(:root) ? Rails.root : nil)
|
827
|
-
|
828
|
-
find_cmd_and_exec("sqlite3", *args)
|
829
|
-
end
|
830
|
-
|
831
846
|
private
|
832
847
|
def initialize_type_map(m)
|
833
848
|
super
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ArJdbc
|
4
|
+
module SQLite3Config
|
5
|
+
def build_connection_config(config)
|
6
|
+
config = config.deep_dup
|
7
|
+
|
8
|
+
load_jdbc_driver
|
9
|
+
|
10
|
+
config[:driver] ||= "org.sqlite.JDBC"
|
11
|
+
|
12
|
+
parse_sqlite3_config!(config)
|
13
|
+
|
14
|
+
database = config[:database]
|
15
|
+
|
16
|
+
# NOTE: "jdbc:sqlite::memory:" syntax is supported
|
17
|
+
config[:url] ||= "jdbc:sqlite:#{database == ':memory:' ? '' : database}"
|
18
|
+
config[:connection_alive_sql] ||= "SELECT 1"
|
19
|
+
|
20
|
+
config[:properties] = build_properties(config)
|
21
|
+
|
22
|
+
config
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def load_jdbc_driver
|
28
|
+
require "jdbc/sqlite3"
|
29
|
+
|
30
|
+
::Jdbc::SQLite3.load_driver(:require) if defined?(::Jdbc::SQLite3.load_driver)
|
31
|
+
rescue LoadError
|
32
|
+
# assuming driver.jar is on the class-path
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_properties(config)
|
36
|
+
properties = config[:properties] || {}
|
37
|
+
|
38
|
+
if config[:readonly]
|
39
|
+
# See
|
40
|
+
# * http://sqlite.org/c3ref/open.html
|
41
|
+
# * http://sqlite.org/c3ref/c_open_autoproxy.html
|
42
|
+
# => 0x01 = readonly, 0x40 = uri (default in JDBC)
|
43
|
+
properties[:open_mode] =
|
44
|
+
::SQLite3::Constants::Open::READONLY | ::SQLite3::Constants::Open::URI
|
45
|
+
end
|
46
|
+
|
47
|
+
if config[:flags]
|
48
|
+
properties[:open_mode] ||= 0
|
49
|
+
properties[:open_mode] |= config[:flags]
|
50
|
+
|
51
|
+
# JDBC driver has an extra flag for it
|
52
|
+
if config[:flags] & ::SQLite3::Constants::Open::SHAREDCACHE != 0
|
53
|
+
properties[:shared_cache] = true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
timeout = config[:timeout]
|
58
|
+
if timeout && timeout.to_s !~ /\A\d+\Z/
|
59
|
+
raise ActiveRecord::StatementInvalid.new(
|
60
|
+
"TypeError: Timeout must be nil or a number (got: #{timeout}).",
|
61
|
+
connection_pool: ActiveRecord::ConnectionAdapters::NullPool.new
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
properties["busy_timeout"] ||= timeout unless timeout.nil?
|
66
|
+
|
67
|
+
properties
|
68
|
+
end
|
69
|
+
|
70
|
+
def parse_sqlite3_config!(config)
|
71
|
+
database = (config[:database] ||= config[:dbfile])
|
72
|
+
|
73
|
+
if database != ":memory:"
|
74
|
+
# make sure to have an absolute path. Ruby and Java don't agree
|
75
|
+
# on working directory
|
76
|
+
base_dir = defined?(Rails.root) ? Rails.root : nil
|
77
|
+
config[:database] = File.expand_path(database, base_dir)
|
78
|
+
dirname = File.dirname(config[:database])
|
79
|
+
Dir.mkdir(dirname) unless File.directory?(dirname)
|
80
|
+
end
|
81
|
+
rescue Errno::ENOENT => e
|
82
|
+
if e.message.include?("No such file or directory")
|
83
|
+
raise ActiveRecord::NoDatabaseError.new(
|
84
|
+
connection_pool: ActiveRecord::ConnectionAdapters::NullPool.new
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
raise
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/arjdbc/sqlite3.rb
CHANGED
data/lib/arjdbc/version.rb
CHANGED
data/lib/arjdbc.rb
CHANGED
@@ -12,8 +12,14 @@ if defined?(JRUBY_VERSION)
|
|
12
12
|
rescue LoadError => e
|
13
13
|
warn "activerecord-jdbc-adapter failed to load railtie: #{e.inspect}"
|
14
14
|
end if defined?(Rails) && ActiveRecord::VERSION::MAJOR >= 3
|
15
|
+
|
16
|
+
ActiveSupport.on_load(:active_record) do
|
17
|
+
ActiveRecord::ConnectionAdapters.register(
|
18
|
+
"sqlserver", "ActiveRecord::ConnectionAdapters::MSSQLAdapter", "active_record/connection_adapters/mssql_adapter"
|
19
|
+
)
|
20
|
+
end
|
15
21
|
else
|
16
22
|
warn "activerecord-jdbc-adapter is for use with JRuby only"
|
17
23
|
end
|
18
24
|
|
19
|
-
require 'arjdbc/version'
|
25
|
+
require 'arjdbc/version'
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-jdbc-alt-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 72.0.0.alpha1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Nick Sieger, Ola Bini, Karol Bucek, Jesse Chavez, and JRuby contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 7.
|
18
|
+
version: 7.2.2
|
19
19
|
name: activerecord
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.
|
26
|
+
version: 7.2.2
|
27
27
|
description: 'Fork of the ActiveRecord JDBC adapter with support for SQL Server and
|
28
28
|
Azure SQL, for more information and help look at the README file in the github repository.
|
29
29
|
AR-JDBC is a database adapter for Rails'' ActiveRecord component designed to be
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/arjdbc/abstract/connection_management.rb
|
79
79
|
- lib/arjdbc/abstract/core.rb
|
80
80
|
- lib/arjdbc/abstract/database_statements.rb
|
81
|
+
- lib/arjdbc/abstract/relation_query_attribute_monkey_patch.rb
|
81
82
|
- lib/arjdbc/abstract/statement_cache.rb
|
82
83
|
- lib/arjdbc/abstract/transaction_support.rb
|
83
84
|
- lib/arjdbc/discover.rb
|
@@ -109,6 +110,7 @@ files:
|
|
109
110
|
- lib/arjdbc/jdbc/type_converter.rb
|
110
111
|
- lib/arjdbc/mssql.rb
|
111
112
|
- lib/arjdbc/mssql/adapter.rb
|
113
|
+
- lib/arjdbc/mssql/adapter_hash_config.rb
|
112
114
|
- lib/arjdbc/mssql/column.rb
|
113
115
|
- lib/arjdbc/mssql/connection_methods.rb
|
114
116
|
- lib/arjdbc/mssql/database_limits.rb
|
@@ -133,22 +135,26 @@ files:
|
|
133
135
|
- lib/arjdbc/mssql/utils.rb
|
134
136
|
- lib/arjdbc/mysql.rb
|
135
137
|
- lib/arjdbc/mysql/adapter.rb
|
138
|
+
- lib/arjdbc/mysql/adapter_hash_config.rb
|
136
139
|
- lib/arjdbc/mysql/connection_methods.rb
|
137
140
|
- lib/arjdbc/oracle/adapter.rb
|
138
141
|
- lib/arjdbc/postgresql.rb
|
139
142
|
- lib/arjdbc/postgresql/adapter.rb
|
143
|
+
- lib/arjdbc/postgresql/adapter_hash_config.rb
|
140
144
|
- lib/arjdbc/postgresql/base/array_decoder.rb
|
141
145
|
- lib/arjdbc/postgresql/base/array_encoder.rb
|
142
146
|
- lib/arjdbc/postgresql/base/array_parser.rb
|
143
147
|
- lib/arjdbc/postgresql/base/pgconn.rb
|
144
148
|
- lib/arjdbc/postgresql/column.rb
|
145
149
|
- lib/arjdbc/postgresql/connection_methods.rb
|
150
|
+
- lib/arjdbc/postgresql/database_statements.rb
|
146
151
|
- lib/arjdbc/postgresql/name.rb
|
147
152
|
- lib/arjdbc/postgresql/oid_types.rb
|
148
153
|
- lib/arjdbc/postgresql/schema_statements.rb
|
149
154
|
- lib/arjdbc/railtie.rb
|
150
155
|
- lib/arjdbc/sqlite3.rb
|
151
156
|
- lib/arjdbc/sqlite3/adapter.rb
|
157
|
+
- lib/arjdbc/sqlite3/adapter_hash_config.rb
|
152
158
|
- lib/arjdbc/sqlite3/column.rb
|
153
159
|
- lib/arjdbc/sqlite3/connection_methods.rb
|
154
160
|
- lib/arjdbc/tasks.rb
|