[
https://issues.apache.org/jira/browse/CASSANDRA-15458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17654556#comment-17654556
]
Paulo Motta commented on CASSANDRA-15458:
-----------------------------------------
Thanks for looking into this [~yziadeh].
It doesn't seem like this is a problem at the parser level, as shown by the
server unit tests, but just a cqlsh display setting.
When reviewing this I realized that the example shown in the ticket description
might not be incorrect:
{noformat}
SELECT data from test.t1; data
----------
I'm newb
SELECT data from test.t2; data
------------------
{1: 'I''m newb'}
{noformat}
If we were to standardize quoting across simple text types vs complex types
with text on cqlsh, we would have the following options:
a) Quote simple text fields:
{noformat}
SELECT data from test.t1; data
----------
'I''m newb'
{noformat}
b) Unquote complex types.
{noformat}
SELECT data from test.t2; data
------------------
{1: I'm newb}
{noformat}
The problem with a) is that this would change the display of simple text fields
on CQLSH, what could cause compatibility problems.
The problem with b) is that it makes the presentation more ambiguous, for
instance in the example above we don't know if the key '1' on {{{{}1: I'm
newb{}}}} is a text or number without looking at the schema, while {{{{}1:
'I''m newb'{}}}} makes it immediately visible that the key '1' is a number.
I belive this is working as intended, despite the confusion. I propose we
commit just the tests without changing the behavior.
What do you think [~stefan.miklosovic] [~brandon.williams] [~e.dimitrova]?
> CQL: Unable to escape single quote in a map<int,text> attribute
> ---------------------------------------------------------------
>
> Key: CASSANDRA-15458
> URL: https://issues.apache.org/jira/browse/CASSANDRA-15458
> Project: Cassandra
> Issue Type: Bug
> Components: CQL/Interpreter, CQL/Semantics
> Reporter: Abhijeet Singh
> Assignee: Yaman Ziadeh
> Priority: Normal
> Labels: AdventCalendar2021, lhf
> Attachments: cass-screen.png
>
>
> h3. Overview
> For {{text}} attributes, CQL allows escaping single quote [using additional
> single
> quote|http://mail-archives.apache.org/mod_mbox/cassandra-user/201108.mbox/%[email protected]%3E].
> But applying the same syntax for a {{map<int,text>}} attribute does not
> work. Inconsistent behavior was observed between {{text}} datatype and
> {{map<int,text>}} datatype.
> h3. CQL semantic proposal
> Cassandra (CQL) should apply same escaping semantics on {{text}} and
> text-within-map {{map<int,text>}} datatypes.
> h3. Reproducing the bug:
> CREATE query:
> {code:java}
> CREATE TABLE university.test (id int, data map<int, text>, PRIMARY KEY
> (id));{code}
> INSERT query:
> {code:java}
> insert into university.test (id, data) values(1, {1:'I''m newb'});{code}
> On running the aforementioned INSERT query, Cassandra inserts and returns
> {{\{1: 'I''m newb'}}} while the expected result is {{\{1: 'I'm newb'}}}
> h3. Technical details
> OS: CentOS 7
> Kernel: Linux 3.10.0-1062.9.1.el7.x86_64
> Cassandra version: 3.11.5
> Screenshot: [Output after SELECT query|https://i.stack.imgur.com/PLAan.png]
>
> +Additional information for newcomers:+
> The issue seems to come from the ANTLR Lexer logic for {{STRING_LITERAL}}. A
> unit test should also be added in {{SelectTest}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]