+ /* If this is a write-only column and the datum being written is the same
+ * as the one already there, just skip the update entirely. This is worth
+ * optimizing because we have a lot of columns that get periodically
+ * refreshed into the database but don't actually change that often.
+ *
+ * We don't do this for read/write columns because that would break
+ * atomicity of transactions--some other client might have written a
+ * different value in that column since we read it. (But if a whole
+ * transaction only does writes of existing values, without making any real
+ * changes, we will drop the whole transaction later in
+ * ovsdb_idl_txn_commit().) */
+ if (row->table->modes[column_idx] == OVSDB_IDL_MONITOR
+ && ovsdb_datum_equals(ovsdb_idl_read(row, column),
+ datum, &column->type)) {
+ ovsdb_datum_destroy(datum, &column->type);
+ return;
+ }
+