/** * Alipay.com Inc. * Copyright (c) 2004-2012 All Rights Reserved. */ package com.alipay.zdal.parser.sql.dialect.mysql.visitor; import com.alipay.zdal.parser.sql.ast.expr.SQLBinaryOpExpr; import com.alipay.zdal.parser.sql.ast.expr.SQLCharExpr; import com.alipay.zdal.parser.sql.ast.expr.SQLInListExpr; import com.alipay.zdal.parser.sql.ast.expr.SQLIntegerExpr; import com.alipay.zdal.parser.sql.ast.expr.SQLNCharExpr; import com.alipay.zdal.parser.sql.ast.expr.SQLNullExpr; import com.alipay.zdal.parser.sql.ast.expr.SQLNumberExpr; import com.alipay.zdal.parser.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alipay.zdal.parser.sql.visitor.ParameterizedOutputVisitorUtils; /** * * @author ���� * @version $Id: MySqlParameterizedOutputVisitor.java, v 0.1 2012-11-17 ����3:41:05 Exp $ */ public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor { public MySqlParameterizedOutputVisitor() { this(new StringBuilder()); } public MySqlParameterizedOutputVisitor(Appendable appender) { super(appender); } public boolean visit(SQLInListExpr x) { return ParameterizedOutputVisitorUtils.visit(this, x); } public boolean visit(SQLBinaryOpExpr x) { x = ParameterizedOutputVisitorUtils.merge(x); return super.visit(x); } public boolean visit(SQLNullExpr x) { print('?'); return false; } public boolean visit(SQLIntegerExpr x) { if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) { return super.visit(x); } print('?'); return false; } public boolean visit(SQLNumberExpr x) { if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) { return super.visit(x); } print('?'); return false; } public boolean visit(SQLCharExpr x) { if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) { return super.visit(x); } print('?'); return false; } public boolean visit(SQLNCharExpr x) { if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) { return super.visit(x); } print('?'); return false; } @Override public boolean visit(MySqlInsertStatement x) { print("INSERT "); if (x.isLowPriority()) { print("LOW_PRIORITY "); } if (x.isDelayed()) { print("DELAYED "); } if (x.isHighPriority()) { print("HIGH_PRIORITY "); } if (x.isIgnore()) { print("IGNORE "); } print("INTO "); x.getTableName().accept(this); if (x.getColumns().size() > 0) { print(" ("); for (int i = 0, size = x.getColumns().size(); i < size; ++i) { if (i != 0) { print(", "); } x.getColumns().get(i).accept(this); } print(")"); } if (x.getValuesList().size() != 0) { print(" VALUES "); int size = x.getValuesList().size(); if (size == 0) { print("()"); } else { for (int i = 0; i < 1; ++i) { if (i != 0) { print(", "); } x.getValuesList().get(i).accept(this); } } } if (x.getQuery() != null) { print(" "); x.getQuery().accept(this); } if (x.getDuplicateKeyUpdate().size() != 0) { print(" ON DUPLICATE KEY UPDATE "); printAndAccept(x.getDuplicateKeyUpdate(), ", "); } return false; } }