/*
* Copyright (C) 2015 JSQLParser.
*
* This library 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 library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package net.sf.jsqlparser.util.deparser;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserDefaultVisitor;
import net.sf.jsqlparser.parser.CCJSqlParserTreeConstants;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.parser.SimpleNode;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.create.view.CreateView;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author tw
*/
public class CreateViewDeParserTest {
public CreateViewDeParserTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of deParse method, of class CreateViewDeParser.
*/
@Test
public void testUseExtrnalExpressionDeparser() throws JSQLParserException {
StringBuilder b = new StringBuilder();
SelectDeParser selectDeParser = new SelectDeParser();
selectDeParser.setBuffer(b);
ExpressionDeParser expressionDeParser = new ExpressionDeParser(selectDeParser, b) {
@Override
public void visit(Column tableColumn) {
final Table table = tableColumn.getTable();
String tableName = null;
if (table != null) {
if (table.getAlias() != null) {
tableName = table.getAlias().getName();
} else {
tableName = table.getFullyQualifiedName();
}
}
if (tableName != null && !tableName.isEmpty()) {
getBuffer().append("\"").append(tableName).append("\"").append(".");
}
getBuffer().append("\"").append(tableColumn.getColumnName()).append("\"");
}
};
selectDeParser.setExpressionVisitor(expressionDeParser);
CreateViewDeParser instance = new CreateViewDeParser(b, selectDeParser);
CreateView vc = (CreateView) CCJSqlParserUtil.
parse("CREATE VIEW test AS SELECT a, b FROM mytable");
instance.deParse(vc);
assertEquals("CREATE VIEW test AS SELECT a, b FROM mytable", vc.toString());
assertEquals("CREATE VIEW test AS SELECT \"a\", \"b\" FROM mytable", instance.getBuffer().
toString());
}
@Test
public void testCreateViewASTNode() throws JSQLParserException {
String sql = "CREATE VIEW test AS SELECT a, b FROM mytable";
final StringBuilder b = new StringBuilder(sql);
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
node.dump("*");
assertEquals(CCJSqlParserTreeConstants.JJTSTATEMENT, node.getId());
node.jjtAccept(new CCJSqlParserDefaultVisitor() {
int idxDelta = 0;
@Override
public Object visit(SimpleNode node, Object data) {
if (CCJSqlParserTreeConstants.JJTCOLUMN == node.getId()) {
b.insert(node.jjtGetFirstToken().beginColumn - 1 + idxDelta, '"');
idxDelta++;
b.insert(node.jjtGetLastToken().endColumn + idxDelta, '"');
idxDelta++;
}
return super.visit(node, data);
}
}, null);
assertEquals("CREATE VIEW test AS SELECT \"a\", \"b\" FROM mytable", b.toString());
}
}