net.sf.jsqlparser.util.deparser.ReplaceDeParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsqlparser Show documentation
Show all versions of jsqlparser Show documentation
JSqlParser parses an SQL statement and translate it into a hierarchy of Java classes.
The generated hierarchy can be navigated using the Visitor Pattern.
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2019 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.util.deparser;
import java.util.Iterator;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.NamedExpressionList;
import net.sf.jsqlparser.expression.operators.relational.ItemsListVisitor;
import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.statement.replace.Replace;
import net.sf.jsqlparser.statement.select.SelectVisitor;
import net.sf.jsqlparser.statement.select.SubSelect;
public class ReplaceDeParser implements ItemsListVisitor {
protected StringBuilder buffer;
private ExpressionVisitor expressionVisitor;
private SelectVisitor selectVisitor;
public ReplaceDeParser() {
}
public ReplaceDeParser(ExpressionVisitor expressionVisitor, SelectVisitor selectVisitor, StringBuilder buffer) {
this.buffer = buffer;
this.expressionVisitor = expressionVisitor;
this.selectVisitor = selectVisitor;
}
public StringBuilder getBuffer() {
return buffer;
}
public void setBuffer(StringBuilder buffer) {
this.buffer = buffer;
}
public void deParse(Replace replace) {
buffer.append("REPLACE ");
if (replace.isUseIntoTables()) {
buffer.append("INTO ");
}
buffer.append(replace.getTable().getFullyQualifiedName());
if (replace.getItemsList() != null) {
if (replace.getColumns() != null) {
buffer.append(" (");
for (int i = 0; i < replace.getColumns().size(); i++) {
Column column = replace.getColumns().get(i);
buffer.append(column.getFullyQualifiedName());
if (i < replace.getColumns().size() - 1) {
buffer.append(", ");
}
}
buffer.append(") ");
} else {
buffer.append(" ");
}
} else {
buffer.append(" SET ");
for (int i = 0; i < replace.getColumns().size(); i++) {
Column column = replace.getColumns().get(i);
buffer.append(column.getFullyQualifiedName()).append("=");
Expression expression = replace.getExpressions().get(i);
expression.accept(expressionVisitor);
if (i < replace.getColumns().size() - 1) {
buffer.append(", ");
}
}
}
if (replace.getItemsList() != null) {
// REPLACE mytab SELECT * FROM mytab2
// or VALUES ('as', ?, 565)
replace.getItemsList().accept(this);
}
}
@Override
public void visit(ExpressionList expressionList) {
buffer.append("VALUES (");
for (Iterator iter = expressionList.getExpressions().iterator(); iter.hasNext();) {
Expression expression = iter.next();
expression.accept(expressionVisitor);
if (iter.hasNext()) {
buffer.append(", ");
}
}
buffer.append(")");
}
// NamedExpressionList not use by top-level Replace
@Override
public void visit(NamedExpressionList namedExpressionList) {
}
@Override
public void visit(SubSelect subSelect) {
subSelect.getSelectBody().accept(selectVisitor);
}
public ExpressionVisitor getExpressionVisitor() {
return expressionVisitor;
}
public SelectVisitor getSelectVisitor() {
return selectVisitor;
}
public void setExpressionVisitor(ExpressionVisitor visitor) {
expressionVisitor = visitor;
}
public void setSelectVisitor(SelectVisitor visitor) {
selectVisitor = visitor;
}
@Override
public void visit(MultiExpressionList multiExprList) {
buffer.append("VALUES ");
for (Iterator it = multiExprList.getExprList().iterator(); it.hasNext();) {
buffer.append("(");
for (Iterator iter = it.next().getExpressions().iterator(); iter.hasNext();) {
Expression expression = iter.next();
expression.accept(expressionVisitor);
if (iter.hasNext()) {
buffer.append(", ");
}
}
buffer.append(")");
if (it.hasNext()) {
buffer.append(", ");
}
}
}
}