private DBRecord doCreateBasicSymbolRecord(String name, Namespace parent, Address address,
			SymbolType symbolType, boolean isPrimary, SourceType source, boolean checkForDuplicates)
			throws DuplicateNameException, InvalidInputException {

		// Only one symbol per external address is allowed
		if (address.isExternalAddress()) {
			Symbol primary = getPrimarySymbol(address);
			if (primary != null) {
				throw new IllegalArgumentException("external address already used");
			}
		}

		parent = validateNamespace(parent, address, symbolType);
		source = validateSource(source, name, address, symbolType);
		name = validateName(name, source);

		if (checkForDuplicates) {
			checkDuplicateSymbolName(address, name, parent, symbolType);
		}

		return adapter.createSymbolRecord(name, parent.getID(), address, symbolType, isPrimary,
			source);
	}
Create a basic symbol record with required fields.  Caller is responsible for updating 
any related optional record fields and then adding to the DB table via the 
{@link SymbolDatabaseAdapter#updateSymbolRecord(DBRecord)} method.
@param name symbol name
@param parent symbol parent namespace (glabel namespace assumed if null)
@param address symbol address
@param symbolType symbol type
@param isPrimary if true, symbol record will be tagged as primary (relavent for label and
function symbols only).
@param source symbol source type
@param checkForDuplicates if true a duplicate name check will be performed within the
specified parent namespace.
@return return new record 
@throws DuplicateNameException if checkForDuplicates is true and name conflicts with 
another symbol.
@throws InvalidInputException if name contains invalid characters.
See {@link SymbolUtilities#validateName(String)}.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java