|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.arsdigita.persistence.DataQueryImpl
com.arsdigita.persistence.GenericDataQuery
GenericDataQuery
Field Summary | |
static String |
versionId
|
Constructor Summary | |
GenericDataQuery(Session s,
String sql,
String[] columns)
|
Method Summary | |
Filter |
addEqualsFilter(String attribute,
Object value)
This creates the appropriate SQL for the given attribute and passed in value. |
Filter |
addFilter(Filter filter)
This adds the passed in filter to this query and ANDs it with an existing filters. |
Filter |
addFilter(String conditions)
Adds the conditions to the filter that will be used on this query. |
Filter |
addInSubqueryFilter(String propertyName,
String subqueryName)
Add an 'in' subquery to a query. |
Filter |
addInSubqueryFilter(String propertyName,
String subQueryProperty,
String queryName)
Highly experimental; use with caution.. |
Filter |
addNotEqualsFilter(String attribute,
Object value)
This creates the appropriate SQL for the given attribute and passed in value. |
Filter |
addNotInSubqueryFilter(String propertyName,
String subqueryName)
|
void |
addOrder(String order)
Set the order in which the result of this query will be returned. |
void |
addOrderWithNull(String orderOne,
Object orderTwo,
boolean isAscending)
This adds order on the first value if it is not null or the second value if the first value is null. |
void |
addPath(String path)
Adds to the set of paths fetched by this DataQuery. |
void |
alias(String fromPrefix,
String toPrefix)
Alias a compound property name to a different value. |
void |
clearFilter()
Clears the current filter for the data query. |
void |
clearOrder()
Clears the current order clause for the data query. |
void |
close()
Explicitly closes this DataQuery. |
protected Cursor |
execute(Signature sig,
Expression expr)
|
boolean |
first()
Moves the cursor to the first row in the query. |
Object |
get(String propertyName)
Returns the value of the propertyName property associated with the current position in the sequence. |
FilterFactory |
getFilterFactory()
This retrieves the factory that is used to create the filters for this DataQuery |
Object |
getParameter(String parameterName)
Allows a caller to get a parameter value for a parameter that has already been set |
int |
getPosition()
Returns the current position within the sequence. |
Map |
getPropertyValues()
This method returns a map of all property/value pairs. |
CompoundType |
getType()
Returns the type of this data query. |
boolean |
hasProperty(String propertyName)
Returns true if this query fetches the given property. |
boolean |
isAfterLast()
Indicates whether the cursor is after the last row of the query. |
boolean |
isBeforeFirst()
Indicates whether the cursor is before the first row of the query. |
boolean |
isEmpty()
Returns true if the query has no rows. |
boolean |
isFirst()
Indicates whether the cursor is on the first row of the query. |
boolean |
isLast()
Indicates whether the cursor is on the last row of the query. |
boolean |
last()
Moves the cursor to the last row in the query. |
boolean |
next()
Moves the cursor to the next row in the sequence. |
boolean |
previous()
Moves to the previous row in the query. |
boolean |
removeFilter(Filter filter)
Removes the passed in filter from this query if it was directly added to the query. |
void |
reset()
Returns the data query to its initial state by rewinding it and clearing any filters or ordering. |
protected Path |
resolvePath(Path path)
|
void |
rewind()
Rewinds the row sequence to the beginning. |
Filter |
setFilter(String conditions)
Sets a filter for this query. |
void |
setOrder(String order)
Set the order in which the result of this query will be returned. |
void |
setParameter(String parameterName,
Object value)
Allows a user to bind a parameter within a named query. |
void |
setRange(Integer beginIndex)
This method allows the developer to set the range of rows desired. |
void |
setRange(Integer beginIndex,
Integer endIndex)
This method allows the developer to set the range of rows desired. |
void |
setReturnsLowerBound(int lowerBound)
This sets the lower bound on the number of rows that can be returned by this query |
void |
setReturnsUpperBound(int upperBound)
This sets the upper bound on the number of rows that can be returned by this query |
long |
size()
Returns the size of this query. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final String versionId
Constructor Detail |
public GenericDataQuery(Session s, String sql, String[] columns)
Method Detail |
public CompoundType getType()
DataQuery
getType
in interface DataQuery
public boolean hasProperty(String propertyName)
DataQuery
hasProperty
in interface DataQuery
propertyName
- A property name.
public void reset()
DataQuery
reset
in interface DataQuery
public boolean first()
DataQuery
first
in interface DataQuery
public boolean isEmpty()
DataQuery
isEmpty
in interface DataQuery
public boolean isBeforeFirst()
DataQuery
isBeforeFirst
in interface DataQuery
public boolean isFirst()
DataQuery
isFirst
in interface DataQuery
public boolean isLast()
DataQuery
If the query has not yet been executed, it executes the query.
Not implemented yet.
isLast
in interface DataQuery
public boolean isAfterLast()
DataQuery
isAfterLast
in interface DataQuery
public boolean last()
DataQuery
Not implemented yet.
last
in interface DataQuery
public boolean previous()
DataQuery
previous
in interface DataQuery
public void addPath(String path)
DataQuery
DataQuery query = ssn.retrieve("exampleQuery"); query.addPath("foo.bar.name"); query.addPath("foo.bar.desc"); while (query.next()) { BigInteger id = query.get("foo.bar.id"); String name = query.get("foo.bar.name"); String desc = query.get("foo.bar.desc"); }
addPath
in interface DataQuery
path
- the additional path to fetchprotected Path resolvePath(Path path)
public Filter setFilter(String conditions)
DataQuery
Filter f = query.setFilter("id < :maxId and id > :minId"); f.set("maxId", 10); f.set("minId", 1);
setFilter
in interface DataQuery
conditions
- the conditions for the filter
public Filter addFilter(String conditions)
DataQuery
select * from (<data query here>) results
where <conditions here>
When adding filters, the user should not use the same parameter name in multiple filters. That is, the following will not work
Filter filter = query.addFilter("priority > :bound");
filter.set("bound", new Integer(3));
filter = query.addFilter("priority < :bound");
filter.set("bound", new Integer(8));
The above actually evaluates to
"priority < 8 and priority > 8"
which is clearly not what the developer wants.
The following will work.
Filter filter = query.addFilter("priority > :lowerBound");
filter.set("lowerBound", new Integer(3));
filter = query.addFilter("priority < :upperBound");
filter.set("upperBound", new Integer(8));
It is actually the same as
Filter filter = query.addFilter("priority > :lowerBound
and priority < :uperBound");
filter.set("upperBound", new Integer(8));
filter.set("lowerBound", new Integer(3));
addFilter
in interface DataQuery
conditions
- The conditions for the filter. This is a string
that should be used to filter the DataQuery. Specifically,
if this is the first filter added, it appends the information
on to a view-on-the-fly. e.g.
select * from (<data query here>) results
where <conditions here>
unless the WRAP_QUERIES option for the DataQuery is set to "false".
If this is the case, the Filter is simply appended to the end of
the query as follows:
<data query here>)
[where | or] <conditions here>
It should normally take the form of
<attribute_name> <condition> <attribute bind variable>
where the "condition" is something like "=", "<", ">", or
"!=". The "bind variable" should be a colon followed by
some attribute name that will later be set with a call to
Filter.set(java.lang.String,
java.lang.Object)
It is possible to set multiple conditions with a single addFilter statement by combining the conditions with an "and" or an "or". Conditions may be grouped by using parentheses. Consecutive calls to addFilter append the filters using "and".
If there is already a filter that exists for this query
then the passed in conditions are added to the current
conditions with an AND like (<current conditions>)
and (< passed in conditions>)
public Filter addFilter(Filter filter)
DataQuery
addFilter
in interface DataQuery
public boolean removeFilter(Filter filter)
DataQuery
removeFilter
in interface DataQuery
public Filter addInSubqueryFilter(String propertyName, String subqueryName)
DataQuery
addInSubqueryFilter
in interface DataQuery
propertyName
- The column to be filtered on.subqueryName
- The full name of a query defined in a PDL file.public Filter addInSubqueryFilter(String propertyName, String subQueryProperty, String queryName)
DataQuery
subQueryProperty
is the column pulled out of the
subquery.
addInSubqueryFilter
in interface DataQuery
propertyName
- The column to be filtered on.subQueryProperty
- The column in the subquery to be used.queryName
- The full name of a query defined in a PDL file.
public Filter addNotInSubqueryFilter(String propertyName, String subqueryName)
addNotInSubqueryFilter
in interface DataQuery
public Filter addEqualsFilter(String attribute, Object value)
DataQuery
attribute
= 'value.toString()'
" unless the value is an integer
(in which case it creates "attribute =
value.toString()") or the developer is using oracle and
the value is null. In this case, it would create
"attribute is null
".
This is simply a convenience method for
addFilter(getFilterFactory().equals(attribute, value));
addEqualsFilter
in interface DataQuery
attribute
- The name of the attribute to bind with the valuevalue
- The value for the specified attributepublic Filter addNotEqualsFilter(String attribute, Object value)
DataQuery
attribute
= 'value.toString()'
" unless the value is an integer
(in which case it creates "attribute !=
value.toString()") or the developer is using oracle and
the value is null. In this case, it would create
"attribute is not null
".
This is simply a convenience method for
addFilter(getFilterFactory().notEquals(attribute, value));
addNotEqualsFilter
in interface DataQuery
attribute
- The name of the attribute to bind with the valuevalue
- The value for the specified attributepublic void clearFilter()
DataQuery
clearFilter
in interface DataQuery
public FilterFactory getFilterFactory()
DataQuery
getFilterFactory
in interface DataQuery
public void setOrder(String order)
DataQuery
query.setOrder("creationDate desc, id");
setOrder
in interface DataQuery
public void addOrder(String order)
DataQuery
query.addOrder("creationDate desc, id");
addOrder
in interface DataQuery
order
- This String parameter specifies the ordering of the
output. This should be a comma seperated list
of Attribute names (not the database column names)
in the order of precedence.
Separating attributes by commas is the same as
calling addOrder multiple times, each with the
next attribute. For instance, this
addOrder("creationDate");
addOrder("creationUser");
is the same as
addOrder("creationDate, creationUser");
If the items should be ordered in ascending order, the attribute name should be followed by the word "asc" If the items should be ordered in descending order, the attribute should be followed by the word "desc" For instance, or order by ascending date and descending user (for users created with the same date), you would use the following:
addOrder("creationDate asc, creationUser desc");
public void addOrderWithNull(String orderOne, Object orderTwo, boolean isAscending)
DataQuery
addOrderWithNull
in interface DataQuery
orderOne
- This is typically the column that will
be used for the ordering. If this column
is null then the value of orderTwo is used for
the orderingorderTwo
- This is typically an actual value (such as -1)
but can also be a column name the value used
for the orderingisAscending
- If this is true then the items are ordered
in ascending order. Otherwise, they are
ordering in descending orderpublic void clearOrder()
DataQuery
clearOrder
in interface DataQuery
public void setParameter(String parameterName, Object value)
DataQuery
setParameter
in interface DataQuery
parameterName
- The name of the parameter to bindvalue
- The value to assign to the parameterpublic Object getParameter(String parameterName)
DataQuery
getParameter
in interface DataQuery
parameterName
- The name of the parameter to retrieve
public void setRange(Integer beginIndex)
DataQuery
setRange
in interface DataQuery
beginIndex
- This is the number of the first row that
should be returned by this query. Setting
beginIndex to 1 returns all rows. This is
inclusive.public void setRange(Integer beginIndex, Integer endIndex)
DataQuery
setRange
in interface DataQuery
beginIndex
- This is the number of the first row that
should be returned by this query. Setting
beginIndex to 1 returns the rows from the
beginning. This is inclusive.endIndex
- This is the number of the row after the last
row that should be returned. That is, this
is exclusive (specifying beginIndex = 1 and
endIndex = 10 returns 9 rows);public Map getPropertyValues()
DataQuery
getPropertyValues
in interface DataQuery
public void setReturnsUpperBound(int upperBound)
DataQuery
setReturnsUpperBound
in interface DataQuery
public void setReturnsLowerBound(int lowerBound)
DataQuery
setReturnsLowerBound
in interface DataQuery
public void alias(String fromPrefix, String toPrefix)
DataQuery
alias
in interface DataQuery
fromPrefix
- the prefix that you're mapping from i.e.,
the prefix in the PDL file.toPrefix
- the prefix that you're mapping to i.e.,
the prefix that the programmer is going to use.public void close()
DataQuery
close
in interface DataQuery
public void rewind()
DataQuery
rewind
in interface DataQuery
public Object get(String propertyName)
DataQuery
get
in interface DataQuery
propertyName
- the name of the property
public int getPosition()
DataQuery
getPosition
in interface DataQuery
protected Cursor execute(Signature sig, Expression expr)
public boolean next()
DataQuery
next
in interface DataQuery
public long size()
DataQuery
size
in interface DataQuery
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |