Skip to content

Commit 2d87330

Browse files
committed
feaet: include new conditions to mongodb
Signed-off-by: Otavio Santana <[email protected]>
1 parent ed2a9e2 commit 2d87330

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

jnosql-mongodb/src/main/java/org/eclipse/jnosql/databases/mongodb/communication/DocumentQueryConversor.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ public static Bson convert(CriteriaCondition condition) {
5656
yield Filters.nor(convert(criteriaCondition));
5757
}
5858
case LIKE -> Filters.regex(document.name(), Pattern.compile(prepareRegexValue(value.toString())));
59+
case CONTAINS -> Filters.regex(document.name(), Pattern.compile(prepareContains(value.toString())));
60+
case STARTS_WITH -> Filters.regex(document.name(), Pattern.compile(prepareStartsWith(value.toString())));
61+
case ENDS_WITH -> Filters.regex(document.name(), Pattern.compile(prepareEndsWith(value.toString())));
5962
case AND -> {
6063
List<CriteriaCondition> andConditions = condition.element().value().get(new TypeReference<>() {
6164
});
@@ -79,25 +82,34 @@ public static Bson convert(CriteriaCondition condition) {
7982
};
8083
}
8184

82-
public static String prepareRegexValue(String rawData) {
83-
if (rawData == null) {
84-
return "(?!)"; // matches nothing
85+
static String prepareRegexValue(String likePattern) {
86+
if (likePattern == null) {
87+
return "(?!)"; // never matches
8588
}
8689
StringBuilder sb = new StringBuilder("^");
87-
for (char c : rawData.toCharArray()) {
90+
for (char c : likePattern.toCharArray()) {
8891
switch (c) {
89-
case '%': // SQL LIKE: zero or more
90-
sb.append(".*");
91-
break;
92-
case '_': // SQL LIKE: exactly one
93-
sb.append('.');
94-
break;
95-
default: // escape all regex meta characters
96-
sb.append(Pattern.quote(String.valueOf(c)));
92+
case '%': sb.append(".*"); break; // zero or more
93+
case '_': sb.append('.'); break; // exactly one
94+
default: sb.append(Pattern.quote(String.valueOf(c)));
9795
}
9896
}
9997
sb.append('$');
10098
return sb.toString();
10199
}
102100

101+
static String prepareStartsWith(String raw) {
102+
if (raw == null) return "(?!)";
103+
return "^" + Pattern.quote(raw) + ".*$";
104+
}
105+
static String prepareEndsWith(String raw) {
106+
if (raw == null) return "(?!)";
107+
return "^.*" + Pattern.quote(raw) + "$";
108+
}
109+
110+
static String prepareContains(String raw) {
111+
if (raw == null) return "(?!)";
112+
return "^.*" + Pattern.quote(raw) + ".*$";
113+
}
114+
103115
}

jnosql-mongodb/src/test/java/org/eclipse/jnosql/databases/mongodb/communication/MongoDBDocumentManagerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ void shouldFindDocumentLike() {
249249
List<CommunicationEntity> entities = StreamSupport.stream(entitiesSaved.spliterator(), false).toList();
250250

251251
var query = select().from(COLLECTION_NAME)
252-
.where("name").like("Lu")
252+
.where("name").like("Lu%")
253253
.and("type").eq("V")
254254
.build();
255255

0 commit comments

Comments
 (0)