public int extractExecutableRows(ResultSet rs, List<ExecutableRecord> vecres,
		DescriptionManager res, int max) throws SQLException, LSHException {

		// Assume the sql statement is returning some number of exetable rows
		// Read all these rows and create corresponding ExecutableRecord objects
		List<ExecutableRow> exerows = new ArrayList<>();
		boolean finished = false;

		while (rs.next()) {
			if (!finished) {
				ExecutableRow row = new ExecutableRow();
				exerows.add(row);
				extractExecutableRow(rs, row);
				if ((max > 0) && (exerows.size() >= max)) {
					finished = true;
				}
			}
		}

		for (ExecutableRow exerow : exerows) {
			ExecutableRecord exerec = makeExecutableRecord(res, exerow);
			if (vecres != null) {
				vecres.add(exerec);
			}
		}
		return exerows.size();
	}
Creates {@link ExecutableRecord} objects from {@link ResultSet} and stores
them in the given list.

@param rs the result set
@param vecres the list of executable records
@param res the description manager
@param max the max number of rows to return
@return the number of rows returned
@throws SQLException if there is an problem parsing the result set
@throws LSHException if there is an problem creating the executable record
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java