Package org.apache.openjpa.jdbc.sql
Class SelectImpl
- java.lang.Object
-
- org.apache.openjpa.jdbc.sql.SelectImpl
-
- All Implemented Interfaces:
Joins
,Select
,SelectExecutor
public class SelectImpl extends java.lang.Object implements Select
StandardSelect
implementation. Usage note: though this class implementsJoins
, it should not be used for joining directly. Instead, use the return value ofnewJoins()
.- Author:
- Abe White
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SelectImpl.SelectResult
AResult
implementation wrapped around this select.protected static class
SelectImpl.Selects
Helper class to track selected columns, with fast contains method.
-
Field Summary
Fields Modifier and Type Field Description protected SelectImpl
_outer
protected SelectImpl.Selects
_selects
-
Fields inherited from interface org.apache.openjpa.jdbc.sql.Select
EAGER_INNER, EAGER_OUTER, EAGER_PARALLEL, FROM_SELECT_ALIAS, SUBS_ANY_JOINABLE, SUBS_EXACT, SUBS_JOINABLE, SUBS_NONE, TYPE_JOINLESS, TYPE_TWO_PART
-
-
Constructor Summary
Constructors Constructor Description SelectImpl(JDBCConfiguration conf)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addJoinClassConditions()
Apply class conditions from relation joins.Joins
and(Joins joins1, Joins joins2)
AND the given joins together.void
append(SQLBuffer buf, Joins joins)
Append the given joins to the given buffer.void
clearOrdering()
Clear odering conditions.void
clearPlaceholderSelects()
Clear selected placeholders, and return removed select indexes.void
clearSelects()
Clear the existing column selects.SelectImpl
clone(Context ctx)
Joins
crossJoin(Table localTable, Table foreignTable)
Perform a cross join on the given tables.Context
ctx()
Return the JPQL query context of this selectSelectExecutor
eagerClone(FieldMapping key, int eagerType, boolean toMany, int sels)
Return a select that will be eagerly executed with this one, or null if the select cannot be created for the given key and join type.Result
execute(JDBCStore store, JDBCFetchConfiguration fetch)
Execute this select in the context of the given store manager.Result
execute(JDBCStore store, JDBCFetchConfiguration fetch, int lockLevel)
Execute this select in the context of the given store manager.protected Result
execute(StoreContext ctx, JDBCStore store, JDBCFetchConfiguration fetch, int lockLevel)
Execute this select in the context of the given store manager.java.sql.ResultSet
executeQuery(java.sql.Connection conn, java.sql.PreparedStatement stmnt, java.lang.String sql, JDBCStore store, java.lang.Object[] params, Column[] cols)
This method is to provide override for non-JDBC or JDBC-like implementation of executing query.protected java.sql.ResultSet
executeQuery(java.sql.Connection conn, java.sql.PreparedStatement stmnt, SQLBuffer sql, boolean isLRS, JDBCStore store)
This method is to provide override for non-JDBC or JDBC-like implementation of executing query.SelectExecutor
fullClone(int sels)
Return a SELECT that is a complete clone of this one.java.util.Map
getAliases()
boolean
getAutoDistinct()
Whether to automatically make results distinct when relational joins would otherwise introduce duplicates.java.lang.String
getColumnAlias(java.lang.String col, Table table)
Return the alias for the given column.java.lang.String
getColumnAlias(java.lang.String col, Table table, Joins joins)
Return the alias for the given column.java.lang.String
getColumnAlias(Column col)
Return the alias for the given column.java.lang.String
getColumnAlias(Column col, java.lang.Object path)
Return the alias for the give columnjava.lang.String
getColumnAlias(Column col, Joins joins)
Return the alias for the given column.JDBCConfiguration
getConfiguration()
Return the select configuration.java.lang.String
getCorrelatedVariable()
Return correlated variable nameprotected int
getCount(java.sql.ResultSet rs)
This method is to provide override for non-JDBC or JDBC-like implementation of getting count from the result set.int
getCount(JDBCStore store)
Return the number of instances matching this select.DBDictionary
getDictionary()
SelectExecutor
getEager(FieldMapping key)
Return the eager select for the given key.java.util.Map
getEagerMap()
Return view of eager selects.Result
getEagerResult(java.sql.Connection conn, java.sql.PreparedStatement stmnt, java.sql.ResultSet rs, JDBCStore store, JDBCFetchConfiguration fetch, boolean forUpdate, SQLBuffer sql)
This method is to provide override for non-JDBC or JDBC-like implementation of executing eager selects.long
getEndIndex()
The result end index.java.util.List
getExcludedJoinedTableClassMeta()
get joined table metadatas excluded for polymorphic queriesint
getExpectedResultCount()
The expected result count for the query.Select
getFromSelect()
Another select instance that creates a temporary table from which this select pulls data.SQLBuffer
getGrouping()
Return the grouping SQL for this select.boolean
getHasSubselect()
Return the flag to indicate whether this Select has internally generated subselectSQLBuffer
getHaving()
Return the HAVING clause, or null if none.java.util.List
getIdentifierAliases()
Get the aliases for identifier columns that can be used in COUNT selects to find the number of matches.java.util.List
getJoinedTableClassMeta()
get joined table metadatas for polymorphic queriesjava.util.Iterator
getJoinIterator()
Return the top-levelJoin
elements for this select.Joins
getJoins()
Return the top-level joins for this select.int
getJoinSyntax()
The join syntax for this select, as one of the syntax constants fromJoinSyntaxes
.SQLBuffer
getOrdering()
Return the ordering SQL for this select.Select
getParent()
Return the parent of this select, if it is a subselect.java.lang.String
getPathStr()
Select
getSelect()
java.util.List
getSelectAliases()
Return the aliases of all selected columns and all selected buffers, in the order they were selected.java.util.List
getSelects()
Return the actualVal
s andColumn
s that were selected, in the order that they were selected.SQLBuffer
getSQL()
Get the buffer if it has been computed by a previous call toSelectExecutor.toSelect(boolean, JDBCFetchConfiguration)
, if any.long
getStartIndex()
The result start index.java.lang.String
getSubselectPath()
Return the subselect path for this select, if it is a subselect.java.util.List
getSubselects()
Return this select's subselects, or empty collection if none.java.util.Collection
getTableAliases()
Return the set of all used table aliases.ClassMapping
getTablePerClassMeta()
get table-per-class metadata for polymorphic queriesjava.util.Map
getTables()
SQLBuffer
getWhere()
Return the WHERE clause, minus any necessary end joins.void
groupBy(java.lang.String sql)
Add a GROUP BY clause.void
groupBy(java.lang.String sql, Joins joins)
Add a GROUP BY clause.void
groupBy(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch)
Group by the columns of the given mapping, possibly including subclasses.void
groupBy(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, Joins joins)
Group by the columns of the given mapping, possibly including subclasses.void
groupBy(Column col)
Group by the given column.void
groupBy(Column[] cols)
Group by the given columns.void
groupBy(Column[] cols, Joins joins)
Group by the given columns.void
groupBy(Column col, Joins joins)
Group by the given column.void
groupBy(SQLBuffer sql)
Add a GROUP BY clause.void
groupBy(SQLBuffer sql, Joins joins)
Add a GROUP BY clause.boolean
hasEagerJoin(boolean toMany)
Whether this select has an eager join of the specified type.boolean
hasJoin(boolean toMany)
Whether this select has a join of the specified type.boolean
hasMultipleSelects()
Affirm if this receiver requires more than one selects to fetch its data.void
having(java.lang.String sql)
Add the given having conditions.void
having(java.lang.String sql, Joins joins)
Add the given having conditions.void
having(SQLBuffer sql)
Add the given having conditions.void
having(SQLBuffer sql, Joins joins)
Add the given having conditions.int
indexOf()
The index of this select within the UNION, or 0.void
insertPlaceholder(java.lang.String sql, int pos)
Insert a placeholder at the given index; use a negative index to count from the back of the select list.boolean
isAggregate()
Return true if this is an aggregate select.boolean
isDirty()
boolean
isDistinct()
Whether this is a SELECT DISTINCT / UNION ALL.boolean
isEmpty()
Whether we have any joins.boolean
isLob()
Return true if this select includes a LOB.boolean
isLRS()
Whether the result of this select should be treated as a large result set.boolean
isOuter()
Whether this joins path results in outer joins.boolean
isSelected(Table table)
Return whether the given table is being used in this select.Joins
join(ForeignKey fk, boolean inverse, boolean toMany)
Join the columns of the given foreign key.int
joinCount()
Joins
joinRelation(java.lang.String name, ForeignKey fk, ClassMapping target, int subs, boolean inverse, boolean toMany)
Join the columns of the given foreign key, which represents a relation via the given field name.org.apache.openjpa.jdbc.sql.JoinSet
joins()
void
logEagerRelations()
Extended trace that logs eager relationsvoid
moveJoinsToParent()
Move joins that belong to subquery's parentJoins
newJoins()
Return a new instance to use for joining.Joins
newOuterJoins()
Return a new instance to use for outer joining.protected SelectImpl.Selects
newSelects()
void
nullJoins()
Joins
or(Joins joins1, Joins joins2)
OR the given joins together.boolean
orderBy(java.lang.String sql, boolean asc, boolean sel)
Add an ORDER BY clause.boolean
orderBy(java.lang.String sql, boolean asc, Joins joins, boolean sel)
Add an ORDER BY clause.int
orderBy(Column[] cols, boolean asc, boolean sel)
Order by the given columns.int
orderBy(Column[] cols, boolean asc, Joins joins, boolean sel)
Order by the given columns.boolean
orderBy(Column col, boolean asc, boolean sel)
Order by the given column.boolean
orderBy(Column col, boolean asc, Joins joins, boolean sel)
Order by the given column.boolean
orderBy(SQLBuffer sql, boolean asc, boolean sel, Value selAs)
Add an ORDER BY clause.boolean
orderBy(SQLBuffer sql, boolean asc, Joins joins, boolean sel, Value selAs)
Add an ORDER BY clause.int
orderByPrimaryKey(ClassMapping mapping, boolean asc, boolean sel)
Order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.int
orderByPrimaryKey(ClassMapping mapping, boolean asc, Joins joins, boolean sel)
Select and order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.int
orderByPrimaryKey(ClassMapping mapping, boolean asc, Joins joins, boolean sel, boolean aliasOrder)
Allow unions to set aliases on order columns.Joins
outer(Joins joins)
Return a join set making the given joins outer joins.Joins
outerJoin(ForeignKey fk, boolean inverse, boolean toMany)
Join the columns of the given foreign key.Joins
outerJoinRelation(java.lang.String name, ForeignKey fk, ClassMapping target, int subs, boolean inverse, boolean toMany)
Join the columns of the given foreign key, which represents a relation via the given field name.java.lang.StringBuilder
path()
java.sql.PreparedStatement
prepareStatement(java.sql.Connection conn, java.lang.String sql)
This method is to provide override for non-JDBC or JDBC-like implementation of preparing statement.protected java.sql.PreparedStatement
prepareStatement(java.sql.Connection conn, SQLBuffer sql, JDBCFetchConfiguration fetch, int rsType, int rsConcur, boolean isLRS)
This method is to provide override for non-JDBC or JDBC-like implementation of preparing statement.void
removeAlias(java.lang.Object key)
void
removeTable(java.lang.Object key)
boolean
select(java.lang.String sql, java.lang.Object id)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.boolean
select(java.lang.String sql, java.lang.Object id, Joins joins)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.void
select(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager)
Select the columns of the given mapping, possibly including subclasses.void
select(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager, Joins joins)
Select the columns of the given mapping, possibly including subclasses.boolean
select(Column col)
Select the given column.int
select(Column[] cols)
Select the given columns.int
select(Column[] cols, Joins joins)
Select the given columns.boolean
select(Column col, Joins joins)
Select the given column.boolean
select(SQLBuffer sql, java.lang.Object id)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.boolean
select(SQLBuffer sql, java.lang.Object id, Joins joins)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.void
selectIdentifier(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager)
Select the columns of the given mapping, possibly including subclasses.void
selectIdentifier(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager, Joins joins)
Select the columns of the given mapping, possibly including subclasses.boolean
selectIdentifier(Column col)
Select the given column as one that can be used to get a count of distinct matches.int
selectIdentifier(Column[] cols)
Select the given columns as ones that can be used to get a count of distinct matches.int
selectIdentifier(Column[] cols, Joins joins)
Select the given columns as ones that can be used to get a count of distinct matches.boolean
selectIdentifier(Column col, Joins joins)
Select the given column as one that can be used to get a count of distinct matches.void
selectPlaceholder(java.lang.String sql)
Select the given SQL as a placeholder for a UNION element.int
selectPrimaryKey(ClassMapping mapping)
Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.int
selectPrimaryKey(ClassMapping mapping, Joins joins)
Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.void
setAggregate(boolean agg)
Set to true for aggregate selects.void
setAutoDistinct(boolean val)
Whether to automatically make results distinct when relational joins would otherwise introduce duplicates.void
setContext(Context context)
Set JPQL query context for this selectJoins
setCorrelatedVariable(java.lang.String var)
Set the correlated variable name being traversed into with the next join.void
setDistinct(boolean distinct)
Whether this is a SELECT DISTINCT / UNION ALL.void
setExcludedJoinedTableClassMeta(java.util.List meta)
Set joined table metadatas excluded for polymorphic queriesvoid
setExpectedResultCount(int expectedResultCount, boolean force)
The expected result count for the query.void
setFromSelect(Select sel)
Another select instance that creates a temporary table from which this select pulls data.void
setHasSubselect(boolean hasSub)
Set the flag to indicate whether this Select has internally generated subselectJoins
setJoinContext(Context ctx)
Set subquery context when traversing into the next join is in transition from parent context to subquery.void
setJoinedTableClassMeta(java.util.List meta)
Set joined table metadatas for polymorphic queriesvoid
setJoinSyntax(int joinSyntax)
The join syntax for this select, as one of the syntax constants fromJoinSyntaxes
.void
setLob(boolean lob)
Set to true for selects that include LOB columns.void
setLRS(boolean lrs)
Whether the result of this select should be treated as a large result set.org.apache.openjpa.jdbc.sql.PathJoins
setOuter(boolean outer)
void
setParent(Select parent, java.lang.String path)
Turn this select into a subselect of the given instance.void
setRange(long start, long end)
Set the result range for this select.void
setSchemaAlias(java.lang.String schemaAlias)
Record the initial schemaAlias of a join pathJoins
setSubselect(java.lang.String alias)
Set the subquery alias.void
setTablePerClassMeta(ClassMapping meta)
Set table-per-class metadata for polymorphic queriesJoins
setVariable(java.lang.String var)
Set the variable name being traversed into with the next join.boolean
supportsLocking()
Whether this select can be executed for update.boolean
supportsRandomAccess(boolean forUpdate)
Return whether this select can support a random access result set type.static java.lang.String
toOrderAlias(int index)
Helper method to return the proper order alias for the given order column index.SQLBuffer
toSelect(boolean forUpdate, JDBCFetchConfiguration fetch)
Return this select as a SQL statement formatted for the current dictionary.SQLBuffer
toSelectCount()
Return this select as a COUNT SQL statement formatted for the current dictionary.java.lang.String
toString()
Implement toString to generate SQL string for profiling/debuggging.void
where(java.lang.String sql)
Add the given where conditions.void
where(java.lang.String sql, Joins joins)
Add the given where conditions.void
where(Joins joins)
Add the given where conditions.void
where(SQLBuffer sql)
Add the given where conditions.void
where(SQLBuffer sql, Joins joins)
Add the given where conditions.SelectExecutor
whereClone(int sels)
Return a SELECT with the same joins and where conditions as this one.void
whereForeignKey(ForeignKey fk, java.lang.Object oid, ClassMapping mapping, JDBCStore store)
Add where conditions setting the given foreign key to the given oid values.void
wherePrimaryKey(java.lang.Object oid, ClassMapping mapping, JDBCStore store)
Add where conditions setting the mapping's primary key to the given oid values.
-
-
-
Field Detail
-
_selects
protected final SelectImpl.Selects _selects
-
_outer
protected SelectImpl _outer
-
-
Constructor Detail
-
SelectImpl
public SelectImpl(JDBCConfiguration conf)
Constructor. Supply configuration.
-
-
Method Detail
-
getTablePerClassMeta
public ClassMapping getTablePerClassMeta()
Description copied from interface:Select
get table-per-class metadata for polymorphic queries- Specified by:
getTablePerClassMeta
in interfaceSelect
-
setTablePerClassMeta
public void setTablePerClassMeta(ClassMapping meta)
Description copied from interface:Select
Set table-per-class metadata for polymorphic queries- Specified by:
setTablePerClassMeta
in interfaceSelect
-
setJoinedTableClassMeta
public void setJoinedTableClassMeta(java.util.List meta)
Description copied from interface:Select
Set joined table metadatas for polymorphic queries- Specified by:
setJoinedTableClassMeta
in interfaceSelect
-
getJoinedTableClassMeta
public java.util.List getJoinedTableClassMeta()
Description copied from interface:Select
get joined table metadatas for polymorphic queries- Specified by:
getJoinedTableClassMeta
in interfaceSelect
-
setExcludedJoinedTableClassMeta
public void setExcludedJoinedTableClassMeta(java.util.List meta)
Description copied from interface:Select
Set joined table metadatas excluded for polymorphic queries- Specified by:
setExcludedJoinedTableClassMeta
in interfaceSelect
-
getExcludedJoinedTableClassMeta
public java.util.List getExcludedJoinedTableClassMeta()
Description copied from interface:Select
get joined table metadatas excluded for polymorphic queries- Specified by:
getExcludedJoinedTableClassMeta
in interfaceSelect
-
toOrderAlias
public static java.lang.String toOrderAlias(int index)
Helper method to return the proper order alias for the given order column index.
-
setContext
public void setContext(Context context)
Description copied from interface:Select
Set JPQL query context for this select- Specified by:
setContext
in interfaceSelect
-
ctx
public Context ctx()
Description copied from interface:Select
Return the JPQL query context of this select
-
setSchemaAlias
public void setSchemaAlias(java.lang.String schemaAlias)
Description copied from interface:Select
Record the initial schemaAlias of a join path- Specified by:
setSchemaAlias
in interfaceSelect
-
getConfiguration
public JDBCConfiguration getConfiguration()
Description copied from interface:SelectExecutor
Return the select configuration.- Specified by:
getConfiguration
in interfaceSelectExecutor
-
toSelect
public SQLBuffer toSelect(boolean forUpdate, JDBCFetchConfiguration fetch)
Description copied from interface:SelectExecutor
Return this select as a SQL statement formatted for the current dictionary.- Specified by:
toSelect
in interfaceSelectExecutor
-
getSQL
public SQLBuffer getSQL()
Description copied from interface:SelectExecutor
Get the buffer if it has been computed by a previous call toSelectExecutor.toSelect(boolean, JDBCFetchConfiguration)
, if any.- Specified by:
getSQL
in interfaceSelectExecutor
-
toSelectCount
public SQLBuffer toSelectCount()
Description copied from interface:SelectExecutor
Return this select as a COUNT SQL statement formatted for the current dictionary.- Specified by:
toSelectCount
in interfaceSelectExecutor
-
getAutoDistinct
public boolean getAutoDistinct()
Description copied from interface:SelectExecutor
Whether to automatically make results distinct when relational joins would otherwise introduce duplicates.- Specified by:
getAutoDistinct
in interfaceSelectExecutor
-
setAutoDistinct
public void setAutoDistinct(boolean val)
Description copied from interface:SelectExecutor
Whether to automatically make results distinct when relational joins would otherwise introduce duplicates.- Specified by:
setAutoDistinct
in interfaceSelectExecutor
-
isDistinct
public boolean isDistinct()
Description copied from interface:SelectExecutor
Whether this is a SELECT DISTINCT / UNION ALL.- Specified by:
isDistinct
in interfaceSelectExecutor
-
setDistinct
public void setDistinct(boolean distinct)
Description copied from interface:SelectExecutor
Whether this is a SELECT DISTINCT / UNION ALL.- Specified by:
setDistinct
in interfaceSelectExecutor
-
isLRS
public boolean isLRS()
Description copied from interface:SelectExecutor
Whether the result of this select should be treated as a large result set.- Specified by:
isLRS
in interfaceSelectExecutor
-
setLRS
public void setLRS(boolean lrs)
Description copied from interface:SelectExecutor
Whether the result of this select should be treated as a large result set.- Specified by:
setLRS
in interfaceSelectExecutor
-
getExpectedResultCount
public int getExpectedResultCount()
Description copied from interface:SelectExecutor
The expected result count for the query.- Specified by:
getExpectedResultCount
in interfaceSelectExecutor
-
setExpectedResultCount
public void setExpectedResultCount(int expectedResultCount, boolean force)
Description copied from interface:SelectExecutor
The expected result count for the query.- Specified by:
setExpectedResultCount
in interfaceSelectExecutor
force
- if false, the count will be discarded if this select has any to-many eager joins that would throw off the result count
-
getJoinSyntax
public int getJoinSyntax()
Description copied from interface:SelectExecutor
The join syntax for this select, as one of the syntax constants fromJoinSyntaxes
.- Specified by:
getJoinSyntax
in interfaceSelectExecutor
-
setJoinSyntax
public void setJoinSyntax(int joinSyntax)
Description copied from interface:SelectExecutor
The join syntax for this select, as one of the syntax constants fromJoinSyntaxes
.- Specified by:
setJoinSyntax
in interfaceSelectExecutor
-
supportsRandomAccess
public boolean supportsRandomAccess(boolean forUpdate)
Description copied from interface:SelectExecutor
Return whether this select can support a random access result set type.- Specified by:
supportsRandomAccess
in interfaceSelectExecutor
-
supportsLocking
public boolean supportsLocking()
Description copied from interface:SelectExecutor
Whether this select can be executed for update.- Specified by:
supportsLocking
in interfaceSelectExecutor
-
hasMultipleSelects
public boolean hasMultipleSelects()
Description copied from interface:SelectExecutor
Affirm if this receiver requires more than one selects to fetch its data.- Specified by:
hasMultipleSelects
in interfaceSelectExecutor
-
getCount
public int getCount(JDBCStore store) throws java.sql.SQLException
Description copied from interface:SelectExecutor
Return the number of instances matching this select.- Specified by:
getCount
in interfaceSelectExecutor
- Throws:
java.sql.SQLException
-
execute
public Result execute(JDBCStore store, JDBCFetchConfiguration fetch) throws java.sql.SQLException
Description copied from interface:SelectExecutor
Execute this select in the context of the given store manager.- Specified by:
execute
in interfaceSelectExecutor
- Throws:
java.sql.SQLException
-
execute
public Result execute(JDBCStore store, JDBCFetchConfiguration fetch, int lockLevel) throws java.sql.SQLException
Description copied from interface:SelectExecutor
Execute this select in the context of the given store manager.- Specified by:
execute
in interfaceSelectExecutor
- Throws:
java.sql.SQLException
-
execute
protected Result execute(StoreContext ctx, JDBCStore store, JDBCFetchConfiguration fetch, int lockLevel) throws java.sql.SQLException
Execute this select in the context of the given store manager. The context is passed in separately for profiling purposes.- Throws:
java.sql.SQLException
-
prepareStatement
protected java.sql.PreparedStatement prepareStatement(java.sql.Connection conn, SQLBuffer sql, JDBCFetchConfiguration fetch, int rsType, int rsConcur, boolean isLRS) throws java.sql.SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of preparing statement.- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.sql.Connection conn, java.lang.String sql) throws java.sql.SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of preparing statement.- Throws:
java.sql.SQLException
-
executeQuery
protected java.sql.ResultSet executeQuery(java.sql.Connection conn, java.sql.PreparedStatement stmnt, SQLBuffer sql, boolean isLRS, JDBCStore store) throws java.sql.SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of executing query.- Throws:
java.sql.SQLException
-
executeQuery
public java.sql.ResultSet executeQuery(java.sql.Connection conn, java.sql.PreparedStatement stmnt, java.lang.String sql, JDBCStore store, java.lang.Object[] params, Column[] cols) throws java.sql.SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of executing query.- Throws:
java.sql.SQLException
-
getCount
protected int getCount(java.sql.ResultSet rs) throws java.sql.SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of getting count from the result set.- Throws:
java.sql.SQLException
-
getEagerResult
public Result getEagerResult(java.sql.Connection conn, java.sql.PreparedStatement stmnt, java.sql.ResultSet rs, JDBCStore store, JDBCFetchConfiguration fetch, boolean forUpdate, SQLBuffer sql) throws java.sql.SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of executing eager selects.- Throws:
java.sql.SQLException
-
indexOf
public int indexOf()
Description copied from interface:Select
The index of this select within the UNION, or 0.
-
getSubselects
public java.util.List getSubselects()
Description copied from interface:Select
Return this select's subselects, or empty collection if none.- Specified by:
getSubselects
in interfaceSelect
-
getParent
public Select getParent()
Description copied from interface:Select
Return the parent of this select, if it is a subselect.
-
getSubselectPath
public java.lang.String getSubselectPath()
Description copied from interface:Select
Return the subselect path for this select, if it is a subselect.- Specified by:
getSubselectPath
in interfaceSelect
-
setParent
public void setParent(Select parent, java.lang.String path)
Description copied from interface:Select
Turn this select into a subselect of the given instance.
-
setHasSubselect
public void setHasSubselect(boolean hasSub)
Description copied from interface:Select
Set the flag to indicate whether this Select has internally generated subselect- Specified by:
setHasSubselect
in interfaceSelect
-
getHasSubselect
public boolean getHasSubselect()
Description copied from interface:Select
Return the flag to indicate whether this Select has internally generated subselect- Specified by:
getHasSubselect
in interfaceSelect
-
getAliases
public java.util.Map getAliases()
-
removeAlias
public void removeAlias(java.lang.Object key)
-
getTables
public java.util.Map getTables()
-
removeTable
public void removeTable(java.lang.Object key)
-
getFromSelect
public Select getFromSelect()
Description copied from interface:Select
Another select instance that creates a temporary table from which this select pulls data.- Specified by:
getFromSelect
in interfaceSelect
-
setFromSelect
public void setFromSelect(Select sel)
Description copied from interface:Select
Another select instance that creates a temporary table from which this select pulls data.- Specified by:
setFromSelect
in interfaceSelect
-
hasEagerJoin
public boolean hasEagerJoin(boolean toMany)
Description copied from interface:Select
Whether this select has an eager join of the specified type.- Specified by:
hasEagerJoin
in interfaceSelect
-
hasJoin
public boolean hasJoin(boolean toMany)
Description copied from interface:Select
Whether this select has a join of the specified type.
-
isSelected
public boolean isSelected(Table table)
Description copied from interface:Select
Return whether the given table is being used in this select.- Specified by:
isSelected
in interfaceSelect
-
getTableAliases
public java.util.Collection getTableAliases()
Description copied from interface:Select
Return the set of all used table aliases.- Specified by:
getTableAliases
in interfaceSelect
-
getSelects
public java.util.List getSelects()
Description copied from interface:Select
Return the actualVal
s andColumn
s that were selected, in the order that they were selected.- Specified by:
getSelects
in interfaceSelect
-
getSelectAliases
public java.util.List getSelectAliases()
Description copied from interface:Select
Return the aliases of all selected columns and all selected buffers, in the order they were selected. Each alias may be either a string or aSQLBuffer
.- Specified by:
getSelectAliases
in interfaceSelect
-
getIdentifierAliases
public java.util.List getIdentifierAliases()
Description copied from interface:Select
Get the aliases for identifier columns that can be used in COUNT selects to find the number of matches. Each alias will be a string. If no identifier columns have been nominated, then all column alises are returned.- Specified by:
getIdentifierAliases
in interfaceSelect
-
getOrdering
public SQLBuffer getOrdering()
Description copied from interface:Select
Return the ordering SQL for this select.- Specified by:
getOrdering
in interfaceSelect
-
getGrouping
public SQLBuffer getGrouping()
Description copied from interface:Select
Return the grouping SQL for this select.- Specified by:
getGrouping
in interfaceSelect
-
getWhere
public SQLBuffer getWhere()
Description copied from interface:Select
Return the WHERE clause, minus any necessary end joins.
-
getHaving
public SQLBuffer getHaving()
Description copied from interface:Select
Return the HAVING clause, or null if none.
-
addJoinClassConditions
public void addJoinClassConditions()
Description copied from interface:Select
Apply class conditions from relation joins. This may affect the return values ofSelect.getJoins()
,Select.getJoinIterator()
, andSelect.getWhere()
.- Specified by:
addJoinClassConditions
in interfaceSelect
-
getJoins
public Joins getJoins()
Description copied from interface:Select
Return the top-level joins for this select.
-
getJoinIterator
public java.util.Iterator getJoinIterator()
Description copied from interface:Select
Return the top-levelJoin
elements for this select.- Specified by:
getJoinIterator
in interfaceSelect
-
getStartIndex
public long getStartIndex()
Description copied from interface:Select
The result start index.- Specified by:
getStartIndex
in interfaceSelect
-
getEndIndex
public long getEndIndex()
Description copied from interface:Select
The result end index.- Specified by:
getEndIndex
in interfaceSelect
-
setRange
public void setRange(long start, long end)
Description copied from interface:Select
Set the result range for this select.
-
getColumnAlias
public java.lang.String getColumnAlias(Column col)
Description copied from interface:Select
Return the alias for the given column.- Specified by:
getColumnAlias
in interfaceSelect
-
getColumnAlias
public java.lang.String getColumnAlias(Column col, Joins joins)
Description copied from interface:Select
Return the alias for the given column.- Specified by:
getColumnAlias
in interfaceSelect
-
getColumnAlias
public java.lang.String getColumnAlias(java.lang.String col, Table table)
Description copied from interface:Select
Return the alias for the given column.- Specified by:
getColumnAlias
in interfaceSelect
-
getColumnAlias
public java.lang.String getColumnAlias(java.lang.String col, Table table, Joins joins)
Description copied from interface:Select
Return the alias for the given column.- Specified by:
getColumnAlias
in interfaceSelect
-
getColumnAlias
public java.lang.String getColumnAlias(Column col, java.lang.Object path)
Return the alias for the give column- Specified by:
getColumnAlias
in interfaceSelect
-
isAggregate
public boolean isAggregate()
Description copied from interface:Select
Return true if this is an aggregate select.- Specified by:
isAggregate
in interfaceSelect
-
setAggregate
public void setAggregate(boolean agg)
Description copied from interface:Select
Set to true for aggregate selects.- Specified by:
setAggregate
in interfaceSelect
-
isLob
public boolean isLob()
Description copied from interface:Select
Return true if this select includes a LOB.
-
setLob
public void setLob(boolean lob)
Description copied from interface:Select
Set to true for selects that include LOB columns.
-
clearSelects
public void clearSelects()
Description copied from interface:Select
Clear the existing column selects.- Specified by:
clearSelects
in interfaceSelect
-
select
public boolean select(SQLBuffer sql, java.lang.Object id)
Description copied from interface:Select
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.
-
select
public boolean select(SQLBuffer sql, java.lang.Object id, Joins joins)
Description copied from interface:Select
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.
-
select
public boolean select(java.lang.String sql, java.lang.Object id)
Description copied from interface:Select
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.
-
select
public boolean select(java.lang.String sql, java.lang.Object id, Joins joins)
Description copied from interface:Select
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from aResult
.
-
selectPlaceholder
public void selectPlaceholder(java.lang.String sql)
Description copied from interface:Select
Select the given SQL as a placeholder for a UNION element.- Specified by:
selectPlaceholder
in interfaceSelect
-
insertPlaceholder
public void insertPlaceholder(java.lang.String sql, int pos)
Insert a placeholder at the given index; use a negative index to count from the back of the select list.
-
clearPlaceholderSelects
public void clearPlaceholderSelects()
Clear selected placeholders, and return removed select indexes.
-
select
public boolean select(Column col)
Description copied from interface:Select
Select the given column.
-
select
public boolean select(Column col, Joins joins)
Description copied from interface:Select
Select the given column.
-
select
public int select(Column[] cols)
Description copied from interface:Select
Select the given columns.
-
select
public int select(Column[] cols, Joins joins)
Description copied from interface:Select
Select the given columns.
-
select
public void select(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager)
Description copied from interface:Select
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects.
-
select
public void select(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager, Joins joins)
Description copied from interface:Select
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects.
-
selectIdentifier
public boolean selectIdentifier(Column col)
Description copied from interface:Select
Select the given column as one that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting ofcount
.- Specified by:
selectIdentifier
in interfaceSelect
- Returns:
- true if selected
-
selectIdentifier
public boolean selectIdentifier(Column col, Joins joins)
Description copied from interface:Select
Select the given column as one that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting ofcount
.- Specified by:
selectIdentifier
in interfaceSelect
- Returns:
- true if selected
-
selectIdentifier
public int selectIdentifier(Column[] cols)
Description copied from interface:Select
Select the given columns as ones that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting ofcount
.- Specified by:
selectIdentifier
in interfaceSelect
- Returns:
- bit set of indexes of columns that were selected
-
selectIdentifier
public int selectIdentifier(Column[] cols, Joins joins)
Description copied from interface:Select
Select the given columns as ones that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting ofcount
.- Specified by:
selectIdentifier
in interfaceSelect
- Returns:
- bit set of indexes of columns that were selected
-
selectIdentifier
public void selectIdentifier(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager)
Description copied from interface:Select
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects. The primary key columns of the mapping can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting ofcount
.- Specified by:
selectIdentifier
in interfaceSelect
-
selectIdentifier
public void selectIdentifier(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager, Joins joins)
Description copied from interface:Select
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects. The primary key columns of the mapping can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting ofcount
.- Specified by:
selectIdentifier
in interfaceSelect
-
selectPrimaryKey
public int selectPrimaryKey(ClassMapping mapping)
Description copied from interface:Select
Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.- Specified by:
selectPrimaryKey
in interfaceSelect
- Returns:
- bit set of indexes of pk columns that were selected
-
selectPrimaryKey
public int selectPrimaryKey(ClassMapping mapping, Joins joins)
Description copied from interface:Select
Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.- Specified by:
selectPrimaryKey
in interfaceSelect
- Returns:
- bit set of indexes of pk columns that were selected
-
orderByPrimaryKey
public int orderByPrimaryKey(ClassMapping mapping, boolean asc, boolean sel)
Description copied from interface:Select
Order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id. Optionally selects ordering data if not already selected.- Specified by:
orderByPrimaryKey
in interfaceSelect
-
orderByPrimaryKey
public int orderByPrimaryKey(ClassMapping mapping, boolean asc, Joins joins, boolean sel)
Description copied from interface:Select
Select and order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id. Optionally selects ordering data if not already selected.- Specified by:
orderByPrimaryKey
in interfaceSelect
-
orderByPrimaryKey
public int orderByPrimaryKey(ClassMapping mapping, boolean asc, Joins joins, boolean sel, boolean aliasOrder)
Allow unions to set aliases on order columns.
-
orderBy
public boolean orderBy(Column col, boolean asc, boolean sel)
Description copied from interface:Select
Order by the given column. Optionally selects ordering data if not already selected.
-
orderBy
public boolean orderBy(Column col, boolean asc, Joins joins, boolean sel)
Description copied from interface:Select
Order by the given column. Optionally selects ordering data if not already selected.
-
orderBy
public int orderBy(Column[] cols, boolean asc, boolean sel)
Description copied from interface:Select
Order by the given columns. Optionally selects ordering data if not already selected.
-
orderBy
public int orderBy(Column[] cols, boolean asc, Joins joins, boolean sel)
Description copied from interface:Select
Order by the given columns. Optionally selects ordering data if not already selected.
-
orderBy
public boolean orderBy(SQLBuffer sql, boolean asc, boolean sel, Value selAs)
Description copied from interface:Select
Add an ORDER BY clause. Optionally selects ordering data if not already selected.
-
orderBy
public boolean orderBy(SQLBuffer sql, boolean asc, Joins joins, boolean sel, Value selAs)
Description copied from interface:Select
Add an ORDER BY clause. Optionally selects ordering data if not already selected.
-
orderBy
public boolean orderBy(java.lang.String sql, boolean asc, boolean sel)
Description copied from interface:Select
Add an ORDER BY clause. Optionally selects ordering data if not already selected.
-
orderBy
public boolean orderBy(java.lang.String sql, boolean asc, Joins joins, boolean sel)
Description copied from interface:Select
Add an ORDER BY clause. Optionally selects ordering data if not already selected.
-
clearOrdering
public void clearOrdering()
Description copied from interface:Select
Clear odering conditions.- Specified by:
clearOrdering
in interfaceSelect
-
wherePrimaryKey
public void wherePrimaryKey(java.lang.Object oid, ClassMapping mapping, JDBCStore store)
Description copied from interface:Select
Add where conditions setting the mapping's primary key to the given oid values. If the given mapping does not use oid values for its primary key, we will recursively join to its superclass until we find an ancestor that does.- Specified by:
wherePrimaryKey
in interfaceSelect
-
whereForeignKey
public void whereForeignKey(ForeignKey fk, java.lang.Object oid, ClassMapping mapping, JDBCStore store)
Description copied from interface:Select
Add where conditions setting the given foreign key to the given oid values.- Specified by:
whereForeignKey
in interfaceSelect
- See Also:
Select.wherePrimaryKey(java.lang.Object, org.apache.openjpa.jdbc.meta.ClassMapping, org.apache.openjpa.jdbc.kernel.JDBCStore)
-
where
public void where(Joins joins)
Description copied from interface:Select
Add the given where conditions.
-
where
public void where(SQLBuffer sql)
Description copied from interface:Select
Add the given where conditions.
-
where
public void where(SQLBuffer sql, Joins joins)
Description copied from interface:Select
Add the given where conditions.
-
where
public void where(java.lang.String sql)
Description copied from interface:Select
Add the given where conditions.
-
where
public void where(java.lang.String sql, Joins joins)
Description copied from interface:Select
Add the given where conditions.
-
having
public void having(SQLBuffer sql)
Description copied from interface:Select
Add the given having conditions.
-
having
public void having(SQLBuffer sql, Joins joins)
Description copied from interface:Select
Add the given having conditions.
-
having
public void having(java.lang.String sql)
Description copied from interface:Select
Add the given having conditions.
-
having
public void having(java.lang.String sql, Joins joins)
Description copied from interface:Select
Add the given having conditions.
-
groupBy
public void groupBy(SQLBuffer sql)
Description copied from interface:Select
Add a GROUP BY clause.
-
groupBy
public void groupBy(SQLBuffer sql, Joins joins)
Description copied from interface:Select
Add a GROUP BY clause.
-
groupBy
public void groupBy(java.lang.String sql)
Description copied from interface:Select
Add a GROUP BY clause.
-
groupBy
public void groupBy(java.lang.String sql, Joins joins)
Description copied from interface:Select
Add a GROUP BY clause.
-
groupBy
public void groupBy(Column col)
Description copied from interface:Select
Group by the given column.
-
groupBy
public void groupBy(Column col, Joins joins)
Description copied from interface:Select
Group by the given column.
-
groupBy
public void groupBy(Column[] cols)
Description copied from interface:Select
Group by the given columns.
-
groupBy
public void groupBy(Column[] cols, Joins joins)
Description copied from interface:Select
Group by the given columns.
-
groupBy
public void groupBy(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch)
Description copied from interface:Select
Group by the columns of the given mapping, possibly including subclasses. Assumes EAGER_NONE.
-
groupBy
public void groupBy(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, Joins joins)
Description copied from interface:Select
Group by the columns of the given mapping, possibly including subclasses. Assumes EAGER_NONE.
-
whereClone
public SelectExecutor whereClone(int sels)
Description copied from interface:Select
Return a SELECT with the same joins and where conditions as this one.- Specified by:
whereClone
in interfaceSelect
- Parameters:
sels
- number of selects to UNION together; ignored if <= 1
-
fullClone
public SelectExecutor fullClone(int sels)
Description copied from interface:Select
Return a SELECT that is a complete clone of this one.
-
eagerClone
public SelectExecutor eagerClone(FieldMapping key, int eagerType, boolean toMany, int sels)
Description copied from interface:Select
Return a select that will be eagerly executed with this one, or null if the select cannot be created for the given key and join type. If the join type is inner or outer, then this select instance will be returned. Otherwise, the returned select will have a clone of this select's where conditions and joins but will be independent.- Specified by:
eagerClone
in interfaceSelect
- Parameters:
key
- the key for the eager selecteagerType
- one of the EAGER_* constantstoMany
- whether the eager join is to-manysels
- number of selects to UNION together; ignored if <= 1
-
getEagerMap
public java.util.Map getEagerMap()
Return view of eager selects. May be null.
-
logEagerRelations
public void logEagerRelations()
Description copied from interface:Select
Extended trace that logs eager relations- Specified by:
logEagerRelations
in interfaceSelect
-
getEager
public SelectExecutor getEager(FieldMapping key)
Description copied from interface:Select
Return the eager select for the given key.
-
newJoins
public Joins newJoins()
Description copied from interface:Select
Return a new instance to use for joining.
-
newOuterJoins
public Joins newOuterJoins()
Description copied from interface:Select
Return a new instance to use for outer joining.- Specified by:
newOuterJoins
in interfaceSelect
-
append
public void append(SQLBuffer buf, Joins joins)
Description copied from interface:Select
Append the given joins to the given buffer.
-
and
public Joins and(Joins joins1, Joins joins2)
Description copied from interface:Select
AND the given joins together. The given joins will be hollowed in the process.
-
getSelect
public Select getSelect()
-
or
public Joins or(Joins joins1, Joins joins2)
Description copied from interface:Select
OR the given joins together. The common joins will be removed in the process.
-
outer
public Joins outer(Joins joins)
Description copied from interface:Select
Return a join set making the given joins outer joins.
-
toString
public java.lang.String toString()
Description copied from interface:Select
Implement toString to generate SQL string for profiling/debuggging.
-
isOuter
public boolean isOuter()
Description copied from interface:Joins
Whether this joins path results in outer joins.
-
setOuter
public org.apache.openjpa.jdbc.sql.PathJoins setOuter(boolean outer)
-
isDirty
public boolean isDirty()
-
path
public java.lang.StringBuilder path()
-
getPathStr
public java.lang.String getPathStr()
-
joins
public org.apache.openjpa.jdbc.sql.JoinSet joins()
-
joinCount
public int joinCount()
-
nullJoins
public void nullJoins()
-
isEmpty
public boolean isEmpty()
Description copied from interface:Joins
Whether we have any joins.
-
crossJoin
public Joins crossJoin(Table localTable, Table foreignTable)
Description copied from interface:Joins
Perform a cross join on the given tables.
-
join
public Joins join(ForeignKey fk, boolean inverse, boolean toMany)
Description copied from interface:Joins
Join the columns of the given foreign key.
-
outerJoin
public Joins outerJoin(ForeignKey fk, boolean inverse, boolean toMany)
Description copied from interface:Joins
Join the columns of the given foreign key.
-
joinRelation
public Joins joinRelation(java.lang.String name, ForeignKey fk, ClassMapping target, int subs, boolean inverse, boolean toMany)
Description copied from interface:Joins
Join the columns of the given foreign key, which represents a relation via the given field name.- Specified by:
joinRelation
in interfaceJoins
-
outerJoinRelation
public Joins outerJoinRelation(java.lang.String name, ForeignKey fk, ClassMapping target, int subs, boolean inverse, boolean toMany)
Description copied from interface:Joins
Join the columns of the given foreign key, which represents a relation via the given field name.- Specified by:
outerJoinRelation
in interfaceJoins
-
setVariable
public Joins setVariable(java.lang.String var)
Description copied from interface:Joins
Set the variable name being traversed into with the next join.- Specified by:
setVariable
in interfaceJoins
-
setSubselect
public Joins setSubselect(java.lang.String alias)
Description copied from interface:Joins
Set the subquery alias.- Specified by:
setSubselect
in interfaceJoins
-
clone
public SelectImpl clone(Context ctx)
-
newSelects
protected SelectImpl.Selects newSelects()
-
getDictionary
public DBDictionary getDictionary()
- Specified by:
getDictionary
in interfaceSelect
-
setCorrelatedVariable
public Joins setCorrelatedVariable(java.lang.String var)
Description copied from interface:Joins
Set the correlated variable name being traversed into with the next join.- Specified by:
setCorrelatedVariable
in interfaceJoins
-
setJoinContext
public Joins setJoinContext(Context ctx)
Description copied from interface:Joins
Set subquery context when traversing into the next join is in transition from parent context to subquery.- Specified by:
setJoinContext
in interfaceJoins
-
getCorrelatedVariable
public java.lang.String getCorrelatedVariable()
Description copied from interface:Joins
Return correlated variable name- Specified by:
getCorrelatedVariable
in interfaceJoins
-
moveJoinsToParent
public void moveJoinsToParent()
Description copied from interface:Joins
Move joins that belong to subquery's parent- Specified by:
moveJoinsToParent
in interfaceJoins
-
-