Skip to content

Commit

Permalink
TEIID-5285 correcting prepared dependent behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Jun 13, 2018
1 parent 3e8b162 commit 7e35e0c
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ protected boolean prepareNextCommand(VariableContext context) throws BlockedExce
}
parameter = (Reference)compare.getLeftExpression();
} else {
Assertion.failed("Unknown predicate type"); //$NON-NLS-1$
Assertion.failed("Unknown predicate type " + crit); //$NON-NLS-1$
}

validRow = setParam(context, value, nullAllowed, parameter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@

package org.teiid.query.processor.relational;

import java.util.Collections;
import java.util.List;

import org.teiid.common.buffer.BlockedException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.rewriter.QueryRewriter;
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.util.CommandContext;

Expand Down Expand Up @@ -78,7 +80,9 @@ protected boolean prepareNextCommand() throws BlockedException,
TeiidComponentException, TeiidProcessingException {

if (this.criteriaProcessor == null) {
this.criteriaProcessor = new DependentProcedureCriteriaProcessor(this, (Criteria)inputCriteria.clone(), inputReferences, inputDefaults);
Criteria crit = (Criteria)inputCriteria.clone();
crit = QueryRewriter.evaluateAndRewrite(crit, getEvaluator(Collections.emptyMap()), this.getContext(), this.getContext().getMetadata());
this.criteriaProcessor = new DependentProcedureCriteriaProcessor(this, crit, inputReferences, inputDefaults);
}

return criteriaProcessor.prepareNextCommand(this.getProcessorPlan().getContext().getVariableContext());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

import static org.teiid.query.analysis.AnalysisRecord.*;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.teiid.client.plan.PlanNode;
Expand All @@ -29,12 +31,13 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.logging.LogManager;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.util.VariableContext;
import org.teiid.query.util.CommandContext;


//TODO: consolidate with QueryProcessor
public class PlanExecutionNode extends RelationalNode {
public class PlanExecutionNode extends SubqueryAwareRelationalNode {

// Initialization state
private ProcessorPlan plan;
Expand Down Expand Up @@ -179,5 +182,10 @@ public PlanNode getDescriptionProperties() {
public Boolean requiresTransaction(boolean transactionalReads) {
return getProcessorPlan().requiresTransaction(transactionalReads);
}

@Override
public Collection<? extends LanguageObject> getObjects() {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public class TestPreparedStatement {

private static final int SESSION_ID = 6;

static void helpTestProcessing(String preparedSql, List<?> values, List<?>[] expected, ProcessorDataManager dataManager, QueryMetadataInterface metadata, boolean callableStatement, VDBMetaData vdb) throws Exception {
public static void helpTestProcessing(String preparedSql, List<?> values, List<?>[] expected, ProcessorDataManager dataManager, QueryMetadataInterface metadata, boolean callableStatement, VDBMetaData vdb) throws Exception {
helpTestProcessing(preparedSql, values, expected, dataManager, metadata, callableStatement, false, vdb);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,16 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.dqp.internal.process.TestPreparedStatement;
import org.teiid.metadata.ColumnSet;
import org.teiid.metadata.MetadataStore;
import org.teiid.metadata.Procedure;
import org.teiid.metadata.ProcedureParameter;
import org.teiid.metadata.Schema;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataStore;
import org.teiid.query.optimizer.TestOptimizer;
import org.teiid.query.processor.proc.CreateCursorResultSetInstruction;
import org.teiid.query.processor.proc.ProcedurePlan;
Expand Down Expand Up @@ -657,7 +660,9 @@ public void defer_testProcAsVirtualGroup9b(){
// Plan query
ProcessorPlan plan = TestProcessor.helpGetPlan(sql, RealMetadataFactory.example1Cached());
// Run query
TestProcessor.helpProcess(plan, dataManager, expected);
CommandContext context = TestProcessor.createCommandContext();
context.setMetadata(RealMetadataFactory.example1Cached());
TestProcessor.helpProcess(plan, context, dataManager, expected);
}

/*
Expand Down Expand Up @@ -813,5 +818,24 @@ public TupleSource registerRequest(CommandContext context,
TestProcessor.helpProcess(plan, dataManager, expected);
}


@Test public void testProcAsTable3Prepared() throws Exception{
String sql = "select param1, param2, e1, e2 from pm1.vsp26 where param1 in (?,?,?) and param2 in ('a', 'b') order by param1, param2"; //$NON-NLS-1$

// Create expected results
List<?>[] expected = new List[] {
Arrays.asList(new Object[] { new Integer(1), "a", "a", new Integer(3)}), //$NON-NLS-1$ //$NON-NLS-2$
Arrays.asList(new Object[] { new Integer(1), "b", "b", new Integer(2)}), //$NON-NLS-1$ //$NON-NLS-2$
Arrays.asList(new Object[] { new Integer(2), "a", "a", new Integer(3)}), //$NON-NLS-1$ //$NON-NLS-2$
Arrays.asList(new Object[] { new Integer(2), "b", "b", new Integer(2)}), //$NON-NLS-1$ //$NON-NLS-2$
Arrays.asList(new Object[] { new Integer(3), "a", "a", new Integer(3)}), //$NON-NLS-1$ //$NON-NLS-2$
};
FakeDataManager dataManager = new FakeDataManager();
TestProcessor.sampleData1(dataManager);

List<?> values = Arrays.asList(1, 2, 3);
//values = Collections.EMPTY_LIST;
TempMetadataAdapter tma = new TempMetadataAdapter(RealMetadataFactory.example1Cached(), new TempMetadataStore());
TestPreparedStatement.helpTestProcessing(sql, values, expected, dataManager, tma, false, RealMetadataFactory.example1VDB());
}

}

0 comments on commit 7e35e0c

Please sign in to comment.