private static void constructEmitEdgeIdFromClause(LinkedList<SchemaTableTree> distinctQueryStack, ColumnList cols) { List<SchemaTableTree> emitted = distinctQueryStack.stream() .filter(d -> d.getSchemaTable().isEdgeTable() && d.isEmit()) .collect(Collectors.toList()); for (SchemaTableTree schemaTableTree : emitted) { printEdgeId(schemaTableTree, cols); } }
private static void constructEmitEdgeIdFromClause(LinkedList<SchemaTableTree> distinctQueryStack, ColumnList cols) { List<SchemaTableTree> emitted = distinctQueryStack.stream() .filter(d -> d.getSchemaTable().isEdgeTable() && d.isEmit()) .collect(Collectors.toList()); for (SchemaTableTree schemaTableTree : emitted) { printEdgeId(schemaTableTree, cols); } }
private static void constructAllLabeledFromClause(LinkedList<SchemaTableTree> distinctQueryStack, ColumnList cols) { List<SchemaTableTree> labeled = distinctQueryStack.stream().filter(d -> !d.getLabels().isEmpty()).collect(Collectors.toList()); for (SchemaTableTree schemaTableTree : labeled) { if (schemaTableTree.hasIDPrimaryKey) { printLabeledIDFromClauseFor(schemaTableTree, cols); } printLabeledFromClauseFor(schemaTableTree, cols); if (schemaTableTree.getSchemaTable().isEdgeTable()) { schemaTableTree.printLabeledEdgeInOutVertexIdFromClauseFor(cols); } } }
private static void printEdgeId(SchemaTableTree schemaTableTree, ColumnList cols) { Preconditions.checkArgument(schemaTableTree.getSchemaTable().isEdgeTable()); cols.add(schemaTableTree, Topology.ID, schemaTableTree.calculatedAliasId()); }
private static void printEdgeId(SchemaTableTree schemaTableTree, ColumnList cols) { Preconditions.checkArgument(schemaTableTree.getSchemaTable().isEdgeTable()); cols.add(schemaTableTree, Topology.ID, schemaTableTree.calculatedAliasId()); }
private static void constructAllLabeledFromClause(LinkedList<SchemaTableTree> distinctQueryStack, ColumnList cols) { List<SchemaTableTree> labeled = distinctQueryStack.stream().filter(d -> !d.getLabels().isEmpty()).collect(Collectors.toList()); for (SchemaTableTree schemaTableTree : labeled) { if (schemaTableTree.hasIDPrimaryKey) { printLabeledIDFromClauseFor(schemaTableTree, cols); } printLabeledFromClauseFor(schemaTableTree, cols); if (schemaTableTree.getSchemaTable().isEdgeTable()) { schemaTableTree.printLabeledEdgeInOutVertexIdFromClauseFor(cols); } } }
/** * If emit is true then the edge id also needs to be printed. * This is required when there are multiple edges to the same vertex. * Only by having access to the edge id can on tell if the vertex needs to be emitted. */ private static void constructEmitFromClause(LinkedList<SchemaTableTree> distinctQueryStack, ColumnList cols) { int count = 1; for (SchemaTableTree schemaTableTree : distinctQueryStack) { if (count > 1) { if (!schemaTableTree.getSchemaTable().isEdgeTable() && schemaTableTree.isEmit()) { //if the VertexStep is for an edge table there is no need to print edge ids as its already printed. printEdgeId(schemaTableTree.parent, cols); } } count++; } }
/** * If emit is true then the edge id also needs to be printed. * This is required when there are multiple edges to the same vertex. * Only by having access to the edge id can on tell if the vertex needs to be emitted. */ private static void constructEmitFromClause(LinkedList<SchemaTableTree> distinctQueryStack, ColumnList cols) { int count = 1; for (SchemaTableTree schemaTableTree : distinctQueryStack) { if (count > 1) { if (!schemaTableTree.getSchemaTable().isEdgeTable() && schemaTableTree.isEmit()) { //if the VertexStep is for an edge table there is no need to print edge ids as its already printed. printEdgeId(schemaTableTree.parent, cols); } } count++; } }
public void loadEdgeInOutVertices(ResultSet resultSet, SqlgEdge sqlgEdge) throws SQLException { Preconditions.checkState(this.schemaTable.isEdgeTable()); for (ColumnList columnList : this.getColumnListStack()) { Map<SchemaTable, List<ColumnList.Column>> inForeignKeyColumns = columnList.getInForeignKeys(this.stepDepth, this.schemaTable); for (Map.Entry<SchemaTable, List<ColumnList.Column>> schemaTableColumnsEntry : inForeignKeyColumns.entrySet()) { List<ColumnList.Column> columns = schemaTableColumnsEntry.getValue(); if (columns.size() == 1 && !columns.get(0).isForeignKeyProperty()) { ColumnList.Column column = columns.get(0); sqlgEdge.loadInVertex(resultSet, column.getForeignSchemaTable(), column.getColumnIndex()); } else { sqlgEdge.loadInVertex(resultSet, columns); } } Map<SchemaTable, List<ColumnList.Column>> outForeignKeyColumns = columnList.getOutForeignKeys(this.stepDepth, this.schemaTable); for (Map.Entry<SchemaTable, List<ColumnList.Column>> schemaTableColumnsEntry : outForeignKeyColumns.entrySet()) { List<ColumnList.Column> columns = schemaTableColumnsEntry.getValue(); if (columns.size() == 1 && !columns.get(0).isForeignKeyProperty()) { ColumnList.Column column = columns.get(0); sqlgEdge.loadOutVertex(resultSet, column.getForeignSchemaTable(), column.getColumnIndex()); } else { sqlgEdge.loadOutVertex(resultSet, columns); } } } }
public void loadEdgeInOutVertices(ResultSet resultSet, SqlgEdge sqlgEdge) throws SQLException { Preconditions.checkState(this.schemaTable.isEdgeTable()); for (ColumnList columnList : this.getColumnListStack()) { Map<SchemaTable, List<ColumnList.Column>> inForeignKeyColumns = columnList.getInForeignKeys(this.stepDepth, this.schemaTable); for (Map.Entry<SchemaTable, List<ColumnList.Column>> schemaTableColumnsEntry : inForeignKeyColumns.entrySet()) { List<ColumnList.Column> columns = schemaTableColumnsEntry.getValue(); if (columns.size() == 1 && !columns.get(0).isForeignKeyProperty()) { ColumnList.Column column = columns.get(0); sqlgEdge.loadInVertex(resultSet, column.getForeignSchemaTable(), column.getColumnIndex()); } else { sqlgEdge.loadInVertex(resultSet, columns); } } Map<SchemaTable, List<ColumnList.Column>> outForeignKeyColumns = columnList.getOutForeignKeys(this.stepDepth, this.schemaTable); for (Map.Entry<SchemaTable, List<ColumnList.Column>> schemaTableColumnsEntry : outForeignKeyColumns.entrySet()) { List<ColumnList.Column> columns = schemaTableColumnsEntry.getValue(); if (columns.size() == 1 && !columns.get(0).isForeignKeyProperty()) { ColumnList.Column column = columns.get(0); sqlgEdge.loadOutVertex(resultSet, column.getForeignSchemaTable(), column.getColumnIndex()); } else { sqlgEdge.loadOutVertex(resultSet, columns); } } } }
private static void printEdgeInOutVertexIdFromClauseFor(SqlgGraph sqlgGraph, SchemaTableTree firstSchemaTableTree, SchemaTableTree lastSchemaTableTree, ColumnList cols) { Preconditions.checkState(lastSchemaTableTree.getSchemaTable().isEdgeTable()); Set<ForeignKey> edgeForeignKeys = sqlgGraph.getTopology().getEdgeForeignKeys().get(lastSchemaTableTree.getSchemaTable().toString()); for (ForeignKey edgeForeignKey : edgeForeignKeys) { if (firstSchemaTableTree == null || !firstSchemaTableTree.equals(lastSchemaTableTree) || firstSchemaTableTree.getDirection() != edgeForeignKey.getDirection()) { for (String foreignKey : edgeForeignKey.getCompositeKeys()) { String alias = lastSchemaTableTree.calculateAliasPropertyName(foreignKey); cols.addForeignKey(lastSchemaTableTree, foreignKey, alias); } } } }
private static void printEdgeInOutVertexIdFromClauseFor(SqlgGraph sqlgGraph, SchemaTableTree firstSchemaTableTree, SchemaTableTree lastSchemaTableTree, ColumnList cols) { Preconditions.checkState(lastSchemaTableTree.getSchemaTable().isEdgeTable()); Set<ForeignKey> edgeForeignKeys = sqlgGraph.getTopology().getEdgeForeignKeys().get(lastSchemaTableTree.getSchemaTable().toString()); for (ForeignKey edgeForeignKey : edgeForeignKeys) { if (firstSchemaTableTree == null || !firstSchemaTableTree.equals(lastSchemaTableTree) || firstSchemaTableTree.getDirection() != edgeForeignKey.getDirection()) { for (String foreignKey : edgeForeignKey.getCompositeKeys()) { String alias = lastSchemaTableTree.calculateAliasPropertyName(foreignKey); cols.addForeignKey(lastSchemaTableTree, foreignKey, alias); } } } }
Preconditions.checkState(this.parent.getSchemaTable().isEdgeTable(), "Optional left join drop queries must be for an edge!"); result.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(this.getSchemaTable().getSchema())); result.append(".");
private void printLabeledEdgeInOutVertexIdFromClauseFor(ColumnList cols) { Preconditions.checkState(this.getSchemaTable().isEdgeTable()); Set<ForeignKey> edgeForeignKeys = this.sqlgGraph.getTopology().getEdgeForeignKeys().get(this.getSchemaTable().toString()); for (ForeignKey edgeForeignKey : edgeForeignKeys) { for (String foreignKey : edgeForeignKey.getCompositeKeys()) { String alias = cols.getAlias(this.getSchemaTable(), foreignKey, this.stepDepth); if (alias == null) { cols.addForeignKey(this, foreignKey, this.calculateLabeledAliasPropertyName(foreignKey)); } else { this.calculateLabeledAliasPropertyName(foreignKey, alias); } } } }
Preconditions.checkState(this.parent.getSchemaTable().isEdgeTable(), "Optional left join drop queries must be for an edge!"); result.append(sqlgGraph.getSqlDialect().maybeWrapInQoutes(this.getSchemaTable().getSchema())); result.append(".");
emit = schemaTable.isVertexTable() && replacedStep.isEmit(); } else if (elementClass.isAssignableFrom(Edge.class)) { emit = schemaTable.isEdgeTable() && replacedStep.isEmit(); } else { throw new IllegalStateException(String.format("BUG: Expected %s, instead found %s", "Edge or Vertex", elementClass.getSimpleName()));
private void printLabeledEdgeInOutVertexIdFromClauseFor(ColumnList cols) { Preconditions.checkState(this.getSchemaTable().isEdgeTable()); Set<ForeignKey> edgeForeignKeys = this.sqlgGraph.getTopology().getEdgeForeignKeys().get(this.getSchemaTable().toString()); for (ForeignKey edgeForeignKey : edgeForeignKeys) { for (String foreignKey : edgeForeignKey.getCompositeKeys()) { String alias = cols.getAlias(this.getSchemaTable(), foreignKey, this.stepDepth); if (alias == null) { cols.addForeignKey(this, foreignKey, this.calculateLabeledAliasPropertyName(foreignKey)); } else { this.calculateLabeledAliasPropertyName(foreignKey, alias); } } } }
emit = schemaTable.isVertexTable() && replacedStep.isEmit(); } else if (elementClass.isAssignableFrom(Edge.class)) { emit = schemaTable.isEdgeTable() && replacedStep.isEmit(); } else { throw new IllegalStateException(String.format("BUG: Expected %s, instead found %s", "Edge or Vertex", elementClass.getSimpleName()));
private void process(SchemaTableTree rootSchemaTableTree) { SchemaTable table = rootSchemaTableTree.getSchemaTable(); Optional<? extends AbstractLabel> label; if (table.isVertexTable()) { label = sqlgGraph.getTopology().getVertexLabel(table.getSchema(), table.withOutPrefix().getTable()); } else if (table.isEdgeTable()) { label = sqlgGraph.getTopology().getEdgeLabel(table.getSchema(), table.withOutPrefix().getTable()); } else { label = Optional.empty(); } process(sqlgGraph, rootSchemaTableTree, label.orElseThrow(illegalState("unknown table: %s", table))); }
private Set<SchemaTableTree> calculatePathFromEdgeToVertex(SchemaTableTree schemaTableTree, SchemaTable labelToTravers, Direction direction) { Preconditions.checkArgument(labelToTravers.isEdgeTable());