Decode sets of names encoded as by concatenation with plus signs
into lists of lists of strings.  Preserve the order, since we need
it to match to error messages later on.

@param tablesThatMustBeEmpty
@return The decoded lists.
169504
private List<List<String>> decodeTables(String[] tablesThatMustBeEmpty) {
        List<List<String>> answer = new ArrayList<>();
        for (String tableSet : tablesThatMustBeEmpty) {
            String tableNames[] = tableSet.split("\\+");
            answer.add(Arrays.asList(tableNames));
        }
        return answer;
    }
762693
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(ISSUE_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
1249163
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(ISSUE_TYPE_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
539137
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(CALENDAR_CONTROL_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
335566
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(CALENDAR_CATEGORY_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
875844
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(CALENDAR_ENTRY_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
290297
public List<Map<String, Object>> toList(List<Object[]> table, String[] columns) {
		List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
		if ((table != null && columns != null) && table.size() > 0) {
			for (Object[] row : table) {
				Map<String, Object> result = new HashMap<String, Object>();
				for (int i = 0; i < columns.length; i++) {
					result.put(columns[i], row[i]);
				}
				resultList.add(result);
			}
		}
		return resultList;
	}
412005
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(SCREEN_IN_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
905574
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(CLASS_PROJECT_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
54494
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(ANNIV_MASTER_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
495677
public static byte[] decode(char[] src, int[] table, char pad) {
        int len = src.length;

        if (len == 0) return new byte[0];

        int padCount = (src[len - 1] == pad ? (src[len - 2] == pad ? 2 : 1) : 0);
        int bytes    = (len * 6 >> 3) - padCount;
        int blocks   = (bytes / 3) * 3;

        byte[] dst = new byte[bytes];
        int si = 0, di = 0;

        while (di < blocks) {
            int n = table[src[si++]] << 18 | table[src[si++]] << 12 | table[src[si++]] << 6 | table[src[si++]];
            dst[di++] = (byte) (n >> 16);
            dst[di++] = (byte) (n >>  8);
            dst[di++] = (byte) n;
        }

        if (di < bytes) {
            int n = 0;
            switch (len - si) {
                case 4: n |= table[src[si+3]];
                case 3: n |= table[src[si+2]] <<  6;
                case 2: n |= table[src[si+1]] << 12;
                case 1: n |= table[src[si]]   << 18;
            }
            for (int r = 16; di < bytes; r -= 8) {
                dst[di++] = (byte) (n >> r);
            }
        }

        return dst;
    }
825947
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(MESSAGE_INFO_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
581703
public String toTableId(String tableName) {
    Preconditions.checkNotNull(tableName, "Table name cannot be null");
    String tablesPrefix = instanceName + TABLE_SEPARATOR;
    Preconditions.checkState(tableName.startsWith(tablesPrefix),
        "'%s' does not start with '%s'", tableName, tablesPrefix);
    String tableId = tableName.substring(tablesPrefix.length()).trim();
    Preconditions.checkState(!tableId.isEmpty(), "Table id is blank");
    return tableId;
  }
685627
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(FILE_HDR_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
1345758
public Collection<String> getAllColumnNames(final String tableName) {
        return tables.containsKey(tableName) ? tables.get(tableName).getColumns().keySet() : Collections.<String>emptyList();
    }
911599
public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(KEY_INFO_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
1271432
@Override
    public String[] decode(long generation, String tableName, List<VoltType> types, List<String> names, String[] to, Object[] fields) throws RuntimeException {
        Preconditions.checkArgument(
                fields != null && fields.length > m_firstFieldOffset,
                "null or inapropriately sized export row array"
        );
        /*
         * Builds a list of string formatters that reflects the row
         * column types.
         */
        StringFieldDecoder [] fieldDecoders;
        if (!m_fieldDecoders.containsKey(generation)) {
            int fieldCount = 0;
            Map<String, DecodeType> typeMap = getTypeMap(generation, types, names);
            ImmutableList.Builder<StringFieldDecoder> lb = ImmutableList.builder();
            for (org.voltdb.exportclient.decode.DecodeType dt: typeMap.values()) {
                lb.add(dt.accept(decodingVisitor, fieldCount++, null));
            }

            fieldDecoders = lb.build().toArray(new StringFieldDecoder[0]);
            m_fieldDecoders.put(generation, fieldDecoders);
        } else {
            fieldDecoders = m_fieldDecoders.get(generation);
        }
        if (to == null || to.length < fieldDecoders.length) {
            to = new String[fieldDecoders.length];
        }
        for (
                int i = m_firstFieldOffset, j = 0;
                i < fields.length && j < fieldDecoders.length;
                ++i, ++j
        ) {
            fieldDecoders[j].decode(to, fields[i]);
        }

        return to;
    }