Closed
Description
I'm working with 4.5. And I found out bug when I run example of replacing(https://github.com/JSQLParser/JSqlParser/wiki/Examples-of-SQL-building#more-general-replacing-of-string-values-in-statements).
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.util.deparser.ExpressionDeParser;
import net.sf.jsqlparser.util.deparser.SelectDeParser;
import net.sf.jsqlparser.util.deparser.StatementDeParser;
public class ReplaceColumnValues {
static class ReplaceColumnAndLongValues extends ExpressionDeParser {
@Override
public void visit(StringValue stringValue) {
this.getBuffer().append("?");
}
@Override
public void visit(LongValue longValue) {
this.getBuffer().append("?");
}
}
public static String cleanStatement(String sql) throws JSQLParserException {
StringBuilder buffer = new StringBuilder();
ExpressionDeParser expr = new ReplaceColumnAndLongValues();
SelectDeParser selectDeparser = new SelectDeParser(expr, buffer);
expr.setSelectVisitor(selectDeparser);
expr.setBuffer(buffer);
StatementDeParser stmtDeparser = new StatementDeParser(expr, selectDeparser, buffer);
Statement stmt = CCJSqlParserUtil.parse(sql);
stmt.accept(stmtDeparser);
return stmtDeparser.getBuffer().toString();
}
public static void main(String[] args) throws JSQLParserException {
System.out.println(cleanStatement("SELECT 'abc', 5 FROM mytable WHERE col='test'"));
System.out.println(cleanStatement("UPDATE table1 A SET A.columna = 'XXX' WHERE A.cod_table = 'YYY'"));
System.out.println(cleanStatement("INSERT INTO example (num, name, address, tel) VALUES (1, 'name', 'test ', '1234-1234')"));
System.out.println(cleanStatement("DELETE FROM table1 where col=5 and col2=4"));
}
}
actual
INSERT INTO example (num, name, address, tel) VALUES (1, 'name', 'test ', '1234-1234')
expected
INSERT INTO example (num, name, address, tel) VALUES (?, ?, ?, ?)
And also Test failed
InsertTest > testInsertTableArrays4() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:400
InsertTest > testModifierIgnore() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:291
InsertTest > testInsertMultiRowValue() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:191
InsertTest > testInsertWithReturning2() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:244
InsertTest > testInsertWithReturning3() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:249
InsertTest > testInsertKeyWordIntervalIssue682() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:353
InsertTest > testNextValueFor() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:368
InsertTest > testInsertValuesWithDuplicateEliminationInDeparsing() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:331
InsertTest > testHexValues2() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:276
InsertTest > testHexValues3() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:281
InsertTest > testHexValues() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:271
InsertTest > testSimpleInsert() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:234
InsertTest > testInsertKeyWordEnableIssue592() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:348
InsertTest > testInsertWithKeywords() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:266
InsertTest > testModifierPriority1() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:296
InsertTest > testModifierPriority2() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:301
InsertTest > testModifierPriority3() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:306
InsertTest > testDisableKeywordIssue945() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:383
InsertTest > testInsertWithReturning() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:239
InsertTest > testKeywordDefaultIssue1470() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:410
InsertTest > testInsertOnConflictIssue1551() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:476
InsertTest > testBackslashEscapingIssue827() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:378
InsertTest > testIssue223() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:311
InsertTest > testNextVal() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:363
InsertTest > testOracleHint() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:393
InsertTest > testKeywordPrecisionIssue363() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:316
InsertTest > testDuplicateKey() FAILED
org.opentest4j.AssertionFailedError at InsertTest.java:286
SpecialOracleTest > testAllSqlsParseDeparse() FAILED
org.opentest4j.AssertionFailedError at SpecialOracleTest.java:302
Do you find out this issue??