diff options
author | Ben Pfaff <blp@nicira.com> | 2009-12-01 16:35:33 -0800 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2009-12-02 11:18:59 -0800 |
commit | 6e30ca6372f83f6b4ba9ee7bf7ac464c79708ce1 (patch) | |
tree | 12f1866d99d808028b2f343f8474614a3bfb2f4e /ovsdb/execution.c | |
parent | b36682d8dcf5290fc70d99c5bc1aa1e0be6d878e (diff) | |
download | openvswitch-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.c | 13 |
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], |