/* * Copyright 2017 James Moger. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.iciql; /** * A bitwise condition contains two operands, a bit operation, and a comparison test. * * @param the operand type */ class BitCondition implements Token, Bitwise { enum Bitwise { AND, XOR } Bitwise bitwiseType; CompareType compareType; A x, y, z; Query query; BitCondition(A x, A y, Bitwise bitwiseType, Query query) { this.bitwiseType = bitwiseType; this.x = x; this.y = y; this.query = query; } public QueryWhere exceeds(A y) { z = y; compareType = CompareType.EXCEEDS; return new QueryWhere(query); } public QueryWhere atLeast(A y) { z = y; compareType = CompareType.AT_LEAST; return new QueryWhere(query); } public QueryWhere lessThan(A y) { z = y; compareType = CompareType.LESS_THAN; return new QueryWhere(query); } public QueryWhere atMost(A y) { z = y; compareType = CompareType.AT_MOST; return new QueryWhere(query); } @SuppressWarnings("unchecked") public void appendSQL(SQLStatement stat, Query query) { stat.appendSQL("("); switch (bitwiseType) { case AND: query.getDb().getDialect().prepareBitwiseAnd(stat, query, x, y); break; case XOR: query.getDb().getDialect().prepareBitwiseXor(stat, query, x, y); break; } stat.appendSQL(")"); stat.appendSQL(compareType.getString()); stat.appendSQL("" + z); } }