/** * Return a deep copy of this Insert. * @return Deep copy of Insert */ public Object clone() { GroupSymbol copyGroup = null; if(group != null) { copyGroup = group.clone(); } List<ElementSymbol> copyVars = LanguageObject.Util.deepClone(getVariables(), ElementSymbol.class); List<Expression> copyVals = null; if ( getValues() != null) { copyVals = LanguageObject.Util.deepClone(getValues(), Expression.class); } Insert copy = new Insert(copyGroup, copyVars, copyVals); if (this.queryExpression != null) { copy.setQueryExpression((QueryCommand)this.queryExpression.clone()); } this.copyMetadataState(copy); if (this.constraint != null) { copy.constraint = (Criteria) this.constraint.clone(); } copy.upsert = this.upsert; return copy; }
if (insert.getValues() != null) { QueryResolver.resolveSubqueries(command, metadata, null); resolveList(insert.getValues(), metadata, insert.getExternalGroupContexts(), null); boolean usingQuery = insert.getQueryExpression() != null; QueryResolverException resolveQueryException = null; QueryResolver.setChildMetadata(insert.getQueryExpression(), command); QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false); groups.add(insert.getGroup()); List values = insert.getValues(); values = insert.getQueryExpression().getProjectedSymbols(); if (insert.getVariables().isEmpty()) { if (insert.getGroup().isResolved()) { List<ElementSymbol> variables = ResolverUtil.resolveElementsInGroup(insert.getGroup(), metadata); for (Iterator<ElementSymbol> i = variables.iterator(); i.hasNext();) { insert.addVariable(i.next().clone()); ElementSymbol es = new ElementSymbol(Symbol.getShortName(ses)); es.setType(ses.getType()); insert.addVariable(es); } else { insert.addVariable(new ElementSymbol("expr" + i)); //$NON-NLS-1$
return c; UpdateInfo info = insert.getUpdateInfo(); if (info != null && info.isInherentInsert()) { throw new QueryValidatorException(QueryPlugin.Event.TEIID30375, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30375, insert.getVariables())); List<ElementSymbol> mappedSymbols = new ArrayList<ElementSymbol>(insert.getVariables().size()); for (ElementSymbol symbol : insert.getVariables()) { mappedSymbols.add(symbolMap.get(symbol)); insert.setVariables(mappedSymbols); insert.setGroup(mapping.getGroup().clone()); insert.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(insert.getGroup(), metadata, Command.TYPE_INSERT, true)); return rewriteInsert(insert); if ( insert.getQueryExpression() != null ) { insert.setQueryExpression((QueryCommand)rewriteCommand(insert.getQueryExpression(), true)); return correctDatatypes(insert); List expressions = insert.getValues(); List evalExpressions = new ArrayList(expressions.size()); Iterator expIter = expressions.iterator(); insert.setValues(evalExpressions); return insert;
private void registerIteratorRequest() throws TeiidComponentException, TeiidProcessingException { Insert insert = new Insert(intoGroup, intoElements, null); insert.setSourceHint(sourceHint); insert.setUpsert(upsert); buffer.close(); insert.setTupleSource(buffer.createIndexedTupleSource(true)); // Register insert command against source registerRequest(insert); //remove the old buffer when the insert is complete last = buffer; buffer = null; }
/** * Compare two Insert commands for equality. Will only evaluate to equal if * they are IDENTICAL: group is equal, value is equal and variables are equal. * @param obj Other object * @return True if equal */ public boolean equals(Object obj) { // Quick same object test if(this == obj) { return true; } // Quick fail tests if(!(obj instanceof Insert)) { return false; } Insert other = (Insert) obj; return EquivalenceUtil.areEqual(getGroup(), other.getGroup()) && EquivalenceUtil.areEqual(getValues(), other.getValues()) && EquivalenceUtil.areEqual(getVariables(), other.getVariables()) && sameOptionAndHint(other) && EquivalenceUtil.areEqual(getQueryExpression(), other.getQueryExpression()) && this.upsert == other.upsert; }
/** * <p> This method updates the <code>Insert</code> object it receives as an * argument by replacing the virtual groups/elements with their physical * counterparts.</p> * @param obj The Insert object to be updated with physical groups/elements */ public void visit(Insert obj) { List physicalElements = new ArrayList(); // get the GroupSymbol on the insert GroupSymbol virtualGroup = obj.getGroup(); obj.setGroup(getMappedGroup(virtualGroup)); // get all virtual columns present on the Insert and replace them with // physical elements if(obj.getVariables() != null) { Iterator elementIter = obj.getVariables().iterator(); while(elementIter.hasNext()) { ElementSymbol virtualElement = (ElementSymbol) elementIter.next(); physicalElements.add(getMappedElement(virtualElement)); } obj.setVariables(physicalElements); } }
QueryResolverException, TeiidProcessingException { if (processing || insert.hasTag(WRITE_THROUGH) || !metadata.hasMaterialization(insert.getGroup().getMetadataID()) || !Boolean.valueOf(metadata.getExtensionProperty(insert.getGroup().getMetadataID(), MaterializationMetadataRepository.MATVIEW_WRITE_THROUGH, false))) { return null; Insert cloneInsert = (Insert)insert.clone(); Insert values = new Insert(); values.setGroup(temp); if (insert.getQueryExpression() != null) { values.setQueryExpression(insert.getQueryExpression()); } else { values.setValues(insert.getValues()); for (ElementSymbol es : insert.getVariables()) { values.addVariable(new ElementSymbol(es.getShortName())); insert.setQueryExpression((QueryCommand) q.clone()); insert.addTag(WRITE_THROUGH); block.addStatement(new CommandStatement(insert)); ElementSymbol rowCount = new ElementSymbol(ProcedureReservedWords.ROWCOUNT); DeclareStatement ds = new DeclareStatement(val, DataTypeManager.DefaultDataTypes.INTEGER, rowCount); block.addStatement(ds); Object target = metadata.getMaterialization(insert.getGroup().getMetadataID()); if (target != null) { GroupSymbol newGroup = new GroupSymbol(metadata.getFullName(target));
TeiidProcessingException { QueryRewriter rewriter = new QueryRewriter(metadata, context); Collection<?> keys = metadata.getUniqueKeysInGroup(insert.getGroup().getMetadataID()); if (keys.isEmpty()) { throw new QueryValidatorException(QueryPlugin.Event.TEIID31132, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31132, insert.getGroup())); Insert newInsert = new Insert(); newInsert.setGroup(insert.getGroup().clone()); newInsert.setVariables(LanguageObject.Util.deepClone(insert.getVariables(), ElementSymbol.class)); ArrayList<Expression> values = new ArrayList<Expression>(); IfStatement ifStatement = new IfStatement(); Query exists = new Query(); exists.setSelect(new Select(Arrays.asList(new Constant(1)))); exists.setFrom(new From(Arrays.asList(new UnaryFromClause(insert.getGroup().clone())))); ifStatement.setCondition(new ExistsCriteria(exists)); Update update = new Update(); update.setGroup(insert.getGroup().clone()); SetClauseList setClauses = new SetClauseList(); update.setChangeList(setClauses); List<Criteria> crits = new ArrayList<Criteria>(); GroupSymbol varGroup = getVarGroup(insert); for (ElementSymbol es : insert.getVariables()) { ElementSymbol var = new ElementSymbol(es.getShortName(), varGroup.clone()); values.add(var.clone()); newInsert.setValues(values); update.setCriteria((Criteria) Criteria.combineCriteria(crits).clone()); exists.setCriteria((Criteria) Criteria.combineCriteria(crits).clone());
/** INSERT INTO m.g (a) VALUES (?) */ @Test public void testInsertWithReference() { Insert insert = new Insert(); insert.setGroup(new GroupSymbol("m.g")); //$NON-NLS-1$ List<ElementSymbol> vars = new ArrayList<ElementSymbol>(); vars.add(new ElementSymbol("a")); //$NON-NLS-1$ insert.setVariables(vars); List<Reference> values = new ArrayList<Reference>(); values.add(new Reference(0)); insert.setValues(values); helpTest("INSERT INTO m.g (a) VALUES (?)", //$NON-NLS-1$ "INSERT INTO m.g (a) VALUES (?)", //$NON-NLS-1$ insert); }
@Override public void visit( Insert obj ) { if (obj.isUpsert()) { append(NonReserved.UPSERT); } else { append(INSERT); addSourceHint(obj.getSourceHint()); append(SPACE); append(INTO); append(SPACE); visitNode(obj.getGroup()); if (!obj.getVariables().isEmpty()) { beginClause(2); List<ElementSymbol> vars = obj.getVariables(); if (vars != null) { append("("); //$NON-NLS-1$ if (obj.getQueryExpression() != null) { visitNode(obj.getQueryExpression()); } else if (obj.getTupleSource() != null) { append(VALUES); append(" (...)"); //$NON-NLS-1$ } else if (obj.getValues() != null) { append(VALUES); beginClause(2); append("("); //$NON-NLS-1$ registerNodes(obj.getValues(), 0);
final public Insert insert(ParseInfo info) throws ParseException { Insert insert = new Insert(); boolean upsert = false; String group = null; if (jj_2_15(2147483647)) { columns = columnList(false, true); insert.setVariables(columns); } else { insert.setQueryExpression(query); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case OPTION: option = option(info); insert.setOption(option); break; default: insert.setGroup(new GroupSymbol(group) ); insert.setUpsert(upsert); {if (true) return insert;} throw new Error("Missing return statement in function");
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()); insert.setQueryExpression((Query)command); command = insert; insertInto = true; Insert insert = new Insert(); insert.setGroup(new GroupSymbol(groupName)); for (ElementSymbol es : (List<ElementSymbol>)dynamicCommand.getAsColumns()) { ElementSymbol col = new ElementSymbol(es.getShortName(), insert.getGroup()); col.setType(es.getType()); insert.addVariable(col); insert.addValue(new Constant(procEnv.getCurrentVariableContext().getValue(ProcedurePlan.ROWCOUNT))); QueryResolver.resolveCommand(insert, metadata.getDesignTimeMetadata()); TupleSource ts = procEnv.getDataManager().registerRequest(procEnv.getContext(), insert, TempMetadataAdapter.TEMP_MODEL.getName(), new RegisterRequestParameter());
org.teiid.language.Insert translate(Insert insert) { List<ElementSymbol> elements = insert.getVariables(); List<ColumnReference> translatedElements = new ArrayList<ColumnReference>(); if (insert.getQueryExpression() != null) { valueSource = translate(insert.getQueryExpression()); } else if (insert.getTupleSource() != null) { final TupleSource ts = insert.getTupleSource(); parameterValues = new TupleSourceIterator(ts); List<org.teiid.language.Expression> translatedValues = new ArrayList<org.teiid.language.Expression>(); for (int i = 0; i < insert.getVariables().size(); i++) { ElementSymbol es = insert.getVariables().get(i); Parameter param = new Parameter(); param.setType(es.getType()); } else { List values = insert.getValues(); List<org.teiid.language.Expression> translatedValues = new ArrayList<org.teiid.language.Expression>(); for (Iterator i = values.iterator(); i.hasNext();) { org.teiid.language.Insert result = new org.teiid.language.Insert(translate(insert.getGroup()), translatedElements, valueSource); result.setParameterValues(parameterValues); setBatchValues(result); result.setUpsert(insert.isUpsert()); return result;
public void visit(Insert obj) { preVisitVisitor(obj); visitNode(obj.getGroup()); visitNodes(obj.getVariables()); visitNodes(obj.getValues()); if(deep && obj.getQueryExpression()!=null) { visitNode(obj.getQueryExpression()); } visitNode(obj.getOption()); postVisitVisitor(obj); } public void visit(Create obj) {
if (command instanceof Insert) { Insert insert = (Insert)command; TupleSource ts = insert.getTupleSource(); if (ts == null) { Evaluator eval = new Evaluator(Collections.emptyMap(), TempTableDataManager.this, context); List<Object> values = new ArrayList<Object>(insert.getValues().size()); for (Expression expr : (List<Expression>)insert.getValues()) { values.add(eval.evaluate(expr, null)); return table.insert(ts, insert.getVariables(), true, insert.isUpsert(), context);
public void visit(Insert obj) { validateGroupSupportsUpdate(obj.getGroup()); validateInsert(obj); if (obj.isUpsert()) { Collection keys = getMetadata().getUniqueKeysInGroup(obj.getGroup().getMetadataID()); if (keys.isEmpty()) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31132, obj.getGroup()), obj); } else { Set<Object> keyCols = new LinkedHashSet<Object>(getMetadata().getElementIDsInKey(keys.iterator().next())); for (ElementSymbol es : obj.getVariables()) { keyCols.remove(es.getMetadataID()); handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31133, obj.getGroup(), obj.getVariables()), obj); if (obj.getQueryExpression() != null) { validateMultisourceInsert(obj.getGroup()); if (obj.getUpdateInfo() != null && obj.getUpdateInfo().isInherentInsert()) { validateUpdate(obj, Command.TYPE_INSERT, obj.getUpdateInfo()); try { if (obj.getUpdateInfo().findInsertUpdateMapping(obj, false) == null) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30376, obj.getVariables()), obj);
Insert insert = new Insert(); insert.setGroup(resource.getGroupSymbol()); if (keys != null) { for (UriParameter key : keys) { EdmProperty edmProp = (EdmProperty)entityType.getProperty(prop.getName()); Column column = entityTable.getColumnByName(edmProp.getName()); insert.addVariable(new ElementSymbol(column.getName(), resource.getGroupSymbol())); insert.setValues(referenceValues); insert.setValues(constantValues);
@Test public void testInsertIntoSelect() { GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$ From from = new From(); from.addGroup(g); Insert insert = new Insert(); GroupSymbol groupSymbol = new GroupSymbol( "tempA" ); //$NON-NLS-1$ insert.setGroup(groupSymbol); Select select = new Select(); select.addSymbol( new Constant( 1 ) ); //$NON-NLS-1$ Query query = new Query(); query.setSelect(select); insert.setQueryExpression( query ); helpTest("insert into tempA SELECT 1", //$NON-NLS-1$ "INSERT INTO tempA SELECT 1", //$NON-NLS-1$ insert); }
@Test public void testInsertWithoutColumns() { Insert insert = new Insert(); insert.setGroup(new GroupSymbol("m.g")); //$NON-NLS-1$ insert.addValue(new Constant("a")); //$NON-NLS-1$ insert.addValue(new Constant("b")); //$NON-NLS-1$ helpTest("INSERT INTO m.g VALUES ('a', 'b')", //$NON-NLS-1$ "INSERT INTO m.g VALUES ('a', 'b')", //$NON-NLS-1$ insert); }