private void insert(DescriptionManager input)
			throws SQLException, LSHException, DatabaseNonFatalException {

		beginTransaction(true);
		boolean commit = false;
		try {
			testExecutableDuplication(input);
			commitExecutables(input);
			Iterator<FunctionDescription> iter = input.listAllFunctions();
			long start_id = 0;
			while (iter.hasNext()) {
				FunctionDescription func = iter.next();
				if (func.getId() != null) {
					continue; // Already inserted
				}
				SignatureRecord srec = func.getSignatureRecord();
				if (srec != null) {
					long sig_id = storeSignatureRecord(srec);
					input.setSignatureId(srec, sig_id);
				}
				long id = descTable.insert(func);
				if (start_id == 0) {
					start_id = id;
				}
				input.setFunctionDescriptionId(func, new RowKeySQL(id));
			}
			if (trackcallgraph) {
				iter = input.listAllFunctions();
				while (iter.hasNext()) {
					FunctionDescription func = iter.next();
					if (func.getId().getLong() < start_id) {
						continue; // Already inserted
					}
					callgraphTable.insert(func);
				}
			}
			commit = true;
		}
		finally {
			endTransaction(commit);
		}
	}
Insert a set of (possible callgraph interrelated) functions into database,
@param input is the DescriptionManager container of the functions and executables

@throws LSHException if there are duplicate executables
@throws SQLException if there is an error issuing the query
@throws DatabaseNonFatalException if there are duplicate executables
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java