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

Vladimir Ozerov updated IGNITE-3792:
------------------------------------
    Component/s:     (was: jdbc-driver)

> Wrap table and column names with escape characters in generated H2 SQL queries
> ------------------------------------------------------------------------------
>
>                 Key: IGNITE-3792
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3792
>             Project: Ignite
>          Issue Type: Bug
>          Components: 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[*] (_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"" "; 
> 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" 
> [42001-191]
> 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 (which was done 
> for cache name, but for some reason wasn't done for table name).



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to