From 6e30ca6372f83f6b4ba9ee7bf7ac464c79708ce1 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 1 Dec 2009 16:35:33 -0800 Subject: 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. --- ovsdb/execution.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'ovsdb/execution.c') 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], -- cgit v1.2.1