ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Igor Rudyak (JIRA)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-3792) Wrap table and column names with escape characters in generated H2 SQL queries
Date Sun, 28 Aug 2016 23:07:21 GMT
Igor Rudyak created IGNITE-3792:

             Summary: Wrap table and column names with escape characters in generated H2 SQL
                 Key: IGNITE-3792
                 URL: https://issues.apache.org/jira/browse/IGNITE-3792
             Project: Ignite
          Issue Type: Bug
          Components: jdbc-driver, odbc, SQL
            Reporter: Igor Rudyak

Sometimes user can specify SQL reserved word as a class name (or as a class member name) for
objects stored in Ignite cache. In such cases current implementation will fail to create H2
table and start Ignite cluster. 

For example, if I have a system which registers purchase orders and I called my custom class
*Order* (which is reserved SQL keyword), I'll have such an error while trying to start Ignite
cluster with *aaa* cache configured to store my *Order* objects:

*Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "CREATE TABLE ""aaa"".ORDER[*]
REAL) ENGINE ""org.apache.ignite.internal.processors.query.h2.opt.GridH2Table$Engine"" ";
expected "identifier"; SQL statement:
CREATE TABLE "aaa".Order (_key BIGINT NOT NULL,_val OTHER,id BIGINT,productId BIGINT,date
TIMESTAMP,amount INT,price REAL) engine "org.apache.ignite.internal.processors.query.h2.opt.GridH2Table$Engine"

At the same time, renaming *Order* class to something which is not SQL reserved keyword solves
the problem, but from the object model design perspective looks not very good - cause *Order*
class name reflects the main idea of the class.

To prevent the problem, it's necessary to wrap table and column names with escape characters
(double quotes) in generated SQL statements.

This message was sent by Atlassian JIRA

View raw message