@Override public IntermediateQuery transform(IntermediateQuery originalQuery) { DistinctVariableOnlyDataAtom transformedProjectionDataAtom = transformProjectionAtom(originalQuery.getProjectionAtom()); IntermediateQueryBuilder builder = convertToBuilderAndTransform(originalQuery, nodeTransformer, transformedProjectionDataAtom); 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(); }
@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 transform(IntermediateQuery originalQuery) { DistinctVariableOnlyDataAtom transformedProjectionDataAtom = transformProjectionAtom(originalQuery.getProjectionAtom()); IntermediateQueryBuilder builder = convertToBuilderAndTransform(originalQuery, nodeTransformer, transformedProjectionDataAtom); 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(); }
private IntermediateQuery liftUnionsAboveCn(IntermediateQuery query) { if(query.getChildren(query.getRootNode()).isEmpty()){ return query; } IntermediateQueryBuilder builder = iqFactory.createIQBuilder( query.getDBMetadata(), query.getExecutorRegistry() ); lift(builder, query.getRootNode(), Optional.empty(), query, query.getRootNode(), query.getProjectionAtom()); return builder.build(); }
return queryBuilder.build();
return Optional.of(normalizeIQ(queryBuilder.build()));
/** * 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(); }
return queryBuilder.build();
return queryBuilder.build();
@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(); }