public void helpTestValidJoin(PlanNode joinNode, PlanNode accessNode, boolean expectedValid) throws QueryMetadataException, TeiidComponentException { RuleChooseDependent rule = new RuleChooseDependent(); RuleChooseJoinStrategy.chooseJoinStrategy(joinNode, metadata); boolean isValid = rule.isValidJoin(joinNode, accessNode, AnalysisRecord.createNonRecordingRecord()); assertEquals("Valid join check is wrong ", expectedValid, isValid); //$NON-NLS-1$ }
CreateProcedureCommand helpResolveUpdateProcedure(String procedure, String userUpdateStr) throws QueryParserException, QueryResolverException, TeiidComponentException, QueryMetadataException { QueryMetadataInterface metadata = RealMetadataFactory.exampleUpdateProc(TriggerEvent.UPDATE, procedure); ProcedureContainer userCommand = (ProcedureContainer)QueryParser.getQueryParser().parseCommand(userUpdateStr); QueryResolver.resolveCommand(userCommand, metadata); return (CreateProcedureCommand)QueryResolver.expandCommand(userCommand, metadata, AnalysisRecord.createNonRecordingRecord()); }
@Test public void testProcParamComparison_defect13653() { String userSql = "SELECT * FROM (EXEC mmspTest1.MMSP5('a')) AS a, (EXEC mmsptest1.mmsp6('b')) AS b"; //$NON-NLS-1$ QueryMetadataInterface metadata = RealMetadataFactory.exampleBQTCached(); AnalysisRecord analysis = AnalysisRecord.createNonRecordingRecord(); Query query = (Query) helpResolve(userSql, metadata); From from = query.getFrom(); Collection fromClauses = from.getClauses(); SPParameter params[] = new SPParameter[2]; Iterator iter = fromClauses.iterator(); while(iter.hasNext()) { SubqueryFromClause clause = (SubqueryFromClause) iter.next(); StoredProcedure proc = (StoredProcedure) clause.getCommand(); for (SPParameter param : proc.getParameters()) { if(param.getParameterType() == ParameterInfo.IN) { if(params[0] == null) { params[0] = param; } else { params[1] = param; } } } } assertTrue("Params should be not equal", ! params[0].equals(params[1])); //$NON-NLS-1$ }
private void validateProcedure(String userUpdateStr, QueryMetadataInterface metadata) throws QueryResolverException, QueryMetadataException, TeiidComponentException, QueryValidatorException { ProcedureContainer command = (ProcedureContainer)helpResolve(userUpdateStr, metadata); Command proc = QueryResolver.expandCommand(command, metadata, AnalysisRecord.createNonRecordingRecord()); ValidatorReport report = Validator.validate(proc, metadata); if(report.hasItems()) { throw new QueryValidatorException(report.getFailureMessage()); } report = Validator.validate(command, metadata); if(report.hasItems()) { throw new QueryValidatorException(report.getFailureMessage()); } }
plan = plan.getParent(); new RuleAssignOutputElements(false).execute(plan, metadata, capabilitiesFinder, null, AnalysisRecord.createNonRecordingRecord(), context); projected = (List<? extends Expression>) indNode.getProperty(Info.OUTPUT_COLS);
plan = plan.getParent(); new RuleAssignOutputElements(false).execute(plan, metadata, capabilitiesFinder, null, AnalysisRecord.createNonRecordingRecord(), context); projected = (List<? extends Expression>) indNode.getProperty(Info.OUTPUT_COLS);
plan = plan.getParent(); new RuleAssignOutputElements(false).execute(plan, metadata, capabilitiesFinder, null, AnalysisRecord.createNonRecordingRecord(), context); projected = (List<? extends Expression>) indNode.getProperty(Info.OUTPUT_COLS);
.createNonRecordingRecord(), procEnv .getContext());
.createNonRecordingRecord(), procEnv .getContext());
.createNonRecordingRecord(), procEnv .getContext());
@Test public void testPushAcrossFrameWithAccessNode() throws Exception { QueryMetadataInterface metadata = new TempMetadataAdapter(RealMetadataFactory.example1Cached(), new TempMetadataStore()); Command command = TestOptimizer.helpGetCommand("select * from (select * from pm1.g1 union select * from pm1.g2) x where e1 = 1", metadata); //$NON-NLS-1$ Command subCommand = TestOptimizer.helpGetCommand("select * from pm1.g1 union select * from pm1.g2", metadata); //$NON-NLS-1$ RelationalPlanner p = new RelationalPlanner(); CommandContext cc = new CommandContext(); p.initialize(command, null, metadata, null, null, cc); PlanNode root = p.generatePlan(command); PlanNode child = p.generatePlan(subCommand); PlanNode sourceNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.SOURCE); sourceNode.addFirstChild(child); sourceNode.setProperty(NodeConstants.Info.SYMBOL_MAP, SymbolMap.createSymbolMap(sourceNode.getGroups().iterator().next(), (List<Expression>)child.getFirstChild().getProperty(Info.PROJECT_COLS), metadata)); //add a dummy access node PlanNode accessNode = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); accessNode.addGroups(child.getFirstChild().getGroups()); child.getFirstChild().addAsParent(accessNode); new RulePushSelectCriteria().execute(root, metadata, new DefaultCapabilitiesFinder(), new RuleStack(), AnalysisRecord.createNonRecordingRecord(), cc); // the select node should still be above the access node accessNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.ACCESS); assertEquals(NodeConstants.Types.SELECT, accessNode.getParent().getType()); assertNull(NodeEditor.findNodePreOrder(accessNode, NodeConstants.Types.SELECT)); }