public void testClone3() { List symbols = new ArrayList(); ElementSymbol a1 = new ElementSymbol("a1"); //$NON-NLS-1$ a1.setType(DataTypeManager.DefaultDataClasses.STRING); symbols.add(a1); DynamicCommand sqlCmd = new DynamicCommand(); Expression sql = new Constant("SELECT a1 FROM g WHERE a2 = 5"); //$NON-NLS-1$ sqlCmd.setSql(sql); sqlCmd.setAsColumns(symbols); sqlCmd.setAsClauseSet(true); sqlCmd.setIntoGroup(new GroupSymbol("#g")); //$NON-NLS-1$ List projectedSymbols = sqlCmd.getProjectedSymbols(); UnitTestUtil.helpTestEquivalence(0, sqlCmd, sqlCmd.clone()); assertEquals(projectedSymbols, ((DynamicCommand)sqlCmd.clone()).getProjectedSymbols()); }
/** * @see org.teiid.query.sql.lang.QueryCommand#clone() */ public Object clone() { DynamicCommand clone = new DynamicCommand(); clone.setSql((Expression)getSql().clone()); if (asColumns != null) { List<ElementSymbol> cloneColumns = LanguageObject.Util.deepClone(asColumns, ElementSymbol.class); clone.setAsColumns(cloneColumns); } if (intoGroup != null) { clone.setIntoGroup(intoGroup.clone()); } if (using != null) { clone.setUsing((SetClauseList)using.clone()); } clone.setUpdatingModelCount(getUpdatingModelCount()); copyMetadataState(clone); clone.setAsClauseSet(isAsClauseSet()); return clone; }
@Override public Boolean requiresTransaction(boolean transactionalReads) { Boolean expressionRequires = SubqueryAwareRelationalNode.requiresTransaction(transactionalReads, ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(dynamicCommand.getSql())); if (expressionRequires != null && expressionRequires) { return true; } if (this.dynamicCommand.getUsing() != null) { Boolean setRequires = SubqueryAwareRelationalNode.requiresTransaction(transactionalReads, ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(this.dynamicCommand.getUsing().getClauseMap().values())); if (setRequires == null) { if (expressionRequires == null) { return true; } expressionRequires = null; } else if (setRequires) { return true; } } if ((dynamicCommand.getUpdatingModelCount() < 2 && transactionalReads) || dynamicCommand.getUpdatingModelCount() == 1) { return expressionRequires==null?true:null; } if (dynamicCommand.getUpdatingModelCount() > 1) { return true; } return expressionRequires; }
Clob value = (Clob)procEnv.evaluateExpression(dynamicCommand.getSql()); if (dynamicCommand.getIntoGroup() != null || returnable) { command.setExternalGroupContexts(dynamicCommand.getExternalGroupContexts()); command.setTemporaryMetadata(dynamicCommand.getTemporaryMetadata().clone()); updateContextWithUsingValues(procEnv, localContext); if (dynamicCommand.getUsing() != null && !dynamicCommand.getUsing().isEmpty()) { metadataStore.addTempGroup(Reserved.USING, new LinkedList<ElementSymbol>(dynamicCommand.getUsing().getClauseMap().keySet())); GroupSymbol using = new GroupSymbol(Reserved.USING); using.setMetadataID(metadataStore.getTempGroupID(Reserved.USING)); command.addExternalGroupToContext(using); metadataStore.addTempGroup(ProcedureReservedWords.DVARS, new LinkedList<ElementSymbol>(dynamicCommand.getUsing().getClauseMap().keySet())); using = new GroupSymbol(ProcedureReservedWords.DVARS); using.setMetadataID(metadataStore.getTempGroupID(ProcedureReservedWords.DVARS)); boolean updateCommand = false; if (!command.returnsResultSet() && !(command instanceof StoredProcedure)) { if (dynamicCommand.isAsClauseSet()) { if (dynamicCommand.getProjectedSymbols().size() != 1 || ((Expression)dynamicCommand.getProjectedSymbols().get(0)).getType() != DataTypeManager.DefaultDataClasses.INTEGER) { throw new QueryProcessingException(QueryPlugin.Event.TEIID31157, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31157)); } else if (dynamicCommand.getAsColumns() != null && !dynamicCommand.getAsColumns().isEmpty()) { command = QueryRewriter.createInlineViewQuery(new GroupSymbol("X"), command, metadata, dynamicCommand.getAsColumns()); //$NON-NLS-1$ if (dynamicCommand.getIntoGroup() != null) { Insert insert = new Insert(dynamicCommand.getIntoGroup(), dynamicCommand.getAsColumns(), Collections.emptyList());
append(IMMEDIATE); append(SPACE); visitNode(obj.getSql()); if (obj.isAsClauseSet()) { beginClause(1); append(AS); append(SPACE); for (int i = 0; i < obj.getAsColumns().size(); i++) { ElementSymbol symbol = (ElementSymbol)obj.getAsColumns().get(i); outputShortName(symbol); append(SPACE); append(DataTypeManager.getDataTypeName(symbol.getType())); if (i < obj.getAsColumns().size() - 1) { append(", "); //$NON-NLS-1$ if (obj.getIntoGroup() != null) { beginClause(1); append(INTO); append(SPACE); visitNode(obj.getIntoGroup()); if (obj.getUsing() != null && !obj.getUsing().isEmpty()) { beginClause(1); append(USING); append(SPACE); visitNode(obj.getUsing()); if (obj.getUpdatingModelCount() > 0) {
Iterator columns = dynamicCmd.getAsColumns().iterator(); if (dynamicCmd.getIntoGroup() == null) { while (columns.hasNext()) { ElementSymbol column = (ElementSymbol)columns.next(); column.setMetadataID(new TempMetadataID(column.getShortName(), column.getType())); } else if (dynamicCmd.getIntoGroup().isTempGroupSymbol()) { resolvedColumns = true; while (columns.hasNext()) { ElementSymbol column = (ElementSymbol)columns.next(); column.setGroupSymbol(new GroupSymbol(dynamicCmd.getIntoGroup().getName())); ResolverVisitor.resolveLanguageObject(dynamicCmd, groups, dynamicCmd.getExternalGroupContexts(), metadata); String sqlType = DataTypeManager.getDataTypeName(dynamicCmd.getSql().getType()); String targetType = DataTypeManager.DefaultDataTypes.CLOB; dynamicCmd.setSql(ResolverUtil.convertExpression(dynamicCmd.getSql(), targetType, metadata)); if (dynamicCmd.getUsing() != null && !dynamicCmd.getUsing().isEmpty()) { for (SetClause clause : dynamicCmd.getUsing().getClauses()) { ElementSymbol id = clause.getSymbol(); id.setGroupSymbol(new GroupSymbol(ProcedureReservedWords.DVARS)); GroupSymbol intoSymbol = dynamicCmd.getIntoGroup(); if (intoSymbol != null) { if (!intoSymbol.isImplicitTempGroupSymbol()) {
public void testUpdatingModelCount() { DynamicCommand sqlCmd = new DynamicCommand(); sqlCmd.setUpdatingModelCount(1); assertEquals(1, sqlCmd.getUpdatingModelCount()); sqlCmd.setUpdatingModelCount(3); assertEquals(2, sqlCmd.getUpdatingModelCount()); sqlCmd.setUpdatingModelCount(-1); assertEquals(0, sqlCmd.getUpdatingModelCount()); }
DynamicCommand dynCommand = (DynamicCommand)subCommand; if(dynCommand.getIntoGroup() == null && !dynCommand.isAsClauseSet()) { if ((command.getResultSetColumns() != null && command.getResultSetColumns().isEmpty()) || !cmdStmt.isReturnable() || command.getResultSetColumns() == null) { dynCommand.setAsColumns(Collections.EMPTY_LIST); } else { dynCommand.setAsColumns(command.getResultSetColumns());
@Test public void testDynamicCommandStatementWithUsing() throws Exception { SetClauseList using = new SetClauseList(); ElementSymbol a = new ElementSymbol("a"); //$NON-NLS-1$ using.addClause(a, new ElementSymbol("b")); //$NON-NLS-1$ DynamicCommand sqlCmd = new DynamicCommand(); Expression sql = new ElementSymbol("z"); //$NON-NLS-1$ sqlCmd.setSql(sql); sqlCmd.setUsing(using); CommandStatement cmdStmt = new CommandStatement(sqlCmd); helpStmtTest("execute immediate z using a=b;", "EXECUTE IMMEDIATE z USING a = b;", //$NON-NLS-1$ //$NON-NLS-2$ cmdStmt); }
@Override public void visit(CommandStatement obj) { if (this.createProc == null || this.createProc.getResultSetColumns().isEmpty() || !obj.isReturnable() || !obj.getCommand().returnsResultSet()) { return; } List<? extends Expression> symbols = obj.getCommand().getResultSetColumns(); if (symbols == null && obj.getCommand() instanceof DynamicCommand) { DynamicCommand cmd = (DynamicCommand)obj.getCommand(); cmd.setAsColumns(this.createProc.getResultSetColumns()); return; } try { QueryResolver.validateProjectedSymbols(createProc.getVirtualGroup(), createProc.getResultSetColumns(), symbols); } catch (QueryValidatorException e) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31121, createProc.getVirtualGroup(), obj, e.getMessage()), obj); } }
public void testClone2() { List symbols = new ArrayList(); ElementSymbol a1 = new ElementSymbol("a1"); //$NON-NLS-1$ a1.setType(DataTypeManager.DefaultDataClasses.STRING); symbols.add(a1); Expression sql = new Constant("SELECT * FROM g"); //$NON-NLS-1$ SetClauseList using = new SetClauseList(); using.addClause(a1, a1); DynamicCommand sqlCmd = new DynamicCommand(sql, symbols, new GroupSymbol("#g"), using); //$NON-NLS-1$ UnitTestUtil.helpTestEquivalence(0, sqlCmd, sqlCmd.clone()); }
Clob value = (Clob)procEnv.evaluateExpression(dynamicCommand.getSql()); if (dynamicCommand.getIntoGroup() != null || returnable) { command.setExternalGroupContexts(dynamicCommand.getExternalGroupContexts()); command.setTemporaryMetadata(dynamicCommand.getTemporaryMetadata().clone()); updateContextWithUsingValues(procEnv, localContext); if (dynamicCommand.getUsing() != null && !dynamicCommand.getUsing().isEmpty()) { metadataStore.addTempGroup(Reserved.USING, new LinkedList<ElementSymbol>(dynamicCommand.getUsing().getClauseMap().keySet())); GroupSymbol using = new GroupSymbol(Reserved.USING); using.setMetadataID(metadataStore.getTempGroupID(Reserved.USING)); command.addExternalGroupToContext(using); metadataStore.addTempGroup(ProcedureReservedWords.DVARS, new LinkedList<ElementSymbol>(dynamicCommand.getUsing().getClauseMap().keySet())); using = new GroupSymbol(ProcedureReservedWords.DVARS); using.setMetadataID(metadataStore.getTempGroupID(ProcedureReservedWords.DVARS)); boolean updateCommand = false; if (!command.returnsResultSet() && !(command instanceof StoredProcedure)) { if (dynamicCommand.isAsClauseSet()) { if (dynamicCommand.getProjectedSymbols().size() != 1 || ((Expression)dynamicCommand.getProjectedSymbols().get(0)).getType() != DataTypeManager.DefaultDataClasses.INTEGER) { throw new QueryProcessingException(QueryPlugin.Event.TEIID31157, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31157)); } else if (dynamicCommand.getAsColumns() != null && !dynamicCommand.getAsColumns().isEmpty()) { command = QueryRewriter.createInlineViewQuery(new GroupSymbol("X"), command, metadata, dynamicCommand.getAsColumns()); //$NON-NLS-1$ if (dynamicCommand.getIntoGroup() != null) { Insert insert = new Insert(dynamicCommand.getIntoGroup(), dynamicCommand.getAsColumns(), Collections.emptyList());
append(IMMEDIATE); append(SPACE); visitNode(obj.getSql()); if (obj.isAsClauseSet()) { beginClause(1); append(AS); append(SPACE); for (int i = 0; i < obj.getAsColumns().size(); i++) { ElementSymbol symbol = (ElementSymbol)obj.getAsColumns().get(i); outputShortName(symbol); append(SPACE); append(DataTypeManager.getDataTypeName(symbol.getType())); if (i < obj.getAsColumns().size() - 1) { append(", "); //$NON-NLS-1$ if (obj.getIntoGroup() != null) { beginClause(1); append(INTO); append(SPACE); visitNode(obj.getIntoGroup()); if (obj.getUsing() != null && !obj.getUsing().isEmpty()) { beginClause(1); append(USING); append(SPACE); visitNode(obj.getUsing()); if (obj.getUpdatingModelCount() > 0) {
Iterator columns = dynamicCmd.getAsColumns().iterator(); if (dynamicCmd.getIntoGroup() == null) { while (columns.hasNext()) { ElementSymbol column = (ElementSymbol)columns.next(); column.setMetadataID(new TempMetadataID(column.getShortName(), column.getType())); } else if (dynamicCmd.getIntoGroup().isTempGroupSymbol()) { resolvedColumns = true; while (columns.hasNext()) { ElementSymbol column = (ElementSymbol)columns.next(); column.setGroupSymbol(new GroupSymbol(dynamicCmd.getIntoGroup().getName())); ResolverVisitor.resolveLanguageObject(dynamicCmd, groups, dynamicCmd.getExternalGroupContexts(), metadata); String sqlType = DataTypeManager.getDataTypeName(dynamicCmd.getSql().getType()); String targetType = DataTypeManager.DefaultDataTypes.CLOB; dynamicCmd.setSql(ResolverUtil.convertExpression(dynamicCmd.getSql(), targetType, metadata)); if (dynamicCmd.getUsing() != null && !dynamicCmd.getUsing().isEmpty()) { for (SetClause clause : dynamicCmd.getUsing().getClauses()) { ElementSymbol id = clause.getSymbol(); id.setGroupSymbol(new GroupSymbol(ProcedureReservedWords.DVARS)); GroupSymbol intoSymbol = dynamicCmd.getIntoGroup(); if (intoSymbol != null) { if (!intoSymbol.isImplicitTempGroupSymbol()) {
@Override public Boolean requiresTransaction(boolean transactionalReads) { Boolean expressionRequires = SubqueryAwareRelationalNode.requiresTransaction(transactionalReads, ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(dynamicCommand.getSql())); if (expressionRequires != null && expressionRequires) { return true; if (this.dynamicCommand.getUsing() != null) { Boolean setRequires = SubqueryAwareRelationalNode.requiresTransaction(transactionalReads, ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(this.dynamicCommand.getUsing().getClauseMap().values())); if (setRequires == null) { if (expressionRequires == null) { if (dynamicCommand.getUpdatingModelCount() > 1) { return true; if (transactionalReads || dynamicCommand.getUpdatingModelCount() == 1) { return expressionRequires==null?true:null;
DynamicCommand dynCommand = (DynamicCommand)subCommand; if(dynCommand.getIntoGroup() == null && !dynCommand.isAsClauseSet()) { if ((command.getResultSetColumns() != null && command.getResultSetColumns().isEmpty()) || !cmdStmt.isReturnable() || command.getResultSetColumns() == null) { dynCommand.setAsColumns(Collections.EMPTY_LIST); } else { dynCommand.setAsColumns(command.getResultSetColumns());
@Override public void visit(CommandStatement obj) { if (this.createProc == null || this.createProc.getResultSetColumns().isEmpty() || !obj.isReturnable() || !obj.getCommand().returnsResultSet()) { return; } List<? extends Expression> symbols = obj.getCommand().getResultSetColumns(); if (symbols == null && obj.getCommand() instanceof DynamicCommand) { DynamicCommand cmd = (DynamicCommand)obj.getCommand(); cmd.setAsColumns(this.createProc.getResultSetColumns()); return; } try { QueryResolver.validateProjectedSymbols(createProc.getVirtualGroup(), createProc.getResultSetColumns(), symbols); } catch (QueryValidatorException e) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31121, createProc.getVirtualGroup(), obj, e.getMessage()), obj); } }
public void testClone1() { List symbols = new ArrayList(); ElementSymbol a1 = new ElementSymbol("a1"); //$NON-NLS-1$ a1.setType(DataTypeManager.DefaultDataClasses.STRING); symbols.add(a1); DynamicCommand sqlCmd = new DynamicCommand(); Expression sql = new Constant("SELECT a1 FROM g WHERE a2 = 5"); //$NON-NLS-1$ sqlCmd.setSql(sql); sqlCmd.setAsColumns(symbols); sqlCmd.setAsClauseSet(true); sqlCmd.setIntoGroup(new GroupSymbol("#g")); //$NON-NLS-1$ UnitTestUtil.helpTestEquivalence(0, sqlCmd, sqlCmd.clone()); }