Revision 6035
Added by ben leinfelder about 13 years ago
DBQuery.java | ||
---|---|---|
86 | 86 |
static final int READ = 4; |
87 | 87 |
|
88 | 88 |
private String qformat = "xml"; |
89 |
|
|
90 |
// are we combining the query with docid list and, if so, using INTERSECT or UNION? |
|
91 |
private String operator = null; |
|
89 | 92 |
|
90 | 93 |
//private Connection conn = null; |
91 | 94 |
private String parserName = null; |
... | ... | |
623 | 626 |
if ( givenDocids == null || givenDocids.size() == 0 ) { |
624 | 627 |
query = qspec.printSQL(useXMLIndex); |
625 | 628 |
} else { |
626 |
logMetacat.info("DBQuery.findResultDoclist - docid override " + givenDocids.size());
|
|
627 |
StringBuffer queryBuffer = new StringBuffer( "SELECT docid,docname,doctype,date_created, date_updated, rev " );
|
|
628 |
queryBuffer.append( " FROM xml_documents WHERE docid IN (" );
|
|
629 |
// condition for the docids
|
|
630 |
StringBuffer docidCondition = new StringBuffer();
|
|
631 |
docidCondition.append( " docid IN (" );
|
|
629 | 632 |
for (int i = 0; i < givenDocids.size(); i++) { |
630 |
queryBuffer.append("'"); |
|
631 |
queryBuffer.append( (String)givenDocids.elementAt(i) ); |
|
632 |
queryBuffer.append("',"); |
|
633 |
docidCondition.append("'"); |
|
634 |
docidCondition.append( (String)givenDocids.elementAt(i) ); |
|
635 |
docidCondition.append("'"); |
|
636 |
if (i < givenDocids.size()-1) { |
|
637 |
docidCondition.append(","); |
|
638 |
} |
|
633 | 639 |
} |
634 |
// empty string hack |
|
635 |
queryBuffer.append( "'') " ); |
|
636 |
query = queryBuffer.toString(); |
|
640 |
docidCondition.append( ") " ); |
|
641 |
|
|
642 |
// include the docids, either exclusively, or in conjuction with the query |
|
643 |
if (operator == null) { |
|
644 |
query = "SELECT docid, docname, doctype, date_created, date_updated, rev FROM xml_documents WHERE"; |
|
645 |
query = query + docidCondition.toString(); |
|
646 |
} else { |
|
647 |
// start with the keyword query, but add conditions |
|
648 |
query = qspec.printSQL(useXMLIndex); |
|
649 |
String myOperator = ""; |
|
650 |
if (!query.endsWith("WHERE")) { |
|
651 |
if (operator.equalsIgnoreCase(QueryGroup.UNION)) { |
|
652 |
myOperator = " OR "; |
|
653 |
} |
|
654 |
else { |
|
655 |
myOperator = " AND "; |
|
656 |
} |
|
657 |
} |
|
658 |
query = query + myOperator + docidCondition.toString(); |
|
659 |
|
|
660 |
} |
|
637 | 661 |
} |
638 | 662 |
String ownerQuery = getOwnerQuery(user); |
639 | 663 |
//logMetacat.debug("query: " + query); |
... | ... | |
1918 | 1942 |
return result; |
1919 | 1943 |
}//isDataPackageId() |
1920 | 1944 |
|
1945 |
public String getOperator() { |
|
1946 |
return operator; |
|
1947 |
} |
|
1948 |
|
|
1921 | 1949 |
/** |
1950 |
* Specifies if and how docid overrides should be included in the general query |
|
1951 |
* @param operator null, UNION, or INTERSECT (see QueryGroup) |
|
1952 |
*/ |
|
1953 |
public void setOperator(String operator) { |
|
1954 |
this.operator = operator; |
|
1955 |
} |
|
1956 |
|
|
1957 |
/** |
|
1922 | 1958 |
* Check if the user has the permission to export data package |
1923 | 1959 |
* |
1924 | 1960 |
* @param conn, the connection |
Also available in: Unified diff
allow "docid override" queries to include the results of a "normal" query - if the operator is left null, it acts as the usual override, otherwise UNION and INTERSECT modes can be used to either augment or refine the results.
this is for incorporating semantic+spatial+keyword queries into one query operation/result