private QueryCommand createOldQuery(ProcedureContainer userCommand, TriggerAction ta, QueryMetadataInterface metadata, Map<ElementSymbol, Expression> params) throws QueryMetadataException, TeiidComponentException { List<ElementSymbol> allSymbols = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata); GroupSymbol old = new GroupSymbol(SQLConstants.Reserved.OLD); GroupSymbol newGroup = new GroupSymbol(SQLConstants.Reserved.NEW); for (ElementSymbol elementSymbol : allSymbols) { ElementSymbol es = elementSymbol.clone(); es.setGroupSymbol(old); params.put(es, elementSymbol); if (userCommand instanceof Update) { //default to old es = elementSymbol.clone(); es.setGroupSymbol(newGroup); params.put(es, elementSymbol); } } ArrayList<Expression> selectSymbols = new ArrayList<Expression>(LanguageObject.Util.deepClone(allSymbols, ElementSymbol.class)); QueryCommand query = new Query(new Select(selectSymbols), new From(Arrays.asList(new UnaryFromClause(ta.getView()))), ((FilteredCommand)userCommand).getCriteria(), null, null); return query; }
private QueryCommand createOldQuery(ProcedureContainer userCommand, TriggerAction ta, QueryMetadataInterface metadata, Map<ElementSymbol, Expression> params) throws QueryMetadataException, TeiidComponentException { List<ElementSymbol> allSymbols = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata); GroupSymbol old = new GroupSymbol(SQLConstants.Reserved.OLD); GroupSymbol newGroup = new GroupSymbol(SQLConstants.Reserved.NEW); for (ElementSymbol elementSymbol : allSymbols) { ElementSymbol es = elementSymbol.clone(); es.setGroupSymbol(old); params.put(es, elementSymbol); if (userCommand instanceof Update) { //default to old es = elementSymbol.clone(); es.setGroupSymbol(newGroup); params.put(es, elementSymbol); } } ArrayList<Expression> selectSymbols = new ArrayList<Expression>(LanguageObject.Util.deepClone(allSymbols, ElementSymbol.class)); QueryCommand query = new Query(new Select(selectSymbols), new From(Arrays.asList(new UnaryFromClause(ta.getView()))), ((FilteredCommand)userCommand).getCriteria(), null, null); return query; }
private QueryCommand createOldQuery(ProcedureContainer userCommand, TriggerAction ta, QueryMetadataInterface metadata, Map<ElementSymbol, Expression> params) throws QueryMetadataException, TeiidComponentException { List<ElementSymbol> allSymbols = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata); GroupSymbol old = new GroupSymbol(SQLConstants.Reserved.OLD); GroupSymbol newGroup = new GroupSymbol(SQLConstants.Reserved.NEW); for (ElementSymbol elementSymbol : allSymbols) { ElementSymbol es = elementSymbol.clone(); es.setGroupSymbol(old); params.put(es, elementSymbol); if (userCommand instanceof Update) { //default to old es = elementSymbol.clone(); es.setGroupSymbol(newGroup); params.put(es, elementSymbol); } } ArrayList<Expression> selectSymbols = new ArrayList<Expression>(LanguageObject.Util.deepClone(allSymbols, ElementSymbol.class)); QueryCommand query = new Query(new Select(selectSymbols), new From(Arrays.asList(new UnaryFromClause(ta.getView()))), ((FilteredCommand)userCommand).getCriteria(), null, null); return query; }
/** * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean) */ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals) throws QueryMetadataException, QueryResolverException, TeiidComponentException { //by creating a new group context here it means that variables will resolve with a higher precedence than input/changing GroupContext externalGroups = command.getExternalGroupContexts(); List<ElementSymbol> symbols = new LinkedList<ElementSymbol>(); String countVar = ProcedureReservedWords.VARIABLES + Symbol.SEPARATOR + ProcedureReservedWords.ROWCOUNT; ElementSymbol updateCount = new ElementSymbol(countVar); updateCount.setType(DataTypeManager.DefaultDataClasses.INTEGER); symbols.add(updateCount); ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, metadata.getMetadataStore(), externalGroups, symbols); if (command instanceof TriggerAction) { TriggerAction ta = (TriggerAction)command; CreateProcedureCommand cmd = new CreateProcedureCommand(ta.getBlock()); cmd.setVirtualGroup(ta.getView()); //TODO: this is not generally correct - we should update the api to set the appropriate type cmd.setUpdateType(Command.TYPE_INSERT); resolveBlock(cmd, ta.getBlock(), ta.getExternalGroupContexts(), metadata); return; } CreateProcedureCommand procCommand = (CreateProcedureCommand) command; resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata); }
/** * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean) */ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals) throws QueryMetadataException, QueryResolverException, TeiidComponentException { //by creating a new group context here it means that variables will resolve with a higher precedence than input/changing GroupContext externalGroups = command.getExternalGroupContexts(); List<ElementSymbol> symbols = new LinkedList<ElementSymbol>(); String countVar = ProcedureReservedWords.VARIABLES + Symbol.SEPARATOR + ProcedureReservedWords.ROWCOUNT; ElementSymbol updateCount = new ElementSymbol(countVar); updateCount.setType(DataTypeManager.DefaultDataClasses.INTEGER); symbols.add(updateCount); ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, metadata.getMetadataStore(), externalGroups, symbols); if (command instanceof TriggerAction) { TriggerAction ta = (TriggerAction)command; CreateProcedureCommand cmd = new CreateProcedureCommand(ta.getBlock()); cmd.setVirtualGroup(ta.getView()); //TODO: this is not generally correct - we should update the api to set the appropriate type cmd.setUpdateType(Command.TYPE_INSERT); resolveBlock(cmd, ta.getBlock(), ta.getExternalGroupContexts(), metadata); return; } CreateProcedureCommand procCommand = (CreateProcedureCommand) command; resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata); }
/** * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean) */ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals) throws QueryMetadataException, QueryResolverException, TeiidComponentException { //by creating a new group context here it means that variables will resolve with a higher precedence than input/changing GroupContext externalGroups = command.getExternalGroupContexts(); List<ElementSymbol> symbols = new LinkedList<ElementSymbol>(); String countVar = ProcedureReservedWords.VARIABLES + Symbol.SEPARATOR + ProcedureReservedWords.ROWCOUNT; ElementSymbol updateCount = new ElementSymbol(countVar); updateCount.setType(DataTypeManager.DefaultDataClasses.INTEGER); symbols.add(updateCount); ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, metadata.getMetadataStore(), externalGroups, symbols); if (command instanceof TriggerAction) { TriggerAction ta = (TriggerAction)command; CreateProcedureCommand cmd = new CreateProcedureCommand(ta.getBlock()); cmd.setVirtualGroup(ta.getView()); //TODO: this is not generally correct - we should update the api to set the appropriate type cmd.setUpdateType(Command.TYPE_INSERT); resolveBlock(cmd, ta.getBlock(), ta.getExternalGroupContexts(), metadata); return; } CreateProcedureCommand procCommand = (CreateProcedureCommand) command; resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata); }
result.setLookupMap(RelationalNode.createLookupMap(query.getProjectedSymbols())); CreateProcedureCommand command = new CreateProcedureCommand(ta.getBlock()); command.setVirtualGroup(ta.getView()); command.setUpdateType(userCommand.getType()); ProcedurePlan rowProcedure = (ProcedurePlan)QueryOptimizer.optimizePlan(command, metadata, idGenerator, capFinder, analysisRecord, context);
result.setLookupMap(RelationalNode.createLookupMap(query.getProjectedSymbols())); CreateProcedureCommand command = new CreateProcedureCommand(ta.getBlock()); command.setVirtualGroup(ta.getView()); command.setUpdateType(userCommand.getType()); ProcedurePlan rowProcedure = (ProcedurePlan)QueryOptimizer.optimizePlan(command, metadata, idGenerator, capFinder, analysisRecord, context);
result.setLookupMap(RelationalNode.createLookupMap(query.getProjectedSymbols())); CreateProcedureCommand command = new CreateProcedureCommand(ta.getBlock()); command.setVirtualGroup(ta.getView()); command.setUpdateType(userCommand.getType()); ProcedurePlan rowProcedure = (ProcedurePlan)QueryOptimizer.optimizePlan(command, metadata, idGenerator, capFinder, analysisRecord, context);
ta.setView(container); List<ElementSymbol> viewElements = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata); if (type == Command.TYPE_UPDATE || type == Command.TYPE_INSERT) { ProcedureContainerResolver.addChanging(tma.getMetadataStore(), externalGroups, viewElements); ProcedureContainerResolver.addScalarGroup(SQLConstants.Reserved.NEW, tma.getMetadataStore(), externalGroups, viewElements, false); if (type == Command.TYPE_INSERT) { List<ElementSymbol> key = InsertResolver.getAutoIncrementKey(ta.getView().getMetadataID(), viewElements, metadata); if (key != null) { ProcedureContainerResolver.addScalarGroup(SQLConstants.NonReserved.KEY, tma.getMetadataStore(), externalGroups, key, true);
ta.setView(container); List<ElementSymbol> viewElements = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata); if (type == Command.TYPE_UPDATE || type == Command.TYPE_INSERT) { ProcedureContainerResolver.addChanging(tma.getMetadataStore(), externalGroups, viewElements); ProcedureContainerResolver.addScalarGroup(SQLConstants.Reserved.NEW, tma.getMetadataStore(), externalGroups, viewElements, false); if (type == Command.TYPE_INSERT) { List<ElementSymbol> key = InsertResolver.getAutoIncrementKey(ta.getView().getMetadataID(), viewElements, metadata); if (key != null) { ProcedureContainerResolver.addScalarGroup(SQLConstants.NonReserved.KEY, tma.getMetadataStore(), externalGroups, key, true);
ta.setView(container); List<ElementSymbol> viewElements = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata); if (type == Command.TYPE_UPDATE || type == Command.TYPE_INSERT) { ProcedureContainerResolver.addChanging(tma.getMetadataStore(), externalGroups, viewElements);