souffle
2.0.2-371-g6315b36
|
Go to the documentation of this file.
33 bool transformTuple =
false;
39 transformTuple =
true;
42 const auto* nextNode =
dynamic_cast<const Node*
>(&
filter->getOperation());
46 transformTuple = false;
65 bool transformTuple =
false;
68 if (
const auto*
filter =
dynamic_cast<const Filter*
>(&indexScan->getOperation())) {
71 transformTuple =
true;
74 const auto* nextNode =
dynamic_cast<const Node*
>(&
filter->getOperation());
77 if (element.
getTupleId() == indexScan->getTupleId()) {
78 transformTuple = false;
87 const auto*
filter =
dynamic_cast<const Filter*
>(&indexScan->getOperation());
88 const int identifier = indexScan->getTupleId();
89 const std::string&
rel = indexScan->getRelation();
91 for (
auto& cur : indexScan->getRangePattern().first) {
96 newValues.first.emplace_back(val);
98 for (
auto& cur : indexScan->getRangePattern().second) {
99 Expression* val =
nullptr;
100 if (cur !=
nullptr) {
103 newValues.second.emplace_back(val);
113 bool changed =
false;
115 std::function<Own<Node>(Own<Node>)> scanRewriter = [&](Own<Node> node) -> Own<Node> {
116 if (
const Scan* scan =
dynamic_cast<Scan*
>(node.get())) {
119 node = std::move(op);
124 node = std::move(op);
int getLevel(const Node *value) const
Get level of a RAM expression/condition.
Operation & getOperation() const
Get nested operation.
std::string identifier(std::string id)
Valid C++ identifier, note that this does not ensure the uniqueness of identifiers returned.
const std::string & getRelation() const
Get search relation.
Access element from the current tuple in a tuple environment.
Checks whether a given condition holds.
Node is a superclass for all RAM IR classes.
auto clone(const std::vector< A * > &xs)
std::vector< A > filter(std::vector< A > xs, F &&f)
Filter a vector to include certain elements.
const std::string & getProfileText() const
Get profile text.
int getTupleId() const
Get identifier.
Iterate all tuples of a relation.
Search for tuples of a relation matching a criteria.
Expression * clone() const override=0
Create a clone (i.e.
std::pair< RamBound, RamBound > RamPattern
void visitDepthFirst(const Node &root, Visitor< R, Ps... > &visitor, Args &... args)
A utility function visiting all nodes within the RAM fragments rooted by the given node recursively i...
void rel(size_t limit, bool showLimit=true)
std::vector< Own< A > > VecOwn
Abstract class for describing scalar values in RAM.
int getTupleId() const
Get identifier.
LambdaNodeMapper< Lambda > makeLambdaRamMapper(const Lambda &lambda)
Creates a node mapper based on a corresponding lambda expression.