Skip to content

Commit ff4c34b

Browse files
committed
Centralize SQL String Constant Formatting
1 parent a8c9d72 commit ff4c34b

File tree

6 files changed

+17
-8
lines changed

6 files changed

+17
-8
lines changed

src/main/java/org/mybatis/dynamic/sql/StringConstant.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.mybatis.dynamic.sql.render.RenderingContext;
2222
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
23+
import org.mybatis.dynamic.sql.util.StringUtilities;
2324

2425
public class StringConstant implements BindableColumn<String> {
2526

@@ -42,8 +43,7 @@ public Optional<String> alias() {
4243

4344
@Override
4445
public FragmentAndParameters render(RenderingContext renderingContext) {
45-
String escaped = value.replace("'", "''"); //$NON-NLS-1$ //$NON-NLS-2$
46-
return FragmentAndParameters.fromFragment("'" + escaped + "'"); //$NON-NLS-1$ //$NON-NLS-2$
46+
return FragmentAndParameters.fromFragment(StringUtilities.formatConstantForSQL(value));
4747
}
4848

4949
@Override

src/main/java/org/mybatis/dynamic/sql/insert/render/GeneralInsertValuePhraseVisitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.mybatis.dynamic.sql.util.GeneralInsertMappingVisitor;
2626
import org.mybatis.dynamic.sql.util.NullMapping;
2727
import org.mybatis.dynamic.sql.util.StringConstantMapping;
28+
import org.mybatis.dynamic.sql.util.StringUtilities;
2829
import org.mybatis.dynamic.sql.util.ValueMapping;
2930
import org.mybatis.dynamic.sql.util.ValueOrNullMapping;
3031
import org.mybatis.dynamic.sql.util.ValueWhenPresentMapping;
@@ -52,7 +53,7 @@ public Optional<FieldAndValueAndParameters> visit(ConstantMapping mapping) {
5253
@Override
5354
public Optional<FieldAndValueAndParameters> visit(StringConstantMapping mapping) {
5455
return FieldAndValueAndParameters.withFieldName(mapping.columnName())
55-
.withValuePhrase("'" + mapping.constant() + "'") //$NON-NLS-1$ //$NON-NLS-2$
56+
.withValuePhrase(StringUtilities.formatConstantForSQL(mapping.constant()))
5657
.buildOptional();
5758
}
5859

src/main/java/org/mybatis/dynamic/sql/insert/render/MultiRowValuePhraseVisitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.mybatis.dynamic.sql.util.PropertyMapping;
2424
import org.mybatis.dynamic.sql.util.RowMapping;
2525
import org.mybatis.dynamic.sql.util.StringConstantMapping;
26+
import org.mybatis.dynamic.sql.util.StringUtilities;
2627

2728
public class MultiRowValuePhraseVisitor extends MultiRowInsertMappingVisitor<FieldAndValueAndParameters> {
2829
protected final RenderingStrategy renderingStrategy;
@@ -50,7 +51,7 @@ public FieldAndValueAndParameters visit(ConstantMapping mapping) {
5051
@Override
5152
public FieldAndValueAndParameters visit(StringConstantMapping mapping) {
5253
return FieldAndValueAndParameters.withFieldName(mapping.columnName())
53-
.withValuePhrase("'" + mapping.constant() + "'") //$NON-NLS-1$ //$NON-NLS-2$
54+
.withValuePhrase(StringUtilities.formatConstantForSQL(mapping.constant()))
5455
.build();
5556
}
5657

src/main/java/org/mybatis/dynamic/sql/insert/render/ValuePhraseVisitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.mybatis.dynamic.sql.util.PropertyWhenPresentMapping;
2727
import org.mybatis.dynamic.sql.util.RowMapping;
2828
import org.mybatis.dynamic.sql.util.StringConstantMapping;
29+
import org.mybatis.dynamic.sql.util.StringUtilities;
2930

3031
public class ValuePhraseVisitor extends InsertMappingVisitor<Optional<FieldAndValueAndParameters>> {
3132

@@ -52,7 +53,7 @@ public Optional<FieldAndValueAndParameters> visit(ConstantMapping mapping) {
5253
@Override
5354
public Optional<FieldAndValueAndParameters> visit(StringConstantMapping mapping) {
5455
return FieldAndValueAndParameters.withFieldName(mapping.columnName())
55-
.withValuePhrase("'" + mapping.constant() + "'") //$NON-NLS-1$ //$NON-NLS-2$
56+
.withValuePhrase(StringUtilities.formatConstantForSQL(mapping.constant()))
5657
.buildOptional();
5758
}
5859

src/main/java/org/mybatis/dynamic/sql/update/render/SetPhraseVisitor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.mybatis.dynamic.sql.util.NullMapping;
3030
import org.mybatis.dynamic.sql.util.SelectMapping;
3131
import org.mybatis.dynamic.sql.util.StringConstantMapping;
32+
import org.mybatis.dynamic.sql.util.StringUtilities;
3233
import org.mybatis.dynamic.sql.util.UpdateMappingVisitor;
3334
import org.mybatis.dynamic.sql.util.ValueMapping;
3435
import org.mybatis.dynamic.sql.util.ValueOrNullMapping;
@@ -58,9 +59,8 @@ public Optional<FragmentAndParameters> visit(ConstantMapping mapping) {
5859
@Override
5960
public Optional<FragmentAndParameters> visit(StringConstantMapping mapping) {
6061
String fragment = mapping.mapColumn(renderingContext::aliasedColumnName)
61-
+ " = '" //$NON-NLS-1$
62-
+ mapping.constant()
63-
+ "'"; //$NON-NLS-1$
62+
+ " = " //$NON-NLS-1$
63+
+ StringUtilities.formatConstantForSQL(mapping.constant());
6464

6565
return FragmentAndParameters.withFragment(fragment)
6666
.buildOptional();

src/main/java/org/mybatis/dynamic/sql/util/StringUtilities.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,10 @@ static String toCamelCase(String inputString) {
5252

5353
return sb.toString();
5454
}
55+
56+
static String formatConstantForSQL(String in) {
57+
String escaped = in.replace("'", "''"); //$NON-NLS-1$ //$NON-NLS-2$
58+
return "'" + escaped + "'"; //$NON-NLS-1$ //$NON-NLS-2$
59+
60+
}
5561
}

0 commit comments

Comments
 (0)