private void append(IntermediateQueryBuilder builder, Optional<QueryNode> parentInBuilder, QueryNode currentnode, DistinctVariableOnlyDataAtom projectionAtom) { if (parentInBuilder.isPresent()) { builder.addChild(parentInBuilder.get(), currentnode); } else { builder.init(projectionAtom, currentnode); } }
@Override public IntermediateQueryBuilder initBuilder(IntermediateQueryFactory iqFactory, IntermediateQueryBuilder queryBuilder, DistinctVariableOnlyDataAtom projectionAtom, QueryNode childNode) { ImmutableList<UnaryOperatorNode> modifierNodes = extractModifierNodes(iqFactory); if (modifierNodes.isEmpty()) queryBuilder.init(projectionAtom, childNode); else { queryBuilder.init(projectionAtom, modifierNodes.get(0)); IntStream.range(1, modifierNodes.size()) .forEach(i -> queryBuilder.addChild(modifierNodes.get(i - 1), modifierNodes.get(i))); queryBuilder.addChild(modifierNodes.get(modifierNodes.size() - 1), childNode); } return queryBuilder; }
@Override public IntermediateQuery getSubquery(QueryNode subQueryRoot, DistinctVariableOnlyDataAtom projectionAtom) { IntermediateQueryBuilder builder = iqFactory.createIQBuilder(dbMetadata, executorRegistry); builder.init(projectionAtom, subQueryRoot); builder.appendSubtree(subQueryRoot, this); return builder.build(); }
@Override public IntermediateQuery getSubquery(QueryNode subQueryRoot, DistinctVariableOnlyDataAtom projectionAtom) { IntermediateQueryBuilder builder = iqFactory.createIQBuilder(dbMetadata, executorRegistry); builder.init(projectionAtom, subQueryRoot); builder.appendSubtree(subQueryRoot, this); return builder.build(); }
private IntermediateQuery split(IntermediateQuery originalQuery, UnionNode unionNode, QueryNode replacingChildNode) { IntermediateQueryBuilder queryBuilder = originalQuery.newBuilder(); QueryNode rootNode = originalQuery.getRootNode(); queryBuilder.init(originalQuery.getProjectionAtom(), rootNode); Queue<QueryNode> parentNodes = new LinkedList<>(); parentNodes.add(rootNode); while(!parentNodes.isEmpty()) { QueryNode parentNode = parentNodes.poll(); for(QueryNode originalChildNode : originalQuery.getChildren(parentNode)) { QueryNode childNode = originalChildNode == unionNode ? replacingChildNode : originalChildNode; queryBuilder.addChild(parentNode, childNode, originalQuery.getOptionalPosition( parentNode, originalChildNode)); parentNodes.add(childNode); } } return queryBuilder.build(); }
private static IntermediateQuery createFact(DBMetadata dbMetadata, ConstructionNode rootNode, DistinctVariableOnlyDataAtom projectionAtom, ExecutorRegistry executorRegistry, IntermediateQueryFactory modelFactory) { IntermediateQueryBuilder queryBuilder = modelFactory.createIQBuilder(dbMetadata, executorRegistry); queryBuilder.init(projectionAtom, rootNode); queryBuilder.addChild(rootNode, modelFactory.createTrueNode()); return queryBuilder.build(); }
/** * TODO: explain * <p> * TODO: avoid the use of a recursive method. Use a stack instead. */ protected IntermediateQueryBuilder convertToBuilderAndTransform(IntermediateQuery originalQuery, HomogeneousQueryNodeTransformer nodeTransformer, DistinctVariableOnlyDataAtom transformedProjectionAtom) { IntermediateQueryBuilder queryBuilder = originalQuery.newBuilder(); // Clone the original root node and apply the transformer if available. QueryNode originalRootNode = originalQuery.getRootNode(); QueryNode newRootNode; newRootNode = originalRootNode.acceptNodeTransformer(nodeTransformer); queryBuilder.init(transformedProjectionAtom, newRootNode); return copyChildrenNodesToBuilder(originalQuery, queryBuilder, originalRootNode, newRootNode, nodeTransformer); }
/** * TODO: explain * <p> * TODO: avoid the use of a recursive method. Use a stack instead. */ protected IntermediateQueryBuilder convertToBuilderAndTransform(IntermediateQuery originalQuery, HomogeneousQueryNodeTransformer nodeTransformer, DistinctVariableOnlyDataAtom transformedProjectionAtom) { IntermediateQueryBuilder queryBuilder = originalQuery.newBuilder(); // Clone the original root node and apply the transformer if available. QueryNode originalRootNode = originalQuery.getRootNode(); QueryNode newRootNode; newRootNode = originalRootNode.acceptNodeTransformer(nodeTransformer); queryBuilder.init(transformedProjectionAtom, newRootNode); return copyChildrenNodesToBuilder(originalQuery, queryBuilder, originalRootNode, newRootNode, nodeTransformer); }
queryBuilder.init(projectionAtom, rootNode);
queryBuilder.init(projectionAtom, rootNode);
/** * If the root is a construction node, inserts the filter below it. * Otherwise inserts it as the root. */ private IntermediateQuery insertFilter(IntermediateQuery originalQuery, ImmutableList<Variable> nullableVariables) { FilterNode filterNode = iQFactory.createFilterNode(computeFilterExpression(nullableVariables)); IntermediateQueryBuilder builder = originalQuery.newBuilder(); QueryNode rootNode = originalQuery.getRootNode(); QueryNode newRoot = rootNode instanceof ConstructionNode ? rootNode : filterNode; QueryNode child = rootNode instanceof ConstructionNode ? filterNode : rootNode; builder.init(originalQuery.getProjectionAtom(), newRoot); builder.addChild(newRoot, child, Optional.empty()); copyChildren(originalQuery, rootNode, builder, child); return builder.build(); }
private IntermediateQuery constructQuery(IntermediateQuery query, QueryNode rootNode, ImmutableExpression filterCondition) { IntermediateQueryBuilder queryBuilder = query.newBuilder(); queryBuilder.init(query.getProjectionAtom(), rootNode);
private IntermediateQuery constructQuery(IntermediateQuery query, QueryNode rootNode, ImmutableExpression filterCondition) { IntermediateQueryBuilder queryBuilder = query.newBuilder(); queryBuilder.init(query.getProjectionAtom(), rootNode);
@Override public IntermediateQuery convert(IQ query, DBMetadata dbMetadata, ExecutorRegistry executorRegistry) throws EmptyQueryException { if (query.getTree().isDeclaredAsEmpty()) throw new EmptyQueryException(); IntermediateQueryBuilder queryBuilder = iqFactory.createIQBuilder(dbMetadata, executorRegistry); IQTree topTree = query.getTree(); QueryNode rootNode = topTree.getRootNode(); queryBuilder.init(query.getProjectionAtom(), rootNode); insertChildren(rootNode, topTree.getChildren(), queryBuilder); return queryBuilder.build(); }
@Override public IntermediateQuery enforceRootCn(IntermediateQuery query) { QueryNode root = query.getRootNode(); if(root instanceof ConstructionNode){ return query; } IntermediateQueryBuilder builder = iqFactory.createIQBuilder( query.getDBMetadata(), query.getExecutorRegistry() ); ConstructionNode rootCn = iqFactory.createConstructionNode(query.getVariables(root)); builder.init(query.getProjectionAtom(), rootCn); builder.addChild(rootCn, root); builder.appendSubtree(root, query); return builder.build(); }