001: /*
002: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: [See end of file]
004: $Id: DBQuery.java,v 1.11 2008/01/02 12:08:24 andy_seaborne Exp $
005: */
006:
007: package com.hp.hpl.jena.db.impl;
008:
009: import java.util.ArrayList;
010: import java.util.List;
011:
012: /**
013: @author hedgehog
014: */
015:
016: public class DBQuery {
017: int argCnt; // number of arguments to query
018: String argType; // list of argument types
019: List argIndex; // index of argument in input
020: int varCnt; // number of variables in query
021: int aliasCnt; // number of tables aliases (scans) in from clause
022: String stmt; // query string
023: VarDesc[] vars; // list of VarIndex, variables referenced in this query
024: int[] resList; // indexes of result columns in mapping
025: int graphId; // id of graph to query
026: String table; // name of table to query
027: IPSet pset; // pset to be queried
028: IRDBDriver driver; // driver for store
029: boolean qryOnlyStmt; // if true, ignore reified statements
030: boolean qryOnlyReif; // if true, ignore asserted statements
031: boolean qryFullReif; // if true, ignore partially reified statements
032: DriverRDB.GenSQLAnd sqlAnd;
033:
034: boolean isMultiModel; // true if graph is multi-model
035: boolean isSingleValued; // true if property table is single-valued
036: boolean isCacheable; // true if it is safe to cache compiled query
037: boolean isReifier; // true if query is over a reifier specialized graph
038: boolean isEmpty; // true if compiler determines query has no results
039:
040: public DBQuery(SpecializedGraph sg, List varList,
041: boolean queryOnlyStmt, boolean queryOnlyReif,
042: boolean queryFullReif) {
043:
044: argCnt = 0;
045: argType = "";
046: argIndex = new ArrayList();
047: aliasCnt = 0;
048: stmt = "";
049: isMultiModel = true; // for now
050: isSingleValued = false; // for now
051: isCacheable = true;
052: if (sg != null) {
053: pset = sg.getPSet();
054: isReifier = sg instanceof SpecializedGraphReifier;
055: isEmpty = false;
056: graphId = sg.getGraphId();
057: table = pset.getTblName();
058: driver = pset.driver();
059: } else {
060: pset = null;
061: isReifier = false;
062: isEmpty = true;
063: driver = null;
064: }
065: sqlAnd = new IRDBDriver.GenSQLAnd();
066: qryOnlyStmt = queryOnlyStmt;
067: qryOnlyReif = queryOnlyReif;
068: qryFullReif = queryFullReif;
069: // array of variable bound by query
070: vars = new VarDesc[varList.size()];
071: for (varCnt = 0; varCnt < varList.size(); varCnt++) {
072: vars[varCnt] = (VarDesc) varList.get(varCnt);
073: }
074:
075: }
076:
077: public VarDesc getBinding(int i) {
078: return vars[i];
079: }
080:
081: public VarDesc findBinding(String v) {
082: int i;
083: for (i = 0; i < vars.length; i++) {
084: if (vars[i].var.getName().equals(v))
085: return vars[i];
086: }
087: return null;
088: }
089:
090: public void newAlias() {
091: aliasCnt++;
092: }
093:
094: }
095:
096: /*
097: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
098: All rights reserved.
099:
100: Redistribution and use in source and binary forms, with or without
101: modification, are permitted provided that the following conditions
102: are met:
103:
104: 1. Redistributions of source code must retain the above copyright
105: notice, this list of conditions and the following disclaimer.
106:
107: 2. Redistributions in binary form must reproduce the above copyright
108: notice, this list of conditions and the following disclaimer in the
109: documentation and/or other materials provided with the distribution.
110:
111: 3. The name of the author may not be used to endorse or promote products
112: derived from this software without specific prior written permission.
113:
114: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
115: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
116: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
117: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
118: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
119: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
120: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
121: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
122: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
123: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
124: */
|