code: void correctType(DialectSqlItem item) {//NOSONAR
  		if (item.type == 'U') {// correct Unknown type to other type
  			String valueStr = (String) item.value;
  			String valueUpcase = valueStr.toUpperCase();
  			// check is function
  			String funPrefix = Dialect.getGlobalSqlFunctionPrefix();
  			if (!StrUtils.isEmpty(valueUpcase)) {
  				if (!StrUtils.isEmpty(funPrefix) && StrUtils.startsWithIgnoreCase(valueUpcase, funPrefix)
  						&& functionMap.containsKey(valueUpcase.substring(funPrefix.length()))) {
  					item.type = 'F';
  					item.value = valueStr.substring(funPrefix.length());
  				}
  
  				if ((StrUtils.isEmpty(funPrefix) && functionMap.containsKey(valueUpcase))) {
  					item.type = 'F';
  					item.value = valueStr;
  				}
  			}
  			if (item.type == 'U')// still not found
  				if (",".equals(valueStr))
  					// is Long able?
  					item.setTypeAndValue(',', valueStr);
  				else
  					item.setTypeAndValue('S', valueStr);
  		}
  		if (item.subItems != null)
  			for (DialectSqlItem t : item.subItems)
  				correctType(t);
  	}
docs: if is U type, use this method to correct type