Skip to content

Commit

Permalink
Fixed ExtractionCondition to specify ESCAPE when doing LIKE in DAO in…
Browse files Browse the repository at this point in the history
…terface.
  • Loading branch information
HidekiSugimoto189 committed May 11, 2022
1 parent 9a5331e commit 6f79d41
Showing 1 changed file with 50 additions and 23 deletions.
Expand Up @@ -242,7 +242,9 @@ public <V> T notIn(final String col, final Iterable<V> valueList) {
@SuppressWarnings("unchecked")
@Override
public T like(final String col, final CharSequence searchValue) {
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new Like(col, searchValue));
Dialect dialect = agent().getSqlConfig().getDialect();
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new Like(col, searchValue, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -257,7 +259,8 @@ public T like(final String col, final CharSequence searchValue) {
public T startsWith(final String col, final CharSequence searchValue) {
Dialect dialect = agent().getSqlConfig().getDialect();
String escaped = dialect.escapeLikePattern(searchValue);
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new Like(col, escaped, true));
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new Like(col, escaped, true, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -272,7 +275,8 @@ public T startsWith(final String col, final CharSequence searchValue) {
public T endsWith(final String col, final CharSequence searchValue) {
Dialect dialect = agent().getSqlConfig().getDialect();
String escaped = dialect.escapeLikePattern(searchValue);
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new Like(col, true, escaped));
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new Like(col, true, escaped, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -287,7 +291,8 @@ public T endsWith(final String col, final CharSequence searchValue) {
public T contains(final String col, final CharSequence searchValue) {
Dialect dialect = agent().getSqlConfig().getDialect();
String escaped = dialect.escapeLikePattern(searchValue);
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new Like(col, true, escaped, true));
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new Like(col, true, escaped, true, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -300,7 +305,9 @@ public T contains(final String col, final CharSequence searchValue) {
@SuppressWarnings("unchecked")
@Override
public T notLike(final String col, final CharSequence searchValue) {
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new NotLike(col, searchValue));
Dialect dialect = agent().getSqlConfig().getDialect();
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new NotLike(col, searchValue, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -315,7 +322,8 @@ public T notLike(final String col, final CharSequence searchValue) {
public T notStartsWith(final String col, final CharSequence searchValue) {
Dialect dialect = agent().getSqlConfig().getDialect();
String escaped = dialect.escapeLikePattern(searchValue);
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new NotLike(col, escaped, true));
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new NotLike(col, escaped, true, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -330,7 +338,8 @@ public T notStartsWith(final String col, final CharSequence searchValue) {
public T notEndsWith(final String col, final CharSequence searchValue) {
Dialect dialect = agent().getSqlConfig().getDialect();
String escaped = dialect.escapeLikePattern(searchValue);
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new NotLike(col, true, escaped));
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new NotLike(col, true, escaped, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand All @@ -345,7 +354,8 @@ public T notEndsWith(final String col, final CharSequence searchValue) {
public T notContains(final String col, final CharSequence searchValue) {
Dialect dialect = agent().getSqlConfig().getDialect();
String escaped = dialect.escapeLikePattern(searchValue);
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col), new NotLike(col, true, escaped, true));
context().param(PREFIX + CaseFormat.CAMEL_CASE.convert(col),
new NotLike(col, true, escaped, true, dialect.getEscapeChar()));
this.useOperator = true;
return (T) this;
}
Expand Down Expand Up @@ -840,15 +850,17 @@ public String getOperator() {
public static class Like extends SingleOperator<CharSequence> {
protected boolean prefix;
protected boolean suffix;
protected char escapeChar;

/**
* Constructor
*
* @param col bind column name
* @param value 値
* @param escapeChar エスケープ文字
*/
public Like(final String col, final CharSequence value) {
this(col, true, value, true);
public Like(final String col, final CharSequence value, final char escapeChar) {
this(col, true, value, true, escapeChar);
}

/**
Expand All @@ -857,9 +869,10 @@ public Like(final String col, final CharSequence value) {
* @param col bind column name
* @param prefix 前にワイルドカードを挿入するかどうか。trueの場合%を追加
* @param value 値
* @param escapeChar エスケープ文字
*/
public Like(final String col, final boolean prefix, final CharSequence value) {
this(col, prefix, value, false);
public Like(final String col, final boolean prefix, final CharSequence value, final char escapeChar) {
this(col, prefix, value, false, escapeChar);
}

/**
Expand All @@ -868,9 +881,10 @@ public Like(final String col, final boolean prefix, final CharSequence value) {
* @param col bind column name
* @param value 値
* @param suffix 後ろにワイルドカードを挿入するかどうか。trueの場合%を追加
* @param escapeChar エスケープ文字
*/
public Like(final String col, final CharSequence value, final boolean suffix) {
this(col, false, value, suffix);
public Like(final String col, final CharSequence value, final boolean suffix, final char escapeChar) {
this(col, false, value, suffix, escapeChar);
}

/**
Expand All @@ -880,11 +894,14 @@ public Like(final String col, final CharSequence value, final boolean suffix) {
* @param prefix 前にワイルドカードを挿入するかどうか。trueの場合%を追加
* @param value 値
* @param suffix 後ろにワイルドカードを挿入するかどうか。trueの場合%を追加
* @param escapeChar エスケープ文字
*/
public Like(final String col, final boolean prefix, final CharSequence value, final boolean suffix) {
public Like(final String col, final boolean prefix, final CharSequence value, final boolean suffix,
final char escapeChar) {
super(col, value);
this.prefix = prefix;
this.suffix = suffix;
this.escapeChar = escapeChar;
}

/**
Expand All @@ -904,6 +921,11 @@ public CharSequence getValue() {
return searchValue;
}

@Override
public String toConditionString() {
return super.toConditionString() + " ESCAPE '" + escapeChar + "'";
}

/**
* {@inheritDoc}
*
Expand All @@ -924,9 +946,10 @@ public static class NotLike extends Like {
*
* @param col bind column name
* @param value 値
* @param escapeChar エスケープ文字
*/
public NotLike(final String col, final CharSequence value) {
super(col, value);
public NotLike(final String col, final CharSequence value, final char escapeChar) {
super(col, value, escapeChar);
}

/**
Expand All @@ -935,9 +958,10 @@ public NotLike(final String col, final CharSequence value) {
* @param col bind column name
* @param prefix 前にワイルドカードを挿入するかどうか。trueの場合%を追加
* @param value 値
* @param escapeChar エスケープ文字
*/
public NotLike(final String col, final boolean prefix, final CharSequence value) {
super(col, prefix, value);
public NotLike(final String col, final boolean prefix, final CharSequence value, final char escapeChar) {
super(col, prefix, value, escapeChar);
}

/**
Expand All @@ -946,9 +970,10 @@ public NotLike(final String col, final boolean prefix, final CharSequence value)
* @param col bind column name
* @param value 値
* @param suffix 後ろにワイルドカードを挿入するかどうか。trueの場合%を追加
* @param escapeChar エスケープ文字
*/
public NotLike(final String col, final CharSequence value, final boolean suffix) {
super(col, value, suffix);
public NotLike(final String col, final CharSequence value, final boolean suffix, final char escapeChar) {
super(col, value, suffix, escapeChar);
}

/**
Expand All @@ -958,9 +983,11 @@ public NotLike(final String col, final CharSequence value, final boolean suffix)
* @param prefix 前にワイルドカードを挿入するかどうか。trueの場合%を追加
* @param value 値
* @param suffix 後ろにワイルドカードを挿入するかどうか。trueの場合%を追加
* @param escapeChar エスケープ文字
*/
public NotLike(final String col, final boolean prefix, final CharSequence value, final boolean suffix) {
super(col, prefix, value, suffix);
public NotLike(final String col, final boolean prefix, final CharSequence value, final boolean suffix,
final char escapeChar) {
super(col, prefix, value, suffix, escapeChar);
}

/**
Expand Down

0 comments on commit 6f79d41

Please sign in to comment.