ovsdb: Drop regular expression constraints.
[openvswitch] / ovsdb / SPECS
1          ===================================================
2           Open vSwitch Configuration Database Specification
3          ===================================================
4
5 Basic Notation
6 --------------
7
8 The descriptions below use the following shorthand notations for JSON
9 values.  Additional notation is presented later.
10
11 <string>
12
13     A JSON string.  Any Unicode string is allowed, as specified by RFC
14     4627.  Implementations may disallow null bytes.
15
16 <id>
17
18     A JSON string matching [a-zA-Z_][a-zA-Z0-9_]*.
19
20     <id>s that begin with _ are reserved to the implementation and may
21     not be used by the user.
22
23 <boolean>
24
25     A JSON true or false value.
26
27 <number>
28
29     A JSON number.
30
31 <integer>
32
33     A JSON number with an integer value, within a certain range
34     (currently -2**63...+2**63-1).
35
36 <json-value>
37
38     Any JSON value.
39
40 <nonnull-json-value>
41
42     Any JSON value except null.
43
44 <error>
45
46     A JSON object with the following members:
47
48         "error": <string>                       required
49         "details": <string>                     optional
50
51     The value of the "error" member is a short string, specified in
52     this document, that broadly indicates the class of the error.
53     Most "error" strings are specific to contexts described elsewhere
54     in this document, but the following "error" strings may appear in
55     any context where an <error> is permitted:
56
57     "error": "resources exhausted"
58
59         The operation requires more resources (memory, disk, CPU,
60         etc.) than are currently available to the database server.
61
62     "error": "I/O error"
63
64         Problems accessing the disk, network, or other required
65         resources prevented the operation from completing.
66
67     Database implementations may use "error" strings not specified
68     in this document to indicate errors that do not fit into any of
69     the specified categories.
70
71     Optionally, an <error> may include a "details" member, whose value
72     is a string that describes the error in more detail for the
73     benefit of a human user or administrator.  This document does not
74     specify the format or content of the "details" string.
75
76     An <error> may also have other members that describe the error in
77     more detail.  This document does not specify the names or values
78     of these members.
79
80 Schema Format
81 -------------
82
83 An Open vSwitch configuration database consists of a set of tables,
84 each of which has a number of columns and zero or more rows.  A schema
85 is represented by <database-schema>, as described below.
86
87 <database-schema>
88
89     A JSON object with the following members:
90
91         "name": <id>                            required
92         "comment": <string>                     optional
93         "tables": {<id>: <table-schema>, ...}   required
94
95     The "name" identifies the database as a whole.  It must be
96     provided to most JSON-RPC requests to identify the database being
97     operated on.  The "comment" optionally provides more information
98     about the database.  The value of "tables" is a JSON object whose
99     names are table names and whose values are <table-schema>s.
100
101 <table-schema>
102
103     A JSON object with the following members:
104
105         "comment": <string>                       optional
106         "columns": {<id>: <column-schema>, ...}   required
107
108     The "comment" optionally provides information about this table for
109     a human reader.  The value of "columns" is a JSON object whose
110     names are column names and whose values are <column-schema>s.
111
112     Every table has the following columns whose definitions are not
113     included in the schema:
114
115         "_uuid": This column, which contains exactly one UUID value,
116         is initialized to a random value by the database engine when
117         it creates a row.  It is read-only, and its value never
118         changes during the lifetime of a row.
119
120         "_version": Like "_uuid", this column contains exactly one
121         UUID value, initialized to a random value by the database
122         engine when it creates a row, and it is read-only.  However,
123         its value changes to a new random value whenever any other
124         field in the row changes.  Furthermore, its value is
125         ephemeral: when the database is closed and reopened, or when
126         the database process is stopped and then started again, each
127         "_version" also changes to a new random value.
128
129 <column-schema>
130
131     A JSON object with the following members:
132
133         "comment": <string>                       optional
134         "type": <type>                            required
135         "ephemeral": <boolean>                    optional
136
137     The "comment" optionally provides information about this column
138     for a human reader.  The "type" specifies the type of data stored
139     in this column.  If "ephemeral" is specified as true, then this
140     column's values are not guaranteed to be durable; they may be lost
141     when the database restarts.
142
143 <type>
144
145     The type of a database column.  Either an <atomic-type> or a JSON
146     object that describes the type of a database column, with the
147     following members:
148
149         "key": <base-type>                 required
150         "value": <base-type>               optional
151         "min": <integer>                   optional
152         "max": <integer> or "unlimited"    optional
153
154     If "min" or "max" is not specified, each defaults to 1.  If "max"
155     is specified as "unlimited", then there is no specified maximum
156     number of elements, although the implementation will enforce some
157     limit.  After considering defaults, "min" must be exactly 0 or
158     exactly 1, "max" must be at least 1, and "max" must be greater
159     than or equal to "min".
160
161     If "min" and "max" are both 1 and "value" is not specified, the
162     type is the scalar type specified by "key".
163
164     If "min" is not 1 or "max" is not 1, or both, and "value" is not
165     specified, the type is a set of scalar type "key".
166
167     If "value" is specified, the type is a map from type "key" to type
168     "value".
169
170 <base-type>
171
172     The type of a key or value in a database column.  Either an
173     <atomic-type> or a JSON object with the following members:
174
175         "type": <atomic-type>              required
176         "minInteger": <integer>            optional, integers only
177         "maxInteger": <integer>            optional, integers only
178         "minReal": <real>                  optional, reals only
179         "maxReal": <real>                  optional, reals only 
180         "minLength": <integer>             optional, strings only
181         "maxLength": <integer>             optional, strings only
182         "refTable": <id>                   optional, uuids only
183
184     An <atomic-type> by itself is equivalent to a JSON object with a
185     single member "type" whose value is the <atomic-type>.
186
187     If "type" is "integer", then "minInteger" or "maxInteger" or both
188     may also be specified, restricting the valid integer range.  If
189     both are specified, then the maxInteger must be greater than or
190     equal to minInteger.
191
192     If "type" is "real", then "minReal" or "maxReal" or both may also
193     be specified, restricting the valid real range.  If both are
194     specified, then the maxReal must be greater than or equal to
195     minReal.
196
197     If "type" is "string", then "minLength" and "maxLength" or both
198     may be specified, restricting the valid length of value strings.
199     If both are specified, then maxLength must be greater than or
200     equal to minLength.  String length is measured in characters (not
201     bytes or UTF-16 code units).
202
203     If "type" is "uuid", then "refTable", if present, must be the name
204     of a table within this database.  If "refTable" is set, the
205     allowed UUIDs are limited to UUIDs for rows in the named table.
206
207     "refTable" constraints are "deferred" constraints: they are
208     enforced only at transaction commit time (see the "transact"
209     request below).  The other contraints on <base-type> are
210     "immediate", enforced immediately by each operation.
211
212 <atomic-type>
213
214     One of the strings "integer", "real", "boolean", "string", or
215     "uuid", representing the specified scalar type.
216
217 Wire Protocol
218 -------------
219
220 The database wire protocol is implemented in JSON-RPC 1.0.  We
221 encourage use of JSON-RPC over stream connections instead of JSON-RPC
222 over HTTP, for these reasons:
223
224     * JSON-RPC is a peer-to-peer protocol, but HTTP is a client-server
225       protocol, which is a poor match.  Thus, JSON-RPC over HTTP
226       requires the client to periodically poll the server to receive
227       server requests.
228
229     * HTTP is more complicated than stream connections and doesn't
230       provide any corresponding advantage.
231
232     * The JSON-RPC specification for HTTP transport is incomplete.
233
234 The database wire protocol consists of the following JSON-RPC methods:
235
236 list_dbs
237 ........
238
239 Request object members:
240
241     "method": "list_dbs"              required
242     "params": []                      required
243     "id": <nonnull-json-value>        required
244
245 Response object members:
246
247     "result": [<db-name>, ...]
248     "error": null
249     "id": same "id" as request
250
251 This operation retrieves an array whose elements are <db-name>s
252 that name the databases that can be accessed over this JSON-RPC
253 connection.
254
255 get_schema
256 ..........
257
258 Request object members:
259
260     "method": "get_schema"            required
261     "params": [<db-name>]             required
262     "id": <nonnull-json-value>        required
263
264 Response object members:
265
266     "result": <database-schema>
267     "error": null
268     "id": same "id" as request
269
270 This operation retrieves a <database-schema> that describes hosted
271 database <db-name>.
272
273 transact
274 ........
275
276 Request object members:
277
278     "method": "transact"                  required
279     "params": [<db-name>, <operation>*]   required
280     "id": <nonnull-json-value>            required
281
282 Response object members:
283
284     "result": [<object>*]
285     "error": null
286     "id": same "id" as request
287
288 The "params" array for this method consists of a <db-name> that
289 identifies the database to which the transaction applies, followed by
290 zero or more JSON objects, each of which represents a single database
291 operation.  The "Operations" section below describes the valid
292 operations.
293
294 The value of "id" must be unique among all in-flight transactions
295 within the current JSON-RPC session.  Otherwise, the server may return
296 a JSON-RPC error.
297
298 The database server executes each of the specified operations in the
299 specified order, except that if an operation fails, then the remaining
300 operations are not executed.
301
302 The set of operations is executed as a single atomic, consistent,
303 isolated transaction.  The transaction is committed only if every
304 operation succeeds.  Durability of the commit is not guaranteed unless
305 the "commit" operation, with "durable" set to true, is included in the
306 operation set (see below).
307
308 Regardless of whether errors occur, the response is always a JSON-RPC
309 response with null "error" and a "result" member that is an array with
310 the same number of elements as "params".  Each element of the "result"
311 array corresponds to the same element of the "params" array.  The
312 "result" array elements may be interpreted as follows:
313
314     - A JSON object that does not contain an "error" member indicates
315       that the operation completed successfully.  The specific members
316       of the object are specified below in the descriptions of
317       individual operations.  Some operations do not produce any
318       results, in which case the object will have no members.
319
320     - An <error>, which indicates that the operation completed with an
321       error.
322
323     - A JSON null value indicates that the operation was not attempted
324       because a prior operation failed.
325
326 In general, "result" contains some number of successful results,
327 possibly followed by an error, in turn followed by enough JSON null
328 values to match the number of elements in "params".  There is one
329 exception: if all of the operations succeed, but the results cannot be
330 committed, then "result" will have one more element than "params",
331 with the additional element an <error>.  The possible "error" strings
332 include at least the following:
333
334     "error": "referential integrity violation"
335
336         When the commit was attempted, a column's value referenced the
337         UUID for a row that did not exist in the table named by the
338         column's <base-type> key or value "refTable".  (This can be
339         caused by inserting a row that references a nonexistent row,
340         by deleting a row that is still referenced by another row, by
341         specifying the UUID for a row in the wrong table, and other
342         ways.)
343
344 If "params" contains one or more "wait" operations, then the
345 transaction may take an arbitrary amount of time to complete.  The
346 database implementation must be capable of accepting, executing, and
347 replying to other transactions and other JSON-RPC requests while a
348 transaction or transactions containing "wait" operations are
349 outstanding on the same or different JSON-RPC sessions.
350
351 The section "Notation for the Wire Protocol" below describes
352 additional notation for use with the wire protocol.  After that, the
353 "Operations" section describes each operation.
354
355 cancel
356 ......
357
358 Request object members:
359
360     "method": "cancel"                              required
361     "params": [the "id" for an outstanding request] required
362     "id": null                                      required
363
364 Response object members:
365
366     <no response>
367
368 This JSON-RPC notification instructs the database server to
369 immediately complete or cancel the "transact" request whose "id" is
370 the same as the notification's "params" value.  
371
372 If the "transact" request can be completed immediately, then the
373 server sends a response in the form described for "transact", above.
374 Otherwise, the server sends a JSON-RPC error response of the following
375 form:
376
377     "result": null
378     "error": "canceled"
379     "id": the request "id" member
380
381 The "cancel" notification itself has no reply.
382
383 monitor
384 .......
385
386 Request object members:
387
388     "method": "monitor"                                       required
389     "params": [<db-name>, <json-value>, <monitor-requests>]   required
390     "id": <nonnull-json-value>                                required
391
392 <monitor-requests> is an object that maps from a table name to a
393 <monitor-request>.
394
395 Each <monitor-request> is an object with the following members:
396
397     "columns": [<column>*]            optional
398     "select": <monitor-select>        optional
399
400 <monitor-select> is an object with the following members:
401
402     "initial": <boolean>              optional
403     "insert": <boolean>               optional
404     "delete": <boolean>               optional
405     "modify": <boolean>               optional
406
407 Response object members:
408
409     "result": <table-updates>
410     "error": null
411     "id": same "id" as request
412
413 This JSON-RPC request enables a client to replicate tables or subsets
414 of tables within database <db-name>.  Each <monitor-request> specifies
415 a table to be replicated.  The JSON-RPC response to the "monitor"
416 includes the initial contents of each table.  Afterward, when changes
417 to those tables are committed, the changes are automatically sent to
418 the client using the "update" monitor notification.  This monitoring
419 persists until the JSON-RPC session terminates or until the client
420 sends a "monitor_cancel" JSON-RPC request.
421
422 Each <monitor-request> describes how to monitor a table:
423
424     The circumstances in which an "update" notification is sent for a
425     row within the table are determined by <monitor-select>:
426
427         If "initial" is omitted or true, every row in the table is
428         sent as part of the reply to the "monitor" request.
429
430         If "insert" is omitted or true, "update" notifications are
431         sent for rows newly inserted into the table.
432
433         If "delete" is omitted or true, "update" notifications are
434         sent for rows deleted from the table.
435
436         If "modify" is omitted or true, "update" notifications are
437         sent whenever when a row in the table is modified.
438
439     The "columns" member specifies the columns whose values are
440     monitored.  If "columns" is omitted, all columns in the table,
441     except for "_uuid", are monitored.
442
443 The "result" in the JSON-RPC response to the "monitor" request is a
444 <table-updates> object (see below) that contains the contents of the
445 tables for which "initial" rows are selected.  If no tables' initial
446 contents are requested, then "result" is an empty object.
447
448 update
449 ......
450
451 Notification object members:
452
453     "method": "update"
454     "params": [<json-value>, <table-updates>]
455     "id": null
456
457 The <json-value> in "params" is the same as the value passed as the
458 <json-value> in "params" for the "monitor" request.
459
460 <table-updates> is an object that maps from a table name to a
461 <table-update>.
462
463 A <table-update> is an object that maps from the row's UUID (as a
464 36-byte string) to a <row-update> object.
465
466 A <row-update> is an object with the following members:
467
468     "old": <row>         present for "delete" and "modify" updates
469     "new": <row>         present for "initial", "insert", and "modify" updates
470
471 This JSON-RPC notification is sent from the server to the client to
472 tell it about changes to a monitored table (or the initial state of a
473 modified table).  Each table in which one or more rows has changed (or
474 whose initial view is being presented) is represented in "updates".
475 Each row that has changed (or whose initial view is being presented)
476 is represented in its <table-update> as a member with its name taken
477 from the row's _uuid member.  The corresponding value is a
478 <row-update>:
479
480     The "old" member is present for "delete" and "modify" updates.
481     For "delete" updates, each monitored column is included.  For
482     "modify" updates, the prior value of each monitored column whose
483     value has changed is included (monitored columns that have not
484     changed are represented in "new").
485
486     The "new" member is present for "initial", "insert", and "modify"
487     updates.  For "initial" and "insert" updates, each monitored
488     column is included.  For "modify" updates, the new value of each
489     monitored column is included.
490
491 monitor_cancel
492 ..............
493
494 Request object members:
495
496     "method": "monitor_cancel"                              required
497     "params": [<json-value>]                                required
498     "id": <nonnull-json-value>                              required
499
500 Response object members:
501
502     "result": {}
503     "error": null
504     "id": the request "id" member
505
506 Cancels the ongoing table monitor request, identified by the
507 <json-value> in "params" matching the <json-value> in "params" for an
508 ongoing "monitor" request.  No more "update" messages will be sent for
509 this table monitor.
510
511 echo
512 ....
513
514 Request object members:
515
516     "method": "echo"                                required
517     "params": JSON array with any contents          required
518     "id": <json-value>                              required
519
520 Response object members:
521
522     "result": same as "params"
523     "error": null
524     "id": the request "id" member
525
526 Both the JSON-RPC client and the server must implement this request.
527
528 This JSON-RPC request and response can be used to implement connection
529 keepalives, by allowing the server to check that the client is still
530 there or vice versa.
531
532
533 Notation for the Wire Protocol
534 ------------------------------
535
536 <db-name>
537
538     An <id> that names a database.  The valid <db-name>s can be
539     obtained using a "list-db" request.  The <db-name> is taken from
540     the "name" member of <database-schema>.
541
542 <table>
543
544     An <id> that names a table.
545
546 <column>
547
548     An <id> that names a table column.
549
550 <row>
551
552     A JSON object that describes a table row or a subset of a table
553     row.  Each member is the name of a table column paired with the
554     <value> of that column.
555
556 <value>
557
558     A JSON value that represents the value of a column in a table row,
559     one of <atom>, a <set>, or a <map>.
560
561 <atom>
562
563     A JSON value that represents a scalar value for a column, one of
564     <string>, <number>, <boolean>, <uuid>, <named-uuid>.
565
566 <set>
567
568     Either an <atom>, representing a set with exactly one element, or
569     a 2-element JSON array that represents a database set value.  The
570     first element of the array must be the string "set" and the second
571     element must be an array of zero or more <atom>s giving the values
572     in the set.  All of the <atom>s must have the same type.
573
574 <map>
575
576     A 2-element JSON array that represents a database map value.  The
577     first element of the array must be the string "map" and the second
578     element must be an array of zero or more <pair>s giving the values
579     in the map.  All of the <pair>s must have the same key and value
580     types.
581
582     (JSON objects are not used to represent <map> because JSON only
583     allows string names in an object.)
584
585 <pair>
586
587     A 2-element JSON array that represents a pair within a database
588     map.  The first element is an <atom> that represents the key, the
589     second element is an <atom> that represents the value.
590
591 <uuid>
592
593     A 2-element JSON array that represents a UUID.  The first element
594     of the array must be the string "uuid" and the second element must
595     be a 36-character string giving the UUID in the format described
596     by RFC 4122.  For example, the following <uuid> represents the
597     UUID 550e8400-e29b-41d4-a716-446655440000:
598
599         ["uuid", "550e8400-e29b-41d4-a716-446655440000"]
600
601 <named-uuid>
602
603     A 2-element JSON array that represents the UUID of a row inserted
604     in an "insert" operation within the same transaction.  The first
605     element of the array must be the string "named-uuid" and the
606     second element should be the string specified as the "uuid-name"
607     for an "insert" operation within the same transaction.  For
608     example, if an "insert" operation within this transaction
609     specifies a "uuid-name" of "myrow", the following <named-uuid>
610     represents the UUID created by that operation:
611
612         ["named-uuid", "myrow"]
613
614     A <named-uuid> may be used anywhere a <uuid> is valid.
615
616 <condition>
617
618     A 3-element JSON array of the form [<column>, <function>,
619     <value>] that represents a test on a column value.
620
621     Except as otherwise specified below, <value> must have the same
622     type as <column>.
623
624     The meaning depends on the type of <column>:
625
626         integer
627         real
628
629             <function> must be "<", "<=", "==", "!=", ">=", ">",
630             "includes", or "excludes".
631
632             The test is true if the column's value satisfies the
633             relation <function> <value>, e.g. if the column has value
634             1 and <value> is 2, the test is true if <function> is "<",
635             "<=" or "!=", but not otherwise.
636
637             "includes" is equivalent to "=="; "excludes" is equivalent
638             to "!=".
639
640         boolean
641         string
642         uuid
643
644             <function> must be "!=", "==", "includes", or "excludes".
645
646             If <function> is "==" or "includes", the test is true if
647             the column's value equals <value>.  If <function> is "!="
648             or "excludes", the test is inverted.
649
650         set
651         map
652
653             <function> must be "!=", "==", "includes", or "excludes".
654
655             If <function> is "==", the test is true if the column's
656             value contains exactly the same values (for sets) or pairs
657             (for maps).  If <function> is "!=", the test is inverted.
658
659             If <function> is "includes", the test is true if the
660             column's value contains all of the values (for sets) or
661             pairs (for maps) in <value>.  The column's value may also
662             contain other values or pairs.
663
664             If <function> is "excludes", the test is true if the
665             column's value does not contain any of the values (for
666             sets) or pairs (for maps) in <value>.  The column's value
667             may contain other values or pairs not in <value>.
668
669             If <function> is "includes" or "excludes", then the
670             required type of <value> is slightly relaxed, in that it
671             may have fewer than the minimum number of elements
672             specified by the column's type.  If <function> is
673             "excludes", then the required type is additionally relaxed
674             in that <value> may have more than the maximum number of
675             elements specified by the column's type.
676
677 <function>
678
679     One of "<", "<=", "==", "!=", ">=", ">", "includes", "excludes".
680
681 <mutation>
682
683     A 3-element JSON array of the form [<column>, <mutator>, <value>]
684     that represents a change to a column value.
685
686     Except as otherwise specified below, <value> must have the same
687     type as <column>.
688
689     The meaning depends on the type of <column>:
690
691         integer
692         real
693
694             <mutator> must be "+=", "-=", "*=", "/=" or (integer only)
695             "%=".  The value of <column> is changed to the sum,
696             difference, product, quotient, or remainder, respectively,
697             of <column> and <value>.
698
699             Constraints on <column> are ignored when parsing <value>.
700
701         boolean
702         string
703         uuid
704
705             No valid <mutator>s are currently defined for these types.
706
707         set
708
709             Any <mutator> valid for the set's element type may be
710             applied to the set, in which case the mutation is applied
711             to each member of the set individually.  <value> must be a
712             scalar value of the same type as the set's element type,
713             except that contraints are ignored.
714
715             If <mutator> is "insert", then each of the values in the
716             set in <value> is added to <column> if it is not already
717             present.  The required type of <value> is slightly
718             relaxed, in that it may have fewer than the minimum number
719             of elements specified by the column's type.
720
721             If <mutator> is "delete", then each of the values in the
722             set in <value> is removed from <column> if it is present
723             there.  The required type is slightly relaxed in that
724             <value> may have more or less than the maximum number of
725             elements specified by the column's type.
726
727         map
728
729             <mutator> must be "insert" or "delete".
730
731             If <mutator> is "insert", then each of the key-value pairs
732             in the map in <value> is added to <column> only if its key
733             is not already present.  The required type of <value> is
734             slightly relaxed, in that it may have fewer than the
735             minimum number of elements specified by the column's type.
736
737             If <mutator> is "delete", then <value> may have the same
738             type as <column> (a map type) or it may be a set whose
739             element type is the same as <column>'s key type:
740
741                 - If <value> is a map, the mutation deletes each
742                   key-value pair in <column> whose key and value equal
743                   one of the key-value pairs in <value>.
744
745                 - If <value> is a set, the mutation deletes each
746                   key-value pair in <column> whose key equals one of
747                   the values in <value>.
748
749             For "delete", <value> may have any number of elements,
750             regardless of restrictions on the number of elements in
751             <column>.
752
753 <mutator>
754
755     One of "+=", "-=", "*=", "/=", "%=", "insert", "delete".
756
757 Operations
758 ----------
759
760 Each of the available operations is described below.
761
762 insert
763 ......
764
765 Request object members:
766
767     "op": "insert"          required
768     "table": <table>        required
769     "row": <row>            required
770     "uuid-name": <id>       optional
771
772 Result object members:
773
774     "uuid": <uuid>
775
776 Semantics:
777
778     Inserts "row" into "table".
779
780     If "row" does not specify values for all the columns in "table",
781     those columns receive default values.  The default value for a
782     column depends on its type.  The default for a column whose <type>
783     specifies a "min" of 0 is an empty set or empty map.  Otherwise,
784     the default is a single value or a single key-value pair, whose
785     value(s) depend on its <atomic-type>:
786
787         - "integer" or "real": 0
788
789         - "boolean": false
790
791         - "string": "" (the empty string)
792
793         - "uuid": 00000000-0000-0000-0000-000000000000
794
795     The new row receives a new, randomly generated UUID.
796
797     If "uuid-name" is supplied, then it is an error if <id> is not
798     unique among the "uuid-name"s supplied on all the "insert"
799     operations within this transaction.
800
801     The UUID for the new row is returned as the "uuid" member of the
802     result.
803
804 Errors:
805
806     "error": "duplicate uuid-name"
807
808         The same "uuid-name" appears on another "insert" operation
809         within this transaction.
810
811     "error": "constraint violation"
812
813         One of the values in "row" does not satisfy the immediate
814         constraints for its column's <base-type>.  This error will
815         occur for columns that are not explicitly set by "row" if the
816         default value does not satisfy the column's constraints.
817
818 select
819 ......
820
821 Request object members:
822
823     "op": "select"                required
824     "table": <table>              required
825     "where": [<condition>*]       required
826     "columns": [<column>*]        optional
827
828 Result object members:
829
830     "rows": [<row>*]
831
832 Semantics:
833
834     Searches "table" for rows that match all the conditions specified
835     in "where".  If "where" is an empty array, every row in "table" is
836     selected.
837
838     The "rows" member of the result is an array of objects.  Each
839     object corresponds to a matching row, with each column
840     specified in "columns" as a member, the column's name as the
841     member name and its value as the member value.  If "columns"
842     is not specified, all the table's columns are included.  If
843     two rows of the result have the same values for all included
844     columns, only one copy of that row is included in "rows".
845     Specifying "_uuid" within "columns" will avoid dropping
846     duplicates, since every row has a unique UUID.
847
848     The ordering of rows within "rows" is unspecified.
849
850 update
851 ......
852
853 Request object members:
854
855     "op": "update"                required
856     "table": <table>              required
857     "where": [<condition>*]       required
858     "row": <row>                  required
859
860 Result object members:
861
862     "count": <integer>
863
864 Semantics:
865
866     Updates rows in a table.
867
868     Searches "table" for rows that match all the conditions
869     specified in "where".  For each matching row, changes the
870     value of each column specified in "row" to the value for that
871     column specified in "row".
872
873     The "_uuid" and "_version" columns of a table may not be directly
874     updated with this operation.  Columns designated read-only in the 
875     schema also may not be updated.
876
877     The "count" member of the result specifies the number of rows
878     that matched.
879
880 Errors:
881
882     "error": "constraint violation"
883
884         One of the values in "row" does not satisfy the immediate
885         constraints for its column's <base-type>.
886 mutate
887 ......
888
889 Request object members:
890
891     "op": "mutate"                required
892     "table": <table>              required
893     "where": [<condition>*]       required
894     "mutations": [<mutation>*]    required
895
896 Result object members:
897
898     "count": <integer>
899
900 Semantics:
901
902     Mutates rows in a table.
903
904     Searches "table" for rows that match all the conditions specified
905     in "where".  For each matching row, mutates its columns as
906     specified by each <mutation> in "mutations", in the order
907     specified.
908
909     The "_uuid" and "_version" columns of a table may not be directly
910     modified with this operation.  Columns designated read-only in the
911     schema also may not be updated.
912
913     The "count" member of the result specifies the number of rows
914     that matched.
915
916 Errors:
917
918     "error": "domain error"
919
920         The result of the mutation is not mathematically defined,
921         e.g. division by zero.
922
923     "error": "range error"
924
925         The result of the mutation is not representable within the
926         database's format, e.g. an integer result outside the range
927         INT64_MIN...INT64_MAX or a real result outside the range
928         -DBL_MAX...DBL_MAX.
929
930     "error": "constraint violation"
931
932         The mutation caused the column's value to violate a
933         constraint, e.g. it caused a column to have more or fewer
934         values than are allowed, an arithmetic operation caused a set
935         or map to have duplicate elements, or it violated a constraint
936         specified by a column's <base-type>.
937
938 delete
939 ......
940
941 Request object members:
942
943     "op": "delete"                required
944     "table": <table>              required
945     "where": [<condition>*]       required
946
947 Result object members:
948
949     "count": <integer>
950
951 Semantics:
952
953     Deletes all the rows from "table" that match all the conditions
954     specified in "where".
955
956     The "count" member of the result specifies the number of deleted
957     rows.
958
959 wait
960 ....
961
962 Request object members:
963
964     "op": "wait"                        required
965     "timeout": <integer>                optional
966     "table": <table>                    required
967     "where": [<condition>*]             required
968     "columns": [<column>*]              required
969     "until": "==" or "!="               required
970     "rows": [<row>*]                    required
971
972 Result object members:
973
974     none
975
976 Semantics:
977
978     Waits until a condition becomes true.
979
980     If "until" is "==", checks whether the query on "table" specified
981     by "where" and "columns", which is evaluated in the same way as
982     specified for "select", returns the result set specified by
983     "rows".  If it does, then the operation completes successfully.
984     Otherwise, the entire transaction rolls back.  It is automatically
985     restarted later, after a change in the database makes it possible
986     for the operation to succeed.  The client will not receive a
987     response until the operation permanently succeeds or fails.
988     
989     If "until" is "!=", the sense of the test is negated.  That is, as
990     long as the query on "table" specified by "where" and "columns"
991     returns "rows", the transaction will be rolled back and restarted
992     later.
993
994     If "timeout" is specified, then the transaction aborts after the
995     specified number of milliseconds.  The transaction is guaranteed
996     to be attempted at least once before it aborts.  A "timeout" of 0
997     will abort the transaction on the first mismatch.
998
999 Errors:
1000
1001     "error": "not supported"
1002
1003         One or more of the columns in this table do not support
1004         triggers.  This error will not occur if "timeout" is 0.
1005
1006     "error": "timed out"
1007
1008         The "timeout" was reached before the transaction was able to
1009         complete.
1010
1011 commit
1012 ......
1013
1014 Request object members:
1015
1016     "op": "commit"                      required
1017     "durable": <boolean>                required
1018
1019 Result object members:
1020
1021     none
1022
1023 Semantics:
1024
1025     If "durable" is specified as true, then the transaction, if it
1026     commits, will be stored durably (to disk) before the reply is sent
1027     to the client.
1028
1029 Errors:
1030
1031     "error": "not supported"
1032
1033         When "durable" is true, this database implementation does not
1034         support durable commits.
1035
1036 abort
1037 .....
1038
1039 Request object members:
1040
1041     "op": "abort"                      required
1042
1043 Result object members:
1044
1045     (never succeeds)
1046
1047 Semantics:
1048
1049     Aborts the transaction with an error.  This may be useful for
1050     testing.
1051
1052 Errors:
1053
1054     "error": "aborted"
1055
1056         This operation always fails with this error.
1057
1058 comment
1059 .......
1060
1061
1062 Request object members:
1063
1064     "op": "comment"                    required
1065     "comment": <string>                required
1066
1067 Result object members:
1068
1069     none
1070
1071 Semantics:
1072
1073     Provides information to a database administrator on the purpose of
1074     a transaction.  The OVSDB server, for example, adds comments in
1075     transactions that modify the database to the database journal.