Merge branch 'cassandra-3.11' into cassandra-4.0

This commit is contained in:
Ekaterina Dimitrova 2021-09-03 10:53:01 -04:00
commit 49e83027e2
1 changed files with 87 additions and 1 deletions

View File

@ -34,6 +34,9 @@ import org.junit.Assert;
import com.datastax.driver.core.exceptions.OperationTimedOutException;
import org.apache.cassandra.concurrent.SEPExecutor;
import org.apache.cassandra.concurrent.Stage;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.Keyspace;
import org.apache.cassandra.db.SchemaCQLHelper;
import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.schema.Schema;
@ -50,6 +53,8 @@ import org.junit.Test;
import com.datastax.driver.core.exceptions.InvalidQueryException;
import static org.junit.Assert.assertTrue;
public class ViewSchemaTest extends CQLTester
{
@ -718,7 +723,7 @@ public class ViewSchemaTest extends CQLTester
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
execute("INSERT into %s (a,b,c,d) VALUES (?,?,?,?)", 1,2,3,4);
execute("INSERT into %s (a,b,c,d) VALUES (?,?,?,?)", 1, 2, 3, 4);
assertInvalidThrowMessage("Cannot use token relation when defining a materialized view", InvalidRequestException.class,
"CREATE MATERIALIZED VIEW mv_test AS SELECT a,b,c FROM %s WHERE a IS NOT NULL and b IS NOT NULL and token(a) = token(1) PRIMARY KEY(b,a)");
@ -857,4 +862,85 @@ public class ViewSchemaTest extends CQLTester
row(0, 1, 0, 0, 3),
row(0, 2, 1, 1, 7));
}
@Test
public void testViewMetadataCQLNotIncludeAllColumn() throws Throwable
{
String createBase = "CREATE TABLE IF NOT EXISTS %s (" +
"pk1 int," +
"pk2 int," +
"ck1 int," +
"ck2 int," +
"reg1 int," +
"reg2 list<int>," +
"reg3 int," +
"PRIMARY KEY ((pk1, pk2), ck1, ck2)) WITH " +
"CLUSTERING ORDER BY (ck1 ASC, ck2 ASC);";
String createView = "CREATE MATERIALIZED VIEW IF NOT EXISTS %s AS SELECT pk1, pk2, ck1, ck2, reg1, reg2 FROM %%s "
+ "WHERE pk2 IS NOT NULL AND pk1 IS NOT NULL AND ck2 IS NOT NULL AND ck1 IS NOT NULL PRIMARY KEY((pk2, pk1), ck2, ck1)";
String expectedViewSnapshot = "CREATE MATERIALIZED VIEW IF NOT EXISTS %s.%s AS\n" +
" SELECT pk2, pk1, ck2, ck1, reg1, reg2\n" +
" FROM %s.%s\n" +
" WHERE pk2 IS NOT NULL AND pk1 IS NOT NULL AND ck2 IS NOT NULL AND ck1 IS NOT NULL\n" +
" PRIMARY KEY ((pk2, pk1), ck2, ck1)\n" +
" WITH ID = %s\n" +
" AND CLUSTERING ORDER BY (ck2 ASC, ck1 ASC)";
testViewMetadataCQL(createBase,
createView,
expectedViewSnapshot);
}
@Test
public void testViewMetadataCQLIncludeAllColumn() throws Throwable
{
String createBase = "CREATE TABLE IF NOT EXISTS %s (" +
"pk1 int," +
"pk2 int," +
"ck1 int," +
"ck2 int," +
"reg1 int," +
"reg2 list<int>," +
"reg3 int," +
"PRIMARY KEY ((pk1, pk2), ck1, ck2)) WITH " +
"CLUSTERING ORDER BY (ck1 ASC, ck2 DESC);";
String createView = "CREATE MATERIALIZED VIEW IF NOT EXISTS %s AS SELECT * FROM %%s "
+ "WHERE pk2 IS NOT NULL AND pk1 IS NOT NULL AND ck2 IS NOT NULL AND ck1 IS NOT NULL PRIMARY KEY((pk2, pk1), ck2, ck1)";
String expectedViewSnapshot = "CREATE MATERIALIZED VIEW IF NOT EXISTS %s.%s AS\n" +
" SELECT *\n" +
" FROM %s.%s\n" +
" WHERE pk2 IS NOT NULL AND pk1 IS NOT NULL AND ck2 IS NOT NULL AND ck1 IS NOT NULL\n" +
" PRIMARY KEY ((pk2, pk1), ck2, ck1)\n" +
" WITH ID = %s\n" +
" AND CLUSTERING ORDER BY (ck2 DESC, ck1 ASC)";
testViewMetadataCQL(createBase,
createView,
expectedViewSnapshot);
}
private void testViewMetadataCQL(String createBase, String createView, String viewSnapshotSchema) throws Throwable
{
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
String base = createTable(createBase);
String view = "mv";
createView(view, createView);
ColumnFamilyStore mv = Keyspace.open(keyspace()).getColumnFamilyStore(view);
assertTrue(SchemaCQLHelper.getTableMetadataAsCQL(mv.metadata(), true, true, true)
.startsWith(String.format(viewSnapshotSchema,
keyspace(),
view,
keyspace(),
base,
mv.metadata().id)));
}
}