public static boolean containsEscapedChar(String value) { return containsEscapedPercent(value) || value.contains("\\\\") || value.contains("\\_"); }
public Builder(Map<String, String> properties) { parent = null; df = SearchUtils.getDateFormat(properties); timeZoneSupported = SearchUtils.isTimeZoneSupported(properties, Boolean.FALSE); }
private void prepareTopStringBuilder() { if (primaryTable != null) { SearchUtils.startSqlQuery(topBuilder, primaryTable, tableAlias, columns); } }
validatePropertyValue(name, originalValue); String value = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); value = SearchUtils.duplicateSingleQuoteIfNeeded(value); SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), value, originalValue)) .append(" ").append("'").append(value).append("'");
final String originalValue = value.toString(); String theValue = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); if (SearchUtils.containsWildcard(originalValue)) { if (SearchUtils.containsEscapedChar(theValue)) { pred = builder.like((Expression<String>)exp, theValue, '\\'); } else { final String originalValue = value.toString(); String theValue = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); if (SearchUtils.containsWildcard(originalValue)) { if (SearchUtils.containsEscapedChar(theValue)) { pred = builder.notLike((Expression<String>)exp, theValue, '\\'); } else {
public String toSQL(String table, String... columns) { return SearchUtils.toSQL(this, table, columns); }
public static String toSqlWildcardString(String value, boolean alwaysWildcard) { if (value.contains("\\")) { value = value.replaceAll("\\\\", "\\\\\\\\"); } if (value.contains("_") && escapeUnderscoreChar()) { value = value.replaceAll("_", "\\\\_"); } if (value.contains("%")) { value = value.replaceAll("%", "\\\\%"); } if (!containsWildcard(value)) { return alwaysWildcard ? "%" + value + "%" : value; } value = value.replaceAll("\\*", "%"); return value; }
Optional<SpecialAttr> specialAttrName = SpecialAttr.fromString(name); String value = SearchUtils.toSqlWildcardString( URLDecoder.decode(sc.getStatement().getValue().toString(), StandardCharsets.UTF_8), false). replaceAll("\\\\_", "_");
public static SimpleDateFormat getDateFormat(Map<String, String> properties) { return getDateFormat(properties.get(DATE_FORMAT_PROPERTY)); } public static SimpleDateFormat getDateFormat(String dfProperty) {
public static String toSqlWildcardString(String value, boolean alwaysWildcard) { if (value.contains("\\")) { value = value.replaceAll("\\\\", "\\\\\\\\"); } if (value.contains("_")) { value = value.replaceAll("_", "\\\\_"); } if (value.contains("%")) { value = value.replaceAll("%", "\\\\%"); } if (!containsWildcard(value)) { return alwaysWildcard ? "%" + value + "%" : value; } else { value = value.replaceAll("\\*", "%"); } return value; }
validatePropertyValue(name, originalValue); String value = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); value = SearchUtils.duplicateSingleQuoteIfNeeded(value); SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), value, originalValue)) .append(" ").append("'").append(value).append("'");
final String originalValue = value.toString(); String theValue = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); if (SearchUtils.containsWildcard(originalValue)) { if (SearchUtils.containsEscapedChar(theValue)) { pred = builder.like((Expression<String>)exp, theValue, '\\'); } else { final String originalValue = value.toString(); String theValue = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); if (SearchUtils.containsWildcard(originalValue)) { if (SearchUtils.containsEscapedChar(theValue)) { pred = builder.notLike((Expression<String>)exp, theValue, '\\'); } else {
public String toSQL(String table, String... columns) { return SearchUtils.toSQL(this, table, columns); }
public static String toSqlWildcardString(String value, boolean alwaysWildcard) { if (value.contains("\\")) { value = value.replaceAll("\\\\", "\\\\\\\\"); } if (value.contains("_") && escapeUnderscoreChar()) { value = value.replaceAll("_", "\\\\_"); } if (value.contains("%")) { value = value.replaceAll("%", "\\\\%"); } if (!containsWildcard(value)) { return alwaysWildcard ? "%" + value + "%" : value; } value = value.replaceAll("\\*", "%"); return value; }
public static SimpleDateFormat getDateFormat(Map<String, String> properties) { return getDateFormat(properties.get(DATE_FORMAT_PROPERTY)); } public static SimpleDateFormat getDateFormat(String dfProperty) {
public static String conditionTypeToSqlOperator(ConditionType ct, String value, String originalValue) { // TODO : if we have the same column involved, ex a >= 123 and a <=244 then // we may try to use IN or BETWEEN, depending on the values final boolean wildcardAvailable = SearchUtils.containsWildcard(originalValue); String op; switch (ct) { case EQUALS: op = wildcardAvailable ? "LIKE" : "="; break; case NOT_EQUALS: op = wildcardAvailable ? "NOT LIKE" : "<>"; break; case GREATER_THAN: op = ">"; break; case GREATER_OR_EQUALS: op = ">="; break; case LESS_THAN: op = "<"; break; case LESS_OR_EQUALS: op = "<="; break; default: String msg = String.format("Condition type %s is not supported", ct.name()); throw new RuntimeException(msg); } return op; }
validatePropertyValue(name, originalValue); String value = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); value = SearchUtils.duplicateSingleQuoteIfNeeded(value); SearchUtils.conditionTypeToSqlOperator(sc.getConditionType(), value, originalValue)) .append(" ").append("'").append(value).append("'");
final String originalValue = value.toString(); String theValue = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); if (SearchUtils.containsWildcard(originalValue)) { if (SearchUtils.containsEscapedChar(theValue)) { pred = builder.like((Expression<String>)exp, theValue, '\\'); } else { final String originalValue = value.toString(); String theValue = SearchUtils.toSqlWildcardString(originalValue, isWildcardStringMatch()); if (SearchUtils.containsWildcard(originalValue)) { if (SearchUtils.containsEscapedChar(theValue)) { pred = builder.notLike((Expression<String>)exp, theValue, '\\'); } else {
public Builder(Map<String, String> properties) { parent = null; df = SearchUtils.getDateFormat(properties); timeZoneSupported = SearchUtils.isTimeZoneSupported(properties, Boolean.FALSE); }
public String toSQL(String table, String... columns) { return SearchUtils.toSQL(this, table, columns); }