net.sf.jsqlparser.util.deparser.UpdateDeParser 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.
The newest version!
/*-
* #%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 net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
import net.sf.jsqlparser.statement.select.Join;
import net.sf.jsqlparser.statement.select.OrderByElement;
import net.sf.jsqlparser.statement.select.OrderByVisitor;
import net.sf.jsqlparser.statement.select.WithItem;
import net.sf.jsqlparser.statement.update.Update;
import java.util.Iterator;
public class UpdateDeParser extends AbstractDeParser
implements OrderByVisitor {
private ExpressionVisitor expressionVisitor = new ExpressionVisitorAdapter<>();
public UpdateDeParser() {
super(new StringBuilder());
}
public UpdateDeParser(ExpressionVisitor expressionVisitor,
StringBuilder buffer) {
super(buffer);
this.expressionVisitor = expressionVisitor;
}
@Override
@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity",
"PMD.ExcessiveMethodLength"})
public void deParse(Update update) {
if (update.getWithItemsList() != null && !update.getWithItemsList().isEmpty()) {
builder.append("WITH ");
for (Iterator> iter = update.getWithItemsList().iterator(); iter
.hasNext();) {
WithItem> withItem = iter.next();
builder.append(withItem);
if (iter.hasNext()) {
builder.append(",");
}
builder.append(" ");
}
}
builder.append("UPDATE ");
if (update.getOracleHint() != null) {
builder.append(update.getOracleHint()).append(" ");
}
if (update.getModifierPriority() != null) {
builder.append(update.getModifierPriority()).append(" ");
}
if (update.isModifierIgnore()) {
builder.append("IGNORE ");
}
builder.append(update.getTable());
if (update.getStartJoins() != null) {
for (Join join : update.getStartJoins()) {
if (join.isSimple()) {
builder.append(", ").append(join);
} else {
builder.append(" ").append(join);
}
}
}
builder.append(" SET ");
deparseUpdateSetsClause(update);
if (update.getOutputClause() != null) {
update.getOutputClause().appendTo(builder);
}
if (update.getFromItem() != null) {
builder.append(" FROM ").append(update.getFromItem());
if (update.getJoins() != null) {
for (Join join : update.getJoins()) {
if (join.isSimple()) {
builder.append(", ").append(join);
} else {
builder.append(" ").append(join);
}
}
}
}
deparseWhereClause(update);
if (update.getPreferringClause() != null) {
builder.append(" ").append(update.getPreferringClause());
}
if (update.getOrderByElements() != null) {
new OrderByDeParser(expressionVisitor, builder).deParse(update.getOrderByElements());
}
if (update.getLimit() != null) {
new LimitDeparser(expressionVisitor, builder).deParse(update.getLimit());
}
if (update.getReturningClause() != null) {
update.getReturningClause().appendTo(builder);
}
}
protected void deparseWhereClause(Update update) {
if (update.getWhere() != null) {
builder.append(" WHERE ");
update.getWhere().accept(expressionVisitor, null);
}
}
protected void deparseUpdateSetsClause(Update update) {
deparseUpdateSets(update.getUpdateSets(), builder, expressionVisitor);
}
public ExpressionVisitor getExpressionVisitor() {
return expressionVisitor;
}
public void setExpressionVisitor(ExpressionVisitor visitor) {
expressionVisitor = visitor;
}
@Override
public StringBuilder visit(OrderByElement orderBy, S context) {
orderBy.getExpression().accept(expressionVisitor, context);
if (!orderBy.isAsc()) {
builder.append(" DESC");
} else if (orderBy.isAscDescPresent()) {
builder.append(" ASC");
}
if (orderBy.getNullOrdering() != null) {
builder.append(' ');
builder.append(orderBy.getNullOrdering() == OrderByElement.NullOrdering.NULLS_FIRST
? "NULLS FIRST"
: "NULLS LAST");
}
return builder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy