/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.metamodel.query;
import java.util.Objects;
/**
* Simple implementation of {@link OperatorType}
*/
public class OperatorTypeImpl implements OperatorType {
private static final long serialVersionUID = 1L;
private final String _sql;
private final boolean _spaceDelimited;
public OperatorTypeImpl(String sql, boolean spaceDelimited) {
_sql = sql;
_spaceDelimited = spaceDelimited;
}
@Override
public boolean isSpaceDelimited() {
return _spaceDelimited;
}
@Override
public String toSql() {
return _sql;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (obj instanceof OperatorType) {
// we only require another OperatorType, not necesarily an _Impl_.
// This is to allow other implementations that wrap this. For
// instance the implementation provided by
// LegacyDeserializationObjectInputStream.
final OperatorType other = (OperatorType) obj;
return isSpaceDelimited() == other.isSpaceDelimited() && Objects.equals(toSql(), other.toSql());
}
return false;
}
/**
* Converts from SQL string literals to an OperatorType. Valid SQL values are "=", "<>", "LIKE", ">", ">=", "<" and
* "<=".
*
* @param sqlType
* @return a OperatorType object representing the specified SQL type
*/
public static OperatorType convertOperatorType(String sqlType) {
if (sqlType != null) {
sqlType = sqlType.trim().toUpperCase();
switch (sqlType) {
case "=":
case "==":
case "EQ":
case "EQUALS_TO":
return OperatorType.EQUALS_TO;
case "<>":
case "!=":
case "NE":
case "NOT_EQUAL":
case "NOT_EQUAL_TO":
case "NOT_EQUALS":
case "NOT_EQUALS_TO":
case "DIFFERENT_FROM":
return OperatorType.DIFFERENT_FROM;
case ">":
case "GT":
case "GREATER_THAN":
return OperatorType.GREATER_THAN;
case ">=":
case "=>":
case "GREATER_THAN_OR_EQUAL":
return OperatorType.GREATER_THAN_OR_EQUAL;
case "NOT_IN":
case "NOT IN":
return OperatorType.NOT_IN;
case "IN":
return OperatorType.IN;
case "<":
case "LT":
case "LESS_THAN":
return OperatorType.LESS_THAN;
case "<=":
case "=<":
case "LESS_THAN_OR_EQUAL":
return OperatorType.LESS_THAN_OR_EQUAL;
case "LIKE":
return OperatorType.LIKE;
case "NOT_LIKE":
case "NOT LIKE":
return OperatorType.NOT_LIKE;
}
}
return null;
}
}