diff --git a/src/main/java/net/sf/jsqlparser/statement/comment/Comment.java b/src/main/java/net/sf/jsqlparser/statement/comment/Comment.java index d213aac6b8..5511e8519c 100755 --- a/src/main/java/net/sf/jsqlparser/statement/comment/Comment.java +++ b/src/main/java/net/sf/jsqlparser/statement/comment/Comment.java @@ -69,7 +69,8 @@ public String toString() { } else if (view != null) { sql += "VIEW " + view + " "; } - sql += "IS " + comment; + // a null comment stands for PostgreSQL's COMMENT ON ... IS NULL, which removes the comment + sql += "IS " + (comment != null ? comment : "NULL"); return sql; } diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index ebb26f4929..fc87d3ba17 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -15157,9 +15157,12 @@ Comment Comment(): view = Table() { result.setView(view); } ) ) - comment= + + ( + comment= { result.setComment(new StringValue(comment.image)); } + | + ) { - result.setComment(new StringValue(comment.image)); return result; } } diff --git a/src/test/java/net/sf/jsqlparser/statement/comment/CommentTest.java b/src/test/java/net/sf/jsqlparser/statement/comment/CommentTest.java index 840905bdd2..35bdd8a7b6 100755 --- a/src/test/java/net/sf/jsqlparser/statement/comment/CommentTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/comment/CommentTest.java @@ -78,7 +78,36 @@ public void testCommentColumnDeparse() throws JSQLParserException { @Test public void testToString() { Comment comment = new Comment(); - assertEquals("COMMENT ON IS null", comment.toString()); + assertEquals("COMMENT ON IS NULL", comment.toString()); + } + + @Test + public void testCommentTableIsNull() throws JSQLParserException { + String statement = "COMMENT ON TABLE schema1.table1 IS NULL"; + Comment comment = (Comment) CCJSqlParserUtil.parse(statement); + assertEquals("table1", comment.getTable().getName()); + assertThat(comment.getComment()).isNull(); + assertSqlCanBeParsedAndDeparsed(statement); + } + + @Test + public void testCommentColumnIsNull() throws JSQLParserException { + String statement = "COMMENT ON COLUMN table1.column1 IS NULL"; + Comment comment = (Comment) CCJSqlParserUtil.parse(statement); + assertEquals("column1", comment.getColumn().getColumnName()); + assertThat(comment.getComment()).isNull(); + assertSqlCanBeParsedAndDeparsed(statement); + } + + @Test + public void testCommentViewIsNull() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("COMMENT ON VIEW myschema.myView IS NULL"); + } + + @Test + public void testCommentIsNullLowercase() throws JSQLParserException { + Comment comment = (Comment) CCJSqlParserUtil.parse("comment on table table1 is null"); + assertThat(comment.getComment()).isNull(); } @Test