Program: 84048
Project: 84048
Buggy source:
/** 
 * MySQL specific implementation
 */
@Override protected void getColumnTypeAndDefValue(Column columnInfo,ResultSet rs,Database database) throws SQLException, DatabaseException {
  String columnTypeName=rs.getString("String_Node_Str");
  String columnName=rs.getString("String_Node_Str");
  String tableName=rs.getString("String_Node_Str");
  String schemaName=rs.getString("String_Node_Str");
  Map<String,List<String>> tableSchema=new HashMap<String,List<String>>();
  if (!schemaCache.containsKey(tableName)) {
    Statement selectStatement=((JdbcConnection)database.getConnection()).getUnderlyingConnection().createStatement();
    ResultSet rsColumnType=selectStatement.executeQuery("String_Node_Str" + database.escapeTableName(schemaName,tableName));
    while (rsColumnType.next()) {
      List<String> colSchema=new ArrayList<String>();
      colSchema.add(rsColumnType.getString("String_Node_Str"));
      colSchema.add(rsColumnType.getString("String_Node_Str"));
      tableSchema.put(rsColumnType.getString("String_Node_Str"),colSchema);
    }
    rsColumnType.close();
    schemaCache.put(tableName,tableSchema);
  }
  tableSchema=schemaCache.get(tableName);
  if (columnTypeName.toLowerCase().startsWith("String_Node_Str") || columnTypeName.toLowerCase().startsWith("String_Node_Str")) {
    columnInfo.setTypeName(tableSchema.get(columnName).get(0));
    try {
      String tmpDefaultValue=(String)TypeConverterFactory.getInstance().findTypeConverter(database).convertDatabaseValueToObject(tableSchema.get(columnName).get(1),columnInfo.getDataType(),columnInfo.getColumnSize(),columnInfo.getDecimalDigits(),database);
      if ("String_Node_Str".equals(tmpDefaultValue)) {
        columnInfo.setDefaultValue(null);
      }
 else {
        columnInfo.setDefaultValue(tmpDefaultValue);
      }
    }
 catch (    ParseException e) {
      throw new DatabaseException(e);
    }
  }
 else   if (columnTypeName.toLowerCase().equals("String_Node_Str") || columnTypeName.toLowerCase().equals("String_Node_Str")) {
    columnInfo.setTypeName(columnTypeName);
    columnInfo.setDefaultValue(null);
  }
 else   if (columnTypeName.toLowerCase().equals("String_Node_Str") && !"String_Node_Str".equals(tableSchema.get(columnName).get(1))) {
    columnInfo.setTypeName(columnTypeName);
    columnInfo.setDefaultValue(tableSchema.get(columnName).get(1));
  }
 else {
    super.getColumnTypeAndDefValue(columnInfo,rs,database);
  }
}

Fixed version (ground truth):
/** 
 * MySQL specific implementation
 */
@Override protected void getColumnTypeAndDefValue(Column columnInfo,ResultSet rs,Database database) throws SQLException, DatabaseException {
  String columnTypeName=rs.getString("String_Node_Str");
  String columnName=rs.getString("String_Node_Str");
  String tableName=rs.getString("String_Node_Str");
  String schemaName=rs.getString("String_Node_Str");
  Map<String,List<String>> tableSchema=new HashMap<String,List<String>>();
  if (!schemaCache.containsKey(tableName)) {
    Statement selectStatement=null;
    ResultSet rsColumnType=null;
    try {
      selectStatement=((JdbcConnection)database.getConnection()).getUnderlyingConnection().createStatement();
      rsColumnType=selectStatement.executeQuery("String_Node_Str" + database.escapeTableName(schemaName,tableName));
      while (rsColumnType.next()) {
        List<String> colSchema=new ArrayList<String>();
        colSchema.add(rsColumnType.getString("String_Node_Str"));
        colSchema.add(rsColumnType.getString("String_Node_Str"));
        tableSchema.put(rsColumnType.getString("String_Node_Str"),colSchema);
      }
    }
  finally {
      if (rsColumnType != null) {
        try {
          rsColumnType.close();
        }
 catch (        SQLException ignore) {
        }
      }
      if (selectStatement != null) {
        try {
          selectStatement.close();
        }
 catch (        SQLException ignore) {
        }
      }
    }
    schemaCache.put(tableName,tableSchema);
  }
  tableSchema=schemaCache.get(tableName);
  if (columnTypeName.toLowerCase().startsWith("String_Node_Str") || columnTypeName.toLowerCase().startsWith("String_Node_Str")) {
    columnInfo.setTypeName(tableSchema.get(columnName).get(0));
    try {
      String tmpDefaultValue=(String)TypeConverterFactory.getInstance().findTypeConverter(database).convertDatabaseValueToObject(tableSchema.get(columnName).get(1),columnInfo.getDataType(),columnInfo.getColumnSize(),columnInfo.getDecimalDigits(),database);
      if ("String_Node_Str".equals(tmpDefaultValue)) {
        columnInfo.setDefaultValue(null);
      }
 else {
        columnInfo.setDefaultValue(tmpDefaultValue);
      }
    }
 catch (    ParseException e) {
      throw new DatabaseException(e);
    }
  }
 else   if (columnTypeName.toLowerCase().equals("String_Node_Str") || columnTypeName.toLowerCase().equals("String_Node_Str")) {
    columnInfo.setTypeName(columnTypeName);
    columnInfo.setDefaultValue(null);
  }
 else   if (columnTypeName.toLowerCase().equals("String_Node_Str") && !"String_Node_Str".equals(tableSchema.get(columnName).get(1))) {
    columnInfo.setTypeName(columnTypeName);
    columnInfo.setDefaultValue(tableSchema.get(columnName).get(1));
  }
 else {
    super.getColumnTypeAndDefValue(columnInfo,rs,database);
  }
}