mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'aql2' of https://github.com/triAGENS/ArangoDB into aql2
Conflicts: arangod/Makefile.files
This commit is contained in:
commit
a2cb09b82c
|
@ -0,0 +1,52 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Infrastructure for ExecutionPlans
|
||||
///
|
||||
/// @file arangod/Aql/ExecutionPlan.h
|
||||
///
|
||||
/// DISCLAIMER
|
||||
///
|
||||
/// Copyright 2010-2014 triagens GmbH, Cologne, Germany
|
||||
///
|
||||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
/// you may not use this file except in compliance with the License.
|
||||
/// You may obtain a copy of the License at
|
||||
///
|
||||
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||
///
|
||||
/// Unless required by applicable law or agreed to in writing, software
|
||||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
/// See the License for the specific language governing permissions and
|
||||
/// limitations under the License.
|
||||
///
|
||||
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
||||
///
|
||||
/// @author Max Neunhoeffer
|
||||
/// @author Copyright 2014, triagens GmbH, Cologne, Germany
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "Aql/ExecutionPlan.h"
|
||||
|
||||
using namespace triagens::aql;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- methods of ExecutionPlan
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief toJson, export an ExecutionPlan to JSON
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRI_json_t* ExecutionPlan::toJson (TRI_memory_zone_t* zone) {
|
||||
TRI_json_t* json = TRI_CreateArray2Json(zone, 1);
|
||||
TRI_json_t* sub = TRI_CreateStringCopyJson(zone, "ILLEGAL");
|
||||
TRI_Insert2ArrayJson(zone, json, "type", sub);
|
||||
return json;
|
||||
}
|
||||
|
||||
// Local Variables:
|
||||
// mode: outline-minor
|
||||
// outline-regexp: "^\\(/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|// --SECTION--\\|/// @\\}\\)"
|
||||
// End:
|
||||
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Infrastructure for ExecutionPlans
|
||||
///
|
||||
/// @file arangod/Aql/ExecutionPlan.h
|
||||
///
|
||||
/// DISCLAIMER
|
||||
///
|
||||
/// Copyright 2010-2014 triagens GmbH, Cologne, Germany
|
||||
///
|
||||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
/// you may not use this file except in compliance with the License.
|
||||
/// You may obtain a copy of the License at
|
||||
///
|
||||
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||
///
|
||||
/// Unless required by applicable law or agreed to in writing, software
|
||||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
/// See the License for the specific language governing permissions and
|
||||
/// limitations under the License.
|
||||
///
|
||||
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
||||
///
|
||||
/// @author Max Neunhoeffer
|
||||
/// @author Copyright 2014, triagens GmbH, Cologne, Germany
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef ARANGODB_AQL_EXECUTION_PLAN_H
|
||||
#define ARANGODB_AQL_EXECUTION_PLAN_H 1
|
||||
|
||||
#include <Basics/Common.h>
|
||||
|
||||
#include <BasicsC/json.h>
|
||||
|
||||
namespace triagens {
|
||||
namespace aql {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief class ExecutionPlan, abstract base class
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class ExecutionPlan {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief node type
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public:
|
||||
|
||||
enum NodeType {
|
||||
ILLEGAL,
|
||||
ENUMERATE_COLLECTION,
|
||||
INDEX_RANGE,
|
||||
STATIC_LIST,
|
||||
FILTER,
|
||||
LIMIT,
|
||||
INTERSECTION,
|
||||
PROJECTION,
|
||||
CALCULATION,
|
||||
SORT,
|
||||
AGGREGATE_ON_SORTED,
|
||||
AGGREGATE_ON_UNSORTED,
|
||||
LOOKUP_JOIN,
|
||||
MERGE_JOIN,
|
||||
LOOKUP_INDEX_UNIQUE,
|
||||
LOOKUP_INDEX_RANGE,
|
||||
LOOKUP_FULL_COLLECTION,
|
||||
CONCATENATION,
|
||||
MERGE,
|
||||
REMOTE,
|
||||
INSERT,
|
||||
REMOVE,
|
||||
REPLACE,
|
||||
UPDATE,
|
||||
ROOT
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- public methods
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief default constructor
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ExecutionPlan () {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief constructor with one dependency
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ExecutionPlan (ExecutionPlan* ep) {
|
||||
_dependencies.push_back(ep);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief destructor, free dependencies
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual ~ExecutionPlan () {
|
||||
for (auto i = _dependencies.begin(); i != _dependencies.end(); ++i) {
|
||||
delete *i;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief return the type of the node
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual NodeType getType () {
|
||||
return ILLEGAL;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief add a dependency
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void addDependency (ExecutionPlan* ep) {
|
||||
_dependencies.push_back(ep);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief get all dependencies
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
vector<ExecutionPlan*> getDependencies () {
|
||||
return _dependencies;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief access the pos-th dependency
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ExecutionPlan* operator[] (size_t pos) {
|
||||
if (pos > _dependencies.size()) {
|
||||
return nullptr;
|
||||
}
|
||||
else {
|
||||
return _dependencies.at(pos);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief clone execution plan recursively, this makes the class abstract
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual ExecutionPlan* clone () = 0;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief export to JSON
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual TRI_json_t* toJson (TRI_memory_zone_t* zone);
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- private variables
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief our dependent nodes
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private:
|
||||
|
||||
std::vector<ExecutionPlan*> _dependencies;
|
||||
|
||||
};
|
||||
|
||||
} // namespace triagens::aql
|
||||
} // namespace triagens
|
||||
|
||||
#endif
|
||||
|
||||
// Local Variables:
|
||||
// mode: outline-minor
|
||||
// outline-regexp: "^\\(/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|// --SECTION--\\|/// @\\}\\)"
|
||||
// End:
|
||||
|
||||
|
|
@ -57,6 +57,7 @@ add_executable(
|
|||
Ahuacatl/ahuacatl-statementlist.cpp
|
||||
Ahuacatl/ahuacatl-tokens.cpp
|
||||
Ahuacatl/ahuacatl-variable.cpp
|
||||
Aql/ExecutionPlan.cpp
|
||||
Aql/Parser.cpp
|
||||
Aql/Query.cpp
|
||||
Aql/QueryError.cpp
|
||||
|
|
|
@ -38,6 +38,7 @@ arangod_libarangod_a_SOURCES = \
|
|||
arangod/Ahuacatl/ahuacatl-statementlist.cpp \
|
||||
arangod/Ahuacatl/ahuacatl-tokens.cpp \
|
||||
arangod/Ahuacatl/ahuacatl-variable.cpp \
|
||||
arangod/Aql/ExecutionPlan.cpp \
|
||||
arangod/Aql/Parser.cpp \
|
||||
arangod/Aql/Query.cpp \
|
||||
arangod/Aql/QueryError.cpp \
|
||||
|
|
Loading…
Reference in New Issue