polardbx-sql icon indicating copy to clipboard operation
polardbx-sql copied to clipboard

JSON_QUOTE编码字符串和mysql不一样

Open co63oc opened this issue 2 years ago • 2 comments

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("\"");
    }

co63oc avatar Jul 06 '22 11:07 co63oc

这个函数的实现太粗糙了,应该参考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

F-ca7 avatar Jul 29 '22 02:07 F-ca7

已经提交了pull request修改 https://github.com/ApsaraDB/galaxysql/pull/70

co63oc avatar Jul 29 '22 03:07 co63oc