All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jaregu.database.queries.compiling.expr.ConstantLong Maven / Gradle / Ivy

Go to download

Java based SQL templating project. Store your queries in *.sql files and build queries for execution. Supports simple expressions and conditional clauses and interface proxying for java-sql bridge.

There is a newer version: 1.4.1
Show newest version
package com.jaregu.database.queries.compiling.expr;

import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;

public final class ConstantLong extends ConstantBaseImpl {

	public ConstantLong(Long value) {
		super(value);
	}

	@Override
	public Object multiply(Operand object) {
		return withNumber(object, super::multiply, (v, o) -> v * o);
	}

	@Override
	public Object divide(Operand object) {
		return withNumber(object, super::divide, (v, o) -> v / o);
	}

	@Override
	public Object add(Operand object) {
		return withNumber(object, super::add, (v, o) -> v + o);
	}

	@Override
	public Object subtract(Operand object) {
		return withNumber(object, super::subtract, (v, o) -> v - o);
	}

	@Override
	public boolean greater(Operand object) {
		return withNumber(object, super::greater, (v, o) -> v > o);
	}

	@Override
	public boolean greaterOrEqual(Operand object) {
		return withNumber(object, super::greaterOrEqual, (v, o) -> v >= o);
	}

	@Override
	public boolean lesser(Operand object) {
		return withNumber(object, super::lesser, (v, o) -> v < o);
	}

	@Override
	public boolean lesserOrEqual(Operand object) {
		return withNumber(object, super::lesserOrEqual, (v, o) -> v <= o);
	}

	@Override
	public boolean equal(Operand object) {
		return withNumber(object, super::equal, (v, o) -> v.compareTo(o) == 0);
	}

	@Override
	public boolean notEqual(Operand object) {
		return withNumber(object, super::notEqual, (v, o) -> v.compareTo(o) != 0);
	}

	private  T withNumber(Operand operand, Function defaultCall, BiFunction function) {
		Object otherValue = operand.getValue();
		if (otherValue != null && otherValue instanceof Number) {
			return function.apply(getValue(), ((Number) otherValue).longValue());
		} else {
			return defaultCall.apply(operand);
		}
	}

	public static Optional parse(String expression) {
		try {
			long longValue = Long.parseLong(expression);
			return Optional.of(new ConstantLong(longValue));
		} catch (NumberFormatException nfe) {
			return Optional.empty();
		}
	}

	public static Optional of(Object value) {
		if (value instanceof Long) {
			return Optional.of(new ConstantLong(((Number) value).longValue()));
		} else {
			return Optional.empty();
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy