Search in sources :

Example 1 with SqlKeyword

use of com.amplifyframework.datastore.storage.sqlite.SqlKeyword in project amplify-android by aws-amplify.

the class SQLPredicate method parsePredicateOperation.

@SuppressWarnings("fallthrough")
private // Utility method to recursively parse a given predicate operation.
StringBuilder parsePredicateOperation(QueryPredicateOperation<?> operation) throws DataStoreException {
    final StringBuilder builder = new StringBuilder();
    final String model = Wrap.inBackticks(operation.modelName());
    final String field = Wrap.inBackticks(operation.field());
    final String column = model == null ? operation.field() : model + "." + field;
    final QueryOperator<?> op = operation.operator();
    switch(op.type()) {
        case BETWEEN:
            BetweenQueryOperator<?> betweenOp = (BetweenQueryOperator<?>) op;
            addBinding(betweenOp.start());
            addBinding(betweenOp.end());
            return builder.append(column).append(SqlKeyword.DELIMITER).append(SqlKeyword.BETWEEN).append(SqlKeyword.DELIMITER).append("?").append(SqlKeyword.DELIMITER).append(SqlKeyword.AND).append(SqlKeyword.DELIMITER).append("?");
        case CONTAINS:
            ContainsQueryOperator containsOp = (ContainsQueryOperator) op;
            addBinding(containsOp.value());
            return builder.append("instr(").append(column).append(",").append("?").append(")").append(SqlKeyword.DELIMITER).append(SqlKeyword.fromQueryOperator(QueryOperator.Type.GREATER_THAN)).append(SqlKeyword.DELIMITER).append("0");
        case NOT_CONTAINS:
            NotContainsQueryOperator notContainsOp = (NotContainsQueryOperator) op;
            addBinding(notContainsOp.value());
            return builder.append("instr(").append(column).append(",").append("?").append(")").append(SqlKeyword.DELIMITER).append(SqlKeyword.fromQueryOperator(QueryOperator.Type.EQUAL)).append(SqlKeyword.DELIMITER).append("0");
        case BEGINS_WITH:
            BeginsWithQueryOperator beginsWithOp = (BeginsWithQueryOperator) op;
            addBinding(beginsWithOp.value() + "%");
            return builder.append(column).append(SqlKeyword.DELIMITER).append(SqlKeyword.LIKE).append(SqlKeyword.DELIMITER).append("?");
        case EQUAL:
        case NOT_EQUAL:
            Object operatorValue = getOperatorValue(op);
            if (operatorValue == null) {
                SqlKeyword sqlNullCheck = op.type() == QueryOperator.Type.EQUAL ? SqlKeyword.IS_NULL : SqlKeyword.IS_NOT_NULL;
                return builder.append(column).append(SqlKeyword.DELIMITER).append(sqlNullCheck.toString());
            }
        case LESS_THAN:
        case GREATER_THAN:
        case LESS_OR_EQUAL:
        case GREATER_OR_EQUAL:
            addBinding(getOperatorValue(op));
            return builder.append(column).append(SqlKeyword.DELIMITER).append(SqlKeyword.fromQueryOperator(op.type())).append(SqlKeyword.DELIMITER).append("?");
        default:
            throw new DataStoreException("Tried to parse an unsupported QueryPredicateOperation", "Try changing to one of the supported values from " + "QueryPredicateOperation.Type enum.");
    }
}
Also used : BeginsWithQueryOperator(com.amplifyframework.core.model.query.predicate.BeginsWithQueryOperator) DataStoreException(com.amplifyframework.datastore.DataStoreException) BetweenQueryOperator(com.amplifyframework.core.model.query.predicate.BetweenQueryOperator) SqlKeyword(com.amplifyframework.datastore.storage.sqlite.SqlKeyword) ContainsQueryOperator(com.amplifyframework.core.model.query.predicate.ContainsQueryOperator) NotContainsQueryOperator(com.amplifyframework.core.model.query.predicate.NotContainsQueryOperator) NotContainsQueryOperator(com.amplifyframework.core.model.query.predicate.NotContainsQueryOperator)

Aggregations

BeginsWithQueryOperator (com.amplifyframework.core.model.query.predicate.BeginsWithQueryOperator)1 BetweenQueryOperator (com.amplifyframework.core.model.query.predicate.BetweenQueryOperator)1 ContainsQueryOperator (com.amplifyframework.core.model.query.predicate.ContainsQueryOperator)1 NotContainsQueryOperator (com.amplifyframework.core.model.query.predicate.NotContainsQueryOperator)1 DataStoreException (com.amplifyframework.datastore.DataStoreException)1 SqlKeyword (com.amplifyframework.datastore.storage.sqlite.SqlKeyword)1