1
0
Fork 0

Merge branch 'aql2' of https://github.com/triAGENS/ArangoDB into aql2

Conflicts:
	arangod/Makefile.files
This commit is contained in:
Jan Steemann 2014-07-24 11:54:38 +02:00
commit a2cb09b82c
4 changed files with 234 additions and 0 deletions

View File

@ -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:

180
arangod/Aql/ExecutionPlan.h Normal file
View File

@ -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:

View File

@ -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

View File

@ -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 \