mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-24 18:40:38 +00:00
Add the missing partition-key validation in INSERT JSON statements. Scylla, following the lead of Cassandra, forbids an empty-string partition key (please note that this is not the same as a null partition key, and that null clustering keys *are* allowed). Trying to INSERT, UPDATE or DELETE a partition with an empty string as the partition key fails with a "Key may not be empty". However, we had a loophole - you could insert such empty-string partition keys using an "INSERT ... JSON" statement. The problem was that the partition key validation was done in one place - `modification_statement::build_partition_keys()`. The INSERT, UPDATE and DELETE statements all inherited this same method and got the correct validation. But the INSERT JSON statement - insert_prepared_json_statement overrode the build_partition_keys() method and this override forgot to call the validation function. So in this patch we add the missing validation. Note that the validation function checks for more than just empty strings - there is also a length limit for partition keys. This patch also adds a cql-pytest reproducer for this bug. Before this patch, the test passed on Cassandra but failed on Scylla. Reported by @FortTell Fixes #9853. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20220116085216.21774-1-nyh@scylladb.com>