Skip to content

Commit 76e85d9

Browse files
authored
Merge pull request #211 from domaframework/charsequence-in-expr-function
Use `CharSequence` as parameter in expression functions
2 parents d0a9056 + 7b767dd commit 76e85d9

File tree

4 files changed

+65
-47
lines changed

4 files changed

+65
-47
lines changed

docs/sources/expression.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,33 +231,33 @@ staticフィールドへのアクセス
231231
232232
ここでは、 ``@prefix(employee.employeeName)`` というように、 ``employee.employeeName``
233233
を ``@prefix`` 関数に渡しています。
234-
``@prefix`` 関数は、パラメータで受け取る文字列を前方一致検索用の文字列に変換します
234+
``@prefix`` 関数は、パラメータで受け取る文字シーケンスを前方一致検索用の文字列に変換します
235235
また、特別な意味を持つ文字をエスケープします。
236236
たとえば ``employee.employeeName`` の値が ``ABC`` である場合、 値は ``ABC%`` に変換されます。
237237
もし、 ``employee.employeeName`` の値が ``AB%C`` というように ``%`` を含んでいる場合、
238238
``%`` はデフォルトのエスケープシーケンス ``$`` でエスケープされ、値は ``AB$%C%`` に変換されます。
239239

240240
使用可能な関数のシグネチャは以下のとおりです。
241241

242-
String @escape(String text, char escapeChar = '$')
242+
String @escape(CharSequence text, char escapeChar = '$')
243243
LIKE演算のためのエスケープを行うことを示します。
244244
戻り値は入力値をエスケープした文字列です。
245245
``escapeChar`` が指定されない場合、デフォルトのエスケープ文字 ``$`` が使用されます。
246246
引数に ``null`` を渡した場合、 ``null`` を返します。
247247

248-
String @prefix(String prefix, char escapeChar = '$')
248+
String @prefix(CharSequence prefix, char escapeChar = '$')
249249
前方一致検索を行うことを示します。
250250
戻り値は入力値をエスケープしワイルドカードを後ろに付与した文字列です。
251251
``escapeChar`` が指定されない場合、デフォルトのエスケープ文字 ``$`` が使用されます。
252252
引数に ``null`` を渡した場合、 ``null`` を返します。
253253

254-
String @infix(String infix, char escapeChar = '$')
254+
String @infix(CharSequence infix, char escapeChar = '$')
255255
中間一致検索を行うことを示します。
256256
戻り値は入力値をエスケープしワイルドカードを前と後ろに付与した文字列です。
257257
``escapeChar`` が指定されない場合、デフォルトのエスケープ文字 ``$`` が使用されます。
258258
引数に ``null`` を渡した場合、 ``null`` を返します。
259259

260-
String @suffix(String suffix, char escapeChar = '$')
260+
String @suffix(CharSequence suffix, char escapeChar = '$')
261261
後方一致検索を行うことを示します。
262262
戻り値は入力値をエスケープしワイルドカードを前に付与した文字列です。
263263
``escapeChar`` が指定されない場合、デフォルトのエスケープ文字 ``$`` が使用されます。

