/**
  * This method allows to establish how many extra property columns are specified in the given
  * ResultSet. Besides, it builds the two strings used to complete the query.
  *
  * @param rs it's the ResultSet to analyze.
  * @param basicColumnsSet it's the set of labels that must be considered as basic.
  * @throws java.sql.SQLException if any error occurs analyzing the ResultSet object.
  */
 protected void updateExtraPropertyInfo(ResultSet rs) throws SQLException {
   short numberOfExtraColumns = 0;
   String[] extraProperties = new String[0];
   columnSuffix = new StringBuilder();
   updateSuffix = new StringBuilder();
   placeholderSuffix = new StringBuilder();
   if (rs != null) {
     ResultSetMetaData metaData = rs.getMetaData();
     int numberOfColumns = metaData.getColumnCount();
     numberOfExtraColumns = (short) (numberOfColumns - basicColumns.size());
     extraProperties = new String[numberOfExtraColumns];
     int j = 0;
     if (numberOfExtraColumns > 0) {
       for (int i = 1; i <= numberOfColumns; i++) {
         String columnName = metaData.getColumnName(i);
         if (columnName != null) {
           String columnKey = columnName.toLowerCase();
           if (!basicColumns.contains(columnKey)) {
             extraProperties[j] = columnKey;
             columnSuffix.append(", ");
             columnSuffix.append(columnName);
             // create the suffix used to insert the extra properties
             placeholderSuffix.append(", ");
             placeholderSuffix.append("? ");
             // create the suffix used to update the extra properties
             updateSuffix.append(", ");
             updateSuffix.append(columnName);
             updateSuffix.append(" =? ");
             j++;
           }
         }
       }
     }
   }
   queryDesc.setNumberOfExtraColumns(numberOfExtraColumns);
   queryDesc.setExtraProperties(extraProperties);
 }