001: /*
002:
003: This software is OSI Certified Open Source Software.
004: OSI Certified is a certification mark of the Open Source Initiative.
005:
006: The license (Mozilla version 1.0) can be read at the MMBase site.
007: See http://www.MMBase.org/license
008:
009: */
010: package org.mmbase.storage.search;
011:
012: import java.util.List;
013:
014: import org.mmbase.cache.Cacheable;
015:
016: /**
017: * Encapsulates a request for a search of the object cloud.
018: * <p>
019: * This corresponds to a SELECT query in SQL syntax.
020: *
021: * @author Rob van Maris
022: * @version $Id: SearchQuery.java,v 1.6 2007/12/06 08:13:36 michiel Exp $
023: * @since MMBase-1.7
024: */
025: public interface SearchQuery extends Cacheable {
026: /**
027: * Default maxNumber value, corresponds to no maximum.
028: * @see SearchQuery#getMaxNumber
029: */
030: int DEFAULT_MAX_NUMBER = -1;
031:
032: /**
033: * Default offset value, corresponds to no offset.
034: * @see SearchQuery#getOffset
035: */
036: int DEFAULT_OFFSET = 0;
037:
038: /**
039: * Tests if the search request is to return distinct results. In that case duplicate nodes will be removed from the result.
040: * <p>
041: * This corresponds to the use of "DISTINCT" in SQL SELECT-syntax
042: * .
043: */
044: boolean isDistinct();
045:
046: /**
047: * Tests if this is an aggregating query, i.e. containing aggregated fields.
048: */
049: boolean isAggregating();
050:
051: /**
052: * Gets the steps in the search request.
053: * <p>
054: * This corresponds to the tables in SQL SELECT-syntax.
055: */
056: List<Step> getSteps();
057:
058: /**
059: * Gets the stepfields in the search request.
060: * <p>
061: * This corresponds to the fields in SQL SELECT-syntax.
062: */
063: List<StepField> getFields();
064:
065: /**
066: * Gets the constraints on the search results.
067: * <p>
068: * This corresponds to (part of) the constraints in the WHERE-clause in SQL SELECT-syntax.
069: */
070: Constraint getConstraint();
071:
072: /**
073: * Gets the maximum number of results to be returned, or -1 if the number of results to be returned is unlimited.
074: * <p>
075: * Note: limiting the number of results may not be supported by the database layer.
076: */
077: int getMaxNumber();
078:
079: /**
080: * Gets the (zerobased) offset in the list of results, of the first result to return. Note that,
081: * since it is zerobased, it is equal to the number of results that are skipped.<p> Note:
082: * skipping results may not be supported by the database layer.
083: */
084: int getOffset();
085:
086: /**
087: * Gets the SortOrder objects in the order they are to be applied.
088: * This specifies the sorting order of the search results.
089: * <p>
090: * This corresponds to the ORDER BY clause in SQL SELECT syntax.
091: */
092: List<SortOrder> getSortOrders();
093:
094: /**
095: * Compares this query to the specified object. The result is
096: * <code>true</code> if and only if the argument is a non-null
097: * SearchQuery object representing the same query.
098: *
099: * @param obj The object to compare with.
100: * @return <code>true</code> if the objects are equal,
101: * <code>false</code> otherwise.
102: */
103: public boolean equals(Object obj);
104:
105: // javadoc is inherited
106: public int hashCode();
107:
108: /**
109: * Returns a string representation of this SearchQuery.
110: * The string representation has the form
111: * "SearchQuery(distinct:<distinct>,
112: * steps:<steps>, fields:<fields>,
113: * constraint:<constraint>, sortorders:<sortorders>,
114: * max:<max>, offset:<offset>)"
115: * where
116: * <ul>
117: * <li><em><distinct></em> is value returned by
118: * {@link #isDistinct isDistinct()}
119: * <li><em><steps></em> is the list returned by
120: * {@link #getSteps getSteps()}
121: * <li><em><fields></em> is the list returned by
122: * {@link #getFields getFields()}
123: * <li><em><constraint></em> is the constraint returned by
124: * {@link #getConstraint getConstraint()}
125: * <li><em><sortorders></em> is the list returned by
126: * {@link #getSortOrders getSortOrders()}
127: * <li><em><max></em> is value returned by
128: * {@link #getMaxNumber getMaxNumber()}
129: * <li><em><offset></em> is value returned by
130: * {@link #getOffset getOffset()}
131: * </ul>
132: *
133: * @return A string representation of this SearchQuery.
134: */
135: public String toString();
136:
137: }
|