"getRecordsByIds"
JSON DB "getRecordsByIds"
action retrieves records from a database table using their IDs
The "getRecordsByIds"
action retrieves one or more records from a database table using their IDs. The response message contains one record for each ID specified in the "id"
array.
A table must have a primary key or ID to retrieve records.
Tables created by the
"createTable"
action, automatically have an auto increment"id"
field indexed as a primary key.Tables created by other APIs may not have an
"id"
field; instead, they may have a primary key index that includes one or more fields in the table.The
"getRecordsByIds"
action provides an optional"primaryKeys"
property that can retrieve records using any primary key index.The
"primaryKeys"
property:can be used to retrieve one or more records from a database table using primary key identifiers
is required if
"id"
is omittedis
"null"
if using"ids"
The
"id"
property:is required if
"primaryKeys"
is omitted and supplied by the client to uniquely identify each requestis
"null"
if using the"primaryKeys"
propertyis the client's message identifier and should be a string containing a value that is unique to the client
may also be a number, array, or object (this is discouraged)
In asynchronous protocols, such as MQTT,
"getRecordsByIds"
enables the client to associate response messages with the original request messages since the server adds this property (with the client's value) to each response message.JSON DB API sends a response message with an error if
"id"
is missing ornull
. Although jsonAction allows the"id"
to be null or omitted, JSON DB API does not.The server includes the
"id"
in reply messages using the exact value and data type that the client supplied in the request. If the client sends a string, the server replies with the identical string. If it sends a number, the server replies with the identical number. This behavior is required by jsonAction. A string is preferred because it is the fastest and easiest for the server to return the identical value. If a number is used, it should be an integer to avoid differences in binary rounding behavior between the client and the server.The
"id"
should be unique from the client's perspective. From the server's perspective, the true unique"id"
of a request-response message pair is the combination of the client id plus the server’s auth id for that client. The"id"
will likely not be unique from the server's perspective since different clients can use the same"id"
values).
Retrieving one record by its ID
Loading a previously saved set of IDs to quickly retrieve a set of records
Using foreign key IDs to look up records
The fastest way to retrieve a specific record is to look it up by its ID.
Results start to return more slowly as more records are requested.
Request examples
Arrays request
{ "api": "db", "action": "getRecordsByIds", "authToken": "replaceWithAuthtokenFromCreateSession", "requestId": "1", "params": { "tableName": "athlete", "ids": [ 3 ] }, "responseOptions": { "dataFormat": "arrays" } }
{ "api": "db", "authToken": "replaceWithAuthtokenFromCreateSession", "action": "getRecordsByIds", "requestId": "2", "params": { "databaseName": "ctreeSQL", "tableName": "athlete", "primaryKeys": [ [ { "fieldName": "id", "value": 3 } ] ] }, "responseOptions": { "dataFormat": "objects" } }
{ "api": "db", "apiVersion": "1.0", "requestId": "3", "authToken": "replaceWithAuthtokenFromCreateSession", "action": "getRecordsByIds", "params": { "databaseName": "ctreeSQL", "ownerName": "admin", "tableName": "athlete", "ids": [ 6, 2, 4 ] }, "responseOptions": { "binaryFormat": "hex", "dataFormat": "objects", "numberFormat": "string", "includeFields": [], "excludeFields": [] }, "debug": "max" }
{ "authToken": "authToken", "result": { "dataFormat": "arrays", "binaryFormat": "hex", "fields": [ { "name": "id", "type": "bigint", "length": null, "scale": null, "defaultValue": null, "nullable": false, "primaryKey": 1, "autoValue": "incrementOnInsert" }, { "name": "changeId", "type": "bigint", "length": null, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "changeId" }, { "name": "name", "type": "varchar", "length": 30, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "ranking", "type": "smallint", "length": null, "scale": null, "defaultValue": null, "nullable": false, "primaryKey": 0, "autoValue": "none" }, { "name": "birthDate", "type": "date", "length": null, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "playerNumber", "type": "number", "length": 32, "scale": 6, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "livedPast2000", "type": "bit", "length": null, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "earnings", "type": "money", "length": 32, "scale": 4, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "favoriteSaying", "type": "varchar", "length": 500, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" } ], "data": [ [ 3, 1291366, "Muhammad Ali", 3, "1942-01-17", 1, true, 60000000, "Float like a butterfly, sting like a bee." ] ], "primaryKeyFields": [ "id" ], "changeIdField": "changeId", "moreRecords": false, "requestedRecordCount": 0, "returnedRecordCount": 1, "totalRecordCount": 1 }, "requestId": "3", "debugInfo": { "request": { "authToken": "authToken", "api": "db", "action": "getRecordsByIds", "params": { "databaseName": "ctreeSQL", "tableName": "athlete", "primaryKeys": [ [ { "fieldName": "id", "value": 3 } ] ] }, "requestId": "2", "responseOptions": { "dataFormat": "arrays" }, "debug": "max" }, "serverSuppliedValues": { "databaseName": "ctreeSQL", "ownerName": "admin" }, "errorData": { "errorData": null }, "warnings": [] }, "errorCode": 0, "errorMessage": "" }
{ "authToken": "authToken", "result": { "dataFormat": "objects", "binaryFormat": "hex", "fields": [ { "name": "id", "type": "bigint", "length": null, "scale": null, "defaultValue": null, "nullable": false, "primaryKey": 1, "autoValue": "incrementOnInsert" }, { "name": "changeId", "type": "bigint", "length": null, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "changeId" }, { "name": "name", "type": "varchar", "length": 30, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "ranking", "type": "smallint", "length": null, "scale": null, "defaultValue": null, "nullable": false, "primaryKey": 0, "autoValue": "none" }, { "name": "birthDate", "type": "date", "length": null, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "playerNumber", "type": "number", "length": 32, "scale": 6, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "livedPast2000", "type": "bit", "length": null, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "earnings", "type": "money", "length": 32, "scale": 4, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" }, { "name": "favoriteSaying", "type": "varchar", "length": 500, "scale": null, "defaultValue": null, "nullable": true, "primaryKey": 0, "autoValue": "none" } ], "data": [ { "birthDate": "1969-01-03", "changeId": "1291366", "earnings": "990000000", "favoriteSaying": "Once something is a passion, the motivation is there.", "id": "6", "livedPast2000": true, "name": "Michael Schumacher", "playerNumber": "1", "ranking": "6" }, { "birthDate": "1895-02-06", "changeId": "1291366", "earnings": "800000", "favoriteSaying": "Every strike brings me closer to the next home run.", "id": "2", "livedPast2000": false, "name": "Babe Ruth", "playerNumber": "3", "ranking": "2" }, { "birthDate": "1940-10-23", "changeId": "1291366", "earnings": "115000000", "favoriteSaying": "Everything is practice.", "id": "4", "livedPast2000": true, "name": "Pele", "playerNumber": "10", "ranking": "4" } ], "primaryKeyFields": [ "id" ], "changeIdField": "changeId", "moreRecords": false, "requestedRecordCount": 3, "returnedRecordCount": 3, "totalRecordCount": 3 }, "requestId": "3", "debugInfo": { "request": { "authToken": "authToken", "api": "db", "action": "getRecordsByIds", "params": { "databaseName": "ctreeSQL", "ownerName": "admin", "tableName": "athlete", "ids": [ 6, 2, 4 ] }, "apiVersion": "1.0", "requestId": "3", "responseOptions": { "binaryFormat": "hex", "dataFormat": "objects", "numberFormat": "string", "includeFields": [], "excludeFields": [] }, "debug": "max" }, "serverSuppliedValues": { "databaseName": "ctreeSQL", "ownerName": "admin" }, "errorData": { "errorData": null }, "warnings": [] }, "errorCode": 0, "errorMessage": "" }
Use the getRecordsByIds JSON API action to retrieve records from a database table using their IDs
The "params"
property is an object that contains an action's parameters. Each action defines its own required and optional properties.
Properties summary
"params"
properties summaryProperty | Description | Default | Type | Limits (inclusive) | ||||
---|---|---|---|---|---|---|---|---|
specifies the name of a database | Defaults to the | string | 1 to 64 bytes | |||||
specifies a unique identifier for a row in a table. It is mutually exclusive with Mutually exclusive with |
Required when | array | ||||||
specifies the unique name of a schema in a database |
| string | 1 to 64 bytes | |||||
specifies key values used by Mutually exclusive with |
Required when | array of arrays | ||||||
specifies the name of a table | Required - No default value | string | 1 to 64 bytes | |||||
specifies the name of a | Optional name of a code package | string | The string must contain the name of an existing code package with a | |||||
specifies the format in which variant fields are returned |
| string |
|
The "databaseName"
property is an optional string that specifies the database that contains the tables. It defaults to the database name supplied at login.
Note
In the API Explorer, "defaultDatabaseName"
is set to "ctreeSQL"
in the "createSession"
action that happens at login.
A zero-length
"databaseName"
is invalid.Its limits are from 0 to 64 bytes.
If the
"databaseName"
property is omitted or set tonull
, the server will use the default database name specified at login.If no default database is specified during
"createSession"
,"defaultDatabaseName"
will be set to the"defaultDatabaseName"
value that is specified in theservices.json
file.
The "ids"
property is an array that contains a unique identifier for a row in a table. Its default value is "null"
but it is required if the "primaryKeys"
property is "null"
or not specified.
The
"ids"
property is mutually exclusive with the"primaryKeys"
property meaning it is required when"primaryKeys"
is omitted or an error is returned if both have values.It is typically an array of integers (
"ids": [1,3,5
]).It can be an array of an array of strings (
"ids": ["9555444333222111","9555444333222112", "9555444333222113"]
).A string
"id"
supports numbers larger than9,007,199,254,740,991
.This is the largest number supported by many programming languages and JSON parser implementations that use IEEE double-precision floats to hold numbers.
It can be the primary key value of another field in the table making it useful when your table is created by another API, such as SQL, that allows any field in the table to be the primary key.
If your table does not have an
"id"
field but uses a"vin"
field as the primary key, you can use vin values to look up records ("ids": [ "4Y1SL65848Z411439", "1HGBH41JXMN109186" ]
).If your table uses more than one field as the primary key, you must use the
"primaryKeys"
property to look up records.Tip
The
"getRecordsByIds''
action uses a primary key index to look up records. A primary key index must be a unique, non-null index without conditional filtering. For best performance and maximum simplicity, create tables using the JSON DB API because it automatically creates an auto increment"id"
field that is indexed as a primary key.
The "ownerName"
property is an optional string from 1 to 64 bytes that specifies the account that owns an object.
The "primaryKeys"
property is an array of arrays that contain key values used by the "getRecordsByIds"
action to find and return one or more records. The default value is "null"
but it is required if the "ids"
property is omitted.
"primaryKeys"
is best used if tables were created with primary keys composed of multiple fields. If primary keys are composed of a single field, it is best to use"ids"
.Note
Tables created using JSON DB API actions cannot create primary keys composed of multiple fields.
A table must have a primary key defined in order to use
"primaryKeys"
The
"primaryKeys"
property is mutually exclusive with the"ids"
property meaning it is required when"ids"
is omitted or an error is returned if both have values.The
"primaryKeys"
property is an array of arraysThe outer array contains one or more primary key definitions which allow the server to retrieve multiple records at a time.
Each inner array is a primary key definition that specifies the values the server needs to retrieve one matching record.
A primary key definition consists of one or more objects where each object is a field-value pair that uses the following structure
({ "fieldName": "someField","value": "someValue" })
.
Example
If your table uses the "first_name"
and "last_name"
fields as the primary key, the following "primaryKeys"
property will retrieve two records.
Note
If your table does not have a primary key, its records cannot be retrieved, updated or deleted using the "getRecordsByIds"
, "updateRecords"
and "deleteRecords"
actions. Other getRecords
actions can query its records.
"primaryKeys": [ [ { "fieldName": "first_name", "value": "Sam" }, { "fieldName": "last_name", "value": "I-am" } ], [ { "fieldName": "first_name", "value": "The Cat" }, { "fieldName": "last_name", "value": "in the Hat" } ] ]
The "tableName"
property is a string containing the name of a table.
A table name may contain up to 64 ASCII characters and must not start with a number.
The "transformCodeName"
property is an optional string that specifies the name of an existing code package with a "codeType"
of "getRecordsTransform"
.
When this property is present in a "getRecords..."
transform, the server passes the query results to the code package as an array of objects. The code transforms the records and returns a valid JSON value. The server places the value in the "data"
property of the response to the "getRecords..."
action.
The "variantFormat"
property is an optional enumerated string that specifies the format in which variant fields are returned. It may have one of the following values: "variant"
, "base64"
, "hex"
, or "utf8"
:
"variant"
returns a Variant Object containing JSON describing information about the variant value, including its data type and encoding."hex"
converts the binary value to hexadecimal and returns the field value as a JSON string."base64"
converts the binary value to Base64 and returns the field value as a JSON string."utf8"
converts the binary value into a UTF-8 string and returns the value as a JSON string.
The "variantFormat"
property converts the variant value into the form an application needs.
Some applications prefer to receive the JSON object form of the variant so they have the metadata describing its data type and how it is encoded. The Variant Object is ideal for web services that transform data.
Some applications prefer to process the variant's raw binary value because they use heuristics to determine the data type. They may want a variant returned as Base64 because it is the most efficient encoding of binary data in a JSON string.
Some applications may prefer to display the variant's raw binary value as a hexadecimal string because they may not have a widget that can display and edit all possible variant values such as numbers, strings, Booleans, images, audio, JSON, XML, etc. When the user wants to view the actual value, the application queries the record again using the
"variantFormat": "variant"
setting to get the data type so it can display the value in a more useful manner.
The following examples show the same variant values encoded in various ways.
The first value is a GIF image containing a single black pixel.
The second is the JSON document
{ "myProperty": "myValue" }
.The third value is a UTF-8 encoded string
"UTF-8 encoded string"
.
A "getRecords..."
action containing "variantFormat": "variant"
causes the server to return a Variant Object for each variant field. A Variant Object is a JSON object with the property "schema": "jsonaction.org/schemas/variantOjbect"
.
"getRecords..."
action containing a GIF image as a Variant Object encoded as Base64{ "data": [ { "myField": { "schema": "jsonaction.org/schemas/variantObject", "value": "R0lGODlhAQABAIAAAAAAAP///yH5BAUAAAEALAAAAAABAAEAAAICRAEAOw==", "valueEncoding": [ "base64" ], "type": "gif", "storageEncoding": ["7z"] } } ] }
"getRecords..."
response containing the JSON object { "myProperty": "myValue" }
as a Variant Object encoded as JSON{ "data": [ { "myField": { "schema": "jsonaction.org/schemas/variantObject", "value": { "myProperty": "myValue" }, "valueEncoding": [ "json" ], "type": "json", "storageEncoding": ["7z"] } } ] }
"getRecords..."
response containing the UTF-8 string "UTF-8 encoded string"
as a Variant Object encoded as UTF-8{ "data": [ { "myField": { "schema": "jsonaction.org/schemas/variantObject", "value": "UTF-8 encoded string", "valueEncoding": [ "utf8" ], "type": "string", "storageEncoding": ["7z"] } } ] }
A "getRecords..."
action containing "variantFormat": "hex"
causes the server to return the field value as a Hexadecimal-encoded string instead of a Variable Object.
"getRecords..."
response containing a GIF image encoded in Hexadecimal{ "data": [ { "myField": "47494638396101000100800000000000ffffff21f90405000001002c00000000010001000002024401003b" } ] }
"getRecords..."
response containing the JSON object { "myProperty": "myValue" }
encoded in Hexadecimal{ "data": [ { "myField": "7b20226d7950726f7065727479223a20226d7956616c756522207d" } ] }
"getRecords..."
response containing the UTF-8 string "UTF-8 encoded string"
encoded in Hexadecimal{ "data": [ { "myField": "5554462d3820656e636f64656420737472696e67" } ] }
A "getRecords..."
action containing "variantFormat": "base64"
causes the server to return the field value as a Base64-encoded string instead of a Variable Object.
"getRecords..."
response containing a GIF image encoded in Base64{ "data": [ { "myField": "R0lGODlhAQABAIAAAAAAAP///yH5BAUAAAEALAAAAAABAAEAAAICRAEAOw==" } ] }
"getRecords..."
response containing the JSON object { "myProperty": "myValue" }
encoded in Base64{ "data": [ { "myField": "eyAibXlQcm9wZXJ0eSI6ICJteVZhbHVlIiB9" } ] }
"getRecords..."
response containing the UTF-8 string "UTF-8 encoded string"
encoded in Base64{ "data": [ { "myField": "VVRGLTggZW5jb2RlZCBzdHJpbmc=" } ] }
A "getRecords..."
action containing "variantFormat": "utf8"
causes the server to return the field value as a UTF-8-encoded string instead of a Variable Object.
"getRecords..."
response containing a GIF Image encoded as a UTF-8 string{ "data": [ { "myField": "GIF89a € ÿÿÿ!ù , D ;" } ] }
"getRecords..."
response containing the JSON object { "myProperty": "myValue" }
encoded as a UTF-8 string{ "data": [ { "myField": "{ \"myProperty\": \"myValue\" }" } ] }
"getRecords..."
response containing the UTF-8 string "UTF-8 encoded string"
{ "data": [ { "myField": "UTF-8 encoded string" } ] }
The "responseOptions"
property is an optional object that configures the server to return a customized response.
None of these properties are required, but some are mutually exclusive:
"includeFields"
and"excludeFields"
are mutually exclusive.Use
"includeFields"
or"excludeFields"
to control which record fields are present in the data."includePaths"
and"excludePaths"
are mutually exclusive.Use
"includePaths"
or"excludePaths"
to control which JSON properties are included in the data.
A JSON path includes the JSON field name plus the path of the property within the JSON field.
Use
"omit"
to remove a property from a response, such as omitting"errorMessage"
.Use
"dataFormat"
to control whether data comes back as an array of arrays or an array of objects.Use
"numberFormat"
to control whether JSON numbers are rendered as digits or digits embedded in a string.
Full example
"responseOptions": { "omit": ["error", "fieldDefs" ] "dataFormat": "arrays", "numberFormat": "number", "includeFields": [ "name", "email" ], "excludeFields": [], "includePaths": [], "excludePaths": [ "email.domain" ], "dataFormat": "arrays", "binaryFormat": "base64" }
Properties summary
"responseOptions"
properties summaryProperty | Description | Default | Type | Limits (inclusive) | |||
---|---|---|---|---|---|---|---|
specifies how binary values are returned |
| string |
| ||||
specifies what format the results will be returned in |
| string |
| ||||
excludeFields | specifies which fields are excluded in the response message |
When the array is empty or the property is not specified, the | array | ||||
excludePaths | specifies which paths are excluded in the response message |
When the array is empty or the property is not specified, the | array | ||||
includeFields | specifies which fields are returned in the response message |
When the array is empty or the property is not specified, all fields are returned | array | ||||
includePaths | specifies which paths are included in the response message |
When the array is empty or the property is not specified, all paths are returned | array | ||||
specifies how numbers are formatted in the JSON response message |
| string |
| ||||
omit | specifies which properties are excluded in the response message |
| object |
Properties summary
"result"
properties summaryProperty | Description | Type | Limits (inclusive) | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
specifies how binary values are returned | string enum |
| ||||||||||||||||||||||
data | specifies an array or object that the server returns, such as records returned by a query. It is always included in a response but contains an empty array when no results are available. when no results are available, it is an empty array | array | Its contents are determined by the action | |||||||||||||||||||||
specifies the format of the data in the | string |
| ||||||||||||||||||||||
specifies an array of objects set by the server, where each object is the definition of a field in a table defining the details of each field returned by a query | array | |||||||||||||||||||||||
| specifies when and how the server automatically sets the field value | string |
| |||||||||||||||||||||
| specifies the default value of a field | string | 0 to 65,500 bytes | |||||||||||||||||||||
| specifies the length of a field's value in a record | integer |
| |||||||||||||||||||||
| specifies the new name of the field | string | 0 to 64 bytes | |||||||||||||||||||||
| allows a field to contain a NULL value when | Boolean |
| |||||||||||||||||||||
| adds a field to the specified ordinal position of the table's primary key when > 0 | integer |
| |||||||||||||||||||||
| specifies the number of places to the right of the decimal point | integer |
| |||||||||||||||||||||
| specifies the type of field | string |
| |||||||||||||||||||||
primaryKey | represents the order of the primary keys in the index when | integer |
| |||||||||||||||||||||
details how many records were requested in the | integer |
| ||||||||||||||||||||||
details how many records were returned from the | integer |
| ||||||||||||||||||||||
specifies an integer, the server sets its value to the number of records returned by a query | integer |
|
This property controls when and how the server automatically sets the field value.
Specify only one of these values per field.
"none"
indicates the server does not automatically set the field's value."incrementOnInsert"
indicates the server automatically increments a field’s value each time the server inserts a new record. It applies to fields that are of the type of decimal or one of the integer types, such as"bigint"
. Only one field per table can have this attribute. The server returns an error when assigning this attribute to multiple fields. The JSON DB API automatically creates the"id"
field as an"incrementOnInsert"
field. If you apply this attribute to another field, it becomes the only automatically incremented field in the table. If you want that field to be the primary key, assign"primaryKey": 1
to it."timestampOnInsert"
indicates the server automatically sets a field’s value to the current date and time of an insert. It applies only to fields with a type of"timestamp"
."timestampOnUpdate"
indicates the server automatically sets a field’s value to the current date and time of an update. It applies only to timestamp fields."timestampOnUpdateAndInsert"
indicates the server automatically sets a field’s value to the current date and time of an insert and an update. It applies only to fields with a type of"timestamp"
."changeId"
indicates the server uses the field for optimistic locking. The server automatically sets the field's value to the internal transaction number used during the last update of the record. This value changes each time the server updates the record. A table may only have one change tracking field. The field type must be"bigint"
.The JSON DB API automatically creates a
"changeid"
field with change-tracking functionality.Change tracking is optional in the CTDB and ISAM APIs. The application must create a 64-bit integer field and assign change-tracking functionality to it.
The "binaryFormat"
property designates how binary values are formatted in the JSON request and JSON response message. The default value is "base64"
.
Note
Typically, response options apply only to the server’s response, but the "binaryFormat"
property applies to both the request and the response.
The
"binaryFormat"
property may occur inside"params"
,"responseOptions"
,"defaultResponseOptions"
, and"result"
.When
"binaryFormat"
occurs in"params"
it specifies how the sender represents binary values.For example, when
"binaryFormat"
is set to"hex"
, the FairCom server expects the binary values of fields and keys to be represented in strings with hexadecimal format.When
"binaryFormat"
occurs in"responseOptions"
or"defaultResponseOptions"
it specifies how the FairCom server should represent binary values in responses.For example, when
"binaryFormat"
is set to"hex"
, the FairCom server represents binary values in strings with hexadecimal format.When
"binaryFormat"
occurs in"result"
it signifies how binary values are represented.For example, when
"binaryFormat"
is set to "base64", the FairCom server represents binary values in the response in base64 format.The following are the possible values for each format.
"base64"
When the server reads and writes from a binary field, it represents the binary value as a base64 string.
Base64 is harder for people to read and convert to binary.
Base64 creates the smallest payload for the most efficient data transmission in JSON.
"base64"
strings contain the characters0
-9
,A
-Z
,a
-z
,+
,/
, and=
.
"hex"
When the server reads and writes from a binary field, it represents the binary value as a hexadecimal string.
Hexadecimal is easier for people to read and convert to binary.
Hexadecimal creates a 30% larger payload than
"base64"
, which makes it less efficient for data transmission.Hexadecimal strings contain the characters
0
-9
andA
-F
.
"byteArray"
When the server reads and writes from a binary field, it represents the binary value as an array of bytes.
An array of bytes is easiest for a program to manipulate.
An array of bytes creates a larger payload than
"base64"
and"hex"
, which makes it less efficient for data transmission.An array of bytes returns a JSON array containing one integer number between 0 and 255 for each byte in the binary value:
"aBinaryField": [ 255, 0, 255 ]
Examples
Create a "binary_test"
table
This example creates a table containing one binary field named "bin"
with a fixed length of 5 bytes.
{ "api": "db", "action": "createTable", "params": { "tableName": "binary_test", "fields": [ { "name": "bin", "type": "binary", "length": 5 } ] }, "authToken": "replaceWithValidAuthtoken" }
Insert a record into the "binary_test"
table using an array of bytes format
This example inserts a record with the ASCII characters "123"
in the "bin"
field. The value of "bin"
is represented as an array of bytes.
{ "api": "db", "action": "insertRecords", "params": { "tableName": "binary_test", "dataFormat": "objects", "binaryFormat": "byteArray", "sourceData": [ { "bin": [49,50,51] } ] }, "authToken": "replaceWithValidAuthtoken" }
Insert a record into the "binary_test"
table using hexadecimal format
This example inserts a record with the ASCII characters "123"
in the "bin"
field. The value of "bin"
is represented as a string in hexadecimal format.
{ "api": "db", "action": "insertRecords", "params": { "tableName": "binary_test", "dataFormat": "objects", "binaryFormat": "hex", "sourceData": [ { "bin": "313233" } ] }, "authToken": "replaceWithValidAuthtoken" }
Insert a record into the "binary_test"
table using base64 format
This example inserts a record with the ASCII characters "123"
in the "bin"
field. The value of "bin"
is represented as a string in base64 format.
{ "api": "db", "action": "insertRecords", "params": { "tableName": "binary_test", "dataFormat": "objects", "binaryFormat": "base64", "sourceData": [ { "bin": "MTIz" } ] }, "authToken": "replaceWithValidAuthtoken" }
Retrieve a record with "binaryFormat"
as an array of bytes
This example requests the first record in the "binary_test" table with the value of "bin"
represented as an array of bytes.
{ "api": "db", "action": "getRecordsByTable", "params": { "tableName": "binary_test", "maxRecords": 1 }, "responseOptions": { "binaryFormat": "byteArray", "dataFormat": "objects", "numberFormat": "number" }, "authToken": "replaceWithValidAuthtoken" }
Response
Note
Our examples insert only 3 bytes into "bin"
. Because the "bin"
field has a fixed-length if 5 bytes, the server pads unused bytes with 0x00
and stores the result. When a record is retrieved, the server returns all 5 bytes.
{ "authToken": "authtokenFromServer", "result": { "dataFormat": "objects", "binaryFormat": "byteArray", "fields": [ { "name": "id", "type": "bigint", "length": null, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": false, "primaryKey": 1 }, { "name": "changeId", "type": "bigint", "length": null, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": true, "primaryKey": 0 }, { "name": "bin", "type": "binary", "length": 5, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": true, "primaryKey": 0 } ], "data": [ { "bin": [49,50,51,0,0], "changeId": 50217, "id": 1 } ], "moreRecords": true, "requestedRecordCount": 1, "returnedRecordCount": 1, "totalRecordCount": 3 }, "errorCode": 0, "errorMessage": "" }
Retrieve a record with "binaryFormat"
as hexadecimal
This example requests the first record in the "binary_test" table with the value of "bin"
represented as a hexadecimal string.
{ "api": "db", "action": "getRecordsByTable", "params": { "tableName": "binary_test", "maxRecords": 1 }, "responseOptions": { "binaryFormat": "hex", "dataFormat": "objects", "numberFormat": "number" }, "authToken": "replaceWithValidAuthtoken" }
Response
{ "authToken": "authtokenFromServer", "result": { "dataFormat": "objects", "binaryFormat": "byteArray", "fields": [ { "name": "id", "type": "bigint", "length": null, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": false, "primaryKey": 1 }, { "name": "changeId", "type": "bigint", "length": null, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": true, "primaryKey": 0 }, { "name": "bin", "type": "binary", "length": 5, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": true, "primaryKey": 0 } ], "data": [ { "bin": "3132330000", "changeId": 50217, "id": 1 } ], "moreRecords": true, "requestedRecordCount": 1, "returnedRecordCount": 1, "totalRecordCount": 3 }, "errorCode": 0, "errorMessage": "" }
Retrieve a record with "binaryFormat"
as base64
This example requests the first record in the "binary_test" table with the value of "bin"
represented as a base64 string.
{ "api": "db", "action": "getRecordsByTable", "params": { "tableName": "binary_test", "maxRecords": 1 }, "responseOptions": { "binaryFormat": "base64", "dataFormat": "objects", "numberFormat": "number" }, "authToken": "replaceWithValidAuthtoken" }
Response
{ "authToken": "authtokenFromServer", "result": { "dataFormat": "objects", "binaryFormat": "byteArray", "fields": [ { "name": "id", "type": "bigint", "length": null, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": false, "primaryKey": 1 }, { "name": "changeId", "type": "bigint", "length": null, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": true, "primaryKey": 0 }, { "name": "bin", "type": "binary", "length": 5, "scale": null, "autoTimestamp": "none", "defaultValue": null, "nullable": true, "primaryKey": 0 } ], "data": [ { "bin": "MTIzAAA=", "changeId": 50217, "id": 1 } ], "moreRecords": true, "requestedRecordCount": 1, "returnedRecordCount": 1, "totalRecordCount": 3 }, "errorCode": 0, "errorMessage": "" }
The "dataFormat"
property is an optional, case-insensitive string enum that defines the format of the response in the "data"
property. The default format is an array of arrays. The alternative is an array of objects. The default for "dataFormat"
can be changed during a "createSession"
action by assigning a different value to the "dataFormat"
property in "defaultResponseOptions"
.
"dataFormat"
property:Two of those versions occur in a request and another occurs in a response. They all indicate how data is formatted.
"dataFormat"
in the request inside"responseOptions"
determines how the"data"
property in the response is formatted.Possible values include:
"arrays"
This is the default and causes the server to return results as an array of arrays, which is the most efficient.
"objects"
This returns results as an array of objects. This is less efficient but is simpler to generate, read, and troubleshoot.
"dataFormat"
in the request in the"params"
object notifies the server how the"sourceData"
property is formatted in the request. This version is rarely used because of the default"autoDetect"
behavior.Possible values include:
"arrays"
This causes the server to return results as an array of arrays, which is the most efficient.
"objects"
This returns results as an array of objects. This is less efficient but is simpler to generate, read, and troubleshoot.
"autoDetect"
This is the default and causes the server to automatically detect the format of the data in the
"sourceData"
property.
"dataFormat"
in the response shows the client how the server formatted the"data"
property.Possible values include:
"arrays"
This is the default and causes the server to return results as an array of arrays, which is the most efficient.
"objects"
This returns results as an array of objects. This is less efficient but is simpler to generate, read, and troubleshoot.
The "fields"
property is a required array of field-type objects. There is one object for each top-level field in the array. Each object identifies the actual data type of the field as stored in the database.
A field-type object is used when creating a table. It contains one object for each field definition returned in the data.
Full request example
"fields": [ { "name": "name", "type": "varchar", "length": 50, "scale": null, "defaultValue": null, "nullable": false, "primaryKey":1 } ]
Full response example
"fields": [ { "name": "id", "type": "bigint", "length": null, "scale": null, "autoValue": "none", "defaultValue": null, "nullable": false, "primaryKey": 1 } ]
The "requestedRecordCount"
property is a signed, 32-bit integer set by the server in response to the "getRecordsFromCursor"
method.
It makes it easy to know how many records were requested in the last call to
"getRecordsFromCursor"
.An application can use
"requestedRecordCount"
in conjunction with"returnedRecordCount"
to determine if fewer records were returned than requested, which occurs when the cursor reaches the end of the recordset.
The "returnedRecordCount"
is a 32-bit integer set by the server in response to the "getRecordsFromCursor"
method.
It makes it easy to know how many records were returned from the last call to
"getRecordsFromCursor"
.An application can use
"returnedRecordCount"
in conjunction with"requestedRecordCount"
to determine if fewer records were returned than requested, which occurs when the cursor reaches the end of the recordset.
The "totalRecordCount"
property contains the total available number of records that can be returned from a query.
The
"totalRecordCount"
is set to-1
, when the server does not know the total record count.A very fast way to get the total number of records in a table is to call the
"getRecordsByTable"
method without applying a"tableFilter"
. This immediately returns the count without reading and counting records.For most methods, the server does not calculate
"totalRecordCount"
because calculating it requires walking all records in the query, which may take a significant amount of time.When the result is returned as a cursor,
"totalRecordCount"
is the total number of records that the cursor can traverse.Note
This does not apply to cursor responses.
When the result returns records directly,
"totalRecordCount"
is the total number of records that can be retrieved – not necessarily the number of records returned.