code: protected String canonicalizeDataAttributeForSql(final String dataAttribute) {
          if (this.caseInsensitiveDataAttributes == null || this.caseInsensitiveDataAttributes.isEmpty() || !(this.caseInsensitiveDataAttributes.containsKey(dataAttribute))) {
              return dataAttribute;
          }
          if (this.dataAttributeCaseCanonicalizationFunctions == null || this.dataAttributeCaseCanonicalizationFunctions.isEmpty()) {
              return dataAttribute;
          }
          CaseCanonicalizationMode canonicalizationMode = this.caseInsensitiveDataAttributes.get(dataAttribute);
          if (canonicalizationMode == null) {
              canonicalizationMode = getDefaultCaseCanonicalizationMode();
          }
          final MessageFormat mf = this.dataAttributeCaseCanonicalizationFunctions.get(canonicalizationMode);
          if (mf == null) {
              return dataAttribute;
          }
          return mf.format(new String[]{dataAttribute});
      }
docs: Canonicalize the data-layer attribute column with the given name via
  SQL function. This is as opposed to canonicalizing query attributes
  or application attributes passed into or mapped out of the data layer.
  Canonicalization of a data-layer column should only be necessary if
  the data layer if you require case-insensitive searching on a mixed-case
  column in a case-sensitive data layer. Careful, though, as this can
  result in table scanning if the data layer does not support
  function-based indices.
  
  @param dataAttribute Name of the data attribute column
  @return Canonicalized data attribute column name