use of org.teiid.translator.ProcedureExecution in project teiid by teiid.
the class TestSwaggerQueryExecution method testHeadersInResponseWithReturn.
@Test
public void testHeadersInResponseWithReturn() throws Exception {
String query = "exec loginUser(username=>'foo',password=>'bar');";
String expectedURL = "http://petstore.swagger.io/v2/user/login?username=foo&password=bar";
String response = "sucess";
TimeZone tz = TimeZone.getDefault();
try {
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
ProcedureExecution excution = helpProcedureExecute(query, response, expectedURL, 200, true, "GET", null, getHeaders());
assertArrayEquals(new Object[] { "sucess", 1, new Timestamp(1460110463000L) }, excution.next().toArray(new Object[3]));
assertNull(excution.next());
} finally {
TimeZone.setDefault(tz);
}
}
use of org.teiid.translator.ProcedureExecution in project teiid by teiid.
the class TestFileExecutionFactory method testGetTextFiles.
@Test
public void testGetTextFiles() throws Exception {
FileExecutionFactory fef = new FileExecutionFactory();
MetadataFactory mf = new MetadataFactory("vdb", 1, "text", SystemMetadata.getInstance().getRuntimeTypeMap(), new Properties(), null);
fef.getMetadata(mf, null);
Procedure p = mf.getSchema().getProcedure("getTextFiles");
FileConnection fc = Mockito.mock(FileConnection.class);
Mockito.stub(fc.getFile("*.txt")).toReturn(new File(UnitTestUtil.getTestDataPath(), "*.txt"));
Call call = fef.getLanguageFactory().createCall("getTextFiles", Arrays.asList(new Argument(Direction.IN, new Literal("*.txt", TypeFacility.RUNTIME_TYPES.STRING), TypeFacility.RUNTIME_TYPES.STRING, null)), p);
ProcedureExecution pe = fef.createProcedureExecution(call, null, null, fc);
pe.execute();
int count = 0;
while (true) {
List<?> val = pe.next();
if (val == null) {
break;
}
assertEquals(5, val.size());
assertTrue(val.get(3) instanceof Timestamp);
assertEquals(Long.valueOf(0), val.get(4));
count++;
}
assertEquals(2, count);
call = fef.getLanguageFactory().createCall("getTextFiles", Arrays.asList(new Argument(Direction.IN, new Literal("*1*", TypeFacility.RUNTIME_TYPES.STRING), TypeFacility.RUNTIME_TYPES.STRING, null)), p);
pe = fef.createProcedureExecution(call, null, null, fc);
Mockito.stub(fc.getFile("*1*")).toReturn(new File(UnitTestUtil.getTestDataPath(), "*1*"));
pe.execute();
count = 0;
while (true) {
if (pe.next() == null) {
break;
}
count++;
}
assertEquals(1, count);
}
use of org.teiid.translator.ProcedureExecution in project teiid by teiid.
the class MockConnector method createProcedureExecution.
@Override
public ProcedureExecution createProcedureExecution(Call procedure, ExecutionContext executionContext, RuntimeMetadata metadata, Object connection) throws TranslatorException {
Properties props = new Properties();
// $NON-NLS-1$ //$NON-NLS-2$
props.setProperty("customBehaviour", "SkipExecute");
AbstractMetadataRecord metaObject = procedure.getMetadataObject();
// $NON-NLS-1$
TestCase.assertEquals("AnyModel.ProcedureB", procedure.getProcedureName());
// $NON-NLS-1$
TestCase.assertEquals("PROC", metaObject.getNameInSource());
TestCase.assertEquals(props, metaObject.getProperties());
ProcedureExecution exec = Mockito.mock(ProcedureExecution.class);
Mockito.stub(exec.next()).toReturn(null);
return exec;
}
use of org.teiid.translator.ProcedureExecution in project teiid by teiid.
the class TestResultsCache method testScope.
@Test
public void testScope() throws Exception {
ModelMetaData mmd = new ModelMetaData();
mmd.setName("x");
mmd.addProperty("teiid_rel:determinism", "USER_DETERMINISTIC");
mmd.addSourceMapping("x", "x", null);
mmd.addSourceMetadata("ddl", "create foreign table t (c string); create foreign procedure p () returns table (c string);");
final AtomicBoolean setScope = new AtomicBoolean();
server.addTranslator("x", new ExecutionFactory() {
@Override
public boolean isSourceRequired() {
return false;
}
@Override
public ResultSetExecution createResultSetExecution(QueryExpression command, final ExecutionContext executionContext, RuntimeMetadata metadata, Object connection) throws TranslatorException {
return createProcedureExecution(null, executionContext, metadata, connection);
}
@Override
public ProcedureExecution createProcedureExecution(Call command, final ExecutionContext executionContext, RuntimeMetadata metadata, Object connection) throws TranslatorException {
return new ProcedureExecution() {
boolean returned = false;
@Override
public void execute() throws TranslatorException {
}
@Override
public void close() {
}
@Override
public void cancel() throws TranslatorException {
}
@Override
public List<?> next() throws TranslatorException, DataNotAvailableException {
if (setScope.get()) {
// prevent caching altogether
executionContext.setScope(Scope.SESSION);
}
if (returned) {
return null;
}
returned = true;
return Arrays.asList(executionContext.getSession().getSessionId());
}
@Override
public List<?> getOutputParameterValues() throws TranslatorException {
return null;
}
};
}
});
server.deployVDB("x", mmd);
Connection c = server.getDriver().connect("jdbc:teiid:x;user=alice", null);
Statement s = c.createStatement();
ResultSet rs = s.executeQuery("/* cache */ select * from t");
assertTrue(rs.next());
String sessionid = rs.getString(1);
// should be the same with same user/session
rs = s.executeQuery("/* cache */ select * from t");
assertTrue(rs.next());
assertEquals(sessionid, rs.getString(1));
c.close();
c = server.getDriver().connect("jdbc:teiid:x;user=alice", null);
s = c.createStatement();
rs = s.executeQuery("/* cache */ select * from t");
assertTrue(rs.next());
assertEquals(sessionid, rs.getString(1));
c.close();
// for the final test
setScope.set(true);
// should be different with another user
c = server.getDriver().connect("jdbc:teiid:x;user=bill", null);
s = c.createStatement();
rs = s.executeQuery("/* cache */ select * from t");
assertTrue(rs.next());
String sessionid1 = rs.getString(1);
c.close();
assertNotEquals(sessionid, sessionid1);
c = server.getDriver().connect("jdbc:teiid:x;user=bill", null);
s = c.createStatement();
rs = s.executeQuery("/* cache */ select * from t");
assertTrue(rs.next());
// scope session should prevent reuse
assertNotEquals(sessionid1, rs.getString(1));
setScope.set(false);
rs = s.executeQuery("/* cache */ call p()");
assertTrue(rs.next());
sessionid = rs.getString(1);
c.close();
c = server.getDriver().connect("jdbc:teiid:x;user=alice", null);
s = c.createStatement();
rs = s.executeQuery("/* cache */ call p()");
assertTrue(rs.next());
assertNotEquals(sessionid, rs.getString(1));
c.close();
}
Aggregations