public void updateExecutable(ExecutableRecord.Update rec) throws SQLException {
		if (rec.architecture || rec.date || rec.name_compiler || rec.name_exec || rec.path ||
			rec.repository) {

			try (Statement st = db.createStatement()) {
				StringBuilder buf = new StringBuilder();
				boolean previous = false;
				buf.append("UPDATE ");
				buf.append(TABLE_NAME);
				buf.append(" SET ");
				if (rec.name_exec) {
					if (previous) {
						buf.append(',');
					}
					else {
						previous = true;
					}
					buf.append("name_exec='");
					AbstractSQLFunctionDatabase.appendEscapedLiteral(buf, rec.update.getNameExec());
					buf.append('\'');
				}
				if (rec.architecture) {
					long arch_id = archtable.writeString(rec.update.getArchitecture());
					if (previous) {
						buf.append(',');
					}
					else {
						previous = true;
					}
					buf.append("architecture=");
					buf.append(arch_id);
				}
				if (rec.name_compiler) {
					long comp_id = compilertable.writeString(rec.update.getNameCompiler());
					if (previous) {
						buf.append(',');
					}
					else {
						previous = true;
					}
					buf.append("name_compiler=");
					buf.append(comp_id);
				}
				if (rec.date) {
					if (previous) {
						buf.append(',');
					}
					else {
						previous = true;
					}
					String dateString =
						new SimpleDateFormat(AbstractSQLFunctionDatabase.JAVA_TIME_FORMAT)
							.format(rec.update.getDate());
					buf.append("ingest_date=to_timestamp('");
					// Using PostgreSQL compatible to_timestamp formatting options 
					buf.append(dateString)
						.append("','" + AbstractSQLFunctionDatabase.SQL_TIME_FORMAT + "')");
				}
				if (rec.repository) {
					long repo_id = repositorytable.writeString(rec.update.getRepository());
					if (previous) {
						buf.append(',');
					}
					else {
						previous = true;
					}
					buf.append("repository=");
					buf.append(repo_id);
				}
				if (rec.path) {
					long path_id = pathtable.writeString(rec.update.getPath());
					if (previous) {
						buf.append(',');
					}
					else {
						previous = true;
					}
					buf.append("path=");
					buf.append(path_id);
				}
				buf.append(" WHERE id = ");
				buf.append(rec.update.getRowId().getLong());

				st.executeUpdate(buf.toString());
			}
		}

		if (rec.categories) { // Change must be made to categories
			List<CategoryRecord> insertlist = rec.catinsert;
			if (insertlist == null) { // A null is a flag for full deletion,
				// followed by full insertion
				exeCategoryTable.delete(rec.update.getRowId().getLong());
				insertlist = rec.update.getAllCategories();
			}
			if (insertlist != null) {
				for (CategoryRecord element : insertlist) {
					exeCategoryTable.insert(element, rec.update.getRowId().getLong());
				}
			}
		}
	}
Updates records in the database with information in the given {@link ExecutableRecord}.

@param rec the executable record to update
@throws SQLException if there is a problem creating or executing the query
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java