From 35f4bb9828d0f40efeba8d7ed22e13c496f482eb Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 12 Dec 2022 01:54:18 -0600 Subject: [PATCH] avoid NPE when cqlgen parses materialized views --- .../io/nosqlbench/cqlgen/grammars/CqlParser.g4 | 2 ++ .../nosqlbench/cqlgen/model/CqlModelBuilder.java | 14 +++++++++++--- .../src/main/resources/cqlgen/bindings-cqlgen.yaml | 5 ++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/grammars/CqlParser.g4 b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/grammars/CqlParser.g4 index d6c352670..1a998eeec 100644 --- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/grammars/CqlParser.g4 +++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/grammars/CqlParser.g4 @@ -21,6 +21,8 @@ * Project : cql-parser; an ANTLR4 grammar for Apache Cassandra CQL https://github.com/kdcro101cql-parser */ +// TODO: Add support for +// CREATE CUSTOM INDEX idxname ON ksname.tbname (fieldname) USING 'StorageAttachedIndex'; parser grammar CqlParser; options diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlModelBuilder.java b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlModelBuilder.java index 045be71f8..8bb90c57a 100644 --- a/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlModelBuilder.java +++ b/adapter-cqld4/src/main/java/io/nosqlbench/cqlgen/model/CqlModelBuilder.java @@ -175,7 +175,11 @@ public class CqlModelBuilder extends CqlParserBaseListener { @Override public void exitTableOptionItem(CqlParser.TableOptionItemContext ctx) { - table.setCompactStorage(ctx.kwCompactStorage() != null); + if (table!=null) { + table.setCompactStorage(ctx.kwCompactStorage() != null); + } else { + logger.debug("table option item found with no table, this is likely for a materialized view"); + } } @Override @@ -196,8 +200,12 @@ public class CqlModelBuilder extends CqlParserBaseListener { .map(c -> c.getText()) .toList(); - IntStream.range(0, columns.size()) - .forEach(i -> table.addTableClusteringOrder(columns.get(i), orders.get(i))); + if (table!=null) { + IntStream.range(0, columns.size()) + .forEach(i -> table.addTableClusteringOrder(columns.get(i), orders.get(i))); + } else { + logger.debug("clustering order found, but not active table. This is likely for a materialized view."); + } } private String textOf(ParserRuleContext ctx) { diff --git a/adapter-cqld4/src/main/resources/cqlgen/bindings-cqlgen.yaml b/adapter-cqld4/src/main/resources/cqlgen/bindings-cqlgen.yaml index 0fa71618e..99f1c7530 100644 --- a/adapter-cqld4/src/main/resources/cqlgen/bindings-cqlgen.yaml +++ b/adapter-cqld4/src/main/resources/cqlgen/bindings-cqlgen.yaml @@ -13,11 +13,14 @@ bindings: float: ToFloat(); map: MapSized(3,Combinations('A-Z;0-9', ToJavaInstant())); frozen>: ListSizedHashed(HashRange(3,7),ToInt())); - list: ListStepped(ToString(),ToString()) + list: ListStepped(ToString(),ToString()); + list: ListStepped(ToString(),ToString()) map: MapSized(3, Combinations('A-Z;0-9'), ToString(), ToString()); + map: MapSized(3, Combinations('A-Z;0-9'), ToString(), ToString()); map: MapSized(3, ToInt(), ToInt()); counter: HashRange(1,3); set: SetSized(HashRange(3,4),ToString())); + set: SetSized(HashRange(3,4),ToString())); smallint: ToShort(); time: StartingEpochMillis('2022-01-01 00:00:00'); ToLocalTime(); timestamp: ToJavaInstant();