public class SQuery<T extends SRecordInstance>
extends java.lang.Object
For example:-
This API is a little unusual in that there is only one SQuery instance
created, and each of the methods update its state and then return
this
.
The normal expansion of the query into SQL is performed by SQueryExecute in the SSessionJdbc package. The raw* methods can be used to poke any string into the SQL Where or Order By clauses in the order they appear.
Modifier and Type | Class and Description |
---|---|
static class |
SQuery.Join |
static class |
SQuery.OrderBy |
static class |
SQuery.Where |
Constructor and Description |
---|
SQuery(SRecordMeta<T> record) |
SQuery(SRecordMeta<T> record,
SQueryMode queryMode) |
SQuery(SRecordMeta<T> record,
SQueryMode queryMode,
SFieldScalar[] selectList)
A new query object that can be .exeuted to produce an SResultSet.
|
SQuery(SRecordMeta<T> record,
SQueryMode queryMode,
SSelectMode selectMode) |
SQuery(SRecordMeta<T> record,
SSelectMode selectMode) |
Modifier and Type | Method and Description |
---|---|
SQuery<T> |
ascending(SFieldMeta field)
rawOrderBy(field.columnName) |
SQuery<T> |
descending(SFieldMeta field)
rawOrderBy(field.columnName) DESC |
SQuery<T> |
eq(SFieldMeta field,
java.lang.Object value)
Normally just adds
fieldRelopParameter(field, "=",
value) . |
SQuery<T> |
eq(SFieldScalar field1,
SFieldMeta field2) |
SQuery<T> |
equivalent(SFieldBoolean field,
boolean value)
True if boolean field == writeFieldValue(value).
|
SQuery<T> |
fieldQuery(SFieldScalar field,
java.lang.String clause)
Generates
field clause , ie the clause string is poked
literally into the query. |
SQuery<T> |
fieldRelopParameter(SFieldScalar field,
java.lang.String relop,
java.lang.Object value)
Generates
field relop ? and then subsequently sets the
parameter value. |
SQuery<T> |
fieldRelopParameter(SFieldScalar field1,
java.lang.String relop,
SFieldScalar field2)
Generates
field1 relop field2 |
SQuery<T> |
ge(SFieldScalar field,
double value) |
SQuery<T> |
ge(SFieldScalar field,
int value) |
SQuery<T> |
ge(SFieldScalar field,
long value) |
SQuery<T> |
ge(SFieldScalar field,
java.lang.Object value)
Just adds
fieldRelopParameter(field, ">=", value) |
SQuery<T> |
ge(SFieldScalar field1,
SFieldMeta field2) |
java.util.Set<SFieldReference> |
getJoinFields() |
java.util.List<SQuery.Join> |
getJoins() |
java.util.Map<SRecordMeta<?>,SSelectMode> |
getJoinTables() |
long |
getLimit() |
long |
getOffset() |
SQuery.OrderBy |
getOrderBy() |
SQueryMode |
getQueryMode() |
java.util.ArrayList<java.lang.Object> |
getQueryParameters() |
java.lang.String |
getRawSql() |
SRecordMeta<T> |
getRecordMeta() |
SFieldScalar[] |
getSelectList() |
SQuery.Where |
getWhere() |
SQuery<T> |
gt(SFieldScalar field,
double value) |
SQuery<T> |
gt(SFieldScalar field,
int value) |
SQuery<T> |
gt(SFieldScalar field,
long value) |
SQuery<T> |
gt(SFieldScalar field,
java.lang.Object value)
Just adds
fieldRelopParameter(field, ">", value) |
SQuery<T> |
gt(SFieldScalar field1,
SFieldMeta field2) |
SQuery<T> |
in(SFieldScalar field,
java.lang.Object... values)
Use or clause to simulate the in clause
|
SQuery<T> |
isFalse(SFieldBoolean field) |
SQuery<T> |
isNotNull(SFieldMeta field)
Just adds
fieldQuery(field, "IS NULL") |
SQuery<T> |
isNull(SFieldMeta field)
Just adds
fieldQuery(field, "IS NULL") |
SQuery<T> |
isTrue(SFieldBoolean field)
shortcut for equivalent(field, true);
|
SQuery<T> |
join(SFieldReference<?> reference)
Join to another table, based on the specified reference that is in the query table.
|
SQuery<T> |
join(SFieldReference<?> reference,
SSelectMode selectMode) |
SQuery<T> |
le(SFieldScalar field,
double value) |
SQuery<T> |
le(SFieldScalar field,
int value) |
SQuery<T> |
le(SFieldScalar field,
long value) |
SQuery<T> |
le(SFieldScalar field,
java.lang.Object value)
Just adds
fieldRelopParameter(field, "<=", value) |
SQuery<T> |
le(SFieldScalar field1,
SFieldMeta field2) |
SQuery<T> |
like(SFieldScalar field,
java.lang.Object value)
Just adds
fieldRelopParameter(field, "like", value) |
SQuery<T> |
lt(SFieldScalar field,
double value) |
SQuery<T> |
lt(SFieldScalar field,
int value) |
SQuery<T> |
lt(SFieldScalar field,
long value) |
SQuery<T> |
lt(SFieldScalar field,
java.lang.Object value)
Just adds
fieldRelopParameter(field, "<", value) |
SQuery<T> |
lt(SFieldScalar field1,
SFieldMeta field2) |
SQuery<T> |
ne(SFieldMeta field,
java.lang.Object value)
Just adds
fieldRelopParameter(field, "<>", value) . |
SQuery<T> |
ne(SFieldScalar field1,
SFieldMeta field2) |
SQuery<T> |
rawJoin(java.lang.String sqlJoin,
java.lang.Object... parameters)
Add a join to the join statement.
|
SQuery<T> |
rawOrderBy(SFieldMeta field,
boolean ascending) |
SQuery<T> |
rawOrderBy(java.lang.String raw)
Add a clause to the OrderBy statement, eg.
|
SQuery<T> |
rawPredicate(java.lang.String predicate,
java.lang.Object... parameters)
Add predicate to the where class, eg.
|
SQuery |
rawSql(java.lang.String rawSelectSql,
java.lang.Object... parameters)
Just specifies the entire SQL statement, including the Select.
|
SQuery<T> |
setLimit(long lim)
Set limit
|
SQuery<T> |
setOffset(long off)
Set offset
|
java.lang.String |
toString()
See SSession.queryToString for a fuller print out.
|
public SQuery(SRecordMeta<T> record, SQueryMode queryMode, SFieldScalar[] selectList)
public SQuery(SRecordMeta<T> record, SSelectMode selectMode)
public SQuery(SRecordMeta<T> record, SQueryMode queryMode)
public SQuery(SRecordMeta<T> record, SQueryMode queryMode, SSelectMode selectMode)
public SQuery(SRecordMeta<T> record)
public SRecordMeta<T> getRecordMeta()
public long getLimit()
public long getOffset()
public SQuery<T> rawJoin(java.lang.String sqlJoin, java.lang.Object... parameters)
public SQuery<T> rawPredicate(java.lang.String predicate, java.lang.Object... parameters)
public SQuery<T> rawOrderBy(java.lang.String raw)
public SQuery<T> rawOrderBy(SFieldMeta field, boolean ascending)
public SQuery rawSql(java.lang.String rawSelectSql, java.lang.Object... parameters)
public SQuery<T> fieldRelopParameter(SFieldScalar field, java.lang.String relop, java.lang.Object value)
field relop ?
and then subsequently sets the
parameter value. Eg.
fieldRelopParameter(Employee.Name, "=", myName)
public SQuery<T> fieldRelopParameter(SFieldScalar field1, java.lang.String relop, SFieldScalar field2)
field1 relop field2
E.g.
fieldRelopParameter(Order.QuantityRequired, "=", Order.QuantityReceived)
Mainly useful for Joins.
public SQuery<T> fieldQuery(SFieldScalar field, java.lang.String clause)
field clause
, ie the clause string is poked
literally into the query. Eg.
fieldQuery(Employee.Name, "= 'Fred'")
Use fieldRelopParameter instead for parameters determined at run time as blindly concatenating strings is dangerous.
public SQuery<T> join(SFieldReference<?> reference)
Joins only work from the query table to tables directly liked by the reference. It is not currently possible to join a table to itself (eg. Employee.Manager).
Normally the looked up records are also retrieved, although it is possible to specify selectMode = NONE if the join is only for the WHERE clause.
Currently implemented as Inner joins, but will be fixed to be left outer joins.
Note that this is only useful if the number of joined in records is substantial. For example, if there are 1,000 employees in 10 departments, then it is probably faster (and certainly simpler) to retrieve the departments lazily rather than retrieve the fields for the 10 departments 1000 times and throw them away each time.
Note also that Subselects can be used to reference fields in the where clause without introduing outer join issues.
public SQuery<T> join(SFieldReference<?> reference, SSelectMode selectMode)
public java.util.Map<SRecordMeta<?>,SSelectMode> getJoinTables()
public java.util.Set<SFieldReference> getJoinFields()
public SFieldScalar[] getSelectList()
public SQuery<T> eq(SFieldMeta field, java.lang.Object value)
fieldRelopParameter(field, "=",
value)
.
If field is a reference it recursively expands the foreign keys, and value must be an instance of the same record type.
value must not be null, you need the special case IS NULL test. (It would be possible to optimize this here, but what about field == field where one of them is null -- that would be inconsistent.)
public SQuery<T> eq(SFieldScalar field1, SFieldMeta field2)
public SQuery<T> equivalent(SFieldBoolean field, boolean value)
public SQuery<T> isTrue(SFieldBoolean field)
public SQuery<T> isFalse(SFieldBoolean field)
public SQuery<T> ne(SFieldMeta field, java.lang.Object value)
fieldRelopParameter(field, "<>", value)
.
Note that there are few methods ne(SfieldMeta, int)
etc.
This is because 5 relops * 5 data types would require 25 methods! Java
1.5 boxing will (finally) make this unnecessary anyway.
public SQuery<T> ne(SFieldScalar field1, SFieldMeta field2)
public SQuery<T> isNull(SFieldMeta field)
fieldQuery(field, "IS NULL")
public SQuery<T> isNotNull(SFieldMeta field)
fieldQuery(field, "IS NULL")
public SQuery<T> gt(SFieldScalar field, java.lang.Object value)
fieldRelopParameter(field, ">", value)
public SQuery<T> gt(SFieldScalar field, int value)
public SQuery<T> gt(SFieldScalar field, long value)
public SQuery<T> gt(SFieldScalar field, double value)
public SQuery<T> gt(SFieldScalar field1, SFieldMeta field2)
public SQuery<T> lt(SFieldScalar field, java.lang.Object value)
fieldRelopParameter(field, "<", value)
public SQuery<T> lt(SFieldScalar field, int value)
public SQuery<T> lt(SFieldScalar field, long value)
public SQuery<T> lt(SFieldScalar field, double value)
public SQuery<T> lt(SFieldScalar field1, SFieldMeta field2)
public SQuery<T> le(SFieldScalar field, java.lang.Object value)
fieldRelopParameter(field, "<=", value)
public SQuery<T> le(SFieldScalar field, int value)
public SQuery<T> le(SFieldScalar field, long value)
public SQuery<T> le(SFieldScalar field, double value)
public SQuery<T> le(SFieldScalar field1, SFieldMeta field2)
public SQuery<T> ge(SFieldScalar field, java.lang.Object value)
fieldRelopParameter(field, ">=", value)
public SQuery<T> ge(SFieldScalar field, int value)
public SQuery<T> ge(SFieldScalar field, long value)
public SQuery<T> ge(SFieldScalar field, double value)
public SQuery<T> ge(SFieldScalar field1, SFieldMeta field2)
public SQuery<T> in(SFieldScalar field, java.lang.Object... values)
public SQuery<T> like(SFieldScalar field, java.lang.Object value)
fieldRelopParameter(field, "like", value)
public SQuery<T> ascending(SFieldMeta field)
rawOrderBy(field.columnName)
public SQuery<T> descending(SFieldMeta field)
rawOrderBy(field.columnName) DESC
public java.lang.String toString()
toString
in class java.lang.Object
public java.util.ArrayList<java.lang.Object> getQueryParameters()
public java.util.List<SQuery.Join> getJoins()
public SQuery.OrderBy getOrderBy()
public SQuery.Where getWhere()
public SQueryMode getQueryMode()
public java.lang.String getRawSql()