public List<DescriptionRow> queryVectorIdMatchFilter(long vectorId, String tableClause,
		String whereClause, int maxRows) throws SQLException {

		PreparedStatement s = selectWithFilterStatement.getStatement();
		if (s == null || !tableClause.equals(selectWithFilterTableClause) ||
			!whereClause.equals(selectWithFilterWhereClause)) {
			selectWithFilterStatement.close();
			selectWithFilterTableClause = tableClause;
			selectWithFilterWhereClause = whereClause;
			StringBuffer buf = new StringBuffer();
			buf.append(
				"SELECT desctable.id,desctable.name_func,desctable.id_exe,desctable.id_signature,desctable.flags,desctable.addr FROM desctable");
			buf.append(tableClause);
			buf.append(" WHERE desctable.id_signature = ? ");
			buf.append(whereClause);
			buf.append(" LIMIT ?");
			s = db.prepareStatement(buf.toString());
			selectWithFilterStatement.setStatement(s);
		}

		if (maxRows == 0) {
			maxRows = 1000000;
		}
		s.setLong(1, vectorId);
		s.setInt(2, maxRows);
		s.setFetchSize(50);
		try (ResultSet rs = s.executeQuery()) {
			return extractDescriptionRows(rs, maxRows);
		}
	}
Return function DescriptionRow objects that have a matching vector id
and that also pass additional filters.  The filters must be encoded
as a "WHERE" clause of an SQL "SELECT" statement on desctable. Additional
tables joined to desctable to satisfy the filter must be encoded as
a "FROM" clause of the "SELECT".
@param vectorId is the row id of the feature vector (vectortable) we want to match on
@param tableClause is the additional "FROM" clause needed for the filter
@param whereClause is the "WHERE" clause needed for the filter
@param maxRows is the maximum number of rows to return
@return a list of resulting DescriptionRows
@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