Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.view.AlterView;
Expand All @@ -40,6 +41,8 @@

public interface StatementVisitor {

void visit(Comment comment);

void visit(Commit commit);

void visit(Delete delete);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.view.AlterView;
Expand All @@ -40,6 +41,11 @@

public class StatementVisitorAdapter implements StatementVisitor {

@Override
public void visit(Comment comment) {

}

@Override
public void visit(Commit commit) {

Expand Down
76 changes: 76 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/comment/Comment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2017 JSQLParser
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 2.1 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
* #L%
*/
package net.sf.jsqlparser.statement.comment;

import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;

public class Comment implements Statement {

private Table table;
private Column column;
private StringValue comment;

@Override
public void accept(StatementVisitor statementVisitor) {
statementVisitor.visit(this);
}

public Table getTable() {
return table;
}

public void setTable(Table table) {
this.table = table;
}

public Column getColumn() {
return column;
}

public void setColumn(Column column) {
this.column = column;
}

public StringValue getComment() {
return comment;
}

public void setComment(StringValue comment) {
this.comment = comment;
}

@Override
public String toString() {
String sql = "COMMENT ON ";
if (table != null) {
sql += "TABLE " + table + " ";
} else if (column != null) {
sql += "COLUMN " + column + " ";
}
sql += "IS " + comment;
return sql;
}
}
15 changes: 15 additions & 0 deletions src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import java.util.ArrayList;
import java.util.List;

import net.sf.jsqlparser.expression.AllComparisonExpression;
import net.sf.jsqlparser.expression.AnalyticExpression;
import net.sf.jsqlparser.expression.AnyComparisonExpression;
Expand Down Expand Up @@ -100,6 +101,7 @@
import net.sf.jsqlparser.statement.Statements;
import net.sf.jsqlparser.statement.UseStatement;
import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.view.AlterView;
Expand Down Expand Up @@ -813,6 +815,19 @@ public void visit(Block block) {
}
}

@Override
public void visit(Comment comment) {
if (comment.getTable() != null) {
visit(comment.getTable());
}
if (comment.getColumn() != null) {
Table table = comment.getColumn().getTable();
if (table != null) {
visit(table);
}
}
}

@Override
public void visit(ValuesStatement values) {
for (Expression expr : values.getExpressions()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import net.sf.jsqlparser.statement.Statements;
import net.sf.jsqlparser.statement.UseStatement;
import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.view.AlterView;
Expand Down Expand Up @@ -242,6 +243,11 @@ public void visit(Block block) {
buffer.append("END");
}

@Override
public void visit(Comment comment) {
buffer.append(comment.toString());
}

@Override
public void visit(ValuesStatement values) {
expressionDeParser.setBuffer(buffer);
Expand Down
30 changes: 29 additions & 1 deletion src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.schema.*;
import net.sf.jsqlparser.statement.*;
import net.sf.jsqlparser.statement.alter.*;
import net.sf.jsqlparser.statement.comment.*;
import net.sf.jsqlparser.statement.create.index.*;
import net.sf.jsqlparser.statement.create.table.*;
import net.sf.jsqlparser.statement.create.view.*;
Expand Down Expand Up @@ -160,6 +161,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
| <K_CHAR:"CHAR">
| <K_COLUMN:"COLUMN">
| <K_COMMIT:"COMMIT">
| <K_COMMENT:"COMMENT">
| <K_CONNECT:"CONNECT">
| <K_CONSTRAINT:"CONSTRAINT">
| <K_CREATE:"CREATE">
Expand Down Expand Up @@ -419,6 +421,8 @@ Statement SingleStatement() :
stm = Use()
|
stm = Commit()
|
stm = Comment()
)
{ return stm; }
} catch (ParseException e) {
Expand Down Expand Up @@ -1031,7 +1035,7 @@ String RelObjectNameWithoutValue() :
{ Token tk = null; }
{
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER> | tk=<K_BYTE> | <K_CHAR>
| tk=<K_CAST> | tk=<K_DO> | tk=<K_EXTRACT> | tk=<K_FIRST> | tk=<K_FOLLOWING>
| tk=<K_CAST> | tk=<K_COMMENT> | tk=<K_DO> | tk=<K_EXTRACT> | tk=<K_FIRST> | tk=<K_FOLLOWING>
| tk=<K_LAST> | tk=<K_MATERIALIZED> | tk=<K_NULLS> | tk=<K_PARTITION> | tk=<K_RANGE>
| tk=<K_ROW> | tk=<K_ROWS> | tk=<K_SIBLINGS> | tk=<K_XML>
| tk=<K_COLUMN> | tk=<K_REPLACE> | tk=<K_TRUNCATE> | tk=<K_KEY> | tk=<K_ANY>
Expand Down Expand Up @@ -3783,3 +3787,27 @@ Commit Commit():
return commit;
}
}

Comment Comment():
{
Comment result = new Comment();
Table table;
Column column;
Token comment;
}
{
<K_COMMENT> <K_ON>
(
(
<K_TABLE> table = Table() { result.setTable(table); }
)
|
(
<K_COLUMN> column = Column() { result.setColumn(column); }
)
)
<K_IS> comment=<S_CHAR_LITERAL> { result.setComment(new StringValue(comment.image)); }
{
return result;
}
}
68 changes: 68 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/comment/CommentTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package net.sf.jsqlparser.statement.comment;

import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
import static org.junit.Assert.assertEquals;

import java.io.StringReader;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;

import org.junit.Test;

public class CommentTest {

private final CCJSqlParserManager parserManager = new CCJSqlParserManager();

@Test
public void testCommentTable() throws JSQLParserException {
String statement = "COMMENT ON TABLE table1 IS 'comment1'";
Comment comment = (Comment) parserManager.parse(new StringReader(statement));
Table table = comment.getTable();
assertEquals("table1", table.getName());
assertEquals("comment1", comment.getComment().getValue());
assertEquals(statement, "" + comment);
}

@Test
public void testCommentTable2() throws JSQLParserException {
String statement = "COMMENT ON TABLE schema1.table1 IS 'comment1'";
Comment comment = (Comment) parserManager.parse(new StringReader(statement));
Table table = comment.getTable();
assertEquals("schema1", table.getSchemaName());
assertEquals("table1", table.getName());
assertEquals("comment1", comment.getComment().getValue());
assertEquals(statement, "" + comment);
}

@Test
public void testCommentTableDeparse() throws JSQLParserException {
String statement = "COMMENT ON TABLE table1 IS 'comment1'";
assertSqlCanBeParsedAndDeparsed(statement);
}

@Test
public void testCommentColumn() throws JSQLParserException {
String statement = "COMMENT ON COLUMN table1.column1 IS 'comment1'";
Comment comment = (Comment) parserManager.parse(new StringReader(statement));
Column column = comment.getColumn();
assertEquals("table1", column.getTable().getName());
assertEquals("column1", column.getColumnName());
assertEquals("comment1", comment.getComment().getValue());
assertEquals(statement, "" + comment);
}

@Test
public void testCommentColumnDeparse() throws JSQLParserException {
String statement = "COMMENT ON COLUMN table1.column1 IS 'comment1'";
assertSqlCanBeParsedAndDeparsed(statement);
}

@Test
public void testToString() {
Comment comment = new Comment();
assertEquals("COMMENT ON IS null", comment.toString());
}
}
Loading