in holo-client/src/main/java/com/alibaba/hologres/client/utils/IdentifierUtil.java [27:101]
public static String quoteIdentifier(String name, boolean isCaseSensitive) {
boolean hasLowercase = false;
boolean hasUppercase = false;
boolean safe = true;
int nquotes = 0;
if (name == null) {
return name;
}
int len = name.length();
for (int i = 0; i < len; i++) {
char ch = name.charAt(i);
if (ch >= 'a' && ch <= 'z') {
hasLowercase = true;
} else if (ch >= 'A' && ch <= 'Z') {
hasUppercase = true;
} else if (ch == '_') {
//nothing to do, skip
} else if (ch >= '0' && ch <= '9') {
if (i == 0) {
//[0-9] is not allowed for first character
safe = false;
}
} else {
safe = false;
if (ch == '"') {
nquotes++;
}
}
}
if (isCaseSensitive && hasUppercase) {
safe = false;
}
//check whether is reserved keyword or not
if (safe) {
StringBuffer sb = new StringBuffer();
/*
* Apply an ASCII-only downcasing. We must not use tolower() since it may
* produce the wrong translation in some locales (eg, Turkish).
*/
for (int i = 0; i < len; i++) {
char ch = name.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
ch += 'a' - 'A';
}
sb.append(ch);
}
String lowerName = sb.toString();
//check keyword
Integer r = keywordMap.get(lowerName);
if (r != null && r.intValue() != UNRESERVED_KEYWORD) {
safe = false;
}
}
if (safe) {
return name;
}
StringBuffer sb = new StringBuffer();
sb.append('"');
for (int i = 0; i < len; i++) {
char ch = name.charAt(i);
if (ch == '"') {
sb.append('"');
}
sb.append(ch);
}
sb.append('"');
return sb.toString();
}