/** * By default, this visitor deeply traverses all commands, and there are * no symbols to ignore */ public static final Collection<Symbol> checkSymbols(LanguageObject obj){ CheckNoTempMetadataIDsVisitor visitor = new CheckNoTempMetadataIDsVisitor(); DeepPreOrderNavigator.doVisit(obj, visitor); return visitor.getSymbols(); }
/** * Helps resolve command, then check that the actual resolved Elements variables are the same as * the expected variable names. The variableNames param will be empty unless the subquery * is a correlated subquery. * @param sql Command to parse and resolve * @param variableNames expected element symbol variable names, in order * @return parsed and resolved Query */ private Command helpResolveSubquery(String sql, String[] variableNames){ Query query = (Query)helpResolve(sql); Collection<ElementSymbol> variables = getVariables(query); assertTrue("Expected variables size " + variableNames.length + " but was " + variables.size(), //$NON-NLS-1$ //$NON-NLS-2$ variables.size() == variableNames.length); Iterator<ElementSymbol> variablesIter = variables.iterator(); for (int i=0; variablesIter.hasNext(); i++) { ElementSymbol variable = variablesIter.next(); assertTrue("Expected variable name " + variableNames[i] + " but was " + variable.getName(), //$NON-NLS-1$ //$NON-NLS-2$ variable.getName().equalsIgnoreCase(variableNames[i])); } if (variableNames.length == 0){ //There should be no TempMetadataIDs Collection<Symbol> symbols = CheckNoTempMetadataIDsVisitor.checkSymbols(query); assertTrue("Expected no symbols with temp metadataIDs, but got " + symbols, symbols.isEmpty()); //$NON-NLS-1$ } return query; }