private void testExecutableDuplication(DescriptionManager input)
			throws SQLException, LSHException, DatabaseNonFatalException {
		boolean pickout_storedfuncs = false;
		for (ExecutableRecord erec : input.getExecutableRecordSet()) {
			ExecutableRow row = exeTable.queryMd5ExeMatch(erec.getMd5());
			if (row != null) { // Already have a matching executable
				ExecutableRecord tmp = makeExecutableRecordTemp(row);
				int cmp = tmp.compareMetadata(erec);
				if (cmp != 0) {
					String fatalerror = FunctionDatabase.constructFatalError(cmp, erec, tmp);
					if (fatalerror != null) {
						throw new LSHException(fatalerror);
					}
					throw new DatabaseNonFatalException(
						FunctionDatabase.constructNonfatalError(cmp, erec, tmp));
				}
				if (erec.getRowId() != null) {
					if (!erec.getRowId().equals(tmp.getRowId())) {
						throw new LSHException(
							"Id mismatch when inserting executable: " + erec.getNameExec());
					}
				}
				else {
					input.setExeRowId(erec, tmp.getRowId());
				}
				input.setExeAlreadyStored(erec);
				// Just because we've seen a library before doesn't mean we should stop function insertion
				// Libraries are likely to be partially inserted multiple times
				if (!erec.isLibrary()) {
					throw new DatabaseNonFatalException(
						erec.getNameExec() + " is already ingested");
				}
				pickout_storedfuncs = true; // At least one executable has previously inserted functions
			}
		}

		if (pickout_storedfuncs) {
			if (!markPreviouslyStoredFunctions(input, input.listAllFunctions())) {
				throw new DatabaseNonFatalException("Already inserted");
			}
		}
	}
This is an internal function for the -insert- capability
It runs through executables in -input- and tests if similar records are already present
If an executable existed in the database previously:
<ul>
  <li>if the executable is NOT a library it throws DatabaseNonFatalException to indicate this file is already ingested
  <li>if the executable is a library then
  <ul>
     <li>it runs through all functions associated with the library
     <li>if there is already a record for the function it marks the object in -input- so
     that a duplicate won't get entered for that function.
  </ul>
</ul>
@param input is the DescriptionManager
@throws LSHException if this executable has already been inserted
@throws SQLException if there is an error issuing the query
@throws DatabaseNonFatalException if a library has already been ingested (non-fatal)
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java