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

Taras Ledkov updated IGNITE-16322:
----------------------------------
    Description: 
Current naming of the database object is not clear for everyone.

*Current behavior*
{{CREATE TABLE mytable(id INT, val INT)}}; -> creates PUBLIC.MYTABLE (ID, VAL)
{{ignite.tables().table("public.mytable");}} -> fails with table not found
{{ignite.tables().table("PUBLIC.MYTABLE ");}} -> returns PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable(ID, 
VAL)
{{ignite.tables().table("PUBLIC.MyTable");}} -> returns PUBLIC.MyTable

Tuple / column behavior: 
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates 
PUBLIC.MYTABLE (ID, Id, VAL)
{{tbl.get().value("id")}} -> fails with error: column not found 
{{tbl.get().value("ID")}} -> returns ID column's value
{{tbl.get().value("Id")}} -> returns Id column's value

*Proposed Fixes*

*1. Use case insensitive collation to compare and lookup database object*
e.g. 
{{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE (ID, VAL)
{{ignite.tables().table("public.mytable");}} -> returns PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> fails with error: 
PUBLIC.MYTABLE already exists,

Tuple / column behavior: 
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> fails with error: 
duplicate column name: ID
{{tbl.get().value("id")}} -> returns ID column's value
{{tbl.get().value("Id")}} -> returns ID column's value

*2. Case sensitive collation for DB object names and parse string argument of 
the name passed through API*
Use quotation for string values by API
{{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE
{{ignite.tables().table("public.mytable");}} -> returns PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable
{{ignite.tables().table("public.\"MyTable\"");}} -> returns PUBLIC.MyTable

Tuple / column behavior: 
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates 
PUBLIC.MYTABLE (ID, Id, VAL)
{{tbl.get().value("id")}} -> returns ID column's value
{{tbl.get().value("Id")}} -> returns ID column's value
{{tbl.get().value("\"Id\"")}} -> returns Id column's value


  was:
Examples fail with NPE because table with the specified name does not exist.
The actual table name is PUBLIC.ACCOUNTS (all uppercase), same for column names 
- ACCOUNTNUMBER and so on. 

*Current behavior*
{{CREATE TABLE mytable(id INT, val INT)}}; -> creates PUBLIC.MYTABLE (ID, VAL)
{{ignite.tables().table("public.mytable");}} -> fails with table not found
{{ignite.tables().table("PUBLIC.MYTABLE ");}} -> returns PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable(ID, 
VAL)
{{ignite.tables().table("PUBLIC.MyTable");}} -> returns PUBLIC.MyTable

Tuple / column behavior: 
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates 
PUBLIC.MYTABLE (ID, Id, VAL)
{{tbl.get().value("id")}} -> fails with error: column not found 
{{tbl.get().value("ID")}} -> returns ID column's value
{{tbl.get().value("Id")}} -> returns Id column's value

*Proposed Fixes*

*1. Use case insensitive collation to compare and lookup database object*
e.g. 
{{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE (ID, VAL)
{{ignite.tables().table("public.mytable");}} -> returns PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> fails with error: 
PUBLIC.MYTABLE already exists,

Tuple / column behavior: 
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> fails with error: 
duplicate column name: ID
{{tbl.get().value("id")}} -> returns ID column's value
{{tbl.get().value("Id")}} -> returns ID column's value

*2. Case sensitive collation for DB object names and parse string argument of 
the name passed through API*
Use quotation for string values by API
{{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE
{{ignite.tables().table("public.mytable");}} -> returns PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable
{{ignite.tables().table("public.\"MyTable\"");}} -> returns PUBLIC.MyTable

Tuple / column behavior: 
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates 
PUBLIC.MYTABLE (ID, Id, VAL)
{{tbl.get().value("id")}} -> returns ID column's value
{{tbl.get().value("Id")}} -> returns ID column's value
{{tbl.get().value("\"Id\"")}} -> returns Id column's value



> Database object names case inconsisten between SQL and KV API
> -------------------------------------------------------------
>
>                 Key: IGNITE-16322
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16322
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 3.0.0-alpha3
>            Reporter: Taras Ledkov
>            Assignee: Taras Ledkov
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-alpha4
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Current naming of the database object is not clear for everyone.
> *Current behavior*
> {{CREATE TABLE mytable(id INT, val INT)}}; -> creates PUBLIC.MYTABLE (ID, VAL)
> {{ignite.tables().table("public.mytable");}} -> fails with table not found
> {{ignite.tables().table("PUBLIC.MYTABLE ");}} -> returns PUBLIC.MYTABLE
> {{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable(ID, 
> VAL)
> {{ignite.tables().table("PUBLIC.MyTable");}} -> returns PUBLIC.MyTable
> Tuple / column behavior: 
> {{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates 
> PUBLIC.MYTABLE (ID, Id, VAL)
> {{tbl.get().value("id")}} -> fails with error: column not found 
> {{tbl.get().value("ID")}} -> returns ID column's value
> {{tbl.get().value("Id")}} -> returns Id column's value
> *Proposed Fixes*
> *1. Use case insensitive collation to compare and lookup database object*
> e.g. 
> {{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE (ID, 
> VAL)
> {{ignite.tables().table("public.mytable");}} -> returns PUBLIC.MYTABLE
> {{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> fails with error: 
> PUBLIC.MYTABLE already exists,
> Tuple / column behavior: 
> {{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> fails with error: 
> duplicate column name: ID
> {{tbl.get().value("id")}} -> returns ID column's value
> {{tbl.get().value("Id")}} -> returns ID column's value
> *2. Case sensitive collation for DB object names and parse string argument of 
> the name passed through API*
> Use quotation for string values by API
> {{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE
> {{ignite.tables().table("public.mytable");}} -> returns PUBLIC.MYTABLE
> {{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable
> {{ignite.tables().table("public.\"MyTable\"");}} -> returns PUBLIC.MyTable
> Tuple / column behavior: 
> {{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates 
> PUBLIC.MYTABLE (ID, Id, VAL)
> {{tbl.get().value("id")}} -> returns ID column's value
> {{tbl.get().value("Id")}} -> returns ID column's value
> {{tbl.get().value("\"Id\"")}} -> returns Id column's value



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to