Search in sources :

Example 26 with Insert

use of org.teiid.language.Insert in project teiid by teiid.

the class InfinispanUpdateExecution method performInsert.

@SuppressWarnings("unchecked")
private void performInsert(final InfinispanUpdateVisitor visitor, Table table, final RemoteCache<Object, Object> cache, boolean upsert, TeiidTableMarsheller marshaller) throws TranslatorException {
    Insert insert = (Insert) this.command;
    if (visitor.isNestedOperation()) {
        InfinispanDocument previous = null;
        if (visitor.getIdentity() != null) {
            previous = (InfinispanDocument) cache.get(visitor.getIdentity());
        }
        if (insert.getParameterValues() != null) {
            throw new TranslatorException(InfinispanPlugin.Util.gs(InfinispanPlugin.Event.TEIID25017, table.getName(), visitor.getParentTable().getName()));
        }
        if (previous == null) {
            throw new TranslatorException(InfinispanPlugin.Util.gs(InfinispanPlugin.Event.TEIID25009, table.getName(), visitor.getIdentity()));
        }
        String childName = ProtobufMetadataProcessor.getMessageName(visitor.getQueryTable());
        previous.addChildDocument(childName, visitor.getInsertPayload().getChildDocuments(childName).get(0));
        if (upsert) {
            previous = (InfinispanDocument) cache.replace(visitor.getIdentity(), previous);
        } else {
            previous = (InfinispanDocument) cache.put(visitor.getIdentity(), previous);
        }
        this.updateCount++;
    } else {
        if (insert.getParameterValues() == null) {
            insertRow(cache, visitor.getIdentity(), visitor.getInsertPayload(), upsert);
            this.updateCount++;
        } else {
            boolean putAll = false;
            if (this.executionContext.getSourceHint() != null) {
                putAll = this.executionContext.getSourceHint().indexOf("use-putall") != -1;
            }
            // bulk insert
            int batchSize = this.executionContext.getBatchSize();
            Iterator<? extends List<Expression>> args = (Iterator<? extends List<Expression>>) insert.getParameterValues();
            while (true) {
                Map<Object, InfinispanDocument> rows = visitor.getBulkInsertPayload(insert, batchSize, args);
                if (rows.isEmpty()) {
                    break;
                }
                if (putAll) {
                    BulkInsert bi = new UsePutAll(cache);
                    bi.run(rows, false);
                } else {
                    BulkInsert bi = new OneAtATime(cache);
                    bi.run(rows, upsert);
                }
                this.updateCount += rows.size();
            }
        }
    }
}
Also used : InfinispanDocument(org.teiid.infinispan.api.InfinispanDocument) Insert(org.teiid.language.Insert) Expression(org.teiid.language.Expression) Iterator(java.util.Iterator) TranslatorException(org.teiid.translator.TranslatorException) List(java.util.List)

Aggregations

Insert (org.teiid.language.Insert)26 Test (org.junit.Test)15 Expression (org.teiid.language.Expression)11 ExpressionValueSource (org.teiid.language.ExpressionValueSource)11 PreparedStatement (java.sql.PreparedStatement)9 Connection (java.sql.Connection)8 FakeExecutionContextImpl (org.teiid.dqp.internal.datamgr.FakeExecutionContextImpl)8 Parameter (org.teiid.language.Parameter)8 ResultSet (java.sql.ResultSet)7 ArrayList (java.util.ArrayList)7 ResultSetMetaData (java.sql.ResultSetMetaData)6 List (java.util.List)6 TranslatorException (org.teiid.translator.TranslatorException)6 ColumnReference (org.teiid.language.ColumnReference)5 RuntimeMetadata (org.teiid.metadata.RuntimeMetadata)5 Table (org.teiid.metadata.Table)5 ExecutionContext (org.teiid.translator.ExecutionContext)5 NamedTable (org.teiid.language.NamedTable)4 Update (org.teiid.language.Update)4 BatchResult (com.sforce.async.BatchResult)3