[ 
https://issues.apache.org/jira/browse/EMPIREDB-184?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

jan updated EMPIREDB-184:
-------------------------
    Fix Version/s:     (was: empire-db-2.4.5)
                   empire-db-2.4.6

> DBCompareColExpr does not properly escape characters when generating SQL
> ------------------------------------------------------------------------
>
>                 Key: EMPIREDB-184
>                 URL: https://issues.apache.org/jira/browse/EMPIREDB-184
>             Project: Empire-DB
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: empire-db-2.4.1
>            Reporter: Harald Kirsch
>            Assignee: jan
>             Fix For: empire-db-2.4.6
>
>
> When value=="\\something\\", the following code snippet generates an 
> exception:
>     DBCommand cmd = starSchema.createCommand();
>     cmd.select(d.getColumn(Naming.idCol()));
>     cmd.where(d.getKeyColumn().is(value));
>     DBReader r = new DBReader();
>     r.open(cmd, conn);
> The exception is:
> org.apache.empire.db.DBDatabaseDriver|Error executing query 'SELECT t2.ID
>  |FROM DIM_query t2
>  |WHERE t2.ORIGINAL_QUERY='\LCI\'' --> You have an error in your SQL syntax; 
> check the manual that corresponds to your MySQL server version for the right 
> syntax to use near ''\LCI\'' at line 3
>  |com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in 
> your SQL syntax; check the manual that corresponds to your MySQL server 
> version for the right syntax to use near ''\LCI\'' at line 3
>  |    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
>  |    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
>  |    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
>  |    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
>  |    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
>  |    at com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
>  |    at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232)
>  |    at 
> org.apache.empire.db.DBDatabaseDriver.executeQuery(DBDatabaseDriver.java:594)
>  |    at org.apache.empire.db.DBDatabase.executeQuery(DBDatabase.java:1381)
>  |    at org.apache.empire.db.DBReader.open(DBReader.java:413)
>  |    at org.apache.empire.db.DBReader.open(DBReader.java:431)
> My hunch is that  org.apache.empire.db.DBDatabaseDriver.appendSQLTextValue() 
> should probably take care of escaping characters that let the database throw 
> an exception. Currently the method only takes care of single quotes, but this 
> is seemingly not enough, at least in the case of MySQL.
> (Maybe I should use a feature for prepared statements in empire-db which I 
> have not found yet.-)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to