public DescriptionRow queryFuncNameAddr(long executableId, String functionName,
		long functionAddress) throws SQLException {
		PreparedStatement s = selectByFuncAddrAndExeStatement
			.prepareIfNeeded(() -> db.prepareStatement(SELECT_BY_FUNC_NAMEADDR_STMT));
		s.setString(1, functionName);
		s.setLong(2, functionAddress);
		s.setInt(3, (int) executableId);
		s.setFetchSize(3);	// Should only every be at most 1

		DescriptionRow resultRow = null;
		try (ResultSet rs = s.executeQuery()) {
			boolean finished = false;
			// TODO: Should be no need to get every row
			while (rs.next()) {		// To ensure JDBC resources are cleaned up make sure to visit every element
				if (!finished) {	//  of the result set even if we don't build a DescriptionRow for every element
					resultRow = new DescriptionRow();
					extractDescriptionRow(rs, resultRow);
					finished = true;
				}
			}
			return resultRow;
		}
	}
Query the description table for the row describing a single function.
A function is uniquely identified by: its name, address, and the executable it is in 
@param executableId is the row id (of exetable) of the executable containing the function
@param functionName is the name of the function
@param functionAddress is the address of the function
@return the corresponding row of the table, or null
@throws SQLException if there is an error creating or executing the query
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/DescriptionTable.java