activerecord-jdbc-alt-adapter 70.1.0-java → 71.0.0.alpha1-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 (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