From 0d4fde3f58d4e908434fab374ca5a74c51fcd749 Mon Sep 17 00:00:00 2001 From: nilswende Date: Fri, 23 Feb 2024 17:02:36 +0100 Subject: [PATCH] fix ParserImpl reuse bug --- .../wn/dbml/compiler/parser/ParserImpl.java | 3 ++- .../java/com/wn/dbml/compiler/ParserTest.java | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/wn/dbml/compiler/parser/ParserImpl.java b/src/main/java/com/wn/dbml/compiler/parser/ParserImpl.java index d987285..64d6356 100644 --- a/src/main/java/com/wn/dbml/compiler/parser/ParserImpl.java +++ b/src/main/java/com/wn/dbml/compiler/parser/ParserImpl.java @@ -18,12 +18,13 @@ * The default parser implementation. */ public class ParserImpl implements Parser { - private final List relationshipDefinitions = new ArrayList<>(); + private List relationshipDefinitions; private TokenAccess tokenAccess; private Database database; @Override public Database parse(final Lexer lexer) { + relationshipDefinitions = new ArrayList<>(); tokenAccess = new TokenAccess(lexer); database = new Database(); loop: diff --git a/src/test/java/com/wn/dbml/compiler/ParserTest.java b/src/test/java/com/wn/dbml/compiler/ParserTest.java index c2ae611..7187bda 100644 --- a/src/test/java/com/wn/dbml/compiler/ParserTest.java +++ b/src/test/java/com/wn/dbml/compiler/ParserTest.java @@ -18,7 +18,32 @@ private Database parse(final String dbml) { private Schema getDefaultSchema(final Database database) { return database.getSchema(Schema.DEFAULT_NAME); } - + + @Test + void testParseTwice() { + var dbml = """ + Table schema1.table1 { + id integer + column1 integer + } + + Table schema2.table2 { + id integer + column2 integer + } + + Ref r1: schema2.table2.column2 - schema1.table1.column1"""; + var parser = new ParserImpl(); + + var database = parser.parse(new LexerImpl(dbml)); + var relationships = database.getRelationships(); + assertEquals(1, relationships.size()); + + database = parser.parse(new LexerImpl(dbml)); + relationships = database.getRelationships(); + assertEquals(1, relationships.size()); + } + @Test void testParseProject() { var dbml = """