mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-28 18:50:53 +00:00
A materialized views can provide a filter so as to pick up only a subset of the rows from the base table. Usually, the filter operates on columns from the base table's primary key. If we use a filter on regular (non-key) columns, things get hairy, and as issue #3430 showed, wrong: merely updating this column in the base table may require us to delete, or resurrect, the view row. But normally we need to do the above when the "new view key column" was updated, when there is one. We use shadowable tombstones with one timestamp to do this, so it cannot take into account the two timestamp from those two columns (the filtered column and the new key column). So in the current code, filtering by a non-key column does not work correctly. In this patch we provide two test cases (one involving TTLs, and one involves only normal updates), which demonstrate vividly that it does *not* work correctly. With normal updates, trying to resurect a view row that has previously disappeared, fails. With TTLs, things are even worse, and the view row fails to disappear when the filtered column is TTLed. In Cassandra, the same thing doesn't work correctly as well (see CASSANDRA-13798 and CASSANDRA-13832) so they decided to refuse creating a materialized view filtering a non-key column. In this patch we also do this - fail the creation of such an unsupported view. For this reason, the two tests mentioned above are commented out in a "#if", with, instead, a trivial test verifying a failure to create such a view. Note that as explained above, when the filtered column and new view key column are *different* we have a problem. But when they are the *same* - namely we filter by a non-key base column which actually *is* a key in the view - we are actually fine. This patch includes additional test cases verifying that this case is really fine and provides correct results. Accordingly, this case is *not* forbidden in the view creation code. Fixes #3430. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20181008185633.24616-1-nyh@scylladb.com>