bug fixed for parameterized output SQLHexExpr.

This commit is contained in:
wenshao
2017-05-15 21:36:19 +08:00
parent d8996a2f10
commit d966873091
4 changed files with 120 additions and 7 deletions
@@ -20,13 +20,7 @@ import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.expr.*;
import com.alibaba.druid.sql.dialect.db2.visitor.DB2ExportParameterVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlExportParameterVisitor;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleExportParameterVisitor;
@@ -106,6 +100,11 @@ public final class ExportParameterVisitorUtils {
replace = true;
}
if (param instanceof SQLHexExpr) {
value = ((SQLHexExpr) param).toBytes();
replace = true;
}
if (replace) {
SQLObject parent = param.getParent();
if (parent != null) {
@@ -1457,6 +1457,25 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
return;
}
if (param instanceof byte[]) {
byte[] bytes = (byte[]) param;
int bytesLen = bytes.length;
char[] chars = new char[bytesLen * 2 + 3];
chars[0] = 'x';
chars[1] = '\'';
for (int i = 0; i < bytes.length; i++) {
int a = bytes[i] & 0xFF;
int b0 = a >> 4;
int b1 = a & 0xf;
chars[i * 2 + 2] = (char) (b0 + (b0 < 10 ? 48 : 55)); //hexChars[b0];
chars[i * 2 + 3] = (char) (b1 + (b1 < 10 ? 48 : 55));
}
chars[chars.length - 1] = '\'';
print0(new String(chars));
return;
}
print0("'" + param.getClass().getName() + "'");
}