From e94032a2346ac07b4d2c0d2e4de6d88b16da05d2 Mon Sep 17 00:00:00 2001 From: Robert Stupp Date: Fri, 6 Nov 2015 18:26:00 +0100 Subject: [PATCH] Store UDA initcond as CQL literal in the schema table, instead of a blob patch by Robert Stupp; reviewed by Aleksey Yeschenko for CASSANDRA-10650 --- CHANGES.txt | 1 + ...e-3.0.0-beta1-bb1bce4-SNAPSHOT-shaded.jar} | Bin 2284484 -> 2288891 bytes ...r-2.1.3.txt => cassandra-driver-3.0.0.txt} | 0 .../cassandra/config/ViewDefinition.java | 15 +- .../org/apache/cassandra/cql3/CQL3Type.java | 223 ++++- .../cassandra/cql3/CQLFragmentParser.java | 84 ++ .../cassandra/cql3/ColumnIdentifier.java | 10 +- .../apache/cassandra/cql3/QueryProcessor.java | 19 +- src/java/org/apache/cassandra/cql3/Terms.java | 9 + .../statements/CreateAggregateStatement.java | 3 +- .../cassandra/db/marshal/AbstractType.java | 2 +- .../cassandra/schema/CQLTypeParser.java | 35 +- .../cassandra/schema/SchemaKeyspace.java | 10 +- .../serializers/AbstractTextSerializer.java | 28 + .../serializers/BytesSerializer.java | 14 + .../serializers/TimestampSerializer.java | 32 +- .../cassandra/serializers/TypeSerializer.java | 8 + .../cassandra/cql3/CQL3TypeLiteralTest.java | 786 ++++++++++++++++++ .../operations/AggregationTest.java | 15 + .../schema/LegacySchemaMigratorTest.java | 6 +- 20 files changed, 1213 insertions(+), 87 deletions(-) rename lib/{cassandra-driver-core-3.0.0-beta1-92c4c80-SNAPSHOT-shaded.jar => cassandra-driver-core-3.0.0-beta1-bb1bce4-SNAPSHOT-shaded.jar} (87%) rename lib/licenses/{cassandra-driver-2.1.3.txt => cassandra-driver-3.0.0.txt} (100%) create mode 100644 src/java/org/apache/cassandra/cql3/CQLFragmentParser.java create mode 100644 test/unit/org/apache/cassandra/cql3/CQL3TypeLiteralTest.java diff --git a/CHANGES.txt b/CHANGES.txt index c39f1194ed..9966bfd5b1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0 + * Store UDA initcond as CQL literal in the schema table, instead of a blob (CASSANDRA-10650) * Don't use -1 for the position of partition key in schema (CASSANDRA-10491) * Fix distinct queries in mixed version cluster (CASSANDRA-10573) * Skip sstable on clustering in names query (CASSANDRA-10571) diff --git a/lib/cassandra-driver-core-3.0.0-beta1-92c4c80-SNAPSHOT-shaded.jar b/lib/cassandra-driver-core-3.0.0-beta1-bb1bce4-SNAPSHOT-shaded.jar similarity index 87% rename from lib/cassandra-driver-core-3.0.0-beta1-92c4c80-SNAPSHOT-shaded.jar rename to lib/cassandra-driver-core-3.0.0-beta1-bb1bce4-SNAPSHOT-shaded.jar index 2026c52f0068530f3d457e25af4ec35114fd7471..b8f002f7047511329aaa0d43b2ad9d8e5b16a013 100644 GIT binary patch delta 144918 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

