private void addView(QueryMetadataInterface metadata, CommandContext context, GroupSymbol group, List<ElementSymbol> cols, PlanNode viewRoot) throws TeiidComponentException, QueryMetadataException, QueryPlannerException { GroupSymbol securityVeiw = new GroupSymbol("sec"); //$NON-NLS-1$ Set<String> groups = context.getGroups(); securityVeiw = RulePlaceAccess.recontextSymbol(securityVeiw, groups); List<ElementSymbol> newCols = RulePushAggregates.defineNewGroup(securityVeiw, cols, metadata); PlanNode newSourceNode = RuleDecomposeJoin.createSource(securityVeiw, viewRoot, newCols); Map<ElementSymbol, Expression> upperMapping = SymbolMap.createSymbolMap(cols, newCols).asMap(); FrameUtil.convertFrame(newSourceNode.getParent(), group, Collections.singleton(securityVeiw), upperMapping, metadata); }
private void addView(QueryMetadataInterface metadata, CommandContext context, GroupSymbol group, List<ElementSymbol> cols, PlanNode viewRoot) throws TeiidComponentException, QueryMetadataException, QueryPlannerException { GroupSymbol securityVeiw = new GroupSymbol("sec"); //$NON-NLS-1$ Set<String> groups = context.getGroups(); securityVeiw = RulePlaceAccess.recontextSymbol(securityVeiw, groups); List<ElementSymbol> newCols = RulePushAggregates.defineNewGroup(securityVeiw, cols, metadata); PlanNode newSourceNode = RuleDecomposeJoin.createSource(securityVeiw, viewRoot, newCols); Map<ElementSymbol, Expression> upperMapping = SymbolMap.createSymbolMap(cols, newCols).asMap(); FrameUtil.convertFrame(newSourceNode.getParent(), group, Collections.singleton(securityVeiw), upperMapping, metadata); }
/** * Add the new union back in under a view */ static PlanNode rebuild(GroupSymbol group, PlanNode toReplace, PlanNode newUnion, QueryMetadataInterface metadata, CommandContext context, PlanNode... toMap) throws TeiidComponentException, QueryPlannerException, QueryMetadataException { Set<String> groups = context.getGroups(); group = RulePlaceAccess.recontextSymbol(group, groups); PlanNode projectNode = NodeEditor.findNodePreOrder(newUnion, NodeConstants.Types.PROJECT); List<? extends Expression> projectedSymbols = (List<? extends Expression>)projectNode.getProperty(Info.PROJECT_COLS); SymbolMap newSymbolMap = RulePushAggregates.createSymbolMap(group, projectedSymbols, newUnion, metadata); PlanNode view = RuleDecomposeJoin.createSource(group, newUnion, newSymbolMap); Map<Expression, ElementSymbol> inverseMap = newSymbolMap.inserseMapping(); if (toReplace != null) { toReplace.getParent().replaceChild(toReplace, view); } Set<GroupSymbol> newGroups = Collections.singleton(group); for (PlanNode node : toMap) { FrameUtil.convertFrame(view, node.getGroups().iterator().next(), newGroups, inverseMap, metadata); } return view; }
private void addView(QueryMetadataInterface metadata, CommandContext context, GroupSymbol group, List<ElementSymbol> cols, List<? extends Expression> old, PlanNode viewRoot) throws TeiidComponentException, QueryMetadataException, QueryPlannerException { GroupSymbol securityVeiw = new GroupSymbol("sec"); //$NON-NLS-1$ Set<String> groups = context.getGroups(); securityVeiw = RulePlaceAccess.recontextSymbol(securityVeiw, groups); List<ElementSymbol> newCols = RulePushAggregates.defineNewGroup(securityVeiw, old, metadata); PlanNode newSourceNode = RuleDecomposeJoin.createSource(securityVeiw, viewRoot, newCols); Map<ElementSymbol, Expression> upperMapping = SymbolMap.createSymbolMap(cols, newCols).asMap(); FrameUtil.convertFrame(newSourceNode.getParent(), group, Collections.singleton(securityVeiw), upperMapping, metadata); }
updatedMapping.put(orig, entry.getKey()); FrameUtil.convertFrame(sourceNode, oldGroup, Collections.singleton(modifiedGroup), updatedMapping, metadata); removeUnnecessaryViews(sourceNode, metadata, capFinder);
/** * Add the new union back in under a view */ static PlanNode rebuild(GroupSymbol group, PlanNode toReplace, PlanNode newUnion, QueryMetadataInterface metadata, CommandContext context, PlanNode... toMap) throws TeiidComponentException, QueryPlannerException, QueryMetadataException { Set<String> groups = context.getGroups(); group = RulePlaceAccess.recontextSymbol(group, groups); PlanNode projectNode = NodeEditor.findNodePreOrder(newUnion, NodeConstants.Types.PROJECT); List<? extends Expression> projectedSymbols = (List<? extends Expression>)projectNode.getProperty(Info.PROJECT_COLS); SymbolMap newSymbolMap = RulePushAggregates.createSymbolMap(group, projectedSymbols, newUnion, metadata); PlanNode view = RuleDecomposeJoin.createSource(group, newUnion, newSymbolMap); Map<Expression, ElementSymbol> inverseMap = newSymbolMap.inserseMapping(); if (toReplace != null) { toReplace.getParent().replaceChild(toReplace, view); } Set<GroupSymbol> newGroups = Collections.singleton(group); for (PlanNode node : toMap) { FrameUtil.convertFrame(view, node.getGroups().iterator().next(), newGroups, inverseMap, metadata); } return view; }
/** * Add the new union back in under a view */ static PlanNode rebuild(GroupSymbol group, PlanNode toReplace, PlanNode newUnion, QueryMetadataInterface metadata, CommandContext context, PlanNode... toMap) throws TeiidComponentException, QueryPlannerException, QueryMetadataException { Set<String> groups = context.getGroups(); group = RulePlaceAccess.recontextSymbol(group, groups); PlanNode projectNode = NodeEditor.findNodePreOrder(newUnion, NodeConstants.Types.PROJECT); List<? extends Expression> projectedSymbols = (List<? extends Expression>)projectNode.getProperty(Info.PROJECT_COLS); SymbolMap newSymbolMap = RulePushAggregates.createSymbolMap(group, projectedSymbols, newUnion, metadata); PlanNode view = RuleDecomposeJoin.createSource(group, newUnion, newSymbolMap); Map<Expression, ElementSymbol> inverseMap = newSymbolMap.inserseMapping(); if (toReplace != null) { toReplace.getParent().replaceChild(toReplace, view); } Set<GroupSymbol> newGroups = Collections.singleton(group); for (PlanNode node : toMap) { FrameUtil.convertFrame(view, node.getGroups().iterator().next(), newGroups, inverseMap, metadata); } return view; }
static PlanNode removeGroupBy(PlanNode root, QueryMetadataInterface metadata) throws QueryPlannerException { PlanNode next = root.getFirstChild(); NodeEditor.removeChildNode(root.getParent(), root); SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP); if (!symbolMap.asMap().isEmpty()) { FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata); } PlanNode parent = next.getParent(); while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE && parent.getParent().getType() != NodeConstants.Types.SET_OP) { parent = parent.getParent(); } return parent; }
static PlanNode removeGroupBy(PlanNode root, QueryMetadataInterface metadata) throws QueryPlannerException { PlanNode next = root.getFirstChild(); NodeEditor.removeChildNode(root.getParent(), root); SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP); if (!symbolMap.asMap().isEmpty()) { FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata); } PlanNode parent = next.getParent(); while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE && parent.getParent().getType() != NodeConstants.Types.SET_OP) { parent = parent.getParent(); } return parent; }
static PlanNode removeGroupBy(PlanNode root, QueryMetadataInterface metadata) throws QueryPlannerException { PlanNode next = root.getFirstChild(); NodeEditor.removeChildNode(root.getParent(), root); SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP); if (!symbolMap.asMap().isEmpty()) { FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata); } PlanNode parent = next.getParent(); while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE && parent.getParent().getType() != NodeConstants.Types.SET_OP) { parent = parent.getParent(); } return parent; }
updatedMapping.put(orig, entry.getKey()); FrameUtil.convertFrame(sourceNode, oldGroup, Collections.singleton(modifiedGroup), updatedMapping, metadata); removeUnnecessaryViews(sourceNode, metadata, capFinder);
updatedMapping.put(orig, entry.getKey()); FrameUtil.convertFrame(sourceNode, oldGroup, Collections.singleton(modifiedGroup), updatedMapping, metadata); removeUnnecessaryViews(sourceNode, metadata, capFinder);
FrameUtil.convertFrame(accessNode.getParent(), gs, null, replacements, metadata);
FrameUtil.convertFrame(accessNode.getParent(), gs, null, replacements, metadata);
FrameUtil.convertFrame(accessNode.getParent(), gs, null, replacements, metadata);
FrameUtil.convertFrame(frameStart, group, null, nullSymbolMap, metadata);
FrameUtil.convertFrame(frameStart, group, null, nullSymbolMap, metadata);
FrameUtil.convertFrame(frameStart, group, null, nullSymbolMap, metadata);
@Test public void testJoinGroups1() throws Exception { PlanNode joinNode = getExamplePlan(); PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); ElementSymbol e1 = new ElementSymbol("e1"); //$NON-NLS-1$ e1.setGroupSymbol(getGroup(3)); projectNode.setProperty(Info.PROJECT_COLS, Arrays.asList(e1)); projectNode.addFirstChild(joinNode); projectNode.addGroup(getGroup(3)); PlanNode sourceNode = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); sourceNode.addFirstChild(projectNode); GroupSymbol four = getGroup(4); sourceNode.addGroup(four); ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$ e2.setGroupSymbol(four); SymbolMap sm = SymbolMap.createSymbolMap(Arrays.asList(e2), Arrays.asList(e1)); sourceNode.setProperty(Info.SYMBOL_MAP, sm); PlanNode projectNode1 = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); projectNode1.addFirstChild(sourceNode); projectNode1.addGroup(four); projectNode1.setProperty(Info.PROJECT_COLS, Arrays.asList(e2)); //replace source 3 with groups 5, 6 SymbolMap replacement = SymbolMap.createSymbolMap(Arrays.asList(e1), Arrays.asList(new Constant(null))); FrameUtil.convertFrame(NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SOURCE), getGroup(3), new HashSet<GroupSymbol>(Arrays.asList(getGroup(5), getGroup(6))), replacement.asMap(), null); assertEquals(4, joinNode.getGroups().size()); //even though this is a cross join it should still retain its groups assertEquals(0, NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SELECT).getGroups().size()); assertEquals(1, projectNode1.getGroups().size()); assertEquals(0, projectNode.getGroups().size()); }
@Test public void testJoinGroups() throws Exception { PlanNode joinNode = getExamplePlan(); PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); ElementSymbol e1 = new ElementSymbol("e1"); //$NON-NLS-1$ e1.setGroupSymbol(getGroup(3)); projectNode.setProperty(Info.PROJECT_COLS, Arrays.asList(e1)); projectNode.addFirstChild(joinNode); projectNode.addGroup(getGroup(3)); PlanNode sourceNode = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); sourceNode.addFirstChild(projectNode); GroupSymbol four = getGroup(4); sourceNode.addGroup(four); ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$ e2.setGroupSymbol(four); SymbolMap sm = SymbolMap.createSymbolMap(Arrays.asList(e2), Arrays.asList(e1)); sourceNode.setProperty(Info.SYMBOL_MAP, sm); PlanNode projectNode1 = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); projectNode1.addFirstChild(sourceNode); projectNode1.addGroup(four); projectNode1.setProperty(Info.PROJECT_COLS, Arrays.asList(e2)); //removing source node 3 completely SymbolMap replacement = SymbolMap.createSymbolMap(Arrays.asList(e1), Arrays.asList(new Constant(null))); FrameUtil.convertFrame(NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SOURCE), getGroup(3), null, replacement.asMap(), null); assertEquals(2, joinNode.getGroups().size()); //even though this is a cross join it should still retain its groups assertEquals(0, NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SELECT).getGroups().size()); assertEquals(1, projectNode1.getGroups().size()); assertEquals(0, projectNode.getGroups().size()); }