org.dbflute.cbean.chelper.HpQDRParameter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dbflute-runtime Show documentation
Show all versions of dbflute-runtime Show documentation
The runtime library of DBFlute
/*
* Copyright 2014-2019 the original author or authors.
*
* 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 org.dbflute.cbean.chelper;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.dbflute.cbean.ConditionBean;
import org.dbflute.cbean.ckey.ConditionKey;
import org.dbflute.cbean.coption.ConditionOptionCall;
import org.dbflute.cbean.coption.DerivedReferrerOption;
import org.dbflute.cbean.coption.FromToOption;
import org.dbflute.cbean.coption.RangeOfOption;
import org.dbflute.cbean.scoping.SubQuery;
import org.dbflute.exception.IllegalConditionBeanOperationException;
import org.dbflute.helper.message.ExceptionMessageBuilder;
import org.dbflute.system.DBFluteSystem;
import org.dbflute.util.DfTypeUtil;
/**
* The parameter of (Query)DerivedReferrer.
* @param The type of condition-bean.
* @param The type of parameter.
* @author jflute
*/
public class HpQDRParameter {
// ===================================================================================
// Attribute
// =========
protected final String _function;
protected final SubQuery _subQuery;
protected final DerivedReferrerOption _option;
protected final HpQDRSetupper _setupper;
// ===================================================================================
// Constructor
// ===========
public HpQDRParameter(String function, SubQuery subQuery, DerivedReferrerOption option, HpQDRSetupper setupper) {
_function = function;
_subQuery = subQuery;
_option = option;
_setupper = setupper;
}
// ===================================================================================
// Condition
// =========
/**
* Set up the operand 'equal' and the value of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice(); // If the type is Integer...
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).equal(123); // This parameter should be Integer!
*
* @param value The value of parameter for the specified column. (NotNull)
*/
public void equal(PARAMETER value) {
assertParameterNotNull(value);
_setupper.setup(_function, _subQuery, ConditionKey.CK_EQUAL.getOperand(), value, _option);
}
/**
* Set up the operand 'notEqual' and the value of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice(); // If the type is Integer...
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).notEqual(123); // This parameter should be Integer!
*
* @param value The value of parameter for the specified column. (NotNull)
*/
public void notEqual(PARAMETER value) {
assertParameterNotNull(value);
_setupper.setup(_function, _subQuery, ConditionKey.CK_NOT_EQUAL_STANDARD.getOperand(), value, _option);
}
/**
* Set up the operand 'greaterThan' and the value of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice(); // If the type is Integer...
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).greaterThan(123); // This parameter should be Integer!
*
* @param value The value of parameter for the specified column. (NotNull)
*/
public void greaterThan(PARAMETER value) {
assertParameterNotNull(value);
_setupper.setup(_function, _subQuery, ConditionKey.CK_GREATER_THAN.getOperand(), value, _option);
}
/**
* Set up the operand 'lessThan' and the value of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice(); // If the type is Integer...
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).lessThan(123); // This parameter should be Integer!
*
* @param value The value of parameter for the specified column. (NotNull)
*/
public void lessThan(PARAMETER value) {
assertParameterNotNull(value);
_setupper.setup(_function, _subQuery, ConditionKey.CK_LESS_THAN.getOperand(), value, _option);
}
/**
* Set up the operand 'greaterEqual' and the value of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice(); // If the type is Integer...
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).greaterEqual(123); // This parameter should be Integer!
*
* @param value The value of parameter for the specified column. (NotNull)
*/
public void greaterEqual(PARAMETER value) {
assertParameterNotNull(value);
_setupper.setup(_function, _subQuery, ConditionKey.CK_GREATER_EQUAL.getOperand(), value, _option);
}
/**
* Set up the operand 'lessEqual' and the value of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice(); // If the type is Integer...
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).lessEqual(123); // This parameter should be Integer!
*
* @param value The value of parameter for the specified column. (NotNull)
*/
public void lessEqual(PARAMETER value) {
assertParameterNotNull(value);
_setupper.setup(_function, _subQuery, ConditionKey.CK_LESS_EQUAL.getOperand(), value, _option);
}
/**
* Set up the operand 'isNull' and the value of parameter.
* The type of the parameter should be same as the type of target column.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice();
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).isNull(); // no parameter
*
*/
public void isNull() {
_setupper.setup(_function, _subQuery, ConditionKey.CK_IS_NULL.getOperand(), null, _option);
}
/**
* Set up the operand 'isNull' and the value of parameter.
* The type of the parameter should be same as the type of target column.
*
* cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
* protected void query(PurchaseCB subCB) {
* subCB.specify().columnPurchasePrice();
* subCB.query().setPaymentCompleteFlg_Equal_True();
* }
* }).isNotNull(); // no parameter
*
*/
public void isNotNull() {
_setupper.setup(_function, _subQuery, ConditionKey.CK_IS_NOT_NULL.getOperand(), null, _option);
}
// -----------------------------------------------------
// RangeOf
// -------
/**
* Set up the comparison 'RangeOf' and the values of parameter.
* The type of the parameter should be same as the type of target column.
*
* cb.query().derivedPurchaseList().max(purchasCB -> {
* purchasCB.specify().columnPurchasePrice();
* purchasCB.query().setPaymentCompleteFlg_Equal_True();
* }).rangeOf(2000, 2999, op -> {});
* // PURCHASE_PRICE between 2000 and 2999
*
* The option is allowed to be set only allowOneSide().
* You cannot use greaterThan() and orIsNull() and so on...
* @param minNumber The minimum number of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param maxNumber The maximum number of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param opLambda The callback for option of range-of. (NotNull)
*/
public void rangeOf(Number minNumber, Number maxNumber, ConditionOptionCall opLambda) {
doRangeOf(minNumber, maxNumber, createRangeOfOption(opLambda));
}
protected void doRangeOf(Number minNumber, Number maxNumber, RangeOfOption option) {
assertRangeOfOption(option);
assertRangeOfNotCalledUnsupported(minNumber, maxNumber, option);
assertRangeOfNumberBothNullOrOneSideAllowed(minNumber, maxNumber, option);
@SuppressWarnings("unchecked")
final PARAMETER fromValue = (PARAMETER) minNumber;
@SuppressWarnings("unchecked")
final PARAMETER toValue = (PARAMETER) maxNumber;
dispatchFromTo(fromValue, toValue);
}
protected RangeOfOption createRangeOfOption(ConditionOptionCall opLambda) {
assertRangeOfOptionCall(opLambda);
final RangeOfOption op = newRangeOfOption();
opLambda.callback(op);
return op;
}
protected RangeOfOption newRangeOfOption() {
return new RangeOfOption();
}
// -----------------------------------------------------
// FromTo
// ------
/**
* Set up the comparison 'FromTo' and the values of parameter.
* The type of the parameter should be same as the type of target column.
*
* cb.query().derivedPurchaseList().max(purchasCB -> {
* purchasCB.specify().columnPurchaseDatetime();
* purchasCB.query().setPaymentCompleteFlg_Equal_True();
* }).fromTo(toLocalDate("2012/02/05"), toLocalDate("2012/04/07"), op -> op.compareAsMonth());
* // PURCHASE_DATETIME between 2012/02/01 00:00:00 and 2012/04/30 23:59:59.999
*
* @param fromDate The 'from' local date of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param toDate The 'to' local date of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param opLambda The callback for option of from-to. (NotNull)
*/
public void fromTo(LocalDate fromDate, LocalDate toDate, ConditionOptionCall opLambda) { // #date_parade
final FromToOption option = createFromToOption(opLambda);
if (option.isUsePattern()) {
// to avoid mismatch type of date-time and date, e.g. ...DATE_TIME <= '2015-06-30'
// however ... really want to check specified column's type
doFromTo(toTimestamp(fromDate), toTimestamp(toDate), option);
} else {
doFromTo(toDate(fromDate), toDate(toDate), option);
}
}
/**
* Set up the comparison 'FromTo' and the values of parameter.
* The type of the parameter should be same as the type of target column.
*
* cb.query().derivedPurchaseList().max(purchasCB -> {
* purchasCB.specify().columnPurchaseDatetime();
* purchasCB.query().setPaymentCompleteFlg_Equal_True();
* }).fromTo(toLocalDateTime("2012/02/05"), toLocalDateTime("2012/04/07"), op -> op.compareAsMonth());
* // PURCHASE_DATETIME between 2012/02/01 00:00:00 and 2012/04/30 23:59:59.999
*
* @param fromDate The 'from' local date-time of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param toDate The 'to' local date-time of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param opLambda The callback for option of from-to. (NotNull)
*/
public void fromTo(LocalDateTime fromDate, LocalDateTime toDate, ConditionOptionCall opLambda) {
doFromTo(toTimestamp(fromDate), toTimestamp(toDate), createFromToOption(opLambda));
}
/**
* Set up the comparison 'FromTo' and the values of parameter.
* The type of the parameter should be same as the type of target column.
* If the specified column is date type and has time-parts, you should use java.sql.Timestamp type.
*
* cb.query().derivedPurchaseList().max(purchasCB -> {
* purchasCB.specify().columnPurchaseDatetime();
* purchasCB.query().setPaymentCompleteFlg_Equal_True();
* }).fromTo(toTimestamp("2012/02/05"), toTimestamp("2012/04/07"), op -> op.compareAsMonth());
* // PURCHASE_DATETIME between 2012/02/01 00:00:00 and 2012/04/30 23:59:59.999
*
* @param fromDate The 'from' date of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param toDate The 'to' date of parameter for the specified column. (basically NotNull: null allowed if one-side allowed)
* @param opLambda The callback for option of from-to. (NotNull)
*/
public void fromTo(Date fromDate, Date toDate, ConditionOptionCall opLambda) {
doFromTo(fromDate, toDate, createFromToOption(opLambda));
}
protected FromToOption createFromToOption(ConditionOptionCall opLambda) {
assertFromToOptionCall(opLambda);
final FromToOption op = newFromToOption();
opLambda.callback(op);
return op;
}
protected FromToOption newFromToOption() {
return new FromToOption();
}
protected void doFromTo(Date fromDate, Date toDate, FromToOption option) {
assertFromToOption(option);
assertFromToNotCalledUnsupported(fromDate, toDate, option);
assertFromToDateBothNullOrOneSideAllowed(fromDate, toDate, option);
if (fromDate != null) {
fromDate = option.filterFromDate(fromDate);
}
if (toDate != null) {
toDate = option.xfilterToDateBetweenWay(toDate);
}
@SuppressWarnings("unchecked")
final PARAMETER fromValue = (PARAMETER) fromDate;
@SuppressWarnings("unchecked")
final PARAMETER toValue = (PARAMETER) toDate;
dispatchFromTo(fromValue, toValue);
}
protected void dispatchFromTo(PARAMETER fromValue, PARAMETER toValue) { // shared with rangeOf()
if (fromValue != null && toValue != null) {
doBetween(fromValue, toValue);
} else if (fromValue != null) {
greaterEqual(fromValue);
} else if (toValue != null) {
lessEqual(toValue);
}
}
protected void doBetween(PARAMETER fromValue, PARAMETER toValue) {
assertParameterFromNotNull(fromValue);
assertParameterToNotNull(toValue);
final List fromToValueList = new ArrayList(2);
fromToValueList.add(fromValue);
fromToValueList.add(toValue);
_setupper.setup(_function, _subQuery, getBetweenKeyword(), fromToValueList, _option);
}
protected String getBetweenKeyword() {
return "between";
}
// ===================================================================================
// Time Management
// ===============
protected Date toDate(Object obj) {
return DfTypeUtil.toDate(obj, getFromToConversionTimeZone());
}
protected Timestamp toTimestamp(Object obj) {
return DfTypeUtil.toTimestamp(obj, getFromToConversionTimeZone());
}
protected TimeZone getFromToConversionTimeZone() {
return getDBFluteSystemFinalTimeZone();
}
protected TimeZone getDBFluteSystemFinalTimeZone() {
return DBFluteSystem.getFinalTimeZone();
}
// ===================================================================================
// Assert Helper
// =============
protected void assertParameterNotNull(Object value) {
if (value == null) {
String msg = "The argument 'value' of parameter for DerivedReferrer should not be null.";
throw new IllegalArgumentException(msg);
}
}
// -----------------------------------------------------
// RangeOf
// -------
protected void assertRangeOfOptionCall(ConditionOptionCall opLambda) {
if (opLambda == null) {
String msg = "The argument 'opLambda' for range-of option of (Query)DerivedReferrer should not be null.";
throw new IllegalConditionBeanOperationException(msg);
}
}
protected void assertRangeOfOption(RangeOfOption option) {
if (option == null) {
String msg = "The argument 'option' of range-of for (Query)DerivedReferrer should not be null.";
throw new IllegalConditionBeanOperationException(msg);
}
}
protected void assertRangeOfNotCalledUnsupported(Number minNumber, Number maxNumber, RangeOfOption option) {
if (option.isLessThan()) {
throwRangeOfUnsupportedOptionException(minNumber, maxNumber, option, "lessThan");
}
if (option.isGreaterThan()) {
throwRangeOfUnsupportedOptionException(minNumber, maxNumber, option, "greaterThan");
}
if (option.isOrIsNull()) {
throwRangeOfUnsupportedOptionException(minNumber, maxNumber, option, "greaterThan");
}
if (option.hasCalculationRange()) {
throwRangeOfUnsupportedOptionException(minNumber, maxNumber, option, "calculation");
}
}
protected void throwRangeOfUnsupportedOptionException(Number minNumber, Number maxNumber, RangeOfOption option, String keyword) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("Unsupported option of range-of option.");
br.addItem("Advice");
br.addElement("Cannot use the option '" + keyword + "'");
br.addElement(" of the range-of for (Query)DerivedReferrer.");
br.addItem("Max/Min Number");
br.addElement(minNumber + " / " + maxNumber);
br.addItem("RangeOfOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void assertRangeOfNumberBothNullOrOneSideAllowed(Number minNumber, Number maxNumber, RangeOfOption option) {
final boolean oneSideAllowed = option.isOneSideAllowed();
if (minNumber == null && maxNumber == null) {
throwRangeOfNumberBothNullException(option);
} else if (minNumber == null && !oneSideAllowed) {
throwRangeOfMinNumberOnlyNullNotAllowedException(maxNumber, option);
} else if (maxNumber == null && !oneSideAllowed) {
throwRangeOfMaxNumberOnlyNullNotAllowedException(minNumber, option);
}
}
protected void throwRangeOfNumberBothNullException(RangeOfOption option) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("The both arguments of from-to for (Query)DerivedReferrer were null.");
br.addItem("Advice");
br.addElement("Basically it cannot allow double null");
br.addElement("of the range-of method, even if allowOneSide().");
br.addItem("FromToOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void throwRangeOfMinNumberOnlyNullNotAllowedException(Number maxNumber, RangeOfOption option) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("The min-number of range-of for (Query)DerivedReferrer were null.");
br.addItem("Advice");
br.addElement("Basically it cannot allow min-mumber to be null.");
br.addElement("If you need to specify null, use allowOneSide() option.");
br.addItem("maxNumber");
br.addElement(maxNumber);
br.addItem("RangeOfOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void throwRangeOfMaxNumberOnlyNullNotAllowedException(Number minNumber, RangeOfOption option) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("The max-mumber of range-of for (Query)DerivedReferrer were null.");
br.addItem("Advice");
br.addElement("Basically it cannot allow max-mumber to be null.");
br.addElement("If you need to specify null, use allowOneSide() option.");
br.addItem("minNumber");
br.addElement(minNumber);
br.addItem("RangeOfOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
// -----------------------------------------------------
// FromTo
// ------
protected void assertFromToOptionCall(ConditionOptionCall opLambda) {
if (opLambda == null) {
String msg = "The argument 'opLambda' for from-to option of (Query)DerivedReferrer should not be null.";
throw new IllegalConditionBeanOperationException(msg);
}
}
protected void assertFromToOption(FromToOption option) {
if (option == null) {
String msg = "The argument 'option' of from-to for (Query)DerivedReferrer should not be null.";
throw new IllegalConditionBeanOperationException(msg);
}
}
protected void assertFromToNotCalledUnsupported(Date fromDate, Date toDate, FromToOption option) {
// allow to use e.g. compareAsDate() using DateBetweenWay of from-to option
//if (option.isUsePattern()) {
// String msg = "Cannot use the pattern option .e.g compareAsDate() of the from-to for (Query)DerivedReferrer:";
// msg = msg + " from=" + fromDate + ", to=" + toDate + ", option=" + option;
// throw new IllegalConditionBeanOperationException(msg);
//}
if (!option.isUsePattern() && option.isLessThan()) {
throwFromToUnsupportedOptionException(fromDate, toDate, option, "lessThan");
}
if (!option.isUsePattern() && option.isGreaterThan()) {
throwFromToUnsupportedOptionException(fromDate, toDate, option, "greaterThan");
}
if (option.isOrIsNull()) {
throwFromToUnsupportedOptionException(fromDate, toDate, option, "osIsNull");
}
}
protected void throwFromToUnsupportedOptionException(Date fromDate, Date toDate, FromToOption option, String keyword) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("Unsupported option of from-to option.");
br.addItem("Advice");
br.addElement("Cannot use the option '" + keyword + "'");
br.addElement(" of the from-to for (Query)DerivedReferrer.");
br.addItem("From/To Date");
br.addElement(fromDate + " / " + toDate);
br.addItem("FromToOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void assertFromToDateBothNullOrOneSideAllowed(Date fromDate, Date toDate, FromToOption option) {
final boolean oneSideAllowed = option.isOneSideAllowed();
if (fromDate == null && toDate == null) {
throwFromToDateBothNullException(option);
} else if (fromDate == null && !oneSideAllowed) {
throwFromToFromDateOnlyNullNotAllowedException(toDate, option);
} else if (toDate == null && !oneSideAllowed) {
throwFromToToDateOnlyNullNotAllowedException(fromDate, option);
}
}
protected void throwFromToDateBothNullException(FromToOption option) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("The both arguments of from-to for (Query)DerivedReferrer were null.");
br.addItem("Advice");
br.addElement("Basically it cannot allow double null");
br.addElement("of the from-to method, even if allowOneSide().");
br.addItem("FromToOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void throwFromToFromDateOnlyNullNotAllowedException(Date toDate, FromToOption option) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("The from-date of from-to for (Query)DerivedReferrer were null.");
br.addItem("Advice");
br.addElement("Basically it cannot allow from-date to be null.");
br.addElement("If you need to specify null, use allowOneSide() option.");
br.addItem("toDate");
br.addElement(toDate);
br.addItem("FromToOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void throwFromToToDateOnlyNullNotAllowedException(Date fromDate, FromToOption option) {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("The to-date of from-to for (Query)DerivedReferrer were null.");
br.addItem("Advice");
br.addElement("Basically it cannot allow to-date to be null.");
br.addElement("If you need to specify null, use allowOneSide() option.");
br.addItem("fromDate");
br.addElement(fromDate);
br.addItem("FromToOption");
br.addElement(option);
final String msg = br.buildExceptionMessage();
throw new IllegalConditionBeanOperationException(msg);
}
protected void assertParameterFromNotNull(Object fromValue) {
if (fromValue == null) {
String msg = "The argument 'fromValue' of parameter for DerivedReferrer should not be null.";
throw new IllegalArgumentException(msg);
}
}
protected void assertParameterToNotNull(Object toValue) {
if (toValue == null) {
String msg = "The argument 'toValue' of parameter for DerivedReferrer should not be null.";
throw new IllegalArgumentException(msg);
}
}
// ===================================================================================
// Determination
// =============
public static boolean isOperandIsNull(String operand) { // basically for auto-detect of inner-join
return ConditionKey.CK_IS_NULL.getOperand().equals(operand);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy