bool mutable, bool persistent,
const struct ovsdb_type *type)
{
- struct ovsdb_column *ts;
+ struct ovsdb_column *column;
- ts = xzalloc(sizeof *ts);
- ts->name = xstrdup(name);
- ts->comment = comment ? xstrdup(comment) : NULL;
- ts->mutable = mutable;
- ts->persistent = persistent;
- ts->type = *type;
+ column = xzalloc(sizeof *column);
+ column->name = xstrdup(name);
+ column->comment = comment ? xstrdup(comment) : NULL;
+ column->mutable = mutable;
+ column->persistent = persistent;
+ column->type = *type;
- return ts;
+ return column;
}
void
return NULL;
} else {
+ struct ovsdb_error *error = NULL;
size_t i;
if (json->type != JSON_ARRAY) {
/* XXX this is O(n**2) */
for (i = 0; i < json->u.array.n; i++) {
struct ovsdb_column *column;
+ const char *s;
if (json->u.array.elems[i]->type != JSON_STRING) {
goto error;
}
- column = shash_find_data(&table->schema->columns,
- json->u.array.elems[i]->u.string);
- if (ovsdb_column_set_contains(set, column->index)) {
+ s = json->u.array.elems[i]->u.string;
+ column = shash_find_data(&table->schema->columns, s);
+ if (!column) {
+ error = ovsdb_syntax_error(json, NULL, "%s is not a valid "
+ "column name", s);
+ goto error;
+ } else if (ovsdb_column_set_contains(set, column->index)) {
goto error;
}
ovsdb_column_set_add(set, column);
}
-
return NULL;
+
+ error:
+ ovsdb_column_set_destroy(set);
+ ovsdb_column_set_init(set);
+ if (!error) {
+ error = ovsdb_syntax_error(json, NULL, "array of distinct column "
+ "names expected");
+ }
+ return error;
}
+}
-error:
- ovsdb_column_set_destroy(set);
- return ovsdb_syntax_error(json, NULL,
- "array of distinct column names expected");
+struct json *
+ovsdb_column_set_to_json(const struct ovsdb_column_set *set)
+{
+ struct json *json;
+ size_t i;
+
+ json = json_array_create_empty();
+ for (i = 0; i < set->n_columns; i++) {
+ json_array_add(json, json_string_create(set->columns[i]->name));
+ }
+ return json;
}
void