in backup-core/src/main/java/org/apache/iotdb/backup/core/service/ExportPipelineService.java [602:681]
public static String formatPath(String sql) {
String regx = "^[\\w._:@#{}$\\u2E80-\\u9FFF\"\'*\\\\]+$";
String regxOnlyNum = "^[0-9]+$";
char[] arr = sql.toCharArray();
StringBuilder formatedSql = new StringBuilder();
StringBuilder buffer = new StringBuilder();
StringBuilder quoteCounter = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if ('\\' == arr[i] || '\"' == arr[i] || '\'' == arr[i]) {
if (quoteCounter.length() == 0) {
quoteCounter.append(arr[i]);
} else {
char quote = quoteCounter.charAt(quoteCounter.length() - 1);
if ("\\".equals(quote)) {
quoteCounter.deleteCharAt(quoteCounter.length() - 1);
}
}
} else {
if (quoteCounter.length() != 0) {
quoteCounter.delete(0, quoteCounter.length());
}
}
if ('.' == arr[i] || i == arr.length - 1) {
if (buffer.length() != 0) {
// quote 引用处理
if ('\"' == buffer.charAt(0) || '\'' == buffer.charAt(0)) {
char pre = buffer.charAt(buffer.length() - 1);
buffer.append(arr[i]);
if (pre == buffer.charAt(0) && quoteCounter.length() == 0) {
formatedSql.append(buffer);
buffer.delete(0, buffer.length());
}
} else {
// 特殊字符处理 iotdb 系统关键字处理
if (i == arr.length - 1) {
buffer.append(arr[i]);
}
if (!Pattern.matches(regx, buffer.toString())
|| IotDBKeyWords.validateKeyWords(buffer.toString().toUpperCase())
|| Pattern.matches(regxOnlyNum, buffer.toString())) {
if (i == arr.length - 1) {
if (buffer.toString().startsWith("`") && buffer.toString().endsWith("`")) {
formatedSql.append(buffer);
} else {
formatedSql.append("`").append(buffer).append("`");
}
} else {
if (buffer.toString().startsWith("`") && buffer.toString().endsWith("`")) {
formatedSql.append(buffer).append(".");
} else {
formatedSql.append("`").append(buffer).append("`").append(".");
}
}
} else {
if (i != arr.length - 1) {
buffer.append(arr[i]);
}
formatedSql.append(buffer);
}
buffer.delete(0, buffer.length());
}
} else {
if (!Pattern.matches(regx, buffer.toString())
|| IotDBKeyWords.validateKeyWords(buffer.toString().toUpperCase())) {
buffer.append("`").append(arr[i]).append("`");
} else if (Pattern.matches(regxOnlyNum, buffer.toString())) {
buffer.append("`").append(arr[i]).append("`");
} else {
buffer.append(arr[i]);
}
}
} else {
buffer.append(arr[i]);
}
}
formatedSql.append(buffer);
return formatedSql.toString();
}