@@ -4,20 +4,60 @@ module ActiveRecord
4
4
module ConnectionAdapters
5
5
module OracleEnhanced
6
6
module Quoting
7
+ extend ActiveSupport ::Concern
7
8
# QUOTING ==================================================
8
9
#
9
10
# see: abstract/quoting.rb
10
11
QUOTED_COLUMN_NAMES = Concurrent ::Map . new # :nodoc:
11
12
QUOTED_TABLE_NAMES = Concurrent ::Map . new # :nodoc:
12
13
13
- def quote_column_name ( name ) # :nodoc:
14
- name = name . to_s
15
- QUOTED_COLUMN_NAMES [ name ] ||= if /\A [a-z][a-z_0-9$#]*\Z / . match? ( name )
16
- "\" #{ name . upcase } \" "
17
- else
18
- # remove double quotes which cannot be used inside quoted identifier
19
- "\" #{ name . delete ( '"' ) } \" "
14
+ module ClassMethods # :nodoc:
15
+ def column_name_matcher
16
+ /
17
+ \A
18
+ (
19
+ (?:
20
+ # "table_name"."column_name" | function(one or no argument)
21
+ ((?:\w +\. |"\w +"\. )?(?:\w +|"\w +") | \w +\( (?:|\g <2>)\) )
22
+ )
23
+ (?:(?:\s +AS)?\s +(?:\w +|"\w +"))?
24
+ )
25
+ (?:\s *,\s *\g <1>)*
26
+ \z
27
+ /ix
28
+ end
29
+
30
+ def column_name_with_order_matcher
31
+ /
32
+ \A
33
+ (
34
+ (?:
35
+ # "table_name"."column_name" | function(one or no argument)
36
+ ((?:\w +\. |"\w +"\. )?(?:\w +|"\w +") | \w +\( (?:|\g <2>)\) )
37
+ )
38
+ (?:\s +ASC|\s +DESC)?
39
+ (?:\s +NULLS\s +(?:FIRST|LAST))?
40
+ )
41
+ (?:\s *,\s *\g <1>)*
42
+ \z
43
+ /ix
44
+ end
45
+
46
+ def quote_column_name ( name ) # :nodoc:
47
+ name = name . to_s
48
+ QUOTED_COLUMN_NAMES [ name ] ||= if /\A [a-z][a-z_0-9$#]*\Z / . match? ( name )
49
+ "\" #{ name . upcase } \" "
50
+ else
51
+ # remove double quotes which cannot be used inside quoted identifier
52
+ "\" #{ name . delete ( '"' ) } \" "
53
+ end
54
+ end
55
+
56
+ def quote_table_name ( name ) # :nodoc:
57
+ name , _link = name . to_s . split ( "@" )
58
+ QUOTED_TABLE_NAMES [ name ] ||= [ name . split ( "." ) . map { |n | quote_column_name ( n ) } ] . join ( "." )
20
59
end
60
+
21
61
end
22
62
23
63
# This method is used in add_index to identify either column name (which is quoted)
@@ -67,10 +107,6 @@ def self.mixed_case?(name)
67
107
!!( object_name =~ /[A-Z]/ && object_name =~ /[a-z]/ )
68
108
end
69
109
70
- def quote_table_name ( name ) # :nodoc:
71
- name , _link = name . to_s . split ( "@" )
72
- QUOTED_TABLE_NAMES [ name ] ||= [ name . split ( "." ) . map { |n | quote_column_name ( n ) } ] . join ( "." )
73
- end
74
110
75
111
def quote_string ( s ) # :nodoc:
76
112
s . gsub ( /'/ , "''" )
@@ -131,42 +167,6 @@ def type_cast(value)
131
167
end
132
168
end
133
169
134
- def column_name_matcher
135
- COLUMN_NAME
136
- end
137
-
138
- def column_name_with_order_matcher
139
- COLUMN_NAME_WITH_ORDER
140
- end
141
-
142
- COLUMN_NAME = /
143
- \A
144
- (
145
- (?:
146
- # "table_name"."column_name" | function(one or no argument)
147
- ((?:\w +\. |"\w +"\. )?(?:\w +|"\w +") | \w +\( (?:|\g <2>)\) )
148
- )
149
- (?:(?:\s +AS)?\s +(?:\w +|"\w +"))?
150
- )
151
- (?:\s *,\s *\g <1>)*
152
- \z
153
- /ix
154
-
155
- COLUMN_NAME_WITH_ORDER = /
156
- \A
157
- (
158
- (?:
159
- # "table_name"."column_name" | function(one or no argument)
160
- ((?:\w +\. |"\w +"\. )?(?:\w +|"\w +") | \w +\( (?:|\g <2>)\) )
161
- )
162
- (?:\s +ASC|\s +DESC)?
163
- (?:\s +NULLS\s +(?:FIRST|LAST))?
164
- )
165
- (?:\s *,\s *\g <1>)*
166
- \z
167
- /ix
168
- private_constant :COLUMN_NAME , :COLUMN_NAME_WITH_ORDER
169
-
170
170
private
171
171
def oracle_downcase ( column_name )
172
172
return nil if column_name . nil?
0 commit comments