Skip to content

Commit f6a4d37

Browse files
committed
feat: udpate on oracle nosql
Signed-off-by: Otavio Santana <[email protected]>
1 parent 437c928 commit f6a4d37

File tree

2 files changed

+32
-13
lines changed

2 files changed

+32
-13
lines changed

jnosql-oracle-nosql/src/main/java/org/eclipse/jnosql/databases/oracle/communication/OracleNoSqlLikeConverter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
enum OracleNoSqlLikeConverter {
2121
INSTANCE;
2222

23-
// Regex metacharacters that must be escaped for Oracle NoSQL regex_like
2423
private static final Set<Character> META = Set.of(
2524
'.', '^', '$', '*', '+', '?', '(', ')', '[', ']', '{', '}', '\\', '|'
2625
);
@@ -34,7 +33,7 @@ enum OracleNoSqlLikeConverter {
3433
* "Lu" -> "Lu" // exact match equivalent in regex_like
3534
* "a.c" -> "a\\.c" // '.' escaped
3635
*/
37-
static String convert(Object value) {
36+
String convert(Object value) {
3837
if (value == null) return ""; // let caller decide behavior for empty
3938
String like = value.toString();
4039
StringBuilder out = new StringBuilder(like.length());

jnosql-oracle-nosql/src/test/java/org/eclipse/jnosql/databases/oracle/communication/OracleNoSqlLikeConverterTest.java

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,49 @@
1717
import org.junit.jupiter.api.DisplayName;
1818
import org.junit.jupiter.api.Test;
1919
import org.junit.jupiter.params.ParameterizedTest;
20+
import org.junit.jupiter.params.provider.Arguments;
2021
import org.junit.jupiter.params.provider.CsvSource;
22+
import org.junit.jupiter.params.provider.MethodSource;
23+
24+
import java.util.stream.Stream;
2125

2226
import static org.assertj.core.api.Assertions.assertThat;
27+
import static org.junit.jupiter.params.provider.Arguments.arguments;
2328

2429
class OracleNoSqlLikeConverterTest {
2530

31+
2632
@ParameterizedTest(name = "LIKE \"{0}\" -> pattern \"{1}\"")
27-
@CsvSource(textBlock = """
28-
%Ota%;.*\\QOta\\E.*
29-
Ota%;\\QOta\\E.*
30-
%Ota;.*\\QOta\\E
31-
Ota;\\QOta\\E
32-
Ot_;\\QOt\\E.
33-
_ta;.\\Qta\\E
34-
%t_a%;.*\\Qt\\E.\\Qa\\E.*
35-
.+;\\Q.+\\E
36-
""", delimiter = ';')
37-
@DisplayName("Converts SQL LIKE to Oracle NoSQL regex_like pattern (%, _ and literal quoting)")
33+
@MethodSource("cases")
34+
@DisplayName("Converts SQL LIKE to Oracle NoSQL regex_like pattern (no anchors)")
3835
void shouldConvertSqlLikeToOracleNoSqlRegex(String like, String expected) {
3936
String actual = OracleNoSqlLikeConverter.INSTANCE.convert(like);
4037
assertThat(actual).isEqualTo(expected);
4138
}
4239

40+
static Stream<Arguments> cases() {
41+
return Stream.of(
42+
// starts / ends / contains / exact
43+
arguments("Lu%", "Lu.*"),
44+
arguments("%Lu", ".*Lu"),
45+
arguments("%Lu%", ".*Lu.*"),
46+
arguments("Lu", "Lu"),
47+
48+
// single-char wildcard
49+
arguments("Ot_", "Ot."),
50+
arguments("_ta", ".ta"),
51+
52+
// escaping of regex metacharacters
53+
arguments("%a.c%", ".*a\\.c.*"),
54+
arguments("100% match", "100.* match"),
55+
56+
// edge cases
57+
arguments("", ""), // empty LIKE -> empty pattern
58+
arguments("%%", ".*.*"), // only wildcards
59+
arguments("__", "..")
60+
);
61+
}
62+
4363
@Test
4464
@DisplayName("Returns empty string for null input")
4565
void shouldReturnEmptyForNull() {

0 commit comments

Comments
 (0)