Skip to content

Commit c6ebdd8

Browse files
committed
Return consistently PgCriteria
1 parent 3821fc4 commit c6ebdd8

File tree

4 files changed

+170
-2
lines changed

4 files changed

+170
-2
lines changed

spring-data-relational/src/main/java/org/springframework/data/relational/core/query/PgSql.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,13 @@ public PgCriteria.PostgresCriteriaStep and(String column) {
237237
return and(QueryExpression.column(column));
238238
}
239239

240+
public PgCriteria.PostgresCriteriaStep and(String column, Function<Operators, QueryExpression> wrappingFunction) {
241+
242+
Assert.hasText(column, "Column name must not be null or empty");
243+
244+
return and(wrappingFunction.apply(new PgSqlImpl.DefaultOperators(QueryExpression.column(column))));
245+
}
246+
240247
@Override
241248
public PgCriteria.PostgresCriteriaStep and(QueryExpression expression) {
242249

@@ -253,6 +260,13 @@ public PgCriteria.PostgresCriteriaStep or(String column) {
253260
return or(QueryExpression.column(column));
254261
}
255262

263+
public PgCriteria.PostgresCriteriaStep or(String column, Function<Operators, QueryExpression> wrappingFunction) {
264+
265+
Assert.hasText(column, "Column name must not be null or empty");
266+
267+
return or(wrappingFunction.apply(new PgSqlImpl.DefaultOperators(QueryExpression.column(column))));
268+
}
269+
256270
@Override
257271
public PgCriteria.PostgresCriteriaStep or(QueryExpression expression) {
258272

@@ -302,6 +316,60 @@ public interface PostgresCriteriaStep extends CriteriaStep {
302316
* @return
303317
*/
304318
PgCriteria asBoolean();
319+
320+
@Override
321+
PgCriteria is(Object value);
322+
323+
@Override
324+
PgCriteria not(Object value);
325+
326+
@Override
327+
PgCriteria in(Object... values);
328+
329+
@Override
330+
PgCriteria in(Collection<?> values);
331+
332+
@Override
333+
PgCriteria notIn(Object... values);
334+
335+
@Override
336+
PgCriteria notIn(Collection<?> values);
337+
338+
@Override
339+
PgCriteria between(Object begin, Object end);
340+
341+
@Override
342+
PgCriteria notBetween(Object begin, Object end);
343+
344+
@Override
345+
PgCriteria lessThan(Object value);
346+
347+
@Override
348+
PgCriteria lessThanOrEquals(Object value);
349+
350+
@Override
351+
PgCriteria greaterThan(Object value);
352+
353+
@Override
354+
PgCriteria greaterThanOrEquals(Object value);
355+
356+
@Override
357+
PgCriteria like(Object value);
358+
359+
@Override
360+
PgCriteria notLike(Object value);
361+
362+
@Override
363+
PgCriteria isNull();
364+
365+
@Override
366+
PgCriteria isNotNull();
367+
368+
@Override
369+
PgCriteria isTrue();
370+
371+
@Override
372+
PgCriteria isFalse();
305373
}
306374

307375
/**

spring-data-relational/src/main/java/org/springframework/data/relational/core/query/PgSqlImpl.java

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,96 @@ public PgSql.PgCriteria json(Function<PostgresJsonQueryExpression, QueryExpressi
103103
public PgSql.PgCriteria asBoolean() {
104104
return createCriteria(DefaultPostgresQueryExpression.queryExpression(getLhs()).asBoolean());
105105
}
106+
107+
@Override
108+
public PgSql.PgCriteria is(Object value) {
109+
return (PgSql.PgCriteria) super.is(value);
110+
}
111+
112+
@Override
113+
public PgSql.PgCriteria not(Object value) {
114+
return (PgSql.PgCriteria) super.not(value);
115+
}
116+
117+
@Override
118+
public PgSql.PgCriteria in(Object... values) {
119+
return (PgSql.PgCriteria) super.in(values);
120+
}
121+
122+
@Override
123+
public PgSql.PgCriteria in(Collection<?> values) {
124+
return (PgSql.PgCriteria) super.in(values);
125+
}
126+
127+
@Override
128+
public PgSql.PgCriteria notIn(Object... values) {
129+
return (PgSql.PgCriteria) super.notIn(values);
130+
}
131+
132+
@Override
133+
public PgSql.PgCriteria notIn(Collection<?> values) {
134+
return (PgSql.PgCriteria) super.notIn(values);
135+
}
136+
137+
@Override
138+
public PgSql.PgCriteria between(Object begin, Object end) {
139+
return (PgSql.PgCriteria) super.between(begin, end);
140+
}
141+
142+
@Override
143+
public PgSql.PgCriteria notBetween(Object begin, Object end) {
144+
return (PgSql.PgCriteria) super.notBetween(begin, end);
145+
}
146+
147+
@Override
148+
public PgSql.PgCriteria lessThan(Object value) {
149+
return (PgSql.PgCriteria) super.lessThan(value);
150+
}
151+
152+
@Override
153+
public PgSql.PgCriteria lessThanOrEquals(Object value) {
154+
return (PgSql.PgCriteria) super.lessThanOrEquals(value);
155+
}
156+
157+
@Override
158+
public PgSql.PgCriteria greaterThan(Object value) {
159+
return (PgSql.PgCriteria) super.greaterThan(value);
160+
}
161+
162+
@Override
163+
public PgSql.PgCriteria greaterThanOrEquals(Object value) {
164+
return (PgSql.PgCriteria) super.greaterThanOrEquals(value);
165+
}
166+
167+
@Override
168+
public PgSql.PgCriteria like(Object value) {
169+
return (PgSql.PgCriteria) super.like(value);
170+
}
171+
172+
@Override
173+
public PgSql.PgCriteria notLike(Object value) {
174+
return (PgSql.PgCriteria) super.notLike(value);
175+
}
176+
177+
@Override
178+
public PgSql.PgCriteria isNull() {
179+
return (PgSql.PgCriteria) super.isNull();
180+
}
181+
182+
@Override
183+
public PgSql.PgCriteria isNotNull() {
184+
return (PgSql.PgCriteria) super.isNotNull();
185+
}
186+
187+
@Override
188+
public PgSql.PgCriteria isTrue() {
189+
return (PgSql.PgCriteria) super.isTrue();
190+
}
191+
192+
@Override
193+
public PgSql.PgCriteria isFalse() {
194+
return (PgSql.PgCriteria) super.isFalse();
195+
}
106196
}
107197

108198
private record DefaultPostgresQueryExpression(QueryExpression source) implements PgSql.PostgresQueryExpression {

spring-data-relational/src/main/java/org/springframework/data/relational/core/query/QueryExpression.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ default ExpressionTypeContext getType(EvaluationContext context) {
7878
return ExpressionTypeContext.object();
7979
}
8080

81+
/**
82+
* Name hint for this expression. The hint can be a function or column name. Hints are used to provide more detail
83+
* context for e.g. bind markers.
84+
*
85+
* @return the name hint if applicable, or {@literal null} if no name hint is available.
86+
*/
8187
default @Nullable String getNameHint() {
8288
return null;
8389
}

spring-data-relational/src/test/java/org/springframework/data/relational/core/query/PgSqlUnitTests.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,18 @@ class PgSqlUnitTests {
5050
@Test // GH-1953
5151
void distanceLessThanTransformFunction() {
5252

53+
// TODO
5354
// where(distanceOf("embedding", vector).l2()).lessThan(…)
5455

55-
Criteria embedding = PgSql
56+
PgSql.PgCriteria embedding = PgSql
5657
.where("embedding", it -> it.distanceTo(Vector.of(1, 2, 3), PgSql.VectorSearchOperators.Distances::cosine))
57-
.lessThan("0.8"); // converter converts to Number
58+
.lessThan("0.8");
59+
// .and("some_json", it -> it.json().field("country")).is("Some Country");
5860

5961
String sql = toSql(embedding);
6062

63+
// assertThat(embedding).hasToString("embedding <=> '[1.0, 2.0, 3.0]' < 0.8 AND some_json -> 'country' = 'Some
64+
// Country'");
6165
assertThat(embedding).hasToString("embedding <=> '[1.0, 2.0, 3.0]' < 0.8");
6266
assertThat(sql).contains("with_embedding.the_embedding <=> :p0 < :p1");
6367
assertThat(bindings.getValues()).containsValue(new BigDecimal("0.8"));

0 commit comments

Comments
 (0)