=~SmJK${OF6&iT|F9cJp_D>9AS<$wC|=|c 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 BwXOgF delta 140958 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�c2_x!nfHm-|7-5)d{xd@m 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�r#@-+p0%33Xmd&k;F+r}34#piT5aH5t_S5J^y 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 e(6kEtyy?O+Uu#}A4~su69y8JGr}{m7fc_tPko whereClauseToRelations(String whereClause) { - ErrorCollector errorCollector = new ErrorCollector(whereClause); - CharStream stream = new ANTLRStringStream(whereClause); - CqlLexer lexer = new CqlLexer(stream); - lexer.addErrorListener(errorCollector); - - TokenStream tokenStream = new CommonTokenStream(lexer); - CqlParser parser = new CqlParser(tokenStream); - parser.addErrorListener(errorCollector); - try { - List relations = parser.whereClause().build().relations; - - // The errorCollector has queued up any errors that the lexer and parser may have encountered - // along the way, if necessary, we turn the last error into exceptions here. - errorCollector.throwFirstSyntaxError(); + List relations = CQLFragmentParser.parseAnyUnhandled(CqlParser::whereClause, whereClause).build().relations; return relations; } diff --git a/src/java/org/apache/cassandra/cql3/CQL3Type.java b/src/java/org/apache/cassandra/cql3/CQL3Type.java index fde3fab40a..0c4ef172ca 100644 --- a/src/java/org/apache/cassandra/cql3/CQL3Type.java +++ b/src/java/org/apache/cassandra/cql3/CQL3Type.java @@ -17,6 +17,7 @@ */ package org.apache.cassandra.cql3; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,9 @@ import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.SyntaxException; import org.apache.cassandra.schema.KeyspaceMetadata; import org.apache.cassandra.schema.Types; +import org.apache.cassandra.serializers.CollectionSerializer; +import org.apache.cassandra.serializers.MarshalException; +import org.apache.cassandra.utils.ByteBufferUtil; public interface CQL3Type { @@ -38,6 +42,23 @@ public interface CQL3Type public boolean isCollection(); public AbstractType getType(); + /** + * Generate CQL literal from this type's serialized representation using the specified protocol version. + * Convinience method for {@link #toCQLLiteral(ByteBuffer, int, StringBuilder)} that just returns a {@code String}. + */ + public default String asCQLLiteral(ByteBuffer buffer, int version) + { + StringBuilder sb = new StringBuilder(); + toCQLLiteral(buffer, version, sb); + return sb.toString(); + } + + /** + * Generate CQL literal from this type's serialized representation using the specified protocol version. + * Some work is delegated to {@link org.apache.cassandra.serializers.TypeSerializer#toCQLLiteral(ByteBuffer, StringBuilder)}. + */ + public void toCQLLiteral(ByteBuffer buffer, int version, StringBuilder target); + public enum Native implements CQL3Type { ASCII (AsciiType.instance), @@ -79,6 +100,18 @@ public interface CQL3Type return type; } + /** + * Delegate to + * {@link org.apache.cassandra.serializers.TypeSerializer#toCQLLiteral(ByteBuffer, StringBuilder)} + * for native types as most CQL literal representations work fine with the default + * {@link org.apache.cassandra.serializers.TypeSerializer#toString(Object)} + * {@link org.apache.cassandra.serializers.TypeSerializer#deserialize(ByteBuffer)} implementations. + */ + public void toCQLLiteral(ByteBuffer buffer, int version, StringBuilder target) + { + type.getSerializer().toCQLLiteral(buffer, target); + } + @Override public String toString() { @@ -110,6 +143,14 @@ public interface CQL3Type return type; } + public void toCQLLiteral(ByteBuffer buffer, int version, StringBuilder target) + { + if (buffer == null) + target.append("null"); + else + target.append(type.getString(buffer)); + } + @Override public final boolean equals(Object o) { @@ -129,7 +170,7 @@ public interface CQL3Type @Override public String toString() { - return "'" + type + "'"; + return "'" + type + '\''; } } @@ -152,6 +193,88 @@ public interface CQL3Type return true; } + public void toCQLLiteral(ByteBuffer buffer, int version, StringBuilder target) + { + // Not sure whether the !buffer.hasRemaining() check is correct here or whether an empty + // BB should be returned as "[]" resp "{}" or whether it is not valid at all. + // + // Currently, all empty collections return '[]' or '{}'. Except frozen collections with + // a null BB return 'null'. + // + if (buffer == null || !buffer.hasRemaining()) + { + if (buffer == null && type.isFrozenCollection()) + { + target.append("null"); + } + else + { + switch (type.kind) + { + case LIST: + target.append("[]"); + break; + case SET: + case MAP: + target.append("{}"); + break; + } + } + } + else + { + int size = CollectionSerializer.readCollectionSize(buffer, version); + + switch (type.kind) + { + case LIST: + CQL3Type elements = ((ListType) type).getElementsType().asCQL3Type(); + target.append('['); + generateSetOrListCQLLiteral(buffer, version, target, size, elements); + target.append(']'); + break; + case SET: + elements = ((SetType) type).getElementsType().asCQL3Type(); + target.append('{'); + generateSetOrListCQLLiteral(buffer, version, target, size, elements); + target.append('}'); + break; + case MAP: + target.append('{'); + generateMapCQLLiteral(buffer, version, target, size); + target.append('}'); + break; + } + } + } + + private void generateMapCQLLiteral(ByteBuffer buffer, int version, StringBuilder target, int size) + { + CQL3Type keys = ((MapType) type).getKeysType().asCQL3Type(); + CQL3Type values = ((MapType) type).getValuesType().asCQL3Type(); + for (int i = 0; i < size; i++) + { + if (i > 0) + target.append(", "); + ByteBuffer element = CollectionSerializer.readValue(buffer, version); + keys.toCQLLiteral(element, version, target); + target.append(": "); + element = CollectionSerializer.readValue(buffer, version); + values.toCQLLiteral(element, version, target); + } + } + + private static void generateSetOrListCQLLiteral(ByteBuffer buffer, int version, StringBuilder target, int size, CQL3Type elements) + { + for (int i = 0; i < size; i++) + { + if (i > 0) + target.append(", "); + ByteBuffer element = CollectionSerializer.readValue(buffer, version); + elements.toCQLLiteral(element, version, target); + } + } + @Override public final boolean equals(Object o) { @@ -191,9 +314,9 @@ public interface CQL3Type default: throw new AssertionError(); } - sb.append(">"); + sb.append('>'); if (isFrozen) - sb.append(">"); + sb.append('>'); return sb.toString(); } } @@ -225,6 +348,49 @@ public interface CQL3Type return type; } + public void toCQLLiteral(ByteBuffer buffer, int version, StringBuilder target) + { + if (buffer == null) + { + target.append("null"); + } + else + { + target.append('{'); + for (int i = 0; i < type.size(); i++) + { + // we allow the input to have less fields than declared so as to support field addition. + if (!buffer.hasRemaining()) + break; + + if (buffer.remaining() < 4) + throw new MarshalException(String.format("Not enough bytes to read size of %dth field %s", i, type.fieldName(i))); + + int size = buffer.getInt(); + + if (i > 0) + target.append(", "); + + target.append(ColumnIdentifier.maybeQuote(type.fieldNameAsString(i))); + target.append(": "); + + // size < 0 means null value + if (size < 0) + { + target.append("null"); + continue; + } + + if (buffer.remaining() < size) + throw new MarshalException(String.format("Not enough bytes to read %dth field %s", i, type.fieldName(i))); + + ByteBuffer field = ByteBufferUtil.readBytes(buffer, size); + type.fieldType(i).asCQL3Type().toCQLLiteral(field, version, target); + } + target.append('}'); + } + } + @Override public final boolean equals(Object o) { @@ -272,6 +438,49 @@ public interface CQL3Type return type; } + public void toCQLLiteral(ByteBuffer buffer, int version, StringBuilder target) + { + if (buffer == null) + { + target.append("null"); + } + else + { + target.append('('); + boolean first = true; + for (int i = 0; i < type.size(); i++) + { + // we allow the input to have less fields than declared so as to support field addition. + if (!buffer.hasRemaining()) + break; + + if (buffer.remaining() < 4) + throw new MarshalException(String.format("Not enough bytes to read size of %dth component", i)); + + int size = buffer.getInt(); + + if (first) + first = false; + else + target.append(", "); + + // size < 0 means null value + if (size < 0) + { + target.append("null"); + continue; + } + + if (buffer.remaining() < size) + throw new MarshalException(String.format("Not enough bytes to read %dth component", i)); + + ByteBuffer field = ByteBufferUtil.readBytes(buffer, size); + type.type(i).asCQL3Type().toCQLLiteral(field, version, target); + } + target.append(')'); + } + } + @Override public final boolean equals(Object o) { @@ -515,9 +724,9 @@ public interface CQL3Type String end = frozen ? ">" : ""; switch (kind) { - case LIST: return start + "list<" + values + ">" + end; - case SET: return start + "set<" + values + ">" + end; - case MAP: return start + "map<" + keys + ", " + values + ">" + end; + case LIST: return start + "list<" + values + '>' + end; + case SET: return start + "set<" + values + '>' + end; + case MAP: return start + "map<" + keys + ", " + values + '>' + end; } throw new AssertionError(); } @@ -650,7 +859,7 @@ public interface CQL3Type sb.append(", "); sb.append(types.get(i)); } - sb.append(">"); + sb.append('>'); return sb.toString(); } } diff --git a/src/java/org/apache/cassandra/cql3/CQLFragmentParser.java b/src/java/org/apache/cassandra/cql3/CQLFragmentParser.java new file mode 100644 index 0000000000..d6f4732bfe --- /dev/null +++ b/src/java/org/apache/cassandra/cql3/CQLFragmentParser.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.cassandra.cql3; + +import org.antlr.runtime.ANTLRStringStream; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.CommonTokenStream; +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.TokenStream; +import org.apache.cassandra.exceptions.SyntaxException; + +/** + * Helper class to encapsulate common code that calls one of the generated methods in {@code CqlParser}. + */ +public final class CQLFragmentParser +{ + + @FunctionalInterface + public interface CQLParserFunction + { + R parse(CqlParser parser) throws RecognitionException; + } + + public static R parseAny(CQLParserFunction parserFunction, String input, String meaning) + { + try + { + return parseAnyUnhandled(parserFunction, input); + } + catch (RuntimeException re) + { + throw new SyntaxException(String.format("Failed parsing %s: [%s] reason: %s %s", + meaning, + input, + re.getClass().getSimpleName(), + re.getMessage())); + } + catch (RecognitionException e) + { + throw new SyntaxException("Invalid or malformed " + meaning + ": " + e.getMessage()); + } + } + + /** + * Just call a parser method in {@link CqlParser} - does not do any error handling. + */ + public static R parseAnyUnhandled(CQLParserFunction parserFunction, String input) throws RecognitionException + { + // Lexer and parser + ErrorCollector errorCollector = new ErrorCollector(input); + CharStream stream = new ANTLRStringStream(input); + CqlLexer lexer = new CqlLexer(stream); + lexer.addErrorListener(errorCollector); + + TokenStream tokenStream = new CommonTokenStream(lexer); + CqlParser parser = new CqlParser(tokenStream); + parser.addErrorListener(errorCollector); + + // Parse the query string to a statement instance + R r = parserFunction.parse(parser); + + // The errorCollector has queue up any errors that the lexer and parser may have encountered + // along the way, if necessary, we turn the last error into exceptions here. + errorCollector.throwFirstSyntaxError(); + + return r; + } +} diff --git a/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java b/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java index 745e4f05fc..93734e9be4 100644 --- a/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java +++ b/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java @@ -18,11 +18,10 @@ package org.apache.cassandra.cql3; import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.util.List; import java.util.Locale; -import java.nio.ByteBuffer; import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.common.collect.MapMaker; @@ -36,7 +35,6 @@ import org.apache.cassandra.cql3.selection.SimpleSelector; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.db.marshal.UTF8Type; -import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.ObjectSizes; import org.apache.cassandra.utils.memory.AbstractAllocator; @@ -45,8 +43,10 @@ import org.apache.cassandra.utils.memory.AbstractAllocator; * Represents an identifer for a CQL column definition. * TODO : should support light-weight mode without text representation for when not interned */ -public class ColumnIdentifier extends org.apache.cassandra.cql3.selection.Selectable implements IMeasurableMemory, Comparable +public class ColumnIdentifier extends Selectable implements IMeasurableMemory, Comparable { + private static final Pattern PATTERN_DOUBLE_QUOTE = Pattern.compile("\"", Pattern.LITERAL); + public final ByteBuffer bytes; private final String text; /** @@ -332,6 +332,6 @@ public class ColumnIdentifier extends org.apache.cassandra.cql3.selection.Select { if (UNQUOTED_IDENTIFIER.matcher(text).matches()) return text; - return "\"" + text.replace("\"", "\"\"") + "\""; + return '"' + PATTERN_DOUBLE_QUOTE.matcher(text).replaceAll(Matcher.quoteReplacement("\"\"")) + '"'; } } diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java index 18f63c2bcd..59d41488a0 100644 --- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java +++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java @@ -508,24 +508,7 @@ public class QueryProcessor implements QueryHandler { try { - // Lexer and parser - ErrorCollector errorCollector = new ErrorCollector(queryStr); - CharStream stream = new ANTLRStringStream(queryStr); - CqlLexer lexer = new CqlLexer(stream); - lexer.addErrorListener(errorCollector); - - TokenStream tokenStream = new CommonTokenStream(lexer); - CqlParser parser = new CqlParser(tokenStream); - parser.addErrorListener(errorCollector); - - // Parse the query string to a statement instance - ParsedStatement statement = parser.query(); - - // The errorCollector has queue up any errors that the lexer and parser may have encountered - // along the way, if necessary, we turn the last error into exceptions here. - errorCollector.throwFirstSyntaxError(); - - return statement; + return CQLFragmentParser.parseAnyUnhandled(CqlParser::query, queryStr); } catch (CassandraException ce) { diff --git a/src/java/org/apache/cassandra/cql3/Terms.java b/src/java/org/apache/cassandra/cql3/Terms.java index 0b049b96e9..ae4bc133f6 100644 --- a/src/java/org/apache/cassandra/cql3/Terms.java +++ b/src/java/org/apache/cassandra/cql3/Terms.java @@ -17,11 +17,13 @@ */ package org.apache.cassandra.cql3; +import java.nio.ByteBuffer; import java.util.Collections; import com.google.common.collect.Iterables; import org.apache.cassandra.cql3.functions.Function; +import org.apache.cassandra.db.marshal.AbstractType; public class Terms { @@ -42,4 +44,11 @@ public class Terms return Iterables.concat(Iterables.transform(terms, TO_FUNCTION_ITERABLE)); } + + public static ByteBuffer asBytes(String keyspace, String term, AbstractType type) + { + ColumnSpecification receiver = new ColumnSpecification(keyspace, "--dummy--", new ColumnIdentifier("(dummy)", true), type); + Term.Raw rawTerm = CQLFragmentParser.parseAny(CqlParser::term, term, "CQL term"); + return rawTerm.prepare(keyspace, receiver).bindAndGet(QueryOptions.DEFAULT); + } } diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateAggregateStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateAggregateStatement.java index 98354d5543..6fd0334fb6 100644 --- a/src/java/org/apache/cassandra/cql3/statements/CreateAggregateStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/CreateAggregateStatement.java @@ -113,8 +113,7 @@ public final class CreateAggregateStatement extends SchemaAlteringStatement if (ival != null) { - ColumnSpecification receiver = new ColumnSpecification(functionName.keyspace, "--dummy--", new ColumnIdentifier("(aggregate_initcond)", true), stateType); - initcond = ival.prepare(functionName.keyspace, receiver).bindAndGet(QueryOptions.DEFAULT); + initcond = Terms.asBytes(functionName.keyspace, ival.toString(), stateType); if (Constants.NULL_LITERAL != ival && UDHelper.isNullOrEmpty(stateType, initcond)) throw new InvalidRequestException("INITCOND must not be empty for all types except TEXT, ASCII, BLOB"); } diff --git a/src/java/org/apache/cassandra/db/marshal/AbstractType.java b/src/java/org/apache/cassandra/db/marshal/AbstractType.java index a0d915f34c..0253ac64ff 100644 --- a/src/java/org/apache/cassandra/db/marshal/AbstractType.java +++ b/src/java/org/apache/cassandra/db/marshal/AbstractType.java @@ -119,7 +119,7 @@ public abstract class AbstractType implements Comparator return getSerializer().serialize(value); } - /** get a string representation of the bytes suitable for log messages */ + /** get a string representation of the bytes used for various identifier (NOT just for log messages) */ public String getString(ByteBuffer bytes) { if (bytes == null) diff --git a/src/java/org/apache/cassandra/schema/CQLTypeParser.java b/src/java/org/apache/cassandra/schema/CQLTypeParser.java index ed68498b04..c79de88155 100644 --- a/src/java/org/apache/cassandra/schema/CQLTypeParser.java +++ b/src/java/org/apache/cassandra/schema/CQLTypeParser.java @@ -19,11 +19,9 @@ package org.apache.cassandra.schema; import com.google.common.collect.ImmutableSet; -import org.antlr.runtime.*; import org.apache.cassandra.cql3.*; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.UserType; -import org.apache.cassandra.exceptions.SyntaxException; import static org.apache.cassandra.utils.ByteBufferUtil.bytes; @@ -57,37 +55,6 @@ public final class CQLTypeParser static CQL3Type.Raw parseRaw(String type) { - try - { - // Lexer and parser - ErrorCollector errorCollector = new ErrorCollector(type); - CharStream stream = new ANTLRStringStream(type); - CqlLexer lexer = new CqlLexer(stream); - lexer.addErrorListener(errorCollector); - - TokenStream tokenStream = new CommonTokenStream(lexer); - CqlParser parser = new CqlParser(tokenStream); - parser.addErrorListener(errorCollector); - - // Parse the query string to a statement instance - CQL3Type.Raw rawType = parser.comparatorType(); - - // The errorCollector has queue up any errors that the lexer and parser may have encountered - // along the way, if necessary, we turn the last error into exceptions here. - errorCollector.throwFirstSyntaxError(); - - return rawType; - } - catch (RuntimeException re) - { - throw new SyntaxException(String.format("Failed parsing statement: [%s] reason: %s %s", - type, - re.getClass().getSimpleName(), - re.getMessage())); - } - catch (RecognitionException e) - { - throw new SyntaxException("Invalid or malformed CQL type: " + e.getMessage()); - } + return CQLFragmentParser.parseAny(CqlParser::comparatorType, type, "CQL type"); } } diff --git a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java index c715a2abe7..f1ea6cf05e 100644 --- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java +++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java @@ -43,6 +43,7 @@ import org.apache.cassandra.db.rows.*; import org.apache.cassandra.db.view.View; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.InvalidRequestException; +import org.apache.cassandra.transport.Server; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Pair; @@ -223,7 +224,7 @@ public final class SchemaKeyspace + "aggregate_name text," + "argument_types frozen>," + "final_func text," - + "initcond blob," + + "initcond text," + "return_type text," + "state_func text," + "state_type text," @@ -833,11 +834,12 @@ public final class SchemaKeyspace RowUpdateBuilder adder = new RowUpdateBuilder(Aggregates, timestamp, mutation) .clustering(aggregate.name().name, functionArgumentsList(aggregate)); + CQL3Type stateCqlType = aggregate.stateType().asCQL3Type(); adder.add("return_type", aggregate.returnType().asCQL3Type().toString()) .add("state_func", aggregate.stateFunction().name().name) - .add("state_type", aggregate.stateType() != null ? aggregate.stateType().asCQL3Type().toString() : null) + .add("state_type", aggregate.stateType() != null ? stateCqlType.toString() : null) .add("final_func", aggregate.finalFunction() != null ? aggregate.finalFunction().name().name : null) - .add("initcond", aggregate.initialCondition()) + .add("initcond", aggregate.initialCondition() != null ? stateCqlType.asCQLLiteral(aggregate.initialCondition(), Server.CURRENT_VERSION) : null) .build(); } @@ -1219,7 +1221,7 @@ public final class SchemaKeyspace FunctionName stateFunc = new FunctionName(ksName, (row.getString("state_func"))); FunctionName finalFunc = row.has("final_func") ? new FunctionName(ksName, row.getString("final_func")) : null; AbstractType stateType = row.has("state_type") ? parse(ksName, row.getString("state_type"), types) : null; - ByteBuffer initcond = row.has("initcond") ? row.getBytes("initcond") : null; + ByteBuffer initcond = row.has("initcond") ? Terms.asBytes(ksName, row.getString("initcond"), stateType) : null; try { diff --git a/src/java/org/apache/cassandra/serializers/AbstractTextSerializer.java b/src/java/org/apache/cassandra/serializers/AbstractTextSerializer.java index f1de6a460d..4d2694e086 100644 --- a/src/java/org/apache/cassandra/serializers/AbstractTextSerializer.java +++ b/src/java/org/apache/cassandra/serializers/AbstractTextSerializer.java @@ -58,4 +58,32 @@ public abstract class AbstractTextSerializer implements TypeSerializer { return String.class; } + + /** + * Generates CQL literal for TEXT/VARCHAR/ASCII types. + * Caveat: it does only generate literals with single quotes and not pg-style literals. + */ + @Override + public void toCQLLiteral(ByteBuffer buffer, StringBuilder target) + { + if (buffer == null) + { + target.append("null"); + } + else + { + String s = deserialize(buffer); + + target.append('\''); + for (int i=0; i { return ByteBuffer.class; } + + @Override + public void toCQLLiteral(ByteBuffer buffer, StringBuilder target) + { + if (buffer == null) + { + target.append("null"); + } + else + { + target.append("0x"); + target.append(toString(deserialize(buffer))); + } + } } diff --git a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java index ab81fcc740..01a85e0786 100644 --- a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java +++ b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java @@ -23,6 +23,7 @@ import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Date; +import java.util.TimeZone; import java.util.regex.Pattern; import org.apache.commons.lang3.time.DateUtils; @@ -73,7 +74,7 @@ public class TimestampSerializer implements TypeSerializer "yyyy-MM-dd'T'HH:mm:ss.SSS z", "yyyy-MM-dd'T'HH:mm:ss.SSS zz", "yyyy-MM-dd'T'HH:mm:ss.SSS zzz", - "yyyy-MM-dd'T'HH:mm:ss.SSSX", + "yyyy-MM-dd'T'HH:mm:ss.SSSX", // UTC_FORMAT "yyyy-MM-dd'T'HH:mm:ss.SSSXX", "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "yyyy-MM-dd", @@ -96,6 +97,17 @@ public class TimestampSerializer implements TypeSerializer } }; + private static final String UTC_FORMAT = dateStringPatterns[40]; + private static final ThreadLocal FORMATTER_UTC = new ThreadLocal() + { + protected SimpleDateFormat initialValue() + { + SimpleDateFormat sdf = new SimpleDateFormat(UTC_FORMAT); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + return sdf; + } + }; + public static final SimpleDateFormat TO_JSON_FORMAT = new SimpleDateFormat(dateStringPatterns[15]); public static final TimestampSerializer instance = new TimestampSerializer(); @@ -150,8 +162,26 @@ public class TimestampSerializer implements TypeSerializer return value == null ? "" : FORMATTER.get().format(value); } + public String toStringUTC(Date value) + { + return value == null ? "" : FORMATTER_UTC.get().format(value); + } + public Class getType() { return Date.class; } + + /** + * Builds CQL literal for a timestamp using time zone UTC and fixed date format. + * @see #FORMATTER_UTC + */ + @Override + public void toCQLLiteral(ByteBuffer buffer, StringBuilder target) + { + if (buffer == null || !buffer.hasRemaining()) + target.append("null"); + else + target.append(FORMATTER_UTC.get().format(deserialize(buffer))); + } } diff --git a/src/java/org/apache/cassandra/serializers/TypeSerializer.java b/src/java/org/apache/cassandra/serializers/TypeSerializer.java index cddef08379..e7bb8303cb 100644 --- a/src/java/org/apache/cassandra/serializers/TypeSerializer.java +++ b/src/java/org/apache/cassandra/serializers/TypeSerializer.java @@ -34,5 +34,13 @@ public interface TypeSerializer public String toString(T value); public Class getType(); + + public default void toCQLLiteral(ByteBuffer buffer, StringBuilder target) + { + if (buffer == null || !buffer.hasRemaining()) + target.append("null"); + else + target.append(toString(deserialize(buffer))); + } } diff --git a/test/unit/org/apache/cassandra/cql3/CQL3TypeLiteralTest.java b/test/unit/org/apache/cassandra/cql3/CQL3TypeLiteralTest.java new file mode 100644 index 0000000000..f6cd8df748 --- /dev/null +++ b/test/unit/org/apache/cassandra/cql3/CQL3TypeLiteralTest.java @@ -0,0 +1,786 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.cassandra.cql3; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.regex.Pattern; + +import org.junit.Test; + +import org.apache.cassandra.db.marshal.*; +import org.apache.cassandra.serializers.*; +import org.apache.cassandra.transport.Server; +import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.UUIDGen; + +import static org.junit.Assert.assertEquals; + +/** + * Test functionality to re-create a CQL literal from its serialized representation. + * This test uses some randomness to generate the values and nested structures (collections,tuples,UDTs). + */ +public class CQL3TypeLiteralTest +{ + private static final Pattern QUOTE = Pattern.compile("'"); + + /** + * Container holding the expected CQL literal for a type and serialized value. + * The CQL literal is generated independently from the code in {@link CQL3Type}. + */ + static class Value + { + final String expected; + final CQL3Type cql3Type; + final ByteBuffer value; + + Value(String expected, CQL3Type cql3Type, ByteBuffer value) + { + this.expected = expected; + this.cql3Type = cql3Type; + this.value = value; + } + } + + static final Map> nativeTypeValues = new EnumMap<>(CQL3Type.Native.class); + + static void addNativeValue(String expected, CQL3Type.Native cql3Type, ByteBuffer value) + { + List l = nativeTypeValues.get(cql3Type); + if (l == null) + nativeTypeValues.put(cql3Type, l = new ArrayList<>()); + l.add(new Value(expected, cql3Type, value)); + } + + static + { + // Add some (random) values for each native type. + // Also adds null values and empty values, if the type allows this. + + for (int i = 0; i < 20; i++) + { + String v = randString(true); + addNativeValue(quote(v), CQL3Type.Native.ASCII, AsciiSerializer.instance.serialize(v)); + } + addNativeValue("''", CQL3Type.Native.ASCII, AsciiSerializer.instance.serialize("")); + addNativeValue("''", CQL3Type.Native.ASCII, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.ASCII, null); + + for (int i = 0; i < 20; i++) + { + String v = randString(false); + addNativeValue(quote(v), CQL3Type.Native.TEXT, UTF8Serializer.instance.serialize(v)); + } + addNativeValue("''", CQL3Type.Native.TEXT, UTF8Serializer.instance.serialize("")); + addNativeValue("''", CQL3Type.Native.TEXT, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.TEXT, null); + + for (int i = 0; i < 20; i++) + { + String v = randString(false); + addNativeValue(quote(v), CQL3Type.Native.VARCHAR, UTF8Serializer.instance.serialize(v)); + } + addNativeValue("''", CQL3Type.Native.VARCHAR, UTF8Serializer.instance.serialize("")); + addNativeValue("''", CQL3Type.Native.VARCHAR, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.VARCHAR, null); + + addNativeValue("0", CQL3Type.Native.BIGINT, LongType.instance.decompose(0L)); + for (int i = 0; i < 20; i++) + { + long v = randLong(); + addNativeValue(Long.toString(v), CQL3Type.Native.BIGINT, LongType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.BIGINT, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.BIGINT, null); + + addNativeValue("0", CQL3Type.Native.COUNTER, LongType.instance.decompose(0L)); + for (int i = 0; i < 20; i++) + { + long v = randLong(); + addNativeValue(Long.toString(v), CQL3Type.Native.COUNTER, LongType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.COUNTER, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.COUNTER, null); + + addNativeValue("0", CQL3Type.Native.INT, Int32Type.instance.decompose(0)); + for (int i = 0; i < 20; i++) + { + int v = randInt(); + addNativeValue(Integer.toString(v), CQL3Type.Native.INT, Int32Type.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.INT, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.INT, null); + + addNativeValue("0", CQL3Type.Native.SMALLINT, ShortType.instance.decompose((short) 0)); + for (int i = 0; i < 20; i++) + { + short v = randShort(); + addNativeValue(Short.toString(v), CQL3Type.Native.SMALLINT, ShortType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.SMALLINT, null); + + addNativeValue("0", CQL3Type.Native.TINYINT, ByteType.instance.decompose((byte) 0)); + for (int i = 0; i < 20; i++) + { + byte v = randByte(); + addNativeValue(Short.toString(v), CQL3Type.Native.TINYINT, ByteType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.TINYINT, null); + + addNativeValue("0.0", CQL3Type.Native.FLOAT, FloatType.instance.decompose((float) 0)); + for (int i = 0; i < 20; i++) + { + float v = randFloat(); + addNativeValue(Float.toString(v), CQL3Type.Native.FLOAT, FloatType.instance.decompose(v)); + } + addNativeValue("NaN", CQL3Type.Native.FLOAT, FloatType.instance.decompose(Float.NaN)); + addNativeValue("null", CQL3Type.Native.FLOAT, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.FLOAT, null); + + addNativeValue("0.0", CQL3Type.Native.DOUBLE, DoubleType.instance.decompose((double) 0)); + for (int i = 0; i < 20; i++) + { + double v = randDouble(); + addNativeValue(Double.toString(v), CQL3Type.Native.DOUBLE, DoubleType.instance.decompose(v)); + } + addNativeValue("NaN", CQL3Type.Native.DOUBLE, DoubleType.instance.decompose(Double.NaN)); + addNativeValue("null", CQL3Type.Native.DOUBLE, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.DOUBLE, null); + + addNativeValue("0", CQL3Type.Native.DECIMAL, DecimalType.instance.decompose(BigDecimal.ZERO)); + for (int i = 0; i < 20; i++) + { + BigDecimal v = BigDecimal.valueOf(randDouble()); + addNativeValue(v.toString(), CQL3Type.Native.DECIMAL, DecimalType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.DECIMAL, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.DECIMAL, null); + + addNativeValue("0", CQL3Type.Native.VARINT, IntegerType.instance.decompose(BigInteger.ZERO)); + for (int i = 0; i < 20; i++) + { + BigInteger v = BigInteger.valueOf(randLong()); + addNativeValue(v.toString(), CQL3Type.Native.VARINT, IntegerType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.VARINT, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.VARINT, null); + + // boolean doesn't have that many possible values... + addNativeValue("false", CQL3Type.Native.BOOLEAN, BooleanType.instance.decompose(false)); + addNativeValue("true", CQL3Type.Native.BOOLEAN, BooleanType.instance.decompose(true)); + addNativeValue("null", CQL3Type.Native.BOOLEAN, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.BOOLEAN, null); + + // (mostly generates date values with surreal values like in year 14273) + for (int i = 0; i < 20; i++) + { + int v = randInt(); + addNativeValue(SimpleDateSerializer.instance.toString(v), CQL3Type.Native.DATE, SimpleDateSerializer.instance.serialize(v)); + } + addNativeValue("null", CQL3Type.Native.DATE, null); + + for (int i = 0; i < 100; i++) + { + long v = randLong(24L * 60 * 60 * 1000 * 1000 * 1000); + addNativeValue(TimeSerializer.instance.toString(v), CQL3Type.Native.TIME, TimeSerializer.instance.serialize(v)); + } + addNativeValue("null", CQL3Type.Native.TIME, null); + + // (mostly generates timestamp values with surreal values like in year 14273) + for (int i = 0; i < 20; i++) + { + long v = randLong(); + addNativeValue(TimestampSerializer.instance.toStringUTC(new Date(v)), CQL3Type.Native.TIMESTAMP, TimestampType.instance.fromString(Long.toString(v))); + } + addNativeValue("null", CQL3Type.Native.TIMESTAMP, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.TIMESTAMP, null); + + for (int i = 0; i < 20; i++) + { + UUID v = UUIDGen.getTimeUUID(randLong(System.currentTimeMillis())); + addNativeValue(v.toString(), CQL3Type.Native.TIMEUUID, TimeUUIDType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.TIMEUUID, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.TIMEUUID, null); + + for (int i = 0; i < 20; i++) + { + UUID v = UUID.randomUUID(); + addNativeValue(v.toString(), CQL3Type.Native.UUID, UUIDType.instance.decompose(v)); + } + addNativeValue("null", CQL3Type.Native.UUID, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.UUID, null); + + for (int i = 0; i < 20; i++) + { + ByteBuffer v = randBytes(); + addNativeValue("0x" + BytesSerializer.instance.toString(v), CQL3Type.Native.BLOB, BytesType.instance.decompose(v)); + } + addNativeValue("0x", CQL3Type.Native.BLOB, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.BLOB, null); + + for (int i = 0; i < 20; i++) + { + InetAddress v; + try + { + v = InetAddress.getByAddress(new byte[]{ randByte(), randByte(), randByte(), randByte() }); + } + catch (UnknownHostException e) + { + throw new RuntimeException(e); + } + addNativeValue(v.getHostAddress(), CQL3Type.Native.INET, InetAddressSerializer.instance.serialize(v)); + } + addNativeValue("null", CQL3Type.Native.INET, ByteBufferUtil.EMPTY_BYTE_BUFFER); + addNativeValue("null", CQL3Type.Native.INET, null); + } + + @Test + public void testNative() + { + // test each native type against each supported protocol version (although it doesn't make sense to + // iterate through all protocol versions as of C* 3.0). + + for (int version = Server.MIN_SUPPORTED_VERSION; version <= Server.CURRENT_VERSION; version++) + { + for (Map.Entry> entry : nativeTypeValues.entrySet()) + { + for (Value value : entry.getValue()) + { + compareCqlLiteral(version, value); + } + } + } + } + + @Test + public void testCollectionWithNatives() + { + // test 100 collections with varying element/key/value types against each supported protocol version, + // type of collection is randomly chosen + + for (int version = Server.MIN_SUPPORTED_VERSION; version <= Server.CURRENT_VERSION; version++) + { + for (int n = 0; n < 100; n++) + { + Value value = generateCollectionValue(version, randomCollectionType(0), true); + compareCqlLiteral(version, value); + } + } + } + + @Test + public void testCollectionNullAndEmpty() + { + for (int version = Server.MIN_SUPPORTED_VERSION; version <= Server.CURRENT_VERSION; version++) + { + // empty, frozen collections + Value value = new Value("[]", ListType.getInstance(UTF8Type.instance, false).asCQL3Type(), ByteBufferUtil.EMPTY_BYTE_BUFFER); + compareCqlLiteral(version, value); + value = new Value("{}", SetType.getInstance(UTF8Type.instance, false).asCQL3Type(), ByteBufferUtil.EMPTY_BYTE_BUFFER); + compareCqlLiteral(version, value); + value = new Value("{}", MapType.getInstance(UTF8Type.instance, UTF8Type.instance, false).asCQL3Type(), ByteBufferUtil.EMPTY_BYTE_BUFFER); + compareCqlLiteral(version, value); + + // empty, non-frozen collections + value = new Value("[]", ListType.getInstance(UTF8Type.instance, true).asCQL3Type(), ByteBufferUtil.EMPTY_BYTE_BUFFER); + compareCqlLiteral(version, value); + value = new Value("{}", SetType.getInstance(UTF8Type.instance, true).asCQL3Type(), ByteBufferUtil.EMPTY_BYTE_BUFFER); + compareCqlLiteral(version, value); + value = new Value("{}", MapType.getInstance(UTF8Type.instance, UTF8Type.instance, true).asCQL3Type(), ByteBufferUtil.EMPTY_BYTE_BUFFER); + compareCqlLiteral(version, value); + + // null, frozen collections + value = new Value("null", ListType.getInstance(UTF8Type.instance, false).asCQL3Type(), null); + compareCqlLiteral(version, value); + value = new Value("null", SetType.getInstance(UTF8Type.instance, false).asCQL3Type(), null); + compareCqlLiteral(version, value); + value = new Value("null", MapType.getInstance(UTF8Type.instance, UTF8Type.instance, false).asCQL3Type(), null); + compareCqlLiteral(version, value); + + // null, non-frozen collections + value = new Value("[]", ListType.getInstance(UTF8Type.instance, true).asCQL3Type(), null); + compareCqlLiteral(version, value); + value = new Value("{}", SetType.getInstance(UTF8Type.instance, true).asCQL3Type(), null); + compareCqlLiteral(version, value); + value = new Value("{}", MapType.getInstance(UTF8Type.instance, UTF8Type.instance, true).asCQL3Type(), null); + compareCqlLiteral(version, value); + } + } + + @Test + public void testTupleWithNatives() + { + // test 100 tuples with varying element/key/value types against each supported protocol version + + for (int version = Server.MIN_SUPPORTED_VERSION; version <= Server.CURRENT_VERSION; version++) + { + for (int n = 0; n < 100; n++) + { + Value value = generateTupleValue(version, randomTupleType(0), true); + compareCqlLiteral(version, value); + } + } + } + + @Test + public void testUserDefinedWithNatives() + { + // test 100 UDTs with varying element/key/value types against each supported protocol version + + for (int version = Server.MIN_SUPPORTED_VERSION; version <= Server.CURRENT_VERSION; version++) + { + for (int n = 0; n < 100; n++) + { + Value value = generateUserDefinedValue(version, randomUserType(0), true); + compareCqlLiteral(version, value); + } + } + } + + @Test + public void testNested() + { + // This is the "nice" part of this unit test - it tests (probably) nested type structures + // like 'tuple, tuple, user>' or 'map, set>' with + // random types against each supported protocol version. + + for (int version = Server.MIN_SUPPORTED_VERSION; version <= Server.CURRENT_VERSION; version++) + { + for (int n = 0; n < 100; n++) + { + Value value = randomNested(version); + compareCqlLiteral(version, value); + } + } + } + + static void compareCqlLiteral(int version, Value value) + { + ByteBuffer buffer = value.value != null ? value.value.duplicate() : null; + String msg = "Failed to get expected value for type " + value.cql3Type + " / " + value.cql3Type.getType() + " with protocol-version " + version + " expected:\"" + value.expected + '"'; + try + { + assertEquals(msg, + value.expected, + value.cql3Type.asCQLLiteral(buffer, version)); + } + catch (RuntimeException e) + { + throw new RuntimeException(msg, e); + } + } + + static Value randomNested(int version) + { + AbstractType type = randomNestedType(2); + + return generateAnyValue(version, type.asCQL3Type()); + } + + /** + * Generates type of randomly nested type structures. + */ + static AbstractType randomNestedType(int level) + { + if (level == 0) + return randomNativeType(); + switch (randInt(level == 2 ? 3 : 4)) + { + case 0: + return randomCollectionType(level - 1); + case 1: + return randomTupleType(level - 1); + case 2: + return randomUserType(level - 1); + case 3: + return randomNativeType(); + } + throw new AssertionError(); + } + + static Value generateCollectionValue(int version, CollectionType collectionType, boolean allowNull) + { + StringBuilder expected = new StringBuilder(); + ByteBuffer buffer; + + if (allowNull && randBool(0.05d)) + { + // generate 'null' collection + if (collectionType.isMultiCell()) + { + switch (collectionType.kind) + { + case LIST: + expected.append("[]"); + break; + case SET: + case MAP: + expected.append("{}"); + break; + } + } + else + { + expected.append("null"); + } + buffer = null; + } + else + { + int size = randInt(20); + + CQL3Type elements; + CQL3Type values = null; + char bracketOpen; + char bracketClose; + switch (collectionType.kind) + { + case LIST: + elements = ((ListType) collectionType).getElementsType().asCQL3Type(); + bracketOpen = '['; + bracketClose = ']'; + break; + case SET: + elements = ((SetType) collectionType).getElementsType().asCQL3Type(); + bracketOpen = '{'; + bracketClose = '}'; + break; + case MAP: + elements = ((MapType) collectionType).getKeysType().asCQL3Type(); + values = ((MapType) collectionType).getValuesType().asCQL3Type(); + bracketOpen = '{'; + bracketClose = '}'; + break; + default: + throw new AssertionError(); + } + + expected.append(bracketOpen); + Collection buffers = new ArrayList<>(); + Set added = new HashSet<>(); + for (int i = 0; i < size; i++) + { + Value el = generateAnyValue(version, elements); + if (!added.add(el.value)) + continue; + + buffers.add(el.value.duplicate()); + if (expected.length() > 1) + expected.append(", "); + el.cql3Type.toCQLLiteral(el.value, version, expected); + + if (collectionType.kind == CollectionType.Kind.MAP) + { + // add map value + el = generateAnyValue(version, values); + buffers.add(el.value.duplicate()); + expected.append(": "); + el.cql3Type.toCQLLiteral(el.value, version, expected); + } + } + expected.append(bracketClose); + buffer = CollectionSerializer.pack(buffers, added.size(), version); + } + + return new Value(expected.toString(), collectionType.asCQL3Type(), buffer); + } + + /** + * Generates a value for any type or type structure. + */ + static Value generateAnyValue(int version, CQL3Type type) + { + if (type instanceof CQL3Type.Native) + return generateNativeValue(type, false); + if (type instanceof CQL3Type.Tuple) + return generateTupleValue(version, (TupleType) type.getType(), false); + if (type instanceof CQL3Type.UserDefined) + return generateUserDefinedValue(version, (UserType) type.getType(), false); + if (type instanceof CQL3Type.Collection) + return generateCollectionValue(version, (CollectionType) type.getType(), false); + throw new AssertionError(); + } + + static Value generateTupleValue(int version, TupleType tupleType, boolean allowNull) + { + StringBuilder expected = new StringBuilder(); + ByteBuffer buffer; + + if (allowNull && randBool(0.05d)) + { + // generate 'null' collection + expected.append("null"); + buffer = null; + } + else + { + expected.append('('); + + // # of fields in this value + int fields = tupleType.size(); + if (randBool(0.2d)) + fields = randInt(fields); + + ByteBuffer[] buffers = new ByteBuffer[fields]; + for (int i = 0; i < fields; i++) + { + AbstractType fieldType = tupleType.type(i); + + if (i > 0) + expected.append(", "); + + if (allowNull && randBool(.1)) + { + expected.append("null"); + continue; + } + + Value value = generateAnyValue(version, fieldType.asCQL3Type()); + expected.append(value.expected); + buffers[i] = value.value.duplicate(); + } + expected.append(')'); + buffer = TupleType.buildValue(buffers); + } + + return new Value(expected.toString(), tupleType.asCQL3Type(), buffer); + } + + static Value generateUserDefinedValue(int version, UserType userType, boolean allowNull) + { + StringBuilder expected = new StringBuilder(); + ByteBuffer buffer; + + if (allowNull && randBool(0.05d)) + { + // generate 'null' collection + expected.append("null"); + buffer = null; + } + else + { + expected.append('{'); + + // # of fields in this value + int fields = userType.size(); + if (randBool(0.2d)) + fields = randInt(fields); + + ByteBuffer[] buffers = new ByteBuffer[fields]; + for (int i = 0; i < fields; i++) + { + AbstractType fieldType = userType.type(i); + + if (i > 0) + expected.append(", "); + + expected.append(ColumnIdentifier.maybeQuote(userType.fieldNameAsString(i))); + expected.append(": "); + + if (randBool(.1)) + { + expected.append("null"); + continue; + } + + Value value = generateAnyValue(version, fieldType.asCQL3Type()); + expected.append(value.expected); + buffers[i] = value.value.duplicate(); + } + expected.append('}'); + buffer = TupleType.buildValue(buffers); + } + + return new Value(expected.toString(), userType.asCQL3Type(), buffer); + } + + static Value generateNativeValue(CQL3Type type, boolean allowNull) + { + List values = nativeTypeValues.get(type); + assert values != null : type.toString() + " needs to be defined"; + while (true) + { + Value v = values.get(randInt(values.size())); + if (allowNull || v.value != null) + return v; + } + } + + static CollectionType randomCollectionType(int level) + { + CollectionType.Kind kind = CollectionType.Kind.values()[randInt(CollectionType.Kind.values().length)]; + switch (kind) + { + case LIST: + case SET: + return ListType.getInstance(randomNestedType(level), randBool()); + case MAP: + return MapType.getInstance(randomNestedType(level), randomNestedType(level), randBool()); + } + throw new AssertionError(); + } + + static TupleType randomTupleType(int level) + { + int typeCount = 2 + randInt(5); + List> types = new ArrayList<>(); + for (int i = 0; i < typeCount; i++) + types.add(randomNestedType(level)); + return new TupleType(types); + } + + static UserType randomUserType(int level) + { + int typeCount = 2 + randInt(5); + List names = new ArrayList<>(); + List> types = new ArrayList<>(); + for (int i = 0; i < typeCount; i++) + { + names.add(UTF8Type.instance.fromString('f' + randLetters(i))); + types.add(randomNestedType(level)); + } + return new UserType("ks", UTF8Type.instance.fromString("u" + randInt(1000000)), names, types); + } + + // + // Following methods are just helper methods. Mostly to generate many kinds of random values. + // + + private static String randLetters(int len) + { + StringBuilder sb = new StringBuilder(len); + while (len-- > 0) + { + int i = randInt(52); + if (i < 26) + sb.append((char) ('A' + i)); + else + sb.append((char) ('a' + i - 26)); + } + return sb.toString(); + } + + static AbstractType randomNativeType() + { + while (true) + { + CQL3Type.Native t = CQL3Type.Native.values()[randInt(CQL3Type.Native.values().length)]; + if (t != CQL3Type.Native.EMPTY) + return t.getType(); + } + } + + static boolean randBool() + { + return randBool(0.5d); + } + + static boolean randBool(double probability) + { + return ThreadLocalRandom.current().nextDouble() < probability; + } + + static long randLong() + { + return ThreadLocalRandom.current().nextLong(); + } + + static long randLong(long max) + { + return ThreadLocalRandom.current().nextLong(max); + } + + static int randInt() + { + return ThreadLocalRandom.current().nextInt(); + } + + static int randInt(int max) + { + return ThreadLocalRandom.current().nextInt(max); + } + + static short randShort() + { + return (short) ThreadLocalRandom.current().nextInt(); + } + + static byte randByte() + { + return (byte) ThreadLocalRandom.current().nextInt(); + } + + static double randDouble() + { + return ThreadLocalRandom.current().nextDouble(); + } + + static float randFloat() + { + return ThreadLocalRandom.current().nextFloat(); + } + + static String randString(boolean ascii) + { + int l = randInt(20); + StringBuilder sb = new StringBuilder(l); + for (int i = 0; i < l; i++) + { + if (randBool(.05)) + sb.append('\''); + else + { + char c = (char) (ascii ? randInt(128) : randShort()); + sb.append(c); + } + } + return UTF8Serializer.instance.deserialize(UTF8Serializer.instance.serialize(sb.toString())); + } + + static ByteBuffer randBytes() + { + int l = randInt(20); + byte[] v = new byte[l]; + for (int i = 0; i < l; i++) + { + v[i] = randByte(); + } + return ByteBuffer.wrap(v); + } + + private static String quote(String v) + { + return '\'' + QUOTE.matcher(v).replaceAll("''") + '\''; + } +} diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java index 4341258d19..1a532ac895 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java @@ -809,6 +809,9 @@ public class AggregationTest extends CQLTester "FINALFUNC " + shortFunctionName(fFinal) + " " + "INITCOND 42"); + assertRows(execute("SELECT initcond FROM system_schema.aggregates WHERE keyspace_name=? AND aggregate_name=?", KEYSPACE, shortFunctionName(a)), + row("42")); + // 42 + 1 + 2 + 3 = 48 assertRows(execute("SELECT " + a + "(b) FROM %s"), row("48")); @@ -896,6 +899,9 @@ public class AggregationTest extends CQLTester "FINALFUNC " + shortFunctionName(fFinal) + " " + "INITCOND (0, 0)"); + assertRows(execute("SELECT initcond FROM system_schema.aggregates WHERE keyspace_name=? AND aggregate_name=?", KEYSPACE, shortFunctionName(a)), + row("(0, 0)")); + // 1 + 2 + 3 = 6 / 3 = 2 assertRows(execute("SELECT " + a + "(b) FROM %s"), row(2d)); @@ -1364,6 +1370,9 @@ public class AggregationTest extends CQLTester "FINALFUNC " + parseFunctionName(fFinal).name + ' ' + "INITCOND null"); + assertRows(execute("SELECT initcond FROM system_schema.aggregates WHERE keyspace_name=? AND aggregate_name=?", KEYSPACE, shortFunctionName(aggregation)), + row(null)); + assertRows(execute("SELECT " + aggregation + "(b) FROM %s"), row(set(7, 8, 9))); @@ -1600,6 +1609,9 @@ public class AggregationTest extends CQLTester "FINALFUNC " + shortFunctionName(fCONf) + ' ' + "INITCOND ''"); + assertRows(execute("SELECT initcond FROM system_schema.aggregates WHERE keyspace_name=? AND aggregate_name=?", KEYSPACE, shortFunctionName(aCON)), + row("''")); + String fRNON = createFunction(KEYSPACE, "text, text", "CREATE FUNCTION %s(a text, b text) " + @@ -1655,6 +1667,9 @@ public class AggregationTest extends CQLTester "STYPE list " + "INITCOND [ ]"); + assertRows(execute("SELECT initcond FROM system_schema.aggregates WHERE keyspace_name=? AND aggregate_name=?", KEYSPACE, shortFunctionName(a)), + row("[]")); + createTable("CREATE TABLE %s (a int primary key, b int)"); execute("INSERT INTO %s (a, b) VALUES (1, 1)"); execute("INSERT INTO %s (a, b) VALUES (2, null)"); diff --git a/test/unit/org/apache/cassandra/schema/LegacySchemaMigratorTest.java b/test/unit/org/apache/cassandra/schema/LegacySchemaMigratorTest.java index ad75fd043d..7d0be4d420 100644 --- a/test/unit/org/apache/cassandra/schema/LegacySchemaMigratorTest.java +++ b/test/unit/org/apache/cassandra/schema/LegacySchemaMigratorTest.java @@ -511,13 +511,17 @@ public class LegacySchemaMigratorTest null ); + ByteBuffer twoNullEntries = ByteBuffer.allocate(8); + twoNullEntries.putInt(-1); + twoNullEntries.putInt(-1); + twoNullEntries.flip(); UDAggregate uda2 = UDAggregate.create(udfs, new FunctionName(keyspace, "uda2"), ImmutableList.of(udf2.argTypes().get(1)), udf3.returnType(), udf2.name(), udf3.name(), udf2.argTypes().get(0), - LongType.instance.decompose(0L) + twoNullEntries ); return KeyspaceMetadata.create(keyspace,