gunveda created CALCITE-6336:
--------------------------------

             Summary: When inserting an insert SQL statement containing 
non-ANSII characters into an Oracle database, an exception occurs
                 Key: CALCITE-6336
                 URL: https://issues.apache.org/jira/browse/CALCITE-6336
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.36.0
            Reporter: gunveda


*The following content is a Chinese translation*

Use the u& prefix for non-ANSII characters.  This method is not supported in 
Oracle, and should be replaced with the unistr function.

Modify as follows
{code:java}
public class CustomOracleSqlDialect extends OracleSqlDialect {
    private static final char[] HEXITS = {
            '0', '1', '2', '3', '4', '5', '6', '7',
            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
    };

    public static final SqlDialect DEFAULT = new 
CustomOracleSqlDialect(DEFAULT_CONTEXT);

    public CustomOracleSqlDialect(Context context) {
        super(context);
    }

    @Override
    public void quoteStringLiteralUnicode(StringBuilder buf, String val) {
        buf.append("unistr('");
        for (int i = 0; i < val.length(); i++) {
            char c = val.charAt(i);
            if (c < 32 || c >= 128) {
                buf.append('\\');
                buf.append(HEXITS[(c >> 12) & 0xf]);
                buf.append(HEXITS[(c >> 8) & 0xf]);
                buf.append(HEXITS[(c >> 4) & 0xf]);
                buf.append(HEXITS[c & 0xf]);
            } else if (c == '\'' || c == '\\') {
                buf.append(c);
                buf.append(c);
            } else {
                buf.append(c);
            }
        }
        buf.append("')");
    }
} {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to