public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals) throws QueryMetadataException, QueryResolverException, TeiidComponentException { BatchedUpdateCommand batchedUpdateCommand = (BatchedUpdateCommand) command; for (Command subCommand : batchedUpdateCommand.getUpdateCommands()) { QueryResolver.setChildMetadata(subCommand, command); QueryResolver.resolveCommand(subCommand, metadata.getMetadata()); } }
public static Command expandCommand(ProcedureContainer proc, QueryMetadataInterface metadata, AnalysisRecord analysisRecord) throws QueryResolverException, QueryMetadataException, TeiidComponentException { ProcedureContainerResolver cr = (ProcedureContainerResolver)chooseResolver(proc, metadata); Command command = cr.expandCommand(proc, metadata, analysisRecord); if (command == null) { return null; } resolveCommand(command, proc.getGroup(), proc.getType(), metadata.getDesignTimeMetadata(), false); return command; }
public static UpdateInfo getUpdateInfo(GroupSymbol group, QueryMetadataInterface metadata) throws TeiidComponentException, QueryMetadataException, QueryResolverException { if (!QueryResolver.isView(group, metadata)) { return null; } try { return QueryResolver.resolveView(group, metadata.getVirtualPlan(group.getMetadataID()), SQLConstants.Reserved.SELECT, metadata, false).getUpdateInfo(); } catch (QueryValidatorException e) { throw new QueryResolverException(e); } }
QueryResolver.resolveWithBindingMetadata(result, qmi, qnode, true); } else { QueryResolver.resolveCommand(result, qmi, false); validateProjectedSymbols(virtualGroup, qmi, result); cachedNode = new QueryNode(qnode.getQuery()); cachedNode.setCommand(result); if(isView(virtualGroup, qmi)) { String updatePlan = qmi.getUpdatePlan(virtualGroup.getMetadataID()); String deletePlan = qmi.getDeletePlan(virtualGroup.getMetadataID()); UpdateValidator validator = new UpdateValidator(qmi, determineType(insertPlan), determineType(updatePlan), determineType(deletePlan)); validator.validate(result, elements); UpdateInfo info = validator.getUpdateInfo();
protected void resolveCommand(Command command) throws QueryResolverException, TeiidComponentException { //ensure that the user command is distinct from the processing command //rewrite and planning may alter options, symbols, etc. QueryResolver.resolveCommand(command, metadata); }
QueryResolver.resolveSubqueries(command, metadata, null); QueryResolver.setChildMetadata(insert.getQueryExpression(), command); QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false); QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false); resolveTypes(insert, metadata, values, usingQuery);
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()); }
viewTarget = false; if (viewTarget && !QueryResolver.isView(alter.getTarget(), metadata)) { throw new QueryResolverException(QueryPlugin.Event.TEIID30116, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30116, alter.getTarget())); QueryResolver.resolveCommand(alter.getDefinition(), alter.getTarget(), type, metadata.getDesignTimeMetadata(), false);
Command command = parser.parseProcedure(p.getQueryPlan(), false); validateNoReferences(command, report, model); QueryResolver.resolveCommand(command, new GroupSymbol(p.getFullName()), Command.TYPE_STORED_PROCEDURE, metadata, false); resolverReport = Validator.validate(command, metadata); determineDependencies(p, command); QueryCommand command = (QueryCommand)parser.parseCommand(selectTransformation); validateNoReferences(command, report, model); QueryResolver.resolveCommand(command, metadata); resolverReport = Validator.validate(command, metadata); if (!resolverReport.hasItems()) { node = QueryResolver.resolveView(symbol, new QueryNode(selectTransformation), SQLConstants.Reserved.SELECT, metadata, true);
for (Expression ses : parseBindings(queryNode)) { String name = Symbol.getShortName(ses); if (ses instanceof AliasSymbol) { QueryResolver.setChildMetadata(currentCommand, rootExternalStore, externalGroups); TempMetadataStore result = resolveCommand(currentCommand, metadata, false); if (replaceBindings && symbolMap != null && !symbolMap.isEmpty()) { ExpressionMappingVisitor emv = new ExpressionMappingVisitor(symbolMap);
public static void validateProjectedSymbols(GroupSymbol virtualGroup, QueryMetadataInterface qmi, Command result) throws QueryMetadataException, TeiidComponentException, QueryValidatorException { //ensure that null types match the view List<ElementSymbol> symbols = ResolverUtil.resolveElementsInGroup(virtualGroup, qmi); List<Expression> projectedSymbols = result.getProjectedSymbols(); validateProjectedSymbols(virtualGroup, symbols, projectedSymbols); //setqueries store the projected types separately if (result instanceof SetQuery) { List<Class<?>> types = new ArrayList<Class<?>>(); for (ElementSymbol es : symbols) { types.add(es.getType()); } ((SetQuery)result).setProjectedTypes(types, qmi.getDesignTimeMetadata()); } }
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()); } }
/** * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter) */ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata) throws QueryMetadataException, QueryResolverException, TeiidComponentException { //Cast to known type Delete delete = (Delete) command; Set<GroupSymbol> groups = new HashSet<GroupSymbol>(); groups.add(delete.getGroup()); QueryResolver.resolveSubqueries(command, metadata, groups); ResolverVisitor.resolveLanguageObject(delete, groups, delete.getExternalGroupContexts(), metadata); }
public static Map<ElementSymbol, Expression> getVariableValues(Command command, boolean changingOnly, QueryMetadataInterface metadata) throws QueryMetadataException, QueryResolverException, TeiidComponentException { CommandResolver resolver = chooseResolver(command, metadata); if (resolver instanceof VariableResolver) { return ((VariableResolver)resolver).getVariableValues(command, changingOnly, metadata); } return Collections.emptyMap(); }
Command c = QueryResolver.resolveView(group, metadata.getVirtualPlan(viewId), SQLConstants.Reserved.SELECT, metadata, false).getCommand(); CacheHint hint = c.getCacheHint(); if (hint != null) {
public static void setChildMetadata(Command subCommand, Command parent) { TempMetadataStore childMetadata = parent.getTemporaryMetadata(); GroupContext parentContext = parent.getExternalGroupContexts(); setChildMetadata(subCommand, childMetadata, parentContext); }
public ProcessorPlan optimize(ProcedureContainer userCommand, TriggerAction ta, IDGenerator idGenerator, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, AnalysisRecord analysisRecord, CommandContext context) throws QueryMetadataException, TeiidComponentException, QueryResolverException, TeiidProcessingException { QueryRewriter.rewrite(ta, metadata, context, QueryResolver.getVariableValues(userCommand, true, metadata)); Map<ElementSymbol, Expression> mapping = QueryResolver.getVariableValues(userCommand, false, metadata); for (Map.Entry<ElementSymbol, Expression> entry : mapping.entrySet()) { entry.setValue(QueryRewriter.rewriteExpression(entry.getValue(), context, metadata));
result = (Command) result.clone(); QueryResolver.resolveCommand(result, qmi, false); Request.validateWithVisitor(new ValidationVisitor(), qmi, result); validateProjectedSymbols(virtualGroup, qmi, result); cachedNode = new QueryNode(qnode.getQuery()); cachedNode.setCommand(result); if(isView(virtualGroup, qmi)) { String updatePlan = qmi.getUpdatePlan(virtualGroup.getMetadataID()); String deletePlan = qmi.getDeletePlan(virtualGroup.getMetadataID()); UpdateValidator validator = new UpdateValidator(qmi, determineType(insertPlan), determineType(updatePlan), determineType(deletePlan)); validator.validate(result, elements); UpdateInfo info = validator.getUpdateInfo();
protected void resolveCommand(Command command) throws QueryResolverException, TeiidComponentException { //ensure that the user command is distinct from the processing command //rewrite and planning may alter options, symbols, etc. QueryResolver.resolveCommand(command, metadata); }
QueryResolver.resolveSubqueries(command, metadata, null); QueryResolver.setChildMetadata(insert.getQueryExpression(), command); QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false); QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false); resolveTypes(insert, metadata, values, usingQuery);