3
3
namespace RavenDB \Documents \Queries ;
4
4
5
5
use RavenDB \Constants \DocumentsIndexingFields ;
6
+ use RavenDB \Utils \StringBuilder ;
6
7
7
8
class QueryFieldUtil
8
9
{
9
10
private static function shouldEscape (string $ s , bool $ isPath ): bool
10
11
{
11
12
$ escape = false ;
12
13
$ insideEscaped = false ;
13
- //
14
- // for (int i = 0; i < s.length(); i++) {
15
- // char c = s.charAt(i);
16
- //
17
- // if (c == '\'' || c == '"') {
18
- // insideEscaped = !insideEscaped;
19
- // continue;
20
- // }
21
- //
22
- // if (i == 0) {
23
- // if (!Character.isLetter(c) && c != '_' && c != '@' && !insideEscaped) {
24
- // escape = true;
25
- // break;
26
- // }
27
- // } else {
28
- // if (!Character.isLetterOrDigit(c) && c != '_' && c != '-' && c != '@' && c != '.' && c != '[' && c != ']' && !insideEscaped) {
29
- // escape = true;
30
- // break;
31
- // }
32
- // if (isPath && c == '.' && !insideEscaped) {
33
- // escape = true;
34
- // break;
35
- // }
36
- // }
37
- // }
14
+
15
+ for ($ i = 0 ; $ i < strlen ($ s ); $ i ++) {
16
+ $ c = $ s [$ i ];
17
+
18
+ if ($ c == '\'' || $ c == '" ' ) {
19
+ $ insideEscaped = !$ insideEscaped ;
20
+ continue ;
21
+ }
22
+
23
+ if ($ i == 0 ) {
24
+
25
+ if (!ctype_alpha ($ c ) && $ c != '_ ' && $ c != '@ ' && !$ insideEscaped ) {
26
+ $ escape = true ;
27
+ break ;
28
+ }
29
+ } else {
30
+ if (!ctype_alnum ($ c ) && $ c != '_ ' && $ c != '- ' && $ c != '@ ' && $ c != '. ' && $ c != '[ ' && $ c != '] ' && !$ insideEscaped ) {
31
+ $ escape = true ;
32
+ break ;
33
+ }
34
+ if ($ isPath && $ c == '. ' && !$ insideEscaped ) {
35
+ $ escape = true ;
36
+ break ;
37
+ }
38
+ }
39
+ }
38
40
39
41
$ escape |= $ insideEscaped ;
40
42
return $ escape ;
@@ -56,40 +58,40 @@ public static function escapeIfNecessary(?string $name, bool $isPath = false): ?
56
58
return $ name ;
57
59
}
58
60
59
- // StringBuilder sb = new StringBuilder(name);
61
+ $ sb = new StringBuilder ($ name );
60
62
$ needEndQuote = false ;
61
63
$ lastTermStart = 0 ;
62
64
63
- // for (int i = 0; i < sb.length( ); i++) {
64
- // char c = sb.charAt(i) ;
65
- // if (i == 0 && !Character.isLetter( c) && c != '_' && c != '@') {
66
- // sb. insert(lastTermStart, '\'');
67
- // needEndQuote = true;
68
- // continue;
69
- // }
70
- //
71
- // if (isPath && c == '.') {
72
- // if (needEndQuote) {
73
- // needEndQuote = false;
74
- // sb. insert(i, '\'');
75
- // i++;
76
- // }
77
- //
78
- // lastTermStart = i + 1;
79
- // continue;
80
- // }
81
- //
82
- // if (!Character.isLetterOrDigit( c) && c != '_' && c != '-' && c != '@' && c != '.' && c != '[' && c != ']' && !needEndQuote) {
83
- // sb. insert(lastTermStart, '\'');
84
- // needEndQuote = true;
85
- // continue;
86
- // }
87
- // }
88
- //
89
- // if (needEndQuote) {
90
- // sb. append('\'');
91
- // }
92
- //
93
- // return sb.toString ();
65
+ for ($ i = 0 ; $ i < strlen ( $ sb ); $ i ++) {
66
+ $ c = $ sb [ $ i ] ;
67
+ if ($ i == 0 && !ctype_alpha ( $ c ) && $ c != '_ ' && $ c != '@ ' ) {
68
+ $ sb -> insert ($ lastTermStart , '\'' );
69
+ $ needEndQuote = true ;
70
+ continue ;
71
+ }
72
+
73
+ if ($ isPath && $ c == '. ' ) {
74
+ if ($ needEndQuote ) {
75
+ $ needEndQuote = false ;
76
+ $ sb -> insert ($ i , '\'' );
77
+ $ i ++;
78
+ }
79
+
80
+ $ lastTermStart = $ i + 1 ;
81
+ continue ;
82
+ }
83
+
84
+ if (!ctype_alnum ( $ c ) && $ c != '_ ' && $ c != '- ' && $ c != '@ ' && $ c != '. ' && $ c != '[ ' && $ c != '] ' && !$ needEndQuote ) {
85
+ $ sb -> insert ($ lastTermStart , '\'' );
86
+ $ needEndQuote = true ;
87
+ continue ;
88
+ }
89
+ }
90
+
91
+ if ($ needEndQuote ) {
92
+ $ sb -> append ('\'' );
93
+ }
94
+
95
+ return $ sb -> __toString ();
94
96
}
95
97
}
0 commit comments