/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.db2.visitor;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLOrderBy;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock;
import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2ValuesStatement;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
import com.alibaba.druid.util.JdbcConstants;
public class DB2OutputVisitor extends SQLASTOutputVisitor implements DB2ASTVisitor {
public DB2OutputVisitor(Appendable appender){
super(appender, JdbcConstants.DB2);
}
public DB2OutputVisitor(Appendable appender, boolean parameterized){
super(appender, parameterized);
this.dbType = JdbcConstants.DB2;
}
@Override
public boolean visit(DB2SelectQueryBlock x) {
this.visit((SQLSelectQueryBlock) x);
if (x.isForReadOnly()) {
println();
print0(ucase ? "FOR READ ONLY" : "for read only");
} else if (x.isForUpdate()) {
println();
print0(ucase ? "FOR UPDATE" : "for update");
}
if (x.getIsolation() != null) {
println();
print0(ucase ? "WITH " : "with ");
print0(x.getIsolation().name());
}
if (x.getOptimizeFor() != null) {
println();
print0(ucase ? "OPTIMIZE FOR " : "optimize for ");
x.getOptimizeFor().accept(this);
}
return false;
}
@Override
public void endVisit(DB2SelectQueryBlock x) {
}
@Override
public boolean visit(DB2ValuesStatement x) {
print0(ucase ? "VALUES " : "values ");
x.getExpr().accept(this);
return false;
}
@Override
public void endVisit(DB2ValuesStatement x) {
}
protected void printOperator(SQLBinaryOperator operator) {
if (operator == SQLBinaryOperator.Concat) {
print0(ucase ? "CONCAT" : "concat");
} else {
print0(ucase ? operator.name : operator.name_lcase);
}
}
}