diff options
author | Hari Khalsa <hkhalsa@10gen.com> | 2013-11-20 16:33:07 -0500 |
---|---|---|
committer | Hari Khalsa <hkhalsa@10gen.com> | 2013-11-21 10:22:12 -0500 |
commit | b5aad6eccd3b934b6109be9091b23c4d64034c33 (patch) | |
tree | a37a29eeec89a5486fc31e98156ce0c2ac094618 /src/mongo/db/query/planner_analysis.h | |
parent | 2cd39093e92fa7b4779beb68073f949c0880fd30 (diff) | |
download | mongo-b5aad6eccd3b934b6109be9091b23c4d64034c33.tar.gz |
SERVER-10026 break planner into four pieces
Diffstat (limited to 'src/mongo/db/query/planner_analysis.h')
-rw-r--r-- | src/mongo/db/query/planner_analysis.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mongo/db/query/planner_analysis.h b/src/mongo/db/query/planner_analysis.h new file mode 100644 index 00000000000..3d172647ff0 --- /dev/null +++ b/src/mongo/db/query/planner_analysis.h @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2013 10gen Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * As a special exception, the copyright holders give permission to link the + * code of portions of this program with the OpenSSL library under certain + * conditions as described in each individual source file and distribute + * linked combinations including the program with the OpenSSL library. You + * must comply with the GNU Affero General Public License in all respects for + * all of the code used other than as permitted herein. If you modify file(s) + * with this exception, you may extend this exception to your version of the + * file(s), but you are not obligated to do so. If you do not wish to do so, + * delete this exception statement from your version. If you delete this + * exception statement from all source files in the program, then also delete + * it in the license file. + */ + +#pragma once + +#include "mongo/db/query/canonical_query.h" +#include "mongo/db/query/query_planner_params.h" +#include "mongo/db/query/query_solution.h" + +namespace mongo { + + class QueryPlannerAnalysis { + public: + /** + * In brief: performs sort and covering analysis. + * + * The solution rooted at 'solnRoot' provides data for the query, whether through some + * configuration of indices or through a collection scan. Additional stages may be required + * to perform sorting, projection, or other operations that are independent of the source + * of the data. These stages are added atop 'solnRoot'. + * + * 'taggedRoot' is a copy of the parse tree. Nodes in 'solnRoot' may point into it. + * + * Takes ownership of 'solnRoot' and 'taggedRoot'. + * + * Returns NULL if a solution cannot be constructed given the requirements in 'params'. + * + * Caller owns the returned QuerySolution. + */ + static QuerySolution* analyzeDataAccess(const CanonicalQuery& query, + const QueryPlannerParams& params, + QuerySolutionNode* solnRoot); + + /** + * Get the bounds for the sort in 'query' used by the sort stage. Output the bounds + * in 'node'. + * + * XXX TODO: move into sort stage... + */ + static void getBoundsForSort(const CanonicalQuery& query, SortNode* node); + }; + +} // namespace mongo |