X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fexecution.c;h=708cc60dd58352090b7f9bcf7e09774ec2c6fc18;hb=1c2e2d2fc87c9435b6fe33112b0ddaab59f507c5;hp=e2f10cbb268187e3c93f862d7ee3c7e1547e20a8;hpb=76f1c218bd84e44666c5a0ae54d543dbce42c376;p=openvswitch diff --git a/ovsdb/execution.c b/ovsdb/execution.c index e2f10cbb..708cc60d 100644 --- a/ovsdb/execution.c +++ b/ovsdb/execution.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2010 Nicira Networks +/* Copyright (c) 2009, 2010, 2011 Nicira Networks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -243,13 +243,11 @@ parse_table(struct ovsdb_execution *x, } static WARN_UNUSED_RESULT struct ovsdb_error * -parse_row(struct ovsdb_parser *parser, const char *member, - const struct ovsdb_table *table, +parse_row(const struct json *json, const struct ovsdb_table *table, struct ovsdb_symbol_table *symtab, struct ovsdb_row **rowp, struct ovsdb_column_set *columns) { struct ovsdb_error *error; - const struct json *json; struct ovsdb_row *row; *rowp = NULL; @@ -257,9 +255,8 @@ parse_row(struct ovsdb_parser *parser, const char *member, if (!table) { return OVSDB_BUG("null table"); } - json = ovsdb_parser_member(parser, member, OP_OBJECT); if (!json) { - return OVSDB_BUG("null row member"); + return OVSDB_BUG("null row"); } row = ovsdb_row_create(table); @@ -279,32 +276,35 @@ ovsdb_execute_insert(struct ovsdb_execution *x, struct ovsdb_parser *parser, { struct ovsdb_table *table; struct ovsdb_row *row = NULL; - const struct json *uuid_name; + const struct json *uuid_name, *row_json; 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); + row_json = ovsdb_parser_member(parser, "row", OP_OBJECT); error = ovsdb_parser_get_error(parser); + if (error) { + return error; + } if (uuid_name) { struct ovsdb_symbol *symbol; symbol = ovsdb_symbol_table_insert(x->symtab, json_string(uuid_name)); - if (symbol->used) { - ovsdb_error_destroy(error); + if (symbol->created) { return ovsdb_syntax_error(uuid_name, "duplicate uuid-name", "This \"uuid-name\" appeared on an " "earlier \"insert\" operation."); } row_uuid = symbol->uuid; - symbol->used = true; + symbol->created = true; } else { uuid_generate(&row_uuid); } if (!error) { - error = parse_row(parser, "row", table, x->symtab, &row, NULL); + error = parse_row(row_json, table, x->symtab, &row, NULL); } if (!error) { /* Check constraints for columns not included in "row", in case the @@ -413,7 +413,7 @@ ovsdb_execute_update(struct ovsdb_execution *x, struct ovsdb_parser *parser, struct json *result) { struct ovsdb_table *table; - const struct json *where; + const struct json *where, *row_json; struct ovsdb_condition condition = OVSDB_CONDITION_INITIALIZER; struct ovsdb_column_set columns = OVSDB_COLUMN_SET_INITIALIZER; struct ovsdb_row *row = NULL; @@ -422,9 +422,10 @@ ovsdb_execute_update(struct ovsdb_execution *x, struct ovsdb_parser *parser, table = parse_table(x, parser, "table"); where = ovsdb_parser_member(parser, "where", OP_ARRAY); + row_json = ovsdb_parser_member(parser, "row", OP_OBJECT); error = ovsdb_parser_get_error(parser); if (!error) { - error = parse_row(parser, "row", table, x->symtab, &row, &columns); + error = parse_row(row_json, table, x->symtab, &row, &columns); } if (!error) { error = ovsdb_condition_from_json(table->schema, where, x->symtab,