src/main/java/org/seasar/doma/expr/ExpressionFunctions.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,83 +32,83 @@ public interface ExpressionFunctions {
3232
* Like演算子用のエスケープを行います。
3333
*
3434
* @param text
35-
* エスケープ対象の文字列
35+
* エスケープ対象の文字シーケンス
3636
* @return エスケープされた文字列
3737
*/
38-
String escape(String text);
38+
String escape(CharSequence text);
3939

4040
/**
4141
* Like演算子用のエスケープを行います。
4242
*
4343
* @param text
44-
* エスケープ対象の文字列
44+
* エスケープ対象の文字シーケンス
4545
* @param escapeChar
4646
* エスケープ文字
4747
* @return エスケープされた文字列
4848
*/
49-
String escape(String text, char escapeChar);
49+
String escape(CharSequence text, char escapeChar);
5050

5151
/**
5252
* 前方一致検索を行うことを示します。
5353
*
5454
* @param prefix
55-
* 前に置かれる文字列
55+
* 前に置かれる文字シーケンス
5656
* @return 前方一致検索のための文字列
5757
*/
58-
String prefix(String prefix);
58+
String prefix(CharSequence prefix);
5959

6060
/**
6161
* エスケープ文字を指定して前方一致検索を行うことを示します。
6262
*
6363
* @param prefix
64-
* 前に置かれる文字列
64+
* 前に置かれる文字シーケンス
6565
* @param escapeChar
6666
* エスケープ文字
6767
* @return 前方一致検索のための文字列
6868
*/
69-
String prefix(String prefix, char escapeChar);
69+
String prefix(CharSequence prefix, char escapeChar);
7070

7171
/**
7272
* 後方一致検索を行うことを示します。
7373
*
7474
* @param suffix
75-
* 後に置かれる文字列
75+
* 後に置かれる文字シーケンス
7676
* @return 後方一致検索のための文字列
7777
*/
78-
String suffix(String suffix);
78+
String suffix(CharSequence suffix);
7979

8080
/**
8181
* エスケープ文字を指定して後方一致検索を行うことを示します。
8282
*
8383
* @param suffix
84-
* 後に置かれる文字列
84+
* 後に置かれる文字シーケンス
8585
* @param escapeChar
8686
* エスケープ文字
8787
* @return 後方一致検索のための文字列
8888
*/
89-
String suffix(String suffix, char escapeChar);
89+
String suffix(CharSequence suffix, char escapeChar);
9090

9191
/**
9292
* 中間一致検索を行うことを示します。
9393
*
9494
* @param infix
95-
* 含まれる文字列
95+
* 含まれる文字シーケンス
9696
* @return 中間一致検索のための文字列
9797
* @since 1.33.0
9898
*/
99-
String infix(String infix);
99+
String infix(CharSequence infix);
100100

101101
/**
102102
* エスケープ文字を指定して中間一致検索を行うことを示します。
103103
*
104104
* @param infix
105-
* 含まれる文字列
105+
* 含まれる文字シーケンス
106106
* @param escapeChar
107107
* エスケープ文字
108108
* @return 中間一致検索のための文字列
109109
* @since 1.33.0
110110
*/
111-
String infix(String infix, char escapeChar);
111+
String infix(CharSequence infix, char escapeChar);
112112

113113
/**
114114
* 日付の時刻部分を切り捨てます。

src/main/java/org/seasar/doma/internal/expr/NullExpressionFunctions.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,43 +30,61 @@
3030
public class NullExpressionFunctions implements ExpressionFunctions {
3131

3232
@Override
33-
public String escape(String text) {
33+
public String escape(CharSequence text) {
3434
return null;
3535
}
3636

3737
@Override
38-
public String escape(String text, char escapeChar) {
38+
public String escape(CharSequence text, char escapeChar) {
3939
return null;
4040
}
4141

4242
@Override
43-
public String prefix(String text) {
44-
return text;
43+
public String prefix(CharSequence text) {
44+
if (text == null) {
45+
return null;
46+
}
47+
return text.toString();
4548
}
4649

4750
@Override
48-
public String prefix(String text, char escape) {
49-
return text;
51+
public String prefix(CharSequence text, char escape) {
52+
if (text == null) {
53+
return null;
54+
}
55+
return text.toString();
5056
}
5157

5258
@Override
53-
public String suffix(String text) {
54-
return text;
59+
public String suffix(CharSequence text) {
60+
if (text == null) {
61+
return null;
62+
}
63+
return text.toString();
5564
}
5665

5766
@Override
58-
public String suffix(String text, char escape) {
59-
return text;
67+
public String suffix(CharSequence text, char escape) {
68+
if (text == null) {
69+
return null;
70+
}
71+
return text.toString();
6072
}
6173

6274
@Override
63-
public String infix(String text) {
64-
return text;
75+
public String infix(CharSequence text) {
76+
if (text == null) {
77+
return null;
78+
}
79+
return text.toString();
6580
}
6681

6782
@Override
68-
public String infix(String text, char escapeChar) {
69-
return text;
83+
public String infix(CharSequence text, char escapeChar) {
84+
if (text == null) {
85+
return null;
86+
}
87+
return text.toString();
7088
}
7189

7290
@Override

src/main/java/org/seasar/doma/jdbc/dialect/StandardDialect.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -918,15 +918,15 @@ protected StandardExpressionFunctions(char escapeChar,
918918
}
919919

920920
@Override
921-
public String escape(String text, char escapeChar) {
921+
public String escape(CharSequence text, char escapeChar) {
922922
if (text == null) {
923923
return null;
924924
}
925925
return escapeWildcard(text, escapeChar);
926926
}
927927

928928
@Override
929-
public String escape(String text) {
929+
public String escape(CharSequence text) {
930930
if (text == null) {
931931
return null;
932932
}
@@ -935,7 +935,7 @@ public String escape(String text) {
935935
}
936936

937937
@Override
938-
public String prefix(String text) {
938+
public String prefix(CharSequence text) {
939939
if (text == null) {
940940
return null;
941941
}
@@ -945,15 +945,15 @@ public String prefix(String text) {
945945
}
946946

947947
@Override
948-
public String prefix(String text, char escapeChar) {
948+
public String prefix(CharSequence text, char escapeChar) {
949949
if (text == null) {
950950
return null;
951951
}
952952
return escapeWildcard(text, escapeChar) + "%";
953953
}
954954

955955
@Override
956-
public String suffix(String text) {
956+
public String suffix(CharSequence text) {
957957
if (text == null) {
958958
return null;
959959
}
@@ -963,19 +963,19 @@ public String suffix(String text) {
963963
}
964964

965965
@Override
966-
public String suffix(String text, char escapeChar) {
966+
public String suffix(CharSequence text, char escapeChar) {
967967
if (text == null) {
968968
return null;
969969
}
970970
return "%" + escapeWildcard(text, escapeChar);
971971
}
972972

973973
@Override
974-
public String infix(String text) {
974+
public String infix(CharSequence text) {
975975
if (text == null) {
976976
return null;
977977
}
978-
if (text.isEmpty()) {
978+
if (text.length() == 0) {
979979
return "%";
980980
}
981981
String escaped = escapeWildcard(defaultWildcardReplacementPattern,
@@ -984,11 +984,11 @@ public String infix(String text) {
984984
}
985985

986986
@Override
987-
public String infix(String text, char escapeChar) {
987+
public String infix(CharSequence text, char escapeChar) {
988988
if (text == null) {
989989
return null;
990990
}
991-
if (text.isEmpty()) {
991+
if (text.length() == 0) {
992992
return "%";
993993
}
994994
return "%" + escapeWildcard(text, escapeChar) + "%";
@@ -1003,7 +1003,7 @@ public String infix(String text, char escapeChar) {
10031003
* エスケープ文字
10041004
* @return エスケープされた文字列
10051005
*/
1006-
protected String escapeWildcard(String input, char escapeChar) {
1006+
protected String escapeWildcard(CharSequence input, char escapeChar) {
10071007
Pattern pattern = createWildcardReplacementPattern(escapeChar,
10081008
wildcards);
10091009
String replacement = createWildcardReplacement(escapeChar);
@@ -1021,7 +1021,7 @@ protected String escapeWildcard(String input, char escapeChar) {
10211021
* 置換文字列正規表現
10221022
* @return エスケープされた文字列
10231023
*/
1024-
protected String escapeWildcard(Pattern pattern, String input,
1024+
protected String escapeWildcard(Pattern pattern, CharSequence input,
10251025
String replacement) {
10261026
Matcher matcher = pattern.matcher(input);
10271027
return matcher.replaceAll(replacement);

0 commit comments

Comments
 (0)