String fullName = metadata.getFullName(group.getMetadataID());
String queryName = group.getName();
StoredProcedureInfo storedProcedureInfo = metadata.getStoredProcedureInfoForProcedure(fullName);
StoredProcedure storedProcedureCommand = new StoredProcedure();
storedProcedureCommand.setProcedureRelational(true);
storedProcedureCommand.setProcedureName(fullName);
List<SPParameter> metadataParams = storedProcedureInfo.getParameters();
Query procQuery = new Query();
From from = new From();
from.addClause(new SubqueryFromClause("X", storedProcedureCommand)); //$NON-NLS-1$
procQuery.setFrom(from);
Select select = new Select();
select.addSymbol(new AllInGroupSymbol("X.*")); //$NON-NLS-1$
procQuery.setSelect(select);
List<String> accessPatternElementNames = new LinkedList<String>();
int paramIndex = 1;
for (SPParameter metadataParameter : metadataParams) {
SPParameter clonedParam = (SPParameter)metadataParameter.clone();
if (clonedParam.getParameterType()==ParameterInfo.IN || metadataParameter.getParameterType()==ParameterInfo.INOUT) {
ElementSymbol paramSymbol = clonedParam.getParameterSymbol();
Reference ref = new Reference(paramSymbol);
clonedParam.setExpression(ref);
clonedParam.setIndex(paramIndex++);
storedProcedureCommand.setParameter(clonedParam);
String aliasName = paramSymbol.getShortName();
if (metadataParameter.getParameterType()==ParameterInfo.INOUT) {
aliasName += "_IN"; //$NON-NLS-1$
}
SingleElementSymbol newSymbol = new AliasSymbol(aliasName, new ExpressionSymbol(paramSymbol.getShortName(), ref));
select.addSymbol(newSymbol);
accessPatternElementNames.add(queryName + ElementSymbol.SEPARATOR + aliasName);
}
}
QueryResolver.resolveCommand(procQuery, metadata.getMetadata());
List<SingleElementSymbol> projectedSymbols = procQuery.getProjectedSymbols();
HashSet<String> foundNames = new HashSet<String>();
for (SingleElementSymbol ses : projectedSymbols) {
if (!foundNames.add(ses.getShortCanonicalName())) {
throw new QueryResolverException(QueryPlugin.Util.getString("SimpleQueryResolver.Proc_Relational_Name_conflict", fullName)); //$NON-NLS-1$
}
}
TempMetadataID id = metadata.getMetadataStore().getTempGroupID(queryName);
if (id == null) {
metadata.getMetadataStore().addTempGroup(queryName, projectedSymbols, true);
id = metadata.getMetadataStore().getTempGroupID(queryName);
id.setOriginalMetadataID(storedProcedureCommand.getProcedureID());
if (!accessPatternElementNames.isEmpty()) {
List<TempMetadataID> accessPatternIds = new LinkedList<TempMetadataID>();
for (String name : accessPatternElementNames) {
accessPatternIds.add(metadata.getMetadataStore().getTempElementID(name));