code: protected int[] mapColumnsToProperties(QueryParameters params,
                                             PropertyDescriptor[] props) {
  
          int paramsSize = params.size();
          int[] columnToProperty = new int[paramsSize];
          Arrays.fill(columnToProperty, PROPERTY_NOT_FOUND);
  
          for (int col = 0; col < paramsSize; col++) {
              String columnName = params.getNameByPosition(col);
  
              String propertyName = columnToPropertyOverrides.get(columnName);
              if (propertyName == null) {
                  propertyName = columnName;
              }
              for (int i = 0; i < props.length; i++) {
  
                  if (propertyName.equalsIgnoreCase(props[i].getName())) {
                      columnToProperty[col] = i;
                      break;
                  } else if (propertyName.contains("_")) {
                      // attempting to convert snake_case into camelCase and find a match
                      if (propertyName.replaceAll("-", "").equalsIgnoreCase(props[i].getName())) {
                          columnToProperty[col] = i;
                          break;
                      }
                  } else if (props[i].getName().contains("_")) {
                      // since above propertyName doesn't contain snake_case but bean might - lets try to convert camelCase into snake_case
                      if (props[i].getName().replaceAll("-", "").equalsIgnoreCase(propertyName)) {
                          columnToProperty[col] = i;
                          break;
                      }
                  }
              }
          }
  
          return columnToProperty;
      }
docs: Columns from @params are mapped to class fields @props (by name).
  During processing @columnToPropertyOverrides is used to check overrides
  
  @param params Query output columns of which would be mapped to @props
  @param props  Java class property descriptor
  @return array for every element from @params corresponding element in @props