1 ===================================================
2 Open vSwitch Configuration Database Specification
3 ===================================================
8 OVSDB uses JSON, as defined by RFC 4627, for its schema format and its
9 wire protocol format. The JSON implementation in Open vSwitch has the
10 following limitations:
12 - Null bytes (\u0000) are not allowed in strings.
14 - Only UTF-8 encoding is supported. (RFC 4627 also mentions
15 UTF-16BE, UTF-16LE, and UTF-32.)
17 - RFC 4627 says that names within a JSON object should be unique.
18 The Open vSwitch JSON parser discards all but the last value
19 for a name that is specified more than once.
21 The descriptions below use the following shorthand notations for JSON
22 values. Additional notation is presented later.
26 A JSON string. Any Unicode string is allowed, as specified by RFC
27 4627. Implementations may disallow null bytes.
31 A JSON string matching [a-zA-Z_][a-zA-Z0-9_]*.
33 <id>s that begin with _ are reserved to the implementation and may
34 not be used by the user.
38 A JSON string that contains a version number that matches
39 [0-9]+\.[0-9]+\.[0-9]+
43 A JSON true or false value.
51 A JSON number with an integer value, within a certain range
52 (currently -2**63...+2**63-1).
60 Any JSON value except null.
64 A JSON object with the following members:
66 "error": <string> required
67 "details": <string> optional
69 The value of the "error" member is a short string, specified in
70 this document, that broadly indicates the class of the error.
71 Most "error" strings are specific to contexts described elsewhere
72 in this document, but the following "error" strings may appear in
73 any context where an <error> is permitted:
75 "error": "resources exhausted"
77 The operation requires more resources (memory, disk, CPU,
78 etc.) than are currently available to the database server.
82 Problems accessing the disk, network, or other required
83 resources prevented the operation from completing.
85 Database implementations may use "error" strings not specified
86 in this document to indicate errors that do not fit into any of
87 the specified categories.
89 Optionally, an <error> may include a "details" member, whose value
90 is a string that describes the error in more detail for the
91 benefit of a human user or administrator. This document does not
92 specify the format or content of the "details" string.
94 An <error> may also have other members that describe the error in
95 more detail. This document does not specify the names or values
101 An Open vSwitch configuration database consists of a set of tables,
102 each of which has a number of columns and zero or more rows. A schema
103 is represented by <database-schema>, as described below.
107 A JSON object with the following members:
109 "name": <id> required
110 "version": <version> required
111 "tables": {<id>: <table-schema>, ...} required
113 The "name" identifies the database as a whole. It must be
114 provided to most JSON-RPC requests to identify the database being
115 operated on. The value of "tables" is a JSON object whose names
116 are table names and whose values are <table-schema>s.
118 The "version" reports the version of the database schema. Because
119 this is a recent addition to the schema format, OVSDB permits it
120 to be omitted, but future versions of OVSDB will require it to be
121 present. Open vSwitch semantics for "version" are described in
122 ovs-vswitchd.conf.db(5).
126 A JSON object with the following members:
128 "columns": {<id>: <column-schema>, ...} required
129 "maxRows": <integer> optional
131 The value of "columns" is a JSON object whose names are column
132 names and whose values are <column-schema>s.
134 Every table has the following columns whose definitions are not
135 included in the schema:
137 "_uuid": This column, which contains exactly one UUID value,
138 is initialized to a random value by the database engine when
139 it creates a row. It is read-only, and its value never
140 changes during the lifetime of a row.
142 "_version": Like "_uuid", this column contains exactly one
143 UUID value, initialized to a random value by the database
144 engine when it creates a row, and it is read-only. However,
145 its value changes to a new random value whenever any other
146 field in the row changes. Furthermore, its value is
147 ephemeral: when the database is closed and reopened, or when
148 the database process is stopped and then started again, each
149 "_version" also changes to a new random value.
151 If "maxRows" is specified, as a positive integer, it limits the
152 maximum number of rows that may be present in the table. This is
153 a "deferred" constraint, enforced only at transaction commit time
154 (see the "transact" request below). If "maxRows" is not
155 specified, the size of the table is limited only by the resources
156 available to the database server.
160 A JSON object with the following members:
162 "type": <type> required
163 "ephemeral": <boolean> optional
164 "mutable": <boolean> optional
166 The "type" specifies the type of data stored in this column. If
167 "ephemeral" is specified as true, then this column's values are
168 not guaranteed to be durable; they may be lost when the database
169 restarts. If "mutable" is specified as false, then this column's
170 values may not be modified after they are initially set with the
175 The type of a database column. Either an <atomic-type> or a JSON
176 object that describes the type of a database column, with the
179 "key": <base-type> required
180 "value": <base-type> optional
181 "min": <integer> optional
182 "max": <integer> or "unlimited" optional
184 If "min" or "max" is not specified, each defaults to 1. If "max"
185 is specified as "unlimited", then there is no specified maximum
186 number of elements, although the implementation will enforce some
187 limit. After considering defaults, "min" must be exactly 0 or
188 exactly 1, "max" must be at least 1, and "max" must be greater
189 than or equal to "min".
191 If "min" and "max" are both 1 and "value" is not specified, the
192 type is the scalar type specified by "key".
194 If "min" is not 1 or "max" is not 1, or both, and "value" is not
195 specified, the type is a set of scalar type "key".
197 If "value" is specified, the type is a map from type "key" to type
202 The type of a key or value in a database column. Either an
203 <atomic-type> or a JSON object with the following members:
205 "type": <atomic-type> required
206 "enum": <value> optional
207 "minInteger": <integer> optional, integers only
208 "maxInteger": <integer> optional, integers only
209 "minReal": <real> optional, reals only
210 "maxReal": <real> optional, reals only
211 "minLength": <integer> optional, strings only
212 "maxLength": <integer> optional, strings only
213 "refTable": <id> optional, uuids only
214 "refType": "strong" or "weak" optional, only with "refTable"
216 An <atomic-type> by itself is equivalent to a JSON object with a
217 single member "type" whose value is the <atomic-type>.
219 "enum" may be specified as a <value> whose type is a set of one
220 or more values specified for the member "type". If "enum" is
221 specified, then the valid values of the <base-type> are limited to
222 those in the <value>.
224 "enum" is mutually exclusive with the following constraints.
226 If "type" is "integer", then "minInteger" or "maxInteger" or both
227 may also be specified, restricting the valid integer range. If
228 both are specified, then the maxInteger must be greater than or
231 If "type" is "real", then "minReal" or "maxReal" or both may also
232 be specified, restricting the valid real range. If both are
233 specified, then the maxReal must be greater than or equal to
236 If "type" is "string", then "minLength" and "maxLength" or both
237 may be specified, restricting the valid length of value strings.
238 If both are specified, then maxLength must be greater than or
239 equal to minLength. String length is measured in characters (not
240 bytes or UTF-16 code units).
242 If "type" is "uuid", then "refTable", if present, must be the name
243 of a table within this database. If "refTable" is specified, then
244 "refType" may also be specified. If "refTable" is set, the effect
245 depends on "refType":
247 - If "refType" is "strong" or if "refType" is omitted, the
248 allowed UUIDs are limited to UUIDs for rows in the named
251 - If "refType" is "weak", then any UUIDs are allowed, but
252 UUIDs that do not correspond to rows in the named table will
253 be automatically deleted.
255 "refTable" constraints are "deferred" constraints: they are
256 enforced only at transaction commit time (see the "transact"
257 request below). The other contraints on <base-type> are
258 "immediate", enforced immediately by each operation.
262 One of the strings "integer", "real", "boolean", "string", or
263 "uuid", representing the specified scalar type.
268 The database wire protocol is implemented in JSON-RPC 1.0. We
269 encourage use of JSON-RPC over stream connections instead of JSON-RPC
270 over HTTP, for these reasons:
272 * JSON-RPC is a peer-to-peer protocol, but HTTP is a client-server
273 protocol, which is a poor match. Thus, JSON-RPC over HTTP
274 requires the client to periodically poll the server to receive
277 * HTTP is more complicated than stream connections and doesn't
278 provide any corresponding advantage.
280 * The JSON-RPC specification for HTTP transport is incomplete.
282 We are using TCP port 6632 for the database JSON-RPC connection.
284 The database wire protocol consists of the following JSON-RPC methods:
289 Request object members:
291 "method": "list_dbs" required
292 "params": [] required
293 "id": <nonnull-json-value> required
295 Response object members:
297 "result": [<db-name>, ...]
299 "id": same "id" as request
301 This operation retrieves an array whose elements are <db-name>s
302 that name the databases that can be accessed over this JSON-RPC
308 Request object members:
310 "method": "get_schema" required
311 "params": [<db-name>] required
312 "id": <nonnull-json-value> required
314 Response object members:
316 "result": <database-schema>
318 "id": same "id" as request
320 This operation retrieves a <database-schema> that describes hosted
326 Request object members:
328 "method": "transact" required
329 "params": [<db-name>, <operation>*] required
330 "id": <nonnull-json-value> required
332 Response object members:
334 "result": [<object>*]
336 "id": same "id" as request
338 The "params" array for this method consists of a <db-name> that
339 identifies the database to which the transaction applies, followed by
340 zero or more JSON objects, each of which represents a single database
341 operation. The "Operations" section below describes the valid
344 The value of "id" must be unique among all in-flight transactions
345 within the current JSON-RPC session. Otherwise, the server may return
348 The database server executes each of the specified operations in the
349 specified order, except that if an operation fails, then the remaining
350 operations are not executed.
352 The set of operations is executed as a single atomic, consistent,
353 isolated transaction. The transaction is committed only if every
354 operation succeeds. Durability of the commit is not guaranteed unless
355 the "commit" operation, with "durable" set to true, is included in the
356 operation set (see below).
358 Regardless of whether errors occur, the response is always a JSON-RPC
359 response with null "error" and a "result" member that is an array with
360 the same number of elements as "params". Each element of the "result"
361 array corresponds to the same element of the "params" array. The
362 "result" array elements may be interpreted as follows:
364 - A JSON object that does not contain an "error" member indicates
365 that the operation completed successfully. The specific members
366 of the object are specified below in the descriptions of
367 individual operations. Some operations do not produce any
368 results, in which case the object will have no members.
370 - An <error>, which indicates that the operation completed with an
373 - A JSON null value indicates that the operation was not attempted
374 because a prior operation failed.
376 In general, "result" contains some number of successful results,
377 possibly followed by an error, in turn followed by enough JSON null
378 values to match the number of elements in "params". There is one
379 exception: if all of the operations succeed, but the results cannot be
380 committed, then "result" will have one more element than "params",
381 with the additional element an <error>. The possible "error" strings
382 include at least the following:
384 "error": "referential integrity violation"
386 When the commit was attempted, a column's value referenced the
387 UUID for a row that did not exist in the table named by the
388 column's <base-type> key or value "refTable" that has a
389 "refType" of "strong". (This can be caused by inserting a row
390 that references a nonexistent row, by deleting a row that is
391 still referenced by another row, by specifying the UUID for a
392 row in the wrong table, and other ways.)
394 "error": "constraint violation"
396 A column with a <base-type> key or value "refTable" whose
397 "refType" is "weak" became empty due to deletion(s) caused
398 because the rows that it referenced were deleted (or never
399 existed, if the column's row was inserted within the
400 transaction), and this column is not allowed to be empty
401 because its <type> has a "min" of 1.
403 "error": "constraint violation"
405 The number of rows in a table exceeds the maximum number
406 permitted by the table's "maxRows" value (see <table-schema>).
408 If "params" contains one or more "wait" operations, then the
409 transaction may take an arbitrary amount of time to complete. The
410 database implementation must be capable of accepting, executing, and
411 replying to other transactions and other JSON-RPC requests while a
412 transaction or transactions containing "wait" operations are
413 outstanding on the same or different JSON-RPC sessions.
415 The section "Notation for the Wire Protocol" below describes
416 additional notation for use with the wire protocol. After that, the
417 "Operations" section describes each operation.
422 Request object members:
424 "method": "cancel" required
425 "params": [the "id" for an outstanding request] required
428 Response object members:
432 This JSON-RPC notification instructs the database server to
433 immediately complete or cancel the "transact" request whose "id" is
434 the same as the notification's "params" value.
436 If the "transact" request can be completed immediately, then the
437 server sends a response in the form described for "transact", above.
438 Otherwise, the server sends a JSON-RPC error response of the following
443 "id": the request "id" member
445 The "cancel" notification itself has no reply.
450 Request object members:
452 "method": "monitor" required
453 "params": [<db-name>, <json-value>, <monitor-requests>] required
454 "id": <nonnull-json-value> required
456 <monitor-requests> is an object that maps from a table name to an
457 array of <monitor-request> objects. For backward compatibility, a
458 single <monitor-request> may be used instead of an array; it is
459 treated as a single-element array.
461 Each <monitor-request> is an object with the following members:
463 "columns": [<column>*] optional
464 "select": <monitor-select> optional
466 <monitor-select> is an object with the following members:
468 "initial": <boolean> optional
469 "insert": <boolean> optional
470 "delete": <boolean> optional
471 "modify": <boolean> optional
473 Response object members:
475 "result": <table-updates>
477 "id": same "id" as request
479 This JSON-RPC request enables a client to replicate tables or subsets
480 of tables within database <db-name>. Each element of
481 <monitor-requests> specifies a table to be replicated. The JSON-RPC
482 response to the "monitor" includes the initial contents of each table,
483 unless disabled (see below). Afterward, when changes to those tables
484 are committed, the changes are automatically sent to the client using
485 the "update" monitor notification. This monitoring persists until the
486 JSON-RPC session terminates or until the client sends a
487 "monitor_cancel" JSON-RPC request.
489 Each <monitor-request> describes how to monitor columns in a table:
491 The circumstances in which an "update" notification is sent for a
492 row within the table are determined by <monitor-select>:
494 If "initial" is omitted or true, every row in the table is
495 sent as part of the reply to the "monitor" request.
497 If "insert" is omitted or true, "update" notifications are
498 sent for rows newly inserted into the table.
500 If "delete" is omitted or true, "update" notifications are
501 sent for rows deleted from the table.
503 If "modify" is omitted or true, "update" notifications are
504 sent whenever when a row in the table is modified.
506 The "columns" member specifies the columns whose values are
507 monitored. It must not contain duplicates. If "columns" is
508 omitted, all columns in the table, except for "_uuid", are
511 If there is more than one <monitor-request> in an array of them, then
512 each <monitor-request> in the array should specify both "columns" and
513 "select", and the "columns" must be non-overlapping sets.
515 The "result" in the JSON-RPC response to the "monitor" request is a
516 <table-updates> object (see below) that contains the contents of the
517 tables for which "initial" rows are selected. If no tables' initial
518 contents are requested, then "result" is an empty object.
523 Notification object members:
526 "params": [<json-value>, <table-updates>]
529 The <json-value> in "params" is the same as the value passed as the
530 <json-value> in "params" for the "monitor" request.
532 <table-updates> is an object that maps from a table name to a
535 A <table-update> is an object that maps from the row's UUID (as a
536 36-byte string) to a <row-update> object.
538 A <row-update> is an object with the following members:
540 "old": <row> present for "delete" and "modify" updates
541 "new": <row> present for "initial", "insert", and "modify" updates
543 This JSON-RPC notification is sent from the server to the client to
544 tell it about changes to a monitored table (or the initial state of a
545 modified table). Each table in which one or more rows has changed (or
546 whose initial view is being presented) is represented in "updates".
547 Each row that has changed (or whose initial view is being presented)
548 is represented in its <table-update> as a member with its name taken
549 from the row's _uuid member. The corresponding value is a
552 The "old" member is present for "delete" and "modify" updates.
553 For "delete" updates, each monitored column is included. For
554 "modify" updates, the prior value of each monitored column whose
555 value has changed is included (monitored columns that have not
556 changed are represented in "new").
558 The "new" member is present for "initial", "insert", and "modify"
559 updates. For "initial" and "insert" updates, each monitored
560 column is included. For "modify" updates, the new value of each
561 monitored column is included.
566 Request object members:
568 "method": "monitor_cancel" required
569 "params": [<json-value>] required
570 "id": <nonnull-json-value> required
572 Response object members:
576 "id": the request "id" member
578 Cancels the ongoing table monitor request, identified by the
579 <json-value> in "params" matching the <json-value> in "params" for an
580 ongoing "monitor" request. No more "update" messages will be sent for
586 Request object members:
588 "method": "echo" required
589 "params": JSON array with any contents required
590 "id": <json-value> required
592 Response object members:
594 "result": same as "params"
596 "id": the request "id" member
598 Both the JSON-RPC client and the server must implement this request.
600 This JSON-RPC request and response can be used to implement connection
601 keepalives, by allowing the server to check that the client is still
605 Notation for the Wire Protocol
606 ------------------------------
610 An <id> that names a database. The valid <db-name>s can be
611 obtained using a "list-db" request. The <db-name> is taken from
612 the "name" member of <database-schema>.
616 An <id> that names a table.
620 An <id> that names a table column.
624 A JSON object that describes a table row or a subset of a table
625 row. Each member is the name of a table column paired with the
626 <value> of that column.
630 A JSON value that represents the value of a column in a table row,
631 one of <atom>, a <set>, or a <map>.
635 A JSON value that represents a scalar value for a column, one of
636 <string>, <number>, <boolean>, <uuid>, <named-uuid>.
640 Either an <atom>, representing a set with exactly one element, or
641 a 2-element JSON array that represents a database set value. The
642 first element of the array must be the string "set" and the second
643 element must be an array of zero or more <atom>s giving the values
644 in the set. All of the <atom>s must have the same type.
648 A 2-element JSON array that represents a database map value. The
649 first element of the array must be the string "map" and the second
650 element must be an array of zero or more <pair>s giving the values
651 in the map. All of the <pair>s must have the same key and value
654 (JSON objects are not used to represent <map> because JSON only
655 allows string names in an object.)
659 A 2-element JSON array that represents a pair within a database
660 map. The first element is an <atom> that represents the key, the
661 second element is an <atom> that represents the value.
665 A 2-element JSON array that represents a UUID. The first element
666 of the array must be the string "uuid" and the second element must
667 be a 36-character string giving the UUID in the format described
668 by RFC 4122. For example, the following <uuid> represents the
669 UUID 550e8400-e29b-41d4-a716-446655440000:
671 ["uuid", "550e8400-e29b-41d4-a716-446655440000"]
675 A 2-element JSON array that represents the UUID of a row inserted
676 in an "insert" operation within the same transaction. The first
677 element of the array must be the string "named-uuid" and the
678 second element should be the string specified as the "uuid-name"
679 for an "insert" operation within the same transaction. For
680 example, if an "insert" operation within this transaction
681 specifies a "uuid-name" of "myrow", the following <named-uuid>
682 represents the UUID created by that operation:
684 ["named-uuid", "myrow"]
686 A <named-uuid> may be used anywhere a <uuid> is valid.
690 A 3-element JSON array of the form [<column>, <function>,
691 <value>] that represents a test on a column value.
693 Except as otherwise specified below, <value> must have the same
696 The meaning depends on the type of <column>:
701 <function> must be "<", "<=", "==", "!=", ">=", ">",
702 "includes", or "excludes".
704 The test is true if the column's value satisfies the
705 relation <function> <value>, e.g. if the column has value
706 1 and <value> is 2, the test is true if <function> is "<",
707 "<=" or "!=", but not otherwise.
709 "includes" is equivalent to "=="; "excludes" is equivalent
716 <function> must be "!=", "==", "includes", or "excludes".
718 If <function> is "==" or "includes", the test is true if
719 the column's value equals <value>. If <function> is "!="
720 or "excludes", the test is inverted.
725 <function> must be "!=", "==", "includes", or "excludes".
727 If <function> is "==", the test is true if the column's
728 value contains exactly the same values (for sets) or pairs
729 (for maps). If <function> is "!=", the test is inverted.
731 If <function> is "includes", the test is true if the
732 column's value contains all of the values (for sets) or
733 pairs (for maps) in <value>. The column's value may also
734 contain other values or pairs.
736 If <function> is "excludes", the test is true if the
737 column's value does not contain any of the values (for
738 sets) or pairs (for maps) in <value>. The column's value
739 may contain other values or pairs not in <value>.
741 If <function> is "includes" or "excludes", then the
742 required type of <value> is slightly relaxed, in that it
743 may have fewer than the minimum number of elements
744 specified by the column's type. If <function> is
745 "excludes", then the required type is additionally relaxed
746 in that <value> may have more than the maximum number of
747 elements specified by the column's type.
751 One of "<", "<=", "==", "!=", ">=", ">", "includes", "excludes".
755 A 3-element JSON array of the form [<column>, <mutator>, <value>]
756 that represents a change to a column value.
758 Except as otherwise specified below, <value> must have the same
761 The meaning depends on the type of <column>:
766 <mutator> must be "+=", "-=", "*=", "/=" or (integer only)
767 "%=". The value of <column> is changed to the sum,
768 difference, product, quotient, or remainder, respectively,
769 of <column> and <value>.
771 Constraints on <column> are ignored when parsing <value>.
777 No valid <mutator>s are currently defined for these types.
781 Any <mutator> valid for the set's element type may be
782 applied to the set, in which case the mutation is applied
783 to each member of the set individually. <value> must be a
784 scalar value of the same type as the set's element type,
785 except that contraints are ignored.
787 If <mutator> is "insert", then each of the values in the
788 set in <value> is added to <column> if it is not already
789 present. The required type of <value> is slightly
790 relaxed, in that it may have fewer than the minimum number
791 of elements specified by the column's type.
793 If <mutator> is "delete", then each of the values in the
794 set in <value> is removed from <column> if it is present
795 there. The required type is slightly relaxed in that
796 <value> may have more or less than the maximum number of
797 elements specified by the column's type.
801 <mutator> must be "insert" or "delete".
803 If <mutator> is "insert", then each of the key-value pairs
804 in the map in <value> is added to <column> only if its key
805 is not already present. The required type of <value> is
806 slightly relaxed, in that it may have fewer than the
807 minimum number of elements specified by the column's type.
809 If <mutator> is "delete", then <value> may have the same
810 type as <column> (a map type) or it may be a set whose
811 element type is the same as <column>'s key type:
813 - If <value> is a map, the mutation deletes each
814 key-value pair in <column> whose key and value equal
815 one of the key-value pairs in <value>.
817 - If <value> is a set, the mutation deletes each
818 key-value pair in <column> whose key equals one of
819 the values in <value>.
821 For "delete", <value> may have any number of elements,
822 regardless of restrictions on the number of elements in
827 One of "+=", "-=", "*=", "/=", "%=", "insert", "delete".
832 Each of the available operations is described below.
837 Request object members:
839 "op": "insert" required
840 "table": <table> required
841 "row": <row> required
842 "uuid-name": <id> optional
844 Result object members:
850 Inserts "row" into "table".
852 If "row" does not specify values for all the columns in "table",
853 those columns receive default values. The default value for a
854 column depends on its type. The default for a column whose <type>
855 specifies a "min" of 0 is an empty set or empty map. Otherwise,
856 the default is a single value or a single key-value pair, whose
857 value(s) depend on its <atomic-type>:
859 - "integer" or "real": 0
863 - "string": "" (the empty string)
865 - "uuid": 00000000-0000-0000-0000-000000000000
867 The new row receives a new, randomly generated UUID.
869 If "uuid-name" is supplied, then it is an error if <id> is not
870 unique among the "uuid-name"s supplied on all the "insert"
871 operations within this transaction.
873 The UUID for the new row is returned as the "uuid" member of the
878 "error": "duplicate uuid-name"
880 The same "uuid-name" appears on another "insert" operation
881 within this transaction.
883 "error": "constraint violation"
885 One of the values in "row" does not satisfy the immediate
886 constraints for its column's <base-type>. This error will
887 occur for columns that are not explicitly set by "row" if the
888 default value does not satisfy the column's constraints.
893 Request object members:
895 "op": "select" required
896 "table": <table> required
897 "where": [<condition>*] required
898 "columns": [<column>*] optional
900 Result object members:
906 Searches "table" for rows that match all the conditions specified
907 in "where". If "where" is an empty array, every row in "table" is
910 The "rows" member of the result is an array of objects. Each
911 object corresponds to a matching row, with each column
912 specified in "columns" as a member, the column's name as the
913 member name and its value as the member value. If "columns"
914 is not specified, all the table's columns are included. If
915 two rows of the result have the same values for all included
916 columns, only one copy of that row is included in "rows".
917 Specifying "_uuid" within "columns" will avoid dropping
918 duplicates, since every row has a unique UUID.
920 The ordering of rows within "rows" is unspecified.
925 Request object members:
927 "op": "update" required
928 "table": <table> required
929 "where": [<condition>*] required
930 "row": <row> required
932 Result object members:
938 Updates rows in a table.
940 Searches "table" for rows that match all the conditions
941 specified in "where". For each matching row, changes the
942 value of each column specified in "row" to the value for that
943 column specified in "row".
945 The "_uuid" and "_version" columns of a table may not be directly
946 updated with this operation. Columns designated read-only in the
947 schema also may not be updated.
949 The "count" member of the result specifies the number of rows
954 "error": "constraint violation"
956 One of the values in "row" does not satisfy the immediate
957 constraints for its column's <base-type>.
961 Request object members:
963 "op": "mutate" required
964 "table": <table> required
965 "where": [<condition>*] required
966 "mutations": [<mutation>*] required
968 Result object members:
974 Mutates rows in a table.
976 Searches "table" for rows that match all the conditions specified
977 in "where". For each matching row, mutates its columns as
978 specified by each <mutation> in "mutations", in the order
981 The "_uuid" and "_version" columns of a table may not be directly
982 modified with this operation. Columns designated read-only in the
983 schema also may not be updated.
985 The "count" member of the result specifies the number of rows
990 "error": "domain error"
992 The result of the mutation is not mathematically defined,
993 e.g. division by zero.
995 "error": "range error"
997 The result of the mutation is not representable within the
998 database's format, e.g. an integer result outside the range
999 INT64_MIN...INT64_MAX or a real result outside the range
1002 "error": "constraint violation"
1004 The mutation caused the column's value to violate a
1005 constraint, e.g. it caused a column to have more or fewer
1006 values than are allowed, an arithmetic operation caused a set
1007 or map to have duplicate elements, or it violated a constraint
1008 specified by a column's <base-type>.
1013 Request object members:
1015 "op": "delete" required
1016 "table": <table> required
1017 "where": [<condition>*] required
1019 Result object members:
1025 Deletes all the rows from "table" that match all the conditions
1026 specified in "where".
1028 The "count" member of the result specifies the number of deleted
1034 Request object members:
1036 "op": "wait" required
1037 "timeout": <integer> optional
1038 "table": <table> required
1039 "where": [<condition>*] required
1040 "columns": [<column>*] required
1041 "until": "==" or "!=" required
1042 "rows": [<row>*] required
1044 Result object members:
1050 Waits until a condition becomes true.
1052 If "until" is "==", checks whether the query on "table" specified
1053 by "where" and "columns", which is evaluated in the same way as
1054 specified for "select", returns the result set specified by
1055 "rows". If it does, then the operation completes successfully.
1056 Otherwise, the entire transaction rolls back. It is automatically
1057 restarted later, after a change in the database makes it possible
1058 for the operation to succeed. The client will not receive a
1059 response until the operation permanently succeeds or fails.
1061 If "until" is "!=", the sense of the test is negated. That is, as
1062 long as the query on "table" specified by "where" and "columns"
1063 returns "rows", the transaction will be rolled back and restarted
1066 If "timeout" is specified, then the transaction aborts after the
1067 specified number of milliseconds. The transaction is guaranteed
1068 to be attempted at least once before it aborts. A "timeout" of 0
1069 will abort the transaction on the first mismatch.
1073 "error": "not supported"
1075 One or more of the columns in this table do not support
1076 triggers. This error will not occur if "timeout" is 0.
1078 "error": "timed out"
1080 The "timeout" was reached before the transaction was able to
1086 Request object members:
1088 "op": "commit" required
1089 "durable": <boolean> required
1091 Result object members:
1097 If "durable" is specified as true, then the transaction, if it
1098 commits, will be stored durably (to disk) before the reply is sent
1103 "error": "not supported"
1105 When "durable" is true, this database implementation does not
1106 support durable commits.
1111 Request object members:
1113 "op": "abort" required
1115 Result object members:
1121 Aborts the transaction with an error. This may be useful for
1128 This operation always fails with this error.
1134 Request object members:
1136 "op": "comment" required
1137 "comment": <string> required
1139 Result object members:
1145 Provides information to a database administrator on the purpose of
1146 a transaction. The OVSDB server, for example, adds comments in
1147 transactions that modify the database to the database journal.