001: /*
002: * Copyright (c) 1998 - 2005 Versant Corporation
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * Versant Corporation - initial API and implementation
010: */
011: package com.versant.core.jdo.query.mem;
012:
013: import com.versant.core.jdo.QueryDetails;
014: import com.versant.core.metadata.ClassMetaData;
015: import com.versant.core.metadata.ModelMetaData;
016: import com.versant.core.jdo.query.*;
017: import com.versant.core.server.CompiledQuery;
018:
019: import com.versant.core.common.BindingSupportImpl;
020:
021: /**
022: * Holds query information after parsing filters, params, variables and orders.
023: */
024: public class CompiledMemQuery implements CompiledQuery {
025:
026: private int id;
027: public ParamNode[] params = null;
028: public VarNode[] vars = null;
029: public Node filter = null;
030: public QueryDetails queryParams = null;
031: public OrderNode[] orders = null;
032: private QueryParser qParser;
033: private ModelMetaData jmd;
034:
035: public CompiledMemQuery(ModelMetaData jmd) {
036: this .jmd = jmd;
037: }
038:
039: public int[] getClassIndexes() {
040: return new int[0];
041: }
042:
043: /**
044: * The typeCode of each column.
045: *
046: * @see com.versant.core.metadata.MDStatics
047: */
048: public int[] getResultTypeCodes() {
049: return new int[0]; //To change body of implemented methods use File | Settings | File Templates.
050: }
051:
052: /**
053: * If this is a query with a single/unique result.
054: */
055: public boolean isUnique() {
056: if (true)
057: throw BindingSupportImpl.getInstance().notImplemented("");
058: return false; //To change body of implemented methods use File | Settings | File Templates.
059: }
060:
061: public boolean isRandomAccess() {
062: return false; //To change body of implemented methods use File | Settings | File Templates.
063: }
064:
065: public int getQueryResultBatchSize() {
066: return 0;
067: }
068:
069: public int getFetchGroupIndex() {
070: return 0;
071: }
072:
073: public QueryDetails getQueryDetails() {
074: return queryParams;
075: }
076:
077: /**
078: * Is this a non default projection query.
079: * This will return false for the default projection.
080: */
081: public boolean isProjectionQuery() {
082: return false; //To change body of implemented methods use File | Settings | File Templates.
083: }
084:
085: /**
086: * If this query returns default results.
087: */
088: public boolean isDefaultResult() {
089: return false; //To change body of implemented methods use File | Settings | File Templates.
090: }
091:
092: /**
093: * The index of the first occurance of 'this' in the projection.
094: */
095: public int getFirstThisIndex() {
096: return 0; //To change body of implemented methods use File | Settings | File Templates.
097: }
098:
099: /**
100: * If this is a result/projection that only contains 'this' and no other
101: * fields in the projection or if no projection was specified.
102: */
103: public boolean isContainsThisOnly() {
104: return false; //To change body of implemented methods use File | Settings | File Templates.
105: }
106:
107: /**
108: * If the results of the query should be copied for caching.
109: * This should only happen for non-default type projection queries that
110: * contains references.
111: * If this is a projection that only specifies 'this' then this should
112: * also return false.
113: */
114: public boolean isCopyResultsForCache() {
115: return false; //To change body of implemented methods use File | Settings | File Templates.
116: }
117:
118: /**
119: * Array containing the index pos of ref fields of the projection.
120: */
121: public int[] getRefIndexArray() {
122: return new int[] {}; //To change body of implemented methods use File | Settings | File Templates.
123: }
124:
125: public void compile(QueryDetails qParams) throws ParseException {
126: qParser = new QueryParser(jmd);
127:
128: try {
129: qParser.parse(qParams);
130: params = qParser.getParams();
131: filter = qParser.getFilter();
132: orders = qParser.getOrders();
133: vars = qParser.getVars();
134: } catch (Exception e) {
135: throw BindingSupportImpl.getInstance().invalidOperation(
136: e.getMessage(), e);
137: } catch (TokenMgrError e) {
138: throw BindingSupportImpl.getInstance().invalidOperation(
139: e.getMessage(), e);
140: }
141: }
142:
143: public ClassMetaData[] getQueryClasses() {
144: return null;
145: }
146:
147: public boolean isCacheble() {
148: return false;
149: }
150:
151: public void setCacheable(boolean on) {
152: // ignore
153: }
154:
155: public int getMaxRows() {
156: return 0;
157: }
158:
159: public int[] getEvictionClassBits() {
160: return new int[0];
161: }
162:
163: public int getId() {
164: return id;
165: }
166:
167: public void setId(int id) {
168: this.id = id;
169: }
170:
171: }
|