Nadav Har'El created CASSANDRA-21746:
----------------------------------------

             Summary: SELECT JSON output can't be read back by INSERT JSON for 
a column or UDT field whose name begins and ends with a double quote
                 Key: CASSANDRA-21746
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21746
             Project: Apache Cassandra
          Issue Type: Bug
            Reporter: Nadav Har'El


SELECT JSON prints a case-sensitive column name (one with uppercase letters) in 
an extra pair of quotes, e.g. "\"Foo\"", and INSERT JSON (and fromJson() for 
UDT fields) treats a name in quotes as case-sensitive, stripping one pair of 
quotes. The same convention applies to the field names of a user-defined type.

But a name which itself begins and ends with a double-quote character - allowed 
in CQL, e.g. the quoted identifier """foo""", whose name is "foo" including the 
quotes - is printed by SELECT JSON without the extra quotes, because it has no 
uppercase letters. INSERT JSON then strips the name's own quotes, and writes 
the value to a different column or field. Tested on Cassandra 5.0.9 and 
6.0-alpha2:

{code}
CREATE TABLE t (p int PRIMARY KEY, """foo""" int, foo int);
INSERT INTO t (p, """foo""", foo) VALUES (1, 1, 2);
SELECT JSON * FROM t WHERE p = 1;
-- {"p": 1, "\"foo\"": 1, "foo": 2}
INSERT INTO t JSON '{"p": 2, "\"foo\"": 1, "foo": 2}';
SELECT JSON * FROM t WHERE p = 2;
-- {"p": 2, "\"foo\"": null, "foo": 1}     <- the value 1 went into foo, and 
foo's value 2 was lost
{code}

The same happens with a UDT field named """foo""" (in UserType.toJSONString() 
and fromJSONObject()).

The fix is to also print a name which begins and ends with a double quote in an 
extra pair of quotes, e.g. "\"\\\"foo\\\"\"", so that stripping one pair of 
quotes restores the original name.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to