public static String quoteIdentifier()

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