A JSON number with an integer value, within a certain range
(currently -2**63...+2**63-1).
-<value>
+<json-value>
Any JSON value.
+<nonnull-json-value>
+
+ Any JSON value except null.
+
<error>
A JSON object with the following members:
"comment": <string> optional
"tables": {<id>: <table-schema>, ...} required
- The "name" identifies the database as a whole. The "comment"
- optionally provides more information about the database. The
- value of "tables" is a JSON object whose names are table names and
- whose values are <table-schema>s.
+ The "name" identifies the database as a whole. It must be
+ provided to most JSON-RPC requests to identify the database being
+ operated on. The "comment" optionally provides more information
+ about the database. The value of "tables" is a JSON object whose
+ names are table names and whose values are <table-schema>s.
<table-schema>
<atomic-type> or a JSON object with the following members:
"type": <atomic-type> required
+ "enum": <value> optional
"minInteger": <integer> optional, integers only
"maxInteger": <integer> optional, integers only
"minReal": <real> optional, reals only
"maxReal": <real> optional, reals only
- "reMatch": <string> optional, strings only
- "reComment": <string> optional, strings only
"minLength": <integer> optional, strings only
"maxLength": <integer> optional, strings only
"refTable": <id> optional, uuids only
An <atomic-type> by itself is equivalent to a JSON object with a
single member "type" whose value is the <atomic-type>.
+ "enum" may be specified as a <value> whose type is a set of one
+ or more values specified for the member "type". If "enum" is
+ specified, then the valid values of the <base-type> are limited to
+ those in the <value>.
+
+ "enum" is mutually exclusive with the following constraints.
+
If "type" is "integer", then "minInteger" or "maxInteger" or both
may also be specified, restricting the valid integer range. If
both are specified, then the maxInteger must be greater than or
specified, then the maxReal must be greater than or equal to
minReal.
- If "type" is "string", then:
-
- "reMatch" may be a JavaScript (Perl 5-like) regular expression
- that restricts the allowed values. The regular expression
- must match the entire string value, that is, it is treated as
- if it begins with ^ and ends with $, regardless of whether it
- really does.
-
- If "reMatch" is specified, then "reComment" may be a string
- that describes the allowed values, phrased so that it fits
- into a sentence such as "This value must be...".
-
- "minLength" and "maxLength" or both may be specified,
- restricting the valid length of value strings. If both are
- specified, then maxLength must be greater than or equal to
- minLength. String length is measured in characters (not bytes
- or UTF-16 code units).
+ If "type" is "string", then "minLength" and "maxLength" or both
+ may be specified, restricting the valid length of value strings.
+ If both are specified, then maxLength must be greater than or
+ equal to minLength. String length is measured in characters (not
+ bytes or UTF-16 code units).
If "type" is "uuid", then "refTable", if present, must be the name
of a table within this database. If "refTable" is set, the
The database wire protocol consists of the following JSON-RPC methods:
+list_dbs
+........
+
+Request object members:
+
+ "method": "list_dbs" required
+ "params": [] required
+ "id": <nonnull-json-value> required
+
+Response object members:
+
+ "result": [<db-name>, ...]
+ "error": null
+ "id": same "id" as request
+
+This operation retrieves an array whose elements are <db-name>s
+that name the databases that can be accessed over this JSON-RPC
+connection.
+
get_schema
..........
Request object members:
"method": "get_schema" required
- "params": [] required
- "id": any JSON value except null required
+ "params": [<db-name>] required
+ "id": <nonnull-json-value> required
Response object members:
"error": null
"id": same "id" as request
-This operation retrieves a <database-schema> that describes the
-hosted database.
+This operation retrieves a <database-schema> that describes hosted
+database <db-name>.
transact
........
Request object members:
- "method": "transact" required
- "params": [<operation>*] required
- "id": any JSON value except null required
+ "method": "transact" required
+ "params": [<db-name>, <operation>*] required
+ "id": <nonnull-json-value> required
Response object members:
"error": null
"id": same "id" as request
-The "params" array for this method consists of zero or more JSON
-objects, each of which represents a single database operation. The
-"Operations" section below describes the valid operations.
+The "params" array for this method consists of a <db-name> that
+identifies the database to which the transaction applies, followed by
+zero or more JSON objects, each of which represents a single database
+operation. The "Operations" section below describes the valid
+operations.
The value of "id" must be unique among all in-flight transactions
within the current JSON-RPC session. Otherwise, the server may return
Request object members:
- "method": "monitor" required
- "params": [<value>, <monitor-requests>] required
- "id": any JSON value except null required
+ "method": "monitor" required
+ "params": [<db-name>, <json-value>, <monitor-requests>] required
+ "id": <nonnull-json-value> required
<monitor-requests> is an object that maps from a table name to a
<monitor-request>.
"id": same "id" as request
This JSON-RPC request enables a client to replicate tables or subsets
-of tables. Each <monitor-request> specifies a table to be replicated.
-The JSON-RPC response to the "monitor" includes the initial contents
-of each table. Afterward, when changes to those tables are committed,
-the changes are automatically sent to the client using the "update"
-monitor notification. This monitoring persists until the JSON-RPC
-session terminates or until the client sends a "monitor_cancel"
-JSON-RPC request.
+of tables within database <db-name>. Each <monitor-request> specifies
+a table to be replicated. The JSON-RPC response to the "monitor"
+includes the initial contents of each table. Afterward, when changes
+to those tables are committed, the changes are automatically sent to
+the client using the "update" monitor notification. This monitoring
+persists until the JSON-RPC session terminates or until the client
+sends a "monitor_cancel" JSON-RPC request.
Each <monitor-request> describes how to monitor a table:
Notification object members:
"method": "update"
- "params": [<value>, <table-updates>]
+ "params": [<json-value>, <table-updates>]
"id": null
-The <value> in "params" is the same as the value passed as the <value>
-in "params" for the "monitor" request.
+The <json-value> in "params" is the same as the value passed as the
+<json-value> in "params" for the "monitor" request.
<table-updates> is an object that maps from a table name to a
<table-update>.
Request object members:
"method": "monitor_cancel" required
- "params": [<value>] required
- "id": any JSON value except null required
+ "params": [<json-value>] required
+ "id": <nonnull-json-value> required
Response object members:
"error": null
"id": the request "id" member
-Cancels the ongoing table monitor request, identified by the <value>
-in "params" matching the <value> in "params" for an ongoing "monitor"
-request. No more "update" messages will be sent for this table
-monitor.
+Cancels the ongoing table monitor request, identified by the
+<json-value> in "params" matching the <json-value> in "params" for an
+ongoing "monitor" request. No more "update" messages will be sent for
+this table monitor.
echo
....
"method": "echo" required
"params": JSON array with any contents required
- "id": <value> required
+ "id": <json-value> required
Response object members:
Notation for the Wire Protocol
------------------------------
+<db-name>
+
+ An <id> that names a database. The valid <db-name>s can be
+ obtained using a "list-db" request. The <db-name> is taken from
+ the "name" member of <database-schema>.
+
<table>
An <id> that names a table.
<set>
- A 2-element JSON array that represents a database set value. The
+ Either an <atom>, representing a set with exactly one element, or
+ a 2-element JSON array that represents a database set value. The
first element of the array must be the string "set" and the second
element must be an array of zero or more <atom>s giving the values
in the set. All of the <atom>s must have the same type.