Revision 178
Added by Matt Jones almost 24 years ago
QuerySpecification.java | ||
---|---|---|
157 | 157 |
elementStack.push(currentNode); |
158 | 158 |
if (currentNode.getTagName().equals("querygroup")) { |
159 | 159 |
QueryGroup currentGroup = new QueryGroup( |
160 |
currentNode.getAttribute("booleantype"));
|
|
160 |
currentNode.getAttribute("operator"));
|
|
161 | 161 |
if (query == null) { |
162 | 162 |
query = currentGroup; |
163 | 163 |
} else { |
... | ... | |
229 | 229 |
// This determines the returned results |
230 | 230 |
self.append("SELECT docid,docname,doctype,doctitle "); |
231 | 231 |
self.append("FROM xml_documents WHERE docid IN ("); |
232 |
self.append("SELECT DISTINCT docid FROM xml_nodes WHERE \n"); |
|
233 | 232 |
|
234 |
// This determines the WHERE conditions
|
|
233 |
// This determines the documents that meet the query conditions
|
|
235 | 234 |
self.append(query.printSQL()); |
236 | 235 |
|
237 | 236 |
self.append(") "); |
... | ... | |
267 | 266 |
|
268 | 267 |
/** a utility class that represents a group of terms in a query */ |
269 | 268 |
private class QueryGroup { |
270 |
private String booleantype = null; // indicates how query terms are combined
|
|
271 |
private Vector children = null; // the list of query terms and groups
|
|
269 |
private String operator = null; // indicates how query terms are combined
|
|
270 |
private Vector children = null; // the list of query terms and groups |
|
272 | 271 |
|
273 | 272 |
/** |
274 | 273 |
* construct a new QueryGroup |
275 | 274 |
* |
276 |
* @param booleantype the boolean conector used to connect query terms
|
|
275 |
* @param operator the boolean conector used to connect query terms
|
|
277 | 276 |
* in this query group |
278 | 277 |
*/ |
279 |
public QueryGroup(String booleantype) {
|
|
280 |
this.booleantype = booleantype;
|
|
278 |
public QueryGroup(String operator) {
|
|
279 |
this.operator = operator;
|
|
281 | 280 |
children = new Vector(); |
282 | 281 |
} |
283 | 282 |
|
... | ... | |
321 | 320 |
if (first) { |
322 | 321 |
first = false; |
323 | 322 |
} else { |
324 |
self.append(" " + booleantype + " ");
|
|
323 |
self.append(" " + operator + " ");
|
|
325 | 324 |
} |
326 | 325 |
if (qobject instanceof QueryGroup) { |
327 | 326 |
QueryGroup qg = (QueryGroup)qobject; |
... | ... | |
344 | 343 |
public String toString() { |
345 | 344 |
StringBuffer self = new StringBuffer(); |
346 | 345 |
|
347 |
self.append(" (Query group booleantype=" + booleantype + "\n");
|
|
346 |
self.append(" (Query group operator=" + operator + "\n");
|
|
348 | 347 |
Enumeration en= getChildren(); |
349 | 348 |
while (en.hasMoreElements()) { |
350 | 349 |
Object qobject = en.nextElement(); |
... | ... | |
444 | 443 |
searchvalue = casevalue; |
445 | 444 |
} |
446 | 445 |
|
447 |
self.append("(");
|
|
446 |
self.append("SELECT DISTINCT docid FROM xml_nodes WHERE \n");
|
|
448 | 447 |
|
449 | 448 |
if (pathexpr != null) { |
450 | 449 |
self.append(nodedataterm + " LIKE " + "'" + searchvalue + "' "); |
... | ... | |
455 | 454 |
self.append(nodedataterm + " LIKE " + "'" + searchvalue + "' "); |
456 | 455 |
} |
457 | 456 |
|
458 |
self.append(") \n"); |
|
459 |
|
|
460 | 457 |
return self.toString(); |
461 | 458 |
} |
462 | 459 |
|
Also available in: Unified diff
fixed QuerySpecification to produce SQL that does UNION or INTERSECT set operations for query group combinations