activerecord-jdbc-alt-adapter 70.1.0-java → 71.0.0.alpha1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +135 -21
  3. data/.github/workflows/ruby.yml +10 -10
  4. data/.gitignore +1 -0
  5. data/.solargraph.yml +15 -0
  6. data/Gemfile +17 -4
  7. data/README.md +7 -3
  8. data/RUNNING_TESTS.md +36 -0
  9. data/activerecord-jdbc-adapter.gemspec +2 -2
  10. data/activerecord-jdbc-alt-adapter.gemspec +1 -1
  11. data/lib/arel/visitors/sqlserver.rb +10 -0
  12. data/lib/arjdbc/abstract/connection_management.rb +23 -10
  13. data/lib/arjdbc/abstract/core.rb +5 -6
  14. data/lib/arjdbc/abstract/database_statements.rb +35 -25
  15. data/lib/arjdbc/abstract/statement_cache.rb +1 -6
  16. data/lib/arjdbc/abstract/transaction_support.rb +37 -9
  17. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  18. data/lib/arjdbc/jdbc/column.rb +0 -34
  19. data/lib/arjdbc/jdbc/connection_methods.rb +1 -1
  20. data/lib/arjdbc/mssql/adapter.rb +93 -80
  21. data/lib/arjdbc/mssql/column.rb +1 -0
  22. data/lib/arjdbc/mssql/connection_methods.rb +7 -55
  23. data/lib/arjdbc/mssql/database_statements.rb +182 -71
  24. data/lib/arjdbc/mssql/explain_support.rb +8 -5
  25. data/lib/arjdbc/mssql/schema_creation.rb +1 -1
  26. data/lib/arjdbc/mssql/schema_definitions.rb +10 -0
  27. data/lib/arjdbc/mssql/schema_statements.rb +19 -11
  28. data/lib/arjdbc/mssql/server_version.rb +56 -0
  29. data/lib/arjdbc/mssql/utils.rb +23 -9
  30. data/lib/arjdbc/mysql/adapter.rb +64 -22
  31. data/lib/arjdbc/mysql/connection_methods.rb +43 -42
  32. data/lib/arjdbc/sqlite3/adapter.rb +218 -135
  33. data/lib/arjdbc/sqlite3/column.rb +103 -0
  34. data/lib/arjdbc/sqlite3/connection_methods.rb +7 -2
  35. data/lib/arjdbc/tasks/mssql_database_tasks.rb +9 -5
  36. data/lib/arjdbc/version.rb +1 -1
  37. data/rakelib/02-test.rake +1 -1
  38. data/rakelib/rails.rake +2 -0
  39. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +4 -2
  40. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +2 -1
  41. metadata +11 -14
  42. data/lib/arel/visitors/sql_server/ng42.rb +0 -294
  43. data/lib/arel/visitors/sql_server.rb +0 -124
  44. data/lib/arjdbc/mssql/limit_helpers.rb +0 -231
  45. data/lib/arjdbc/mssql/lock_methods.rb +0 -77
  46. data/lib/arjdbc/mssql/old_adapter.rb +0 -804
  47. data/lib/arjdbc/mssql/old_column.rb +0 -200
