use of org.teiid.query.sql.lang.Query in project teiid by teiid.
the class TestODataSQLBuilder method helpTest.
public QueryState helpTest(String url, String sqlExpected, Integer skip, Integer top, Boolean count) throws Exception {
QueryState state = setup(url);
Client client = state.client;
ArgumentCaptor<Query> arg1 = ArgumentCaptor.forClass(Query.class);
ArgumentCaptor<EntityCollectionResponse> arg6 = ArgumentCaptor.forClass(EntityCollectionResponse.class);
List<SQLParameter> parameters = new ArrayList<SQLParameter>();
if (sqlExpected != null) {
Query actualCommand = (Query) QueryParser.getQueryParser().parseCommand(sqlExpected, new ParseInfo());
Mockito.verify(client).executeSQL(arg1.capture(), Mockito.eq(parameters), Mockito.eq(count), (Integer) Mockito.eq(skip), (Integer) Mockito.eq(top), (String) Mockito.eq(null), Mockito.anyInt(), arg6.capture());
Assert.assertEquals(actualCommand.toString(), arg1.getValue().toString());
}
state.parameters = parameters;
state.arg1 = arg1;
state.arg6 = arg6;
return state;
}
use of org.teiid.query.sql.lang.Query in project teiid by teiid.
the class TeiidServiceHandler method invokeOperation.
private <T extends ServiceResponse> void invokeOperation(final OperationRequest request, OperationParameterValueProvider parameters, T response) throws ODataApplicationException, ODataLibraryException {
checkExpand(request.getUriInfo().asUriInfoResource());
final ODataSQLBuilder visitor = new ODataSQLBuilder(odata, getClient().getMetadataStore(), this.prepared, true, request.getODataRequest().getRawBaseUri(), this.serviceMetadata);
visitor.setOperationParameterValueProvider(parameters);
visitor.visit(request.getUriInfo());
final OperationResponseImpl queryResponse;
try {
if (visitor.getContext() instanceof NoDocumentNode) {
NoDocumentNode cdn = (NoDocumentNode) visitor.getContext();
ProcedureReturn procReturn = cdn.getProcedureReturn();
queryResponse = new OperationResponseImpl(procReturn);
getClient().executeCall(cdn.getQuery(), visitor.getParameters(), procReturn, queryResponse);
} else {
Query query = visitor.selectQuery();
queryResponse = (OperationResponseImpl) executeQuery(request, request.isCountRequest(), visitor, query);
}
} catch (Throwable e) {
throw new ODataApplicationException(e.getMessage(), HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.getDefault(), e);
}
/*
try {
MetadataStore store = getClient().getMetadataStore();
ProcedureSQLBuilder builder = new ProcedureSQLBuilder(store.getSchema(schemaName), request);
ProcedureReturn procedureReturn = builder.getReturn();
result = new OperationResponseImpl(procedureReturn);
getClient().executeCall(builder.buildProcedureSQL(), builder.getSqlParameters(), procedureReturn, result);
} catch (SQLException e) {
throw new ODataApplicationException(e.getMessage(),
HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
Locale.getDefault(), e);
} catch (TeiidException e) {
throw new ODataApplicationException(e.getMessage(),
HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
Locale.getDefault(), e);
}
*/
final OperationResponseImpl operationResult = queryResponse;
response.accepts(new ServiceResponseVisior() {
@Override
public void visit(PropertyResponse response) throws ODataLibraryException, ODataApplicationException {
Property property = (Property) operationResult.getResult();
Object value = property.getValue();
if (value instanceof SQLXML || value instanceof Blob || value instanceof Clob) {
try {
handleLobResult(getClient().getProperty(Client.CHARSET), value, response);
} catch (SQLException e) {
LogManager.logDetail(LogConstants.CTX_ODATA, e);
response.writeServerError(true);
}
} else {
response.writeProperty(request.getReturnType().getType(), property);
}
}
});
}
Aggregations