private Character getEscapeChar(Value e) { if (e == null) { return getEscapeChar(defaultEscape); } String es = e.getString(); Character esc; if (es == null) { esc = getEscapeChar(defaultEscape); } else if (es.length() == 0) { esc = null; } else if (es.length() > 1) { throw DbException.get(ErrorCode.LIKE_ESCAPE_ERROR_1, es); } else { esc = es.charAt(0); } return esc; }
/** * Test if the value matches the pattern. * * @param testPattern the pattern * @param value the value * @param escapeChar the escape character * @return true if the value matches */ public boolean test(String testPattern, String value, char escapeChar) { initPattern(testPattern, escapeChar); if (invalidPattern) { return false; } return compareAt(value, 0, 0, value.length(), patternChars, patternTypes); }
return ValueExpression.get(getValue(session)); initPattern(p, getEscapeChar(e)); if (invalidPattern) { return ValueExpression.getNull(); Comparison.IS_NOT_NULL, left, null).optimize(session); if (isFullMatch()) {
return ValueNull.INSTANCE; initPattern(p, getEscapeChar(e)); result = compareAt(value, 0, 0, value.length(), patternChars, patternTypes);
initPattern(p, getEscapeChar(e)); if (invalidPattern) { return;
private Expression readConcat() { Expression r = readSum(); while (true) { if (readIf("||")) { r = new Operation(Operation.CONCAT, r, readSum()); } else if (readIf("~")) { if (readIf("*")) { Function function = Function.getFunction(database, "CAST"); function.setDataType(new Column("X", Value.STRING_IGNORECASE)); function.setParameter(0, r); r = function; } r = new CompareLike(database, r, readSum(), null, true); } else if (readIf("!~")) { if (readIf("*")) { Function function = Function.getFunction(database, "CAST"); function.setDataType(new Column("X", Value.STRING_IGNORECASE)); function.setParameter(0, r); r = function; } r = new ConditionNot(new CompareLike(database, r, readSum(), null, true)); } else { return r; } } }
r = new CompareLike(database, r, b, esc, false); } else if (readIf("REGEXP")) { Expression b = readConcat(); r = new CompareLike(database, r, b, null, true); } else if (readIf("IS")) { if (readIf("NOT")) {