summaryrefslogtreecommitdiff
path: root/ovsdb/execution.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2009-12-01 16:35:33 -0800
committerBen Pfaff <blp@nicira.com>2009-12-02 11:18:59 -0800
commit6e30ca6372f83f6b4ba9ee7bf7ac464c79708ce1 (patch)
tree12f1866d99d808028b2f343f8474614a3bfb2f4e /ovsdb/execution.c
parentb36682d8dcf5290fc70d99c5bc1aa1e0be6d878e (diff)
downloadopenvswitch-6e30ca6372f83f6b4ba9ee7bf7ac464c79708ce1.tar.gz
ovsdb: Allow a named-uuid to be used within the operation that creates it.
This allows a transaction like this: [{"op": "insert", "table": "mytable", "row": {"i": 0, "k": ["named-uuid", "self"]}, "uuid-name": "self"}] It was already possible to do this by following up on the "insert" with an "update", but since this was easy to implement I did it.
Diffstat (limited to 'ovsdb/execution.c')
-rw-r--r--ovsdb/execution.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/ovsdb/execution.c b/ovsdb/execution.c
index 9edc1a971..0bfe86fb3 100644
--- a/ovsdb/execution.c
+++ b/ovsdb/execution.c
@@ -266,19 +266,22 @@ ovsdb_execute_insert(struct ovsdb_execution *x, struct ovsdb_parser *parser,
struct ovsdb_row *row = NULL;
const struct json *uuid_name;
struct ovsdb_error *error;
+ struct uuid row_uuid;
table = parse_table(x, parser, "table");
uuid_name = ovsdb_parser_member(parser, "uuid-name", OP_ID | OP_OPTIONAL);
error = ovsdb_parser_get_error(parser);
+
+ uuid_generate(&row_uuid);
+ if (uuid_name) {
+ ovsdb_symbol_table_put(x->symtab, json_string(uuid_name), &row_uuid);
+ }
+
if (!error) {
error = parse_row(parser, "row", table, x->symtab, &row, NULL);
}
if (!error) {
- uuid_generate(ovsdb_row_get_uuid_rw(row));
- if (uuid_name) {
- ovsdb_symbol_table_put(x->symtab, json_string(uuid_name),
- ovsdb_row_get_uuid(row));
- }
+ *ovsdb_row_get_uuid_rw(row) = row_uuid;
ovsdb_txn_row_insert(x->txn, row);
json_object_put(result, "uuid",
ovsdb_datum_to_json(&row->fields[OVSDB_COL_UUID],