polardbx-sql
polardbx-sql copied to clipboard
JSON_QUOTE编码字符串和mysql不一样
PolarDB-X结果 mysql> SELECT JSON_QUOTE(null), JSON_QUOTE('"abc"'); +------------------+---------------------+ | JSON_QUOTE(NULL) | JSON_QUOTE('"abc"') | +------------------+---------------------+ | NULL | ""abc"" | +------------------+---------------------+ 1 row in set (0.00 sec)
mysql结果 mysql> SELECT JSON_QUOTE(null), JSON_QUOTE('"abc"'); +------------------+---------------------+ | JSON_QUOTE(null) | JSON_QUOTE('"abc"') | +------------------+---------------------+ | NULL | "\"abc\"" | +------------------+---------------------+ 1 row in set (0.00 sec)
polardbx-optimizer\src\main\java\com\alibaba\polardbx\optimizer\core\function\calc\scalar\json\JsonQuote.java
@Override
public Object compute(Object[] args, ExecutionContext ec) {
Object unquotedStr = args[0];
if (unquotedStr == null || unquotedStr == JSONConstants.NULL_VALUE) {
return JSONConstants.NULL_VALUE;
}
return new StringBuilder()
.append("\"")
.append(DataTypeUtil.convert(operandTypes.get(0), DataTypes.StringType, args[0]))
.append("\"");
}
这个函数的实现太粗糙了,应该参考https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-quote 修复一下
polardbx-optimizer\src\main\java\com\alibaba\polardbx\optimizer\core\function\calc\scalar\json\JsonQuote.java
已经提交了pull request修改 https://github.com/ApsaraDB/galaxysql/pull/70