From 7ec90ac2f2b78b4e0eda4f35495e4667d682b7c8 Mon Sep 17 00:00:00 2001 From: tivnantu Date: Sun, 12 Jun 2022 20:38:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0--base64=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=88=A9=E7=94=A8base64=E5=8F=96=E6=B6=88=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E5=AD=97=E7=AC=A6=E5=9C=A8bash=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复set autocommit=1在openGauss侧是支持的、set transaction多解析一个set的问题 --- .../sqltranslator/ExecuteTranslate.java | 17 ++++++++++++++++- .../mysql/MySqlToOpenGaussOutputVisitor.java | 16 ++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opengauss/sqltranslator/ExecuteTranslate.java b/src/main/java/org/opengauss/sqltranslator/ExecuteTranslate.java index 1275072..e124d17 100644 --- a/src/main/java/org/opengauss/sqltranslator/ExecuteTranslate.java +++ b/src/main/java/org/opengauss/sqltranslator/ExecuteTranslate.java @@ -7,6 +7,8 @@ import org.opengauss.sqltranslator.dialect.mysql.MySqlToOpenGaussOutputVisitor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.UnsupportedEncodingException; +import java.util.Base64; import java.util.List; public class ExecuteTranslate { @@ -14,8 +16,21 @@ public class ExecuteTranslate { private static final Logger logger = LoggerFactory.getLogger(ExecuteTranslate.class); public static void main(String[] args) { + String raw_sql = ""; + //if the encoded sql is passed in through the --base64 parameter, the sql needs to be decoded + if (args.length == 2 && args[0].equals("--base64")) { + //decode sql + byte[] decode = Base64.getDecoder().decode(args[1]); + try { + raw_sql = new String(decode, "utf-8"); + } catch (UnsupportedEncodingException e) { + logger.error(e.getLocalizedMessage()); + } + } else { + raw_sql = args[0]; + } try { - System.out.println(translateMysql2openGauss(args[0], false)); + System.out.println(translateMysql2openGauss(raw_sql, false)); } catch (Exception e) { logger.error(e.getLocalizedMessage()); } diff --git a/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java b/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java index 1a9743c..a3cf413 100644 --- a/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java +++ b/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java @@ -450,14 +450,22 @@ public class MySqlToOpenGaussOutputVisitor extends MySqlOutputVisitor { boolean mysqlSpecial = false; if (DbType.mysql == this.dbType) mysqlSpecial = ("NAMES".equalsIgnoreCase(tagetString) || "CHARACTER SET".equalsIgnoreCase(tagetString) - || "CHARSET".equalsIgnoreCase(tagetString) || tagetString.startsWith("@")); + || "CHARSET".equalsIgnoreCase(tagetString) || "AUTOCOMMIT".equalsIgnoreCase(tagetString) + || tagetString.startsWith("@")); if (!mysqlSpecial) { x.getTarget().accept(this); print0(" := "); x.getValue().accept(this); } else { - logger.error("openGauss does not support set " + tagetString.toUpperCase() + getTypeAttribute(x)); - errHandle(x); + if ("AUTOCOMMIT".equalsIgnoreCase(tagetString)) { + print0("SET "); + x.getTarget().accept(this); + print0(" = "); + x.getValue().accept(this); + } else { + logger.error("openGauss does not support set " + tagetString.toUpperCase() + getTypeAttribute(x)); + errHandle(x); + } } return false; } @@ -3310,7 +3318,7 @@ public class MySqlToOpenGaussOutputVisitor extends MySqlOutputVisitor { gaussFeatureNotSupportLog("GLOBAL when it sets transaction" + getTypeAttribute(x)); } if (x.getSession() != null && x.getSession().booleanValue()) { - printUcase("SET SESSION CHARACTERISTICS AS TRANSACTION"); + printUcase("SESSION CHARACTERISTICS AS TRANSACTION "); } else printUcase("LOCAL TRANSACTION "); if (x.getIsolationLevel() != null) { -- Gitee