[
https://issues.apache.org/jira/browse/IGNITE-16322?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Taras Ledkov updated IGNITE-16322:
----------------------------------
Description:
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.
*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
{{ignite.tables().table("public.mytable");}} -> return 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")}} -> return ID column's value
{{tbl.get(...).value("Id")}} -> return 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");}} -> return PUBLIC.MYTABLE
{{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable
{{ignite.tables().table("public.\"MyTable\"");}} -> return PUBLIC.MyTable
Tuple / column behavior:
{{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates
PUBLIC.MYTABLE (ID, Id, VAL)
{{tbl.get(...).value("id")}} -> return ID column's value
{{tbl.get(...).value("Id")}} -> return ID column's value
{{tbl.get(...).value("\"Id\"")}} -> return 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.
*Proposed Fix*
Use case insensitive collation to compare and lookup database object.
e.g.
{{CREATE TABLE MyTable (id INT, val INT)}}; -> creates PUBLIC.MYTABLE
{{ignite.tables().table("public.mytable");}} -> return 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")}} -> return ID column's value
{{tbl.get(...).value("Id")}} -> return 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-alpha5
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> 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.
> *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
> {{ignite.tables().table("public.mytable");}} -> return 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")}} -> return ID column's value
> {{tbl.get(...).value("Id")}} -> return 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");}} -> return PUBLIC.MYTABLE
> {{CREATE TABLE \"MyTable\" (id INT, val INT)}}; -> creates PUBLIC.MyTable
> {{ignite.tables().table("public.\"MyTable\"");}} -> return PUBLIC.MyTable
> Tuple / column behavior:
> {{CREATE TABLE MyTable (id INT, \"Id\" INT, val INT)}}; -> creates
> PUBLIC.MYTABLE (ID, Id, VAL)
> {{tbl.get(...).value("id")}} -> return ID column's value
> {{tbl.get(...).value("Id")}} -> return ID column's value
> {{tbl.get(...).value("\"Id\"")}} -> return Id column's value
--
This message was sent by Atlassian Jira
(v8.20.1#820001)