You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Andrey N. Gura (Jira)" <ji...@apache.org> on 2022/05/04 16:09:00 UTC
[jira] [Updated] (IGNITE-16322) Database object names case inconsisten between SQL and KV API
[ https://issues.apache.org/jira/browse/IGNITE-16322?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrey N. Gura updated IGNITE-16322:
------------------------------------
Labels: iep-87 ignite-3 (was: ignite-3)
> 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: iep-87, ignite-3
> Fix For: 3.0.0-alpha4
>
> Time Spent: 1h 20m
> 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)
> {{Tuple tuple = ...}}
> {{tuple.value("id")}} -> returns ID column's value
> {{tuple.value("Id")}} -> returns ID column's value
> {{tuple.value("\"Id\"")}} -> returns Id column's value
--
This message was sent by Atlassian Jira
(v8.20.7#820007)