Add support for raw SQL SubQuery expressions IN,EQ,NE,GT,GE,LT,LE,EXISTS,Not IN, Not EXISTS

For these expressions the SQL SubQuery is not parsed by ebean and
just used as is.
This commit is contained in:
Rob Bygrave
2023-03-24 22:38:52 +13:00
parent a68665a37e
commit 79fd689e9a
16 changed files with 844 additions and 113 deletions
@@ -413,4 +413,48 @@ public abstract class PBaseComparable<R, T> extends PBaseValueEqual<R, T> {
expr().gt(_name, subQuery);
return _root;
}
/**
* Less Than or Equal To a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R leSubQuery(String sqlSubQuery, Object... bindValues) {
expr().leSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Less Than a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R ltSubQuery(String sqlSubQuery, Object... bindValues) {
expr().ltSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Greater Than or Equal To a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R geSubQuery(String sqlSubQuery, Object... bindValues) {
expr().geSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Greater Than a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R gtSubQuery(String sqlSubQuery, Object... bindValues) {
expr().gtSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
}
@@ -301,6 +301,50 @@ public abstract class PBaseValueEqual<R, T> extends TQPropertyBase<R, T> {
return _root;
}
/**
* IN a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R inSubQuery(String sqlSubQuery, Object... bindValues) {
expr().inSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Not IN a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R notInSubQuery(String sqlSubQuery, Object... bindValues) {
expr().notInSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Equal To a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R eqSubQuery(String sqlSubQuery, Object... bindValues) {
expr().eqSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Not Equal To a raw SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R neSubQuery(String sqlSubQuery, Object... bindValues) {
expr().neSubQuery(_name, sqlSubQuery, bindValues);
return _root;
}
/**
* Property is equal to the result of a sub-query.
*
@@ -733,6 +733,28 @@ public abstract class TQRootBean<T, R> {
return root;
}
/**
* EXISTS using a SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R exists(String sqlSubQuery, Object... bindValues) {
query().where().exists(sqlSubQuery, bindValues);
return root;
}
/**
* Not EXISTS using a SQL SubQuery.
*
* @param sqlSubQuery The SQL SubQuery
* @param bindValues Optional bind values if the SubQuery uses {@code ? } bind values.
*/
public final R notExists(String sqlSubQuery, Object... bindValues) {
query().where().notExists(sqlSubQuery, bindValues);
return root;
}
/**
* Execute using "for update" clause which results in the DB locking the record.
*/