public static String getTranslateResult(IdentifierCheckResult checkResult) {
    TSourceToken token = checkResult.getToken();
    if (checkResult.canTranslate()) {
      IdentifierRuleResult[] results = checkResult.getCheckRuleResults();
      if (results.length == 1) {
        try {
          if (results[0].getRule() == IdentifierRule.Function) {
            String result = isFunction(results[0].getToken(), results[0].getTargetVendor());
            if (result != null) return result;
          }
        } catch (Exception e) {
          return null;
        }

        switch (checkResult.getTargetVendor()) {
          case dbvmysql:
            return "`" + removeQuote(token) + "`";
          case dbvmssql:
            return "[" + removeQuote(token) + "]";
          case dbvoracle:
          case dbvpostgresql:
          case dbvansi:
            return "\"" + removeQuote(token) + "\"";
        }
      }
    }
    return null;
  }
  public static IdentifierCheckResult checkIdentifier(TSourceToken token, EDbVendor targetVendor) {
    IdentifierCheckResult checkResult = new IdentifierCheckResult(token, targetVendor);
    checkResult.addCheckRuleResult(checkSizeRule(token, targetVendor));
    checkResult.addCheckRuleResult(checkBeginWithRule(token, targetVendor));
    checkResult.addCheckRuleResult(checkSubsequentCharactersRule(token, targetVendor));
    checkResult.addCheckRuleResult(checkQuotedIdentifierRule(token, targetVendor));
    try {
      if (isFunction(token, targetVendor) != null) {
        checkResult.addCheckRuleResult(createFunctionRuleResult(token, targetVendor, true));
      } else if (isSpecial(token, targetVendor) != null) {
        checkResult.addCheckRuleResult(createSpecialRuleResult(token, targetVendor, true, null));
      } else {
        checkResult.addCheckRuleResult(checkKeywordRule(token, targetVendor));
      }
    } catch (FunctionIdentifierException e) {
      checkResult.addCheckRuleResult(createFunctionRuleResult(token, targetVendor, false));
    } catch (SpecialIdentifierException e) {
      checkResult.addCheckRuleResult(
          createSpecialRuleResult(token, targetVendor, false, e.getMessage()));
    }

    if (checkResult.canTranslate()) {
      checkResult.setTranslateResult(getTranslateResult(checkResult));
    }

    return checkResult;
  }