protected void convertDescriptionRows(SimilarityResult simres, List<DescriptionRow> descvec,
			VectorResult vecres, DescriptionManager res, SignatureRecord srec)
			throws SQLException, LSHException {
		Iterator<DescriptionRow> iter = descvec.iterator();
		DescriptionRow currow = iter.next();
		RowKey rowKey = new RowKeySQL(currow.id_exe);
		ExecutableRecord curexe = res.findExecutableByRow(rowKey);
		if (curexe == null) {
			ExecutableRow exerow = exeTable.querySingleExecutableId(currow.id_exe);
			curexe = exeTable.makeExecutableRecord(res, exerow);
			res.cacheExecutableByRow(curexe, rowKey);
		}

		FunctionDescription fres =
			DescriptionTable.convertDescriptionRow(currow, curexe, res, srec);
		if (simres != null) {
			simres.addNote(fres, vecres.sim, vecres.signif);
		}
		if (srec != null) {
			res.setSignatureId(srec, currow.id_sig);
		}
		while (iter.hasNext()) {
			currow = iter.next();
			rowKey = new RowKeySQL(currow.id_exe);
			curexe = res.findExecutableByRow(rowKey);
			if (curexe == null) {
				ExecutableRow exerow = exeTable.querySingleExecutableId(currow.id_exe);
				curexe = exeTable.makeExecutableRecord(res, exerow);
				res.cacheExecutableByRow(curexe, rowKey);
			}
			fres = DescriptionTable.convertDescriptionRow(currow, curexe, res, srec);
			if (simres != null) {
				simres.addNote(fres, vecres.sim, vecres.signif);
			}
		}
	}
Convert a low-level list of function rows into full FunctionDescription objects
@param simres (optional -- may be null) generate a SimilarityNote for every function
@param descvec is the list of low-level function rows
@param vecres (optional -- may be null) vector result producing these functions
@param res is the DescriptionManager holding the newly generated FunctionDescriptions
@param srec (optional -- may be null) is a description object of the vector
@throws SQLException is there is an error querying tables
@throws LSHException for internal consistency errors
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java