@@ -1,200 +0,0 @@
1
- module ArJdbc
2
- module MSSQL
3
-
4
- # @see ActiveRecord::ConnectionAdapters::JdbcColumn#column_types
5
- def self.column_selector
6
- [ /sqlserver|tds|Microsoft SQL/i, lambda { |config, column| column.extend(Column) } ]
7
- end
8
-
9
- # @see ActiveRecord::ConnectionAdapters::JdbcColumn
10
- module Column
11
-
12
- def self.included(base)
13
- # NOTE: assumes a standalone MSSQLColumn class
14
- class << base; include Cast; end
15
- end
16
-
17
- include LockMethods unless AR42
18
-
19
- # @override
20
- def simplified_type(field_type)
21
- case field_type
22
- when /int|bigint|smallint|tinyint/i then :integer
23
- when /numeric/i then (@scale.nil? || @scale == 0) ? :integer : :decimal
24
- when /float|double|money|real|smallmoney/i then :decimal
25
- when /datetime|smalldatetime/i then :datetime
26
- when /timestamp/i then :timestamp
27
- when /time/i then :time
28
- when /date/i then :date
29
- when /text|ntext|xml/i then :text
30
- when /binary|image|varbinary/i then :binary
31
- when /char|nchar|nvarchar|string|varchar/i then (@limit == 1073741823 ? (@limit = nil; :text) : :string)
32
- when /bit/i then :boolean
33
- when /uniqueidentifier/i then :string
34
- else
35
- super
36
- end
37
- end
38
-
39
- # @override
40
- def default_value(value)
41
- return $1 if value =~ /^\(N?'(.*)'\)$/ || value =~ /^\(\(?(.*?)\)?\)$/
42
- value
43
- end
44
-
45
- # @override
46
- def type_cast(value)
47
- return nil if value.nil?
48
- case type
49
- when :integer then ( value.is_a?(String) ? unquote(value) : (value || 0) ).to_i
50
- when :primary_key then value.respond_to?(:to_i) ? value.to_i : ((value && 1) || 0)
51
- when :decimal then self.class.value_to_decimal(unquote(value))
52
- when :date then self.class.string_to_date(value)
53
- when :datetime then self.class.string_to_time(value)
54
- when :timestamp then self.class.string_to_time(value)
55
- when :time then self.class.string_to_dummy_time(value)
56
- when :boolean then value == true || (value =~ /^t(rue)?$/i) == 0 || unquote(value) == '1'
57
- when :binary then unquote(value)
58
- else value
59
- end
60
- end
61
-
62
- # @override
63
- def extract_limit(sql_type)
64
- case sql_type
65
- when /^smallint/i
66
- 2
67
- when /^int/i
68
- 4
69
- when /^bigint/i
70
- 8
71
- when /\(max\)/, /decimal/, /numeric/
72
- nil
73
- when /text|ntext|xml|binary|image|varbinary|bit/
74
- nil
75
- else
76
- super
77
- end
78
- end
79
-
80
- # #primary replacement that works on 4.2 as well
81
- # #columns will set @primary even when on AR 4.2
82
- def primary?; @primary end
83
- alias_method :is_primary, :primary?
84
-
85
- def identity?
86
- !! sql_type.downcase.index('identity')
87
- end
88
- # @deprecated
89
- alias_method :identity, :identity?
90
- alias_method :is_identity, :identity?
91
-
92
- # NOTE: these do not handle = equality as expected
93
- # see {#repair_special_columns}
94
- # (TEXT, NTEXT, and IMAGE data types are deprecated)
95
- # @private
96
- def special?
97
- unless defined? @special # /text|ntext|image|xml/i
98
- sql_type = @sql_type.downcase
99
- @special = !! ( sql_type.index('text') || sql_type.index('image') || sql_type.index('xml') )
100
- end
101
- @special
102
- end
103
- # @deprecated
104
- alias_method :special, :special?
105
- alias_method :is_special, :special?
106
-
107
- def is_utf8?
108
- !!( sql_type =~ /nvarchar|ntext|nchar/i )
109
- end
110
-
111
- private
112
-
113
- def unquote(value)
114
- value.to_s.sub(/\A\([\(\']?/, "").sub(/[\'\)]?\)\Z/, "")
115
- end
116
-
117
- # @deprecated no longer used
118
- def cast_to_time(value)
119
- return value if value.is_a?(Time)
120
- DateTime.parse(value).to_time rescue nil
121
- end
122
-
123
- # @deprecated no longer used
124
- def cast_to_date(value)
125
- return value if value.is_a?(Date)
126
- return Date.parse(value) rescue nil
127
- end
128
-
129
- # @deprecated no longer used
130
- def cast_to_datetime(value)
131
- if value.is_a?(Time)
132
- if value.year != 0 and value.month != 0 and value.day != 0
133
- return value
134
- else
135
- return Time.mktime(2000, 1, 1, value.hour, value.min, value.sec) rescue nil
136
- end
137
- end
138
- if value.is_a?(DateTime)
139
- begin
140
- # Attempt to convert back to a Time, but it could fail for dates significantly in the past/future.
141
- return Time.mktime(value.year, value.mon, value.day, value.hour, value.min, value.sec)
142
- rescue ArgumentError
143
- return value
144
- end
145
- end
146
-
147
- return cast_to_time(value) if value.is_a?(Date) or value.is_a?(String) rescue nil
148
-
149
- return value.is_a?(Date) ? value : nil
150
- end
151
-
152
- module Cast
153
-
154
- def string_to_date(value)
155
- return value unless value.is_a?(String)
156
- return nil if value.empty?
157
-
158
- date = fast_string_to_date(value)
159
- date ? date : Date.parse(value) rescue nil
160
- end
161
-
162
- def string_to_time(value)
163
- return value unless value.is_a?(String)
164
- return nil if value.empty?
165
-
166
- fast_string_to_time(value) || DateTime.parse(value).to_time rescue nil
167
- end
168
-
169
- ISO_TIME = /\A(\d\d)\:(\d\d)\:(\d\d)(\.\d+)?\z/
170
-
171
- def string_to_dummy_time(value)
172
- return value unless value.is_a?(String)
173
- return nil if value.empty?
174
-
175
- if value =~ ISO_TIME # "12:34:56.1234560"
176
- microsec = ($4.to_f * 1_000_000).round.to_i
177
- new_time 2000, 1, 1, $1.to_i, $2.to_i, $3.to_i, microsec
178
- else
179
- super(value)
180
- end
181
- end
182
-
183
- def string_to_binary(value)
184
- # this will only allow the adapter to insert binary data with a length
185
- # of 7K or less because of a SQL Server statement length policy ...
186
- "0x#{value.unpack("H*")}" # "0x#{value.unpack("H*")[0]}"
187
- end
188
-
189
- def binary_to_string(value)
190
- if value.respond_to?(:force_encoding) && value.encoding != Encoding::ASCII_8BIT
191
- value = value.force_encoding(Encoding::ASCII_8BIT)
192
- end
193
- value =~ /[^[:xdigit:]]/ ? value : [value].pack('H*')
194
- end
195
-
196
- end
197
-
198
- end
199
- end
200
- end