MCPcopy Create free account
hub / github.com/RedisGraph/RedisGraph / NewCondTraverseOp

Function NewCondTraverseOp

src/execution_plan/ops/op_conditional_traverse.c:72–108  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

70}
71
72OpBase *NewCondTraverseOp
73(
74 const ExecutionPlan *plan,
75 Graph *g,
76 AlgebraicExpression *ae
77) {
78 OpCondTraverse *op = rm_calloc(sizeof(OpCondTraverse), 1);
79
80 op->ae = ae;
81 op->graph = g;
82 op->record_cap = BATCH_SIZE;
83
84 // Set our Op operations
85 OpBase_Init((OpBase *)op, OPType_CONDITIONAL_TRAVERSE,
86 "Conditional Traverse", CondTraverseInit, CondTraverseConsume,
87 CondTraverseReset, CondTraverseToString, CondTraverseClone,
88 CondTraverseFree, false, plan);
89
90 bool aware = OpBase_Aware((OpBase *)op, AlgebraicExpression_Src(ae),
91 &op->srcNodeIdx);
92 UNUSED(aware);
93 ASSERT(aware == true);
94
95 const char *dest = AlgebraicExpression_Dest(ae);
96 op->destNodeIdx = OpBase_Modifies((OpBase *)op, dest);
97
98 const char *edge = AlgebraicExpression_Edge(ae);
99 if(edge) {
100 // this operation will populate an edge in the Record
101 // prepare all necessary information for collecting matching edges
102 uint edge_idx = OpBase_Modifies((OpBase *)op, edge);
103 QGEdge *e = QueryGraph_GetEdgeByAlias(plan->query_graph, edge);
104 op->edge_ctx = EdgeTraverseCtx_New(ae, e, edge_idx);
105 }
106
107 return (OpBase *)op;
108}
109
110static OpResult CondTraverseInit(OpBase *opBase) {
111 OpCondTraverse *op = (OpCondTraverse *)opBase;

Callers 3

CondTraverseCloneFunction · 0.85

Calls 9

rm_callocFunction · 0.85
OpBase_InitFunction · 0.85
OpBase_AwareFunction · 0.85
AlgebraicExpression_SrcFunction · 0.85
AlgebraicExpression_DestFunction · 0.85
OpBase_ModifiesFunction · 0.85
AlgebraicExpression_EdgeFunction · 0.85
EdgeTraverseCtx_NewFunction · 0.85

Tested by

no test coverage detected