Skip to content

Commit eac82ce

Browse files
committed
CNDB-14343: Improve tests
1 parent 251c318 commit eac82ce

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

src/java/org/apache/cassandra/index/sai/disk/vector/VectorMemtableIndex.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ public CloseableIterator<PrimaryKeyWithSortKey> orderResultsBy(QueryContext cont
318318

319319
keysInRange.forEach(k ->
320320
{
321+
// if the indexed column is static, we need to get the static row associated with the non-static row that
322+
// might be referenced by the key
321323
if (isStatic)
322324
k = k.forStaticRow();
323325

test/unit/org/apache/cassandra/index/sai/cql/VectorColumnPositionsTest.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,26 +134,40 @@ public void testPartitionKeyComponentWithClustering() throws Throwable
134134
{
135135
createTable("CREATE TABLE %s (k1 int, k2 vector<float, 2>, c int, v int, PRIMARY KEY((k1, k2), c))");
136136
createIndex("CREATE CUSTOM INDEX ON %s(k2) USING 'StorageAttachedIndex'");
137+
createIndex("CREATE CUSTOM INDEX ON %s(v) USING 'StorageAttachedIndex'");
137138

138-
String insert = "INSERT INTO %s (k1, k2, c) VALUES (?, ?, ?)";
139-
execute(insert, row(1, vector(0.1f, 0.1f), 0));
140-
execute(insert, row(2, vector(0.1f, 0.2f), 0));
141-
execute(insert, row(3, vector(0.1f, 0.3f), 0));
142-
execute(insert, row(4, vector(0.1f, 0.4f), 0));
139+
// insert static rows and non-static rows all at once
140+
String insert = "INSERT INTO %s (k1, k2, c, v) VALUES (?, ?, ?, ?)";
141+
execute(insert, row(1, vector(0.1f, 0.1f), 10, 0));
142+
execute(insert, row(2, vector(0.1f, 0.2f), 20, 0));
143+
execute(insert, row(3, vector(0.1f, 0.3f), 30, 1));
144+
execute(insert, row(4, vector(0.1f, 0.4f), 40, 1));
143145
beforeAndAfterFlush(() -> {
146+
// query with ANN only
144147
assertRows(execute("SELECT k1 FROM %s ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(1), row(2), row(3), row(4));
145148
assertRows(execute("SELECT k1 FROM %s ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 2"), row(1), row(2));
149+
150+
// query with hybrid search
151+
assertRows(execute("SELECT k1 FROM %s WHERE v>=0 ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(1), row(2), row(3), row(4));
152+
assertRows(execute("SELECT k1 FROM %s WHERE v=0 ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(1), row(2));
153+
assertRows(execute("SELECT k1 FROM %s WHERE v>0 ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(3), row(4));
146154
});
147155

148156
// test again with a different order
149157
execute("TRUNCATE TABLE %s");
150-
execute(insert, row(1, vector(0.1f, 0.4f), 0));
151-
execute(insert, row(2, vector(0.1f, 0.3f), 0));
152-
execute(insert, row(3, vector(0.1f, 0.2f), 0));
153-
execute(insert, row(4, vector(0.1f, 0.1f), 0));
158+
execute(insert, row(1, vector(0.1f, 0.4f), 10, 0));
159+
execute(insert, row(2, vector(0.1f, 0.3f), 20, 0));
160+
execute(insert, row(3, vector(0.1f, 0.2f), 30, 1));
161+
execute(insert, row(4, vector(0.1f, 0.1f), 40, 1));
154162
beforeAndAfterFlush(() -> {
163+
// query with ANN only
155164
assertRows(execute("SELECT k1 FROM %s ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(4), row(3), row(2), row(1));
156165
assertRows(execute("SELECT k1 FROM %s ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 2"), row(4), row(3));
166+
167+
// query with hybrid search
168+
assertRows(execute("SELECT k1 FROM %s WHERE v>=0 ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(4), row(3), row(2), row(1));
169+
assertRows(execute("SELECT k1 FROM %s WHERE v=0 ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(2), row(1));
170+
assertRows(execute("SELECT k1 FROM %s WHERE v>0 ORDER BY k2 ANN OF [0.1, 0.1] LIMIT 10"), row(4), row(3));
157171
});
158172
}
159173

0 commit comments

Comments
 (0)