Simplify SchemaCQLHelperTest methods

Patch by Bartlomiej Kowalczyk; reviewed by Ekaterina Dimitrova and
Benjamin Lerer for CASSANDRA-17181
This commit is contained in:
Kowalczyk 2021-12-06 22:07:13 +01:00 committed by Benjamin Lerer
parent 1dd9f55a60
commit 75482d0a8c
7 changed files with 35 additions and 55 deletions

View File

@ -19,6 +19,7 @@
package org.apache.cassandra.db;
import java.nio.ByteBuffer;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
@ -46,34 +47,10 @@ public class SchemaCQLHelper
// Types come first, as table can't be created without them
Stream<String> udts = SchemaCQLHelper.getUserTypesAsCQL(metadata, types, true);
return Stream.concat(udts,
reCreateStatements(metadata,
true,
true,
true,
true));
}
Stream<String> tableMatadata = Stream.of(SchemaCQLHelper.getTableMetadataAsCQL(metadata));
public static Stream<String> reCreateStatements(TableMetadata metadata,
boolean includeDroppedColumns,
boolean internals,
boolean ifNotExists,
boolean includeIndexes)
{
// Record re-create schema statements
Stream<String> r = Stream.of(metadata)
.map((tm) -> SchemaCQLHelper.getTableMetadataAsCQL(tm,
includeDroppedColumns,
internals,
ifNotExists));
if (includeIndexes)
{
// Indexes applied as last, since otherwise they may interfere with column drops / re-additions
r = Stream.concat(r, SchemaCQLHelper.getIndexesAsCQL(metadata, ifNotExists));
}
return r;
Stream<String> indexes = SchemaCQLHelper.getIndexesAsCQL(metadata, true);
return Stream.of(udts, tableMatadata, indexes).flatMap(Function.identity());
}
/**
@ -83,20 +60,25 @@ public class SchemaCQLHelper
* that will not contain everything needed for user types.
*/
@VisibleForTesting
public static String getTableMetadataAsCQL(TableMetadata metadata,
boolean includeDroppedColumns,
boolean internals,
boolean ifNotExists)
public static String getTableMetadataAsCQL(TableMetadata metadata)
{
if (metadata.isView())
{
KeyspaceMetadata keyspaceMetadata = Schema.instance.getKeyspaceMetadata(metadata.keyspace);
ViewMetadata viewMetadata = keyspaceMetadata.views.get(metadata.name).orElse(null);
assert viewMetadata != null;
return viewMetadata.toCqlString(internals, ifNotExists);
/*
* first argument(withInternals) indicates to include table metadata id and clustering columns order,
* second argument(ifNotExists) instructs to include IF NOT EXISTS statement within creation statements.
*/
return viewMetadata.toCqlString(true, true);
}
return metadata.toCqlString(includeDroppedColumns, internals, ifNotExists);
/*
* With addition to withInternals and ifNotExists arguments, includeDroppedColumns will include dropped
* columns as ALTER TABLE statements appended into the snapshot.
*/
return metadata.toCqlString(true, true, true);
}
/**
@ -162,7 +144,7 @@ public class SchemaCQLHelper
private static UserType getType(TableMetadata metadata, Types types, ByteBuffer name)
{
return types.get(name)
.orElseThrow(() -> new IllegalStateException(String.format("user type %s is part of table %s definition but its definition was missing",
.orElseThrow(() -> new IllegalStateException(String.format("user type %s is part of table %s definition but its definition was missing",
UTF8Type.instance.getString(name),
metadata)));
}

View File

@ -1149,17 +1149,17 @@ public class TableMetadata implements SchemaElement
}
public String toCqlString(boolean includeDroppedColumns,
boolean internals,
boolean withInternals,
boolean ifNotExists)
{
CqlBuilder builder = new CqlBuilder(2048);
appendCqlTo(builder, includeDroppedColumns, internals, ifNotExists);
appendCqlTo(builder, includeDroppedColumns, withInternals, ifNotExists);
return builder.toString();
}
public void appendCqlTo(CqlBuilder builder,
boolean includeDroppedColumns,
boolean internals,
boolean withInternals,
boolean ifNotExists)
{
assert !isView();
@ -1198,7 +1198,7 @@ public class TableMetadata implements SchemaElement
builder.append(" WITH ")
.increaseIndent();
appendTableOptions(builder, internals);
appendTableOptions(builder, withInternals);
builder.decreaseIndent();
@ -1281,9 +1281,9 @@ public class TableMetadata implements SchemaElement
.newLine();
}
void appendTableOptions(CqlBuilder builder, boolean internals)
void appendTableOptions(CqlBuilder builder, boolean withInternals)
{
if (internals)
if (withInternals)
builder.append("ID = ")
.append(id.toString())
.newLine()

View File

@ -849,8 +849,7 @@ public class ViewSchemaTest extends ViewAbstractTest
String view = createView(createView);
ColumnFamilyStore mv = Keyspace.open(keyspace()).getColumnFamilyStore(view);
assertTrue(SchemaCQLHelper.getTableMetadataAsCQL(mv.metadata(), true, true, true)
assertTrue(SchemaCQLHelper.getTableMetadataAsCQL(mv.metadata())
.startsWith(String.format(viewSnapshotSchema,
keyspace(),
view,

View File

@ -300,7 +300,6 @@ public class TupleTypeTest extends CQLTester
TupleType tupleType = testcase.type;
createTable("CREATE TABLE %s (pk int, ck " + toCqlType(tupleType) + ", value int, PRIMARY KEY(pk, ck))" +
" WITH CLUSTERING ORDER BY (ck "+order.name()+")");
String cql = SchemaCQLHelper.getTableMetadataAsCQL(currentTableMetadata(), false, false, false);
SortedMap<ByteBuffer, Integer> map = new TreeMap<>(order.apply(tupleType));
int count = 0;
for (ByteBuffer value : testcase.uniqueRows)

View File

@ -4638,7 +4638,7 @@ public class CompactStorageTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace).getColumnFamilyStore(table);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS cql_test_keyspace_compact.test_table_compact (\n" +
" pk1 varint,\n" +
" pk2 ascii,\n" +
@ -4674,7 +4674,7 @@ public class CompactStorageTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace).getColumnFamilyStore(table);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS cql_test_keyspace_counter.test_table_counter (\n" +
" pk1 varint,\n" +
" pk2 ascii,\n" +
@ -4699,7 +4699,7 @@ public class CompactStorageTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace()).getColumnFamilyStore(tableName);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS " + keyspace() + "." + tableName + " (\n" +
" pk1 varint,\n" +
" reg1 int,\n" +
@ -4721,7 +4721,7 @@ public class CompactStorageTest extends CQLTester
" WITH COMPACT STORAGE");
ColumnFamilyStore cfs = Keyspace.open(keyspace()).getColumnFamilyStore(tableName);
assertTrue(SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true).contains(
assertTrue(SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata()).contains(
"CREATE TABLE IF NOT EXISTS " + keyspace() + "." + tableName + " (\n" +
" pk1 varint,\n" +
" reg1 int,\n" +
@ -4743,7 +4743,7 @@ public class CompactStorageTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace()).getColumnFamilyStore(tableName);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS " + keyspace() + "." + tableName + " (\n" +
" pk1 varint,\n" +
" reg1 counter,\n" +
@ -4766,7 +4766,7 @@ public class CompactStorageTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace()).getColumnFamilyStore(tableName);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS " + keyspace() + "." + tableName + " (\n" +
" pk1 varint,\n" +
" ck1 int,\n" +
@ -4789,7 +4789,7 @@ public class CompactStorageTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace()).getColumnFamilyStore(tableName);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS " + keyspace() + "." + tableName + " (\n" +
" pk1 varint,\n" +
" ck1 int,\n" +

View File

@ -167,7 +167,7 @@ public class SchemaCQLHelperTest extends CQLTester
" reg2 varint,\n" +
" st1 varint static,\n" +
" PRIMARY KEY (pk1, ck1)\n) WITH ID =";
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
assertThat(actual,
allOf(startsWith(expected),
@ -208,7 +208,7 @@ public class SchemaCQLHelperTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace).getColumnFamilyStore(table);
// when re-adding, column is present as both column and as dropped column record.
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true);
String actual = SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata());
String expected = "CREATE TABLE IF NOT EXISTS cql_test_keyspace_readded_columns.test_table_readded_columns (\n" +
" pk1 varint,\n" +
" ck1 varint,\n" +
@ -247,7 +247,7 @@ public class SchemaCQLHelperTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace).getColumnFamilyStore(table);
assertThat(SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true),
assertThat(SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata()),
startsWith(
"CREATE TABLE IF NOT EXISTS cql_test_keyspace_create_table.test_table_create_table (\n" +
" pk1 varint,\n" +
@ -294,7 +294,7 @@ public class SchemaCQLHelperTest extends CQLTester
ColumnFamilyStore cfs = Keyspace.open(keyspace).getColumnFamilyStore(table);
assertThat(SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata(), true, true, true),
assertThat(SchemaCQLHelper.getTableMetadataAsCQL(cfs.metadata()),
containsString("CLUSTERING ORDER BY (cl1 ASC)\n" +
" AND additional_write_policy = 'ALWAYS'\n" +
" AND bloom_filter_fp_chance = 1.0\n" +

View File

@ -283,7 +283,7 @@ public final class CassandraGenerators
{
// to make sure the correct indents are taken, convert to CQL, then replace newlines with the indents
// then prefix with the indents.
String cql = SchemaCQLHelper.getTableMetadataAsCQL((TableMetadata) value, true, true, false);
String cql = SchemaCQLHelper.getTableMetadataAsCQL((TableMetadata) value);
cql = NEWLINE_PATTERN.matcher(cql).replaceAll(Matcher.quoteReplacement("\n " + spacer));
cql = "\n " + spacer + cql;
value = cql;