Skip to content

Commit edaa308

Browse files
committed
Support RIGHT directed edges in CREATE
1 parent f5f7655 commit edaa308

2 files changed

Lines changed: 11 additions & 9 deletions

File tree

src/backend/executor/cypher_create.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,10 @@ static TupleTableSlot *exec_cypher_create(CustomScanState *csnode)
338338
elemTupleSlot->tts_values[0] = css->edge_ids[0][i];
339339
elemTupleSlot->tts_isnull[0] = false;
340340

341-
elemTupleSlot->tts_values[1] = css->vertex_ids[0][i];
341+
elemTupleSlot->tts_values[1] = css->vertex_ids[0][node->dir == CYPHER_REL_DIR_RIGHT ? i : i + 1];
342342
elemTupleSlot->tts_isnull[1] = false;
343343

344-
elemTupleSlot->tts_values[2] = css->vertex_ids[0][i+1];
344+
elemTupleSlot->tts_values[2] = css->vertex_ids[0][node->dir == CYPHER_REL_DIR_RIGHT ? i+1 : i];
345345
elemTupleSlot->tts_isnull[2] = false;
346346

347347

src/backend/parser/cypher_clause.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -460,18 +460,18 @@ static Query *transform_cypher_create(cypher_parsestate *cpstate, cypher_clause
460460

461461
if (node->name) {
462462
ereport(ERROR, (errmsg_internal("nodes in CREATE cannot be a variable")));
463-
/* TODO: After props are supported
463+
464464
target->variable_name = node->name;
465-
465+
target->id_attr_num = pstate->p_next_resno;
466466
query->targetList = lappend(query->targetList,
467467
makeTargetEntry(
468468
make_graphid_placeholder(cpstate),
469469
pstate->p_next_resno++,
470470
make_id_alias(get_next_default_alias(cpstate)),
471471
false));
472-
}
473-
target->id_attr_num = list_length(query->targetList);
474-
472+
473+
474+
/*
475475
query->targetList = lappend(query->targetList,
476476
makeTargetEntry(
477477
make_int_placeholder(cpstate),
@@ -533,8 +533,10 @@ static Query *transform_cypher_create(cypher_parsestate *cpstate, cypher_clause
533533
} else {
534534
target->prop_attr_num = InvalidAttrNumber;
535535
}
536-
if (edge->dir != CYPHER_REL_DIR_RIGHT)
537-
ereport(ERROR, (errmsg_internal("edges CREATE are right only right now")));
536+
537+
target->dir = edge->dir;
538+
if (edge->dir == CYPHER_REL_DIR_NONE)
539+
ereport(ERROR, (errmsg_internal("edges in CREATE must have a direction")));
538540

539541

540542
label_cache_data *lcd = search_label_name_graph_cache(edge->label, cpstate->graph_oid);

0 commit comments

Comments
 (0)