Search in sources :

Example 96 with Query

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;
}
Also used : Query(org.teiid.query.sql.lang.Query) EntityCollectionResponse(org.teiid.olingo.service.EntityCollectionResponse) SQLParameter(org.teiid.odata.api.SQLParameter) ArrayList(java.util.ArrayList) ParseInfo(org.teiid.query.parser.ParseInfo) Client(org.teiid.odata.api.Client)

Example 97 with Query

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);
            }
        }
    });
}
Also used : Blob(java.sql.Blob) Query(org.teiid.query.sql.lang.Query) SQLException(java.sql.SQLException) ODataApplicationException(org.apache.olingo.server.api.ODataApplicationException) ODataLibraryException(org.apache.olingo.server.api.ODataLibraryException) SQLXML(java.sql.SQLXML) ProcedureReturn(org.teiid.olingo.service.ProcedureSQLBuilder.ProcedureReturn) Clob(java.sql.Clob) Property(org.apache.olingo.commons.api.data.Property) EdmNavigationProperty(org.apache.olingo.commons.api.edm.EdmNavigationProperty) EdmProperty(org.apache.olingo.commons.api.edm.EdmProperty)

Aggregations

Query (org.teiid.query.sql.lang.Query)97 Test (org.junit.Test)58 GroupSymbol (org.teiid.query.sql.symbol.GroupSymbol)31 Select (org.teiid.query.sql.lang.Select)30 ElementSymbol (org.teiid.query.sql.symbol.ElementSymbol)26 From (org.teiid.query.sql.lang.From)25 Constant (org.teiid.query.sql.symbol.Constant)22 SetQuery (org.teiid.query.sql.lang.SetQuery)21 MultipleElementSymbol (org.teiid.query.sql.symbol.MultipleElementSymbol)20 UnaryFromClause (org.teiid.query.sql.lang.UnaryFromClause)13 Limit (org.teiid.query.sql.lang.Limit)10 ArrayList (java.util.ArrayList)9 Expression (org.teiid.query.sql.symbol.Expression)9 SQLException (java.sql.SQLException)7 Reference (org.teiid.query.sql.symbol.Reference)7 CompareCriteria (org.teiid.query.sql.lang.CompareCriteria)6 ODataApplicationException (org.apache.olingo.server.api.ODataApplicationException)5 List (java.util.List)4 ODataLibraryException (org.apache.olingo.server.api.ODataLibraryException)4 TeiidProcessingException (org.teiid.core.TeiidProcessingException)4