Skip to content

Test Failed Issue about 4.5 #1608

Closed
@yugeeklab

Description

@yugeeklab

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??

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions