/** * Resolve a command in a given type container and type context. * @param type The {@link Command} type * @param inferProcedureResultSetColumns if true and the currentCommand is a procedure definition, then resolving will set the getResultSetColumns on the command to what is discoverable in the procedure body. */ public static TempMetadataStore resolveCommand(Command currentCommand, GroupSymbol container, int type, QueryMetadataInterface metadata, boolean inferProcedureResultSetColumns) throws QueryResolverException, TeiidComponentException { ResolverUtil.resolveGroup(container, metadata); switch (type) { case Command.TYPE_QUERY: QueryNode queryNode = metadata.getVirtualPlan(container.getMetadataID()); return resolveWithBindingMetadata(currentCommand, metadata, queryNode, false); case Command.TYPE_INSERT: case Command.TYPE_UPDATE: case Command.TYPE_DELETE: case Command.TYPE_STORED_PROCEDURE: ProcedureContainerResolver.findChildCommandMetadata(currentCommand, container, type, metadata, inferProcedureResultSetColumns); } return resolveCommand(currentCommand, metadata, false); }
/** Parse a query from a query node and return a Command object. * @param groupName * * @param queryNode The query node which contains a query * @param planEnv The planner environment * @return New Command object * @throws QueryPlannerException If an error occurred * @since 4.3 */ static Command getQuery(String groupName, QueryNode queryNode, XMLPlannerEnvironment env) throws QueryPlannerException { Command query = queryNode.getCommand(); if (query == null) { try { query = QueryParser.getQueryParser().parseCommand(queryNode.getQuery()); QueryResolver.resolveWithBindingMetadata(query, env.getGlobalMetadata().getDesignTimeMetadata(), queryNode, true); } catch (TeiidException e) { throw new QueryPlannerException(QueryPlugin.Event.TEIID30281, e, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30281, new Object[]{groupName, queryNode.getQuery()})); } } return query; }
QueryResolver.resolveWithBindingMetadata(result, qmi, qnode, true); } else { QueryResolver.resolveCommand(result, qmi, false);