001: /**********************************************************************
002: Copyright (c) 2005 Andy Jefferson and others. All rights reserved.
003: Licensed under the Apache License, Version 2.0 (the "License");
004: you may not use this file except in compliance with the License.
005: You may obtain a copy of the License at
006:
007: http://www.apache.org/licenses/LICENSE-2.0
008:
009: Unless required by applicable law or agreed to in writing, software
010: distributed under the License is distributed on an "AS IS" BASIS,
011: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: See the License for the specific language governing permissions and
013: limitations under the License.
014:
015:
016: Contributors:
017: ...
018: **********************************************************************/package org.jpox.store.scostore;
019:
020: import java.util.Iterator;
021: import java.util.List;
022:
023: import org.jpox.StateManager;
024: import org.jpox.store.DatastoreIdentifier;
025: import org.jpox.store.expression.LogicSetExpression;
026: import org.jpox.store.expression.QueryExpression;
027: import org.jpox.store.expression.ScalarExpression;
028: import org.jpox.store.mapping.JavaTypeMapping;
029:
030: /**
031: * Interface representation of the backing store for an array.
032: *
033: * @version $Revision: 1.4 $
034: **/
035: public interface ArrayStore extends Store {
036: /**
037: * Accessor for the element type in the collection.
038: * @return The element type.
039: **/
040: String getElementType();
041:
042: /**
043: * Accessor for an iterator for the array.
044: * @param sm State Manager for the array.
045: * @return Iterator for the array.
046: **/
047: Iterator iterator(StateManager sm);
048:
049: /**
050: * Method to retrieve the elements of the array.
051: * @param ownerSM State Manager of the owner
052: * @return The List of elements in the array (in the same order)
053: */
054: List getArray(StateManager ownerSM);
055:
056: /**
057: * Accessor for the size of the array.
058: * @param sm State Manager for the owner.
059: * @return The size of the array.
060: */
061: int size(StateManager sm);
062:
063: /**
064: * Method to clear the array.
065: * @param ownerSM State Manager for the owner.
066: */
067: void clear(StateManager ownerSM);
068:
069: /**
070: * Method to set the elements in the array.
071: * @param ownerSM State Manager for the owner.
072: * @param array The array
073: * @return Whether the elements were added ok
074: */
075: boolean set(StateManager ownerSM, Object array);
076:
077: /**
078: * Create a subquery for the given query that joins a SetStore
079: * element table to the owner table. This subquery can subsequently be used
080: * in an EXISTS expression to determine whether a Collection is empty.
081: * @param stmt The Query Statement.
082: * @param ownerMapping the mapping for the owner.
083: * @param ownerTe Table Expression for the owner
084: * @param collRangeVar The range variable for the "Collection" table.
085: * @return A subquery for the given query that joins a SetStore
086: * element table to the owner table.
087: */
088: QueryExpression getExistsSubquery(QueryExpression stmt,
089: JavaTypeMapping ownerMapping, LogicSetExpression ownerTe,
090: DatastoreIdentifier collRangeVar);
091:
092: /**
093: * Create a subquery for the size of the collection.
094: * @param stmt The Query Statement
095: * @param ownerMapping Mapping for the owner
096: * @param ownerTe Table Expression for the owner
097: * @param collRangeVar Range variable for the owner
098: * @return The subquery
099: */
100: QueryExpression getSizeSubquery(QueryExpression stmt,
101: JavaTypeMapping ownerMapping, LogicSetExpression ownerTe,
102: DatastoreIdentifier collRangeVar);
103:
104: /**
105: * Method used in queries when contains() has been invoked.
106: * @param stmt The Query Statement
107: * @param parentStmt the parent Query Statement. If there is no parent, <code>parentStmt</code> must be equals to <code>stmt</code>
108: * @param ownerMapping the mapping for the owner.
109: * @param ownerTe Table Expression for the owner
110: * @param collRangeVar The range variable for the "Collection" table.
111: * @param filteredElementType The Class Type for the filtered element
112: * @param elmExpr The Expression for the element
113: * @param elementRangeVar The SQL alias, or "range variable", to assign to the
114: * expression or to the element table.
115: * @return expression to the join
116: **/
117: ScalarExpression joinElementsTo(QueryExpression stmt,
118: QueryExpression parentStmt, JavaTypeMapping ownerMapping,
119: LogicSetExpression ownerTe,
120: DatastoreIdentifier collRangeVar,
121: Class filteredElementType, ScalarExpression elmExpr,
122: DatastoreIdentifier elementRangeVar);
123: }
|