test: Move test_query_built_indexes_virtual_table from boost to cqlpy

And split it into two -- one for materialized view, another for
secondary index. This is to fit current cqlpy layout that has different
files for views and indexes.

refs: #21552
refs: #21551 (detached this patch from there, as that PR needs fix in
the core code)

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>

Closes scylladb/scylladb#21677
This commit is contained in:
Pavel Emelyanov
2024-11-12 14:57:26 +03:00
committed by Nadav Har'El
parent e1db35c100
commit dd8f56ad3a
3 changed files with 26 additions and 29 deletions

View File

@@ -212,31 +212,3 @@ SEASTAR_TEST_CASE(test_query_view_built_progress_virtual_table) {
assert_that(rs).is_rows().with_size(0);
});
}
SEASTAR_TEST_CASE(test_query_built_indexes_virtual_table) {
return do_with_cql_env_thread([] (cql_test_env& e) {
auto idx = secondary_index::index_table_name("idx");
e.execute_cql("create table cf(p int PRIMARY KEY, v int);").get();
auto f1 = e.local_view_builder().wait_until_built("ks", "vcf");
auto f2 = e.local_view_builder().wait_until_built("ks", idx);
e.execute_cql("create materialized view vcf as select * from cf "
"where v is not null and p is not null "
"primary key (v, p)").get();
e.execute_cql("create index idx on cf (v)").get();
f1.get();
f2.get();
auto rs = e.execute_cql("select * from system.built_views").get();
assert_that(rs).is_rows().with_rows_ignore_order({
{ {utf8_type->decompose(sstring("ks"))}, {utf8_type->decompose(idx)} },
{ {utf8_type->decompose(sstring("ks"))}, {"vcf"} },
});
rs = e.execute_cql("select * from system.\"IndexInfo\"").get();
assert_that(rs).is_rows().with_rows_ignore_order({
{ {utf8_type->decompose(sstring("ks"))}, {utf8_type->decompose(sstring("idx"))} },
});
rs = e.execute_cql("select * from system.\"IndexInfo\" where table_name = 'ks' and index_name = 'idx'").get();
assert_that(rs).is_rows().with_size(1);
rs = e.execute_cql("select * from system.\"IndexInfo\" where table_name = 'ks' and index_name = 'vcf'").get();
assert_that(rs).is_rows().with_size(0);
});
}

View File

@@ -1569,3 +1569,13 @@ def test_views_with_future_tombstones(cql, test_keyspace):
cql.execute(f'insert into {table} (a,b,c,d,e) values (3,4,5,6,7) using timestamp 18')
assert [] == list(cql.execute(f'select * from {table}'))
assert [] == list(cql.execute(f'select * from {mv}'))
# Test view representation in system.* tables
def test_view_in_system_tables(cql, test_keyspace):
with new_test_table(cql, test_keyspace, "p int PRIMARY KEY, v int") as base:
with new_materialized_view(cql, base, '*', 'v,p', 'v is not null and p is not null') as view:
wait_for_view_built(cql, view)
res = [ f'{r.keyspace_name}.{r.view_name}' for r in cql.execute('select * from system.built_views')]
assert view in res
res = [ f'{r.table_name}.{r.index_name}' for r in cql.execute('select * from system."IndexInfo"')]
assert view not in res

View File

@@ -14,7 +14,7 @@ from cassandra.protocol import SyntaxException, AlreadyExists, InvalidRequest, C
from cassandra.query import SimpleStatement
from .cassandra_tests.porting import assert_rows, assert_row_count, assert_rows_ignoring_order, assert_empty
from .util import new_test_table, unique_name, unique_key_int
from .util import new_test_table, unique_name, unique_key_int, is_scylla
# A reproducer for issue #7443: Normally, when the entire table is SELECTed,
# the partitions are returned sorted by the partitions' token. When there
@@ -1956,3 +1956,18 @@ def test_paging_and_drop_index_no_allow_filtering(cql, test_keyspace):
assert len(r.current_rows) <= page_size
got.extend(r.current_rows)
assert expected == got
# Test index representation in system.* tables
def test_index_in_system_tables(cql, test_keyspace):
with new_test_table(cql, test_keyspace, "p int PRIMARY KEY, v int") as table:
index_name = unique_name()
cql.execute(f"CREATE INDEX {index_name} ON {table}(v)")
wait_for_index(cql, test_keyspace, index_name)
if is_scylla(cql):
res = [ f'{r.keyspace_name}.{r.view_name}' for r in cql.execute('select * from system.built_views')]
assert f'{test_keyspace}.{index_name}_index' in res
res = [ f'{r.table_name}::{r.index_name}' for r in cql.execute('select * from system."IndexInfo"')]
assert f'{test_keyspace}::{index_name}' in res
res = cql.execute(f'select * from system."IndexInfo" where table_name = \'{test_keyspace}\' AND index_name = \'{index_name}\'').one()
assert (test_keyspace, index_name) == (res.table_name, res.index_name)