private void fdbInstallCategory(InstallCategoryRequest query)
			throws LSHException, ElasticException {
		ResponseInfo response = query.installresponse;
		if (!CategoryRecord.enforceTypeCharacters(query.type_name)) {
			throw new LSHException("Bad characters in proposed category type");
		}
		if (query.isdatecolumn) {
			info.dateColumnName = query.type_name;
			StringBuilder buffer = new StringBuilder();
			buffer.append("{ \"type\": \"keyvalue\", \"value\": \"")
					.append(info.dateColumnName)
					.append("\" }");
			connection.executeStatementNoResponse(ElasticConnection.PUT, "configuration/datecolumn",
				buffer.toString());
			response.info = info;
			return;
		}
		// Check for existing category
		if (info.execats != null) {
			for (String cat : info.execats) {
				if (cat.equals(query.type_name)) {
					throw new LSHException("Executable category already exists");
				}
			}
		}
		if (info.execats == null) {
			info.execats = new ArrayList<>();
		}
		info.execats.add(query.type_name);
		writeExecutableCategories();
		response.info = info;
	}
Entry point for the InstallCategoryRequest command:
  Install a new executable category to be managed by the database
@param query is command parameters
@throws LSHException if the command is misconfigured
@throws ElasticException for communication problems with the server
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java