def _PrintDatabaseTable(self, tableName, rowSelect = None):
    """
    Prints contents of database table. An optional argument (rowSelect) can be
    given which contains a list of column names and values against which to
    search, allowing a subset of the table to be printed.

    Gets database column headings using PRAGMA call. Automatically adjusts
    each column width based on the longest element that needs to be printed

    Parameters
    ----------
      tableName : int
        Name of table to print.

      rowSelect : list of tuples
        A list of column names and values against to search against.

    Returns:
      int
        The number of table rows printed.
    """
    goodlogging.Log.Info("DB", "{0}".format(tableName))
    goodlogging.Log.IncreaseIndent()
    tableInfo = self._ActionDatabase("PRAGMA table_info({0})".format(tableName))


    dbQuery = "SELECT * FROM {0}".format(tableName)
    dbQueryParams = []

    if rowSelect is not None:
      dbQuery = dbQuery + " WHERE " + ' AND '.join(['{0}=?'.format(i) for i, j in rowSelect])
      dbQueryParams = [j for i, j in rowSelect]

    tableData = self._ActionDatabase(dbQuery, dbQueryParams)
    columnCount = len(tableInfo)

    columnWidths = [0]*columnCount

    columnHeadings = []
    for count, column in enumerate(tableInfo):
      columnHeadings.append(column[1])
      columnWidths[count] = len(column[1])

    for row in tableData:
      for count, column in enumerate(row):
        if len(str(column)) > columnWidths[count]:
          columnWidths[count] = len(column)

    printStr = "|"
    for count, column in enumerate(columnWidths):
      printStr = printStr + " {{0[{0}]:{1}}} |".format(count, columnWidths[count])

    goodlogging.Log.Info("DB", printStr.format(columnHeadings))
    goodlogging.Log.Info("DB", "-"*(sum(columnWidths)+3*len(columnWidths)+1))

    for row in tableData:
      noneReplacedRow = ['-' if i is None else i for i in row]
      goodlogging.Log.Info("DB", printStr.format(noneReplacedRow))

    goodlogging.Log.DecreaseIndent()
    goodlogging.Log.NewLine()

    return len(tableData)
Prints contents of database table. An optional argument (rowSelect) can be
    given which contains a list of column names and values against which to
    search, allowing a subset of the table to be printed.

    Gets database column headings using PRAGMA call. Automatically adjusts
    each column width based on the longest element that needs to be printed

    Parameters
    ----------
      tableName : int
        Name of table to print.

      rowSelect : list of tuples
        A list of column names and values against to search against.

    Returns:
      int
        The number of table rows printed.