From a35e754b12a759b0a3fe793c6bd6f77fdcd38b12 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Thu, 19 Oct 2017 00:58:54 +1300 Subject: [PATCH] #34 - Allow single DDL script with no trailing semi-colon to be parsed --- .../java/io/ebean/migration/ddl/DdlParser.java | 13 ++++++++++++- .../java/io/ebean/migration/ddl/DdlParserTest.java | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/ebean/migration/ddl/DdlParser.java b/src/main/java/io/ebean/migration/ddl/DdlParser.java index d471d6b..71e7ef0 100644 --- a/src/main/java/io/ebean/migration/ddl/DdlParser.java +++ b/src/main/java/io/ebean/migration/ddl/DdlParser.java @@ -25,7 +25,7 @@ public List parse(StringReader reader) { s = s.trim(); statements.nextLine(s); } - + statements.endOfContent(); return statements.statements; } catch (IOException e) { @@ -109,5 +109,16 @@ void nextLine(String line) { } } } + + /** + * Append trailing non-terminated content as an extra statement. + */ + void endOfContent() { + String remaining = sb.toString().trim(); + if (remaining.length() > 0) { + statements.add(remaining); + sb = new StringBuilder(); + } + } } } diff --git a/src/test/java/io/ebean/migration/ddl/DdlParserTest.java b/src/test/java/io/ebean/migration/ddl/DdlParserTest.java index 6b7d4de..87f0636 100644 --- a/src/test/java/io/ebean/migration/ddl/DdlParserTest.java +++ b/src/test/java/io/ebean/migration/ddl/DdlParserTest.java @@ -66,4 +66,18 @@ public void parse_semiInContent_withTailingComments() throws Exception { List stmts = parser.parse(new StringReader("insert (';one'); -- aaa\ninsert (';two'); -- bbb")); assertThat(stmts).containsExactly("insert (';one');", "insert (';two');"); } + + @Test + public void parse_noTailingSemi() throws Exception { + + List stmts = parser.parse(new StringReader("one")); + assertThat(stmts).containsExactly("one"); + } + + @Test + public void parse_noTailingSemi_multiLine() throws Exception { + + List stmts = parser.parse(new StringReader("one\ntwo")); + assertThat(stmts).containsExactly("one two"); + } }