The "getRecordsByPartialKeyRange" action is the fastest way to return all records that match a partial key value in index order ascending or descending. When the results contain too many records to retrieve all at once, use a cursor, which makes it easy, fast, and efficient to paginate results. See Most effective ways to return data from the JSON DB API. Returning a cursor and returning records directly are mutually exclusive operations.
This action returns records that match index keys against a partial key supplied by you, such as records starting with "Mi". If no matching key is found, no records are returned and the current record for a cursor is set to the last record in the index.
- In JSON all binary values are encoded as a base64 value inside a string. Thus, if the key is a binary value, you encode a binary value as a base64 value and assign it to the partial key.
- Results can be further filtered by a table filter expression, which filters records using one or more fields in the table.
- A table filter is applied after a record is retrieved from the index. The index filter primarily controls which records are returned and the table filter subsequently filters the records.
- The results are returned in ascending or descending index order.
- This action can also return specific subsets of records from the results by skipping over records (forward or backward) and limiting the number returned.
- You can specify which fields and JSON properties are included in the results.
- This action can return a cursor, which allows the
"getRecordsFromCursor"action to retrieve a large number of records efficiently.
- Results are returned quickly when the index range returns few records.
- Results return less quickly when:
- The
"indexFilter"property creates a large range of records. - The
"skipRecords"property skips over many records. - The
"tableFilter"property further filters the results.
- The
Important The index is required and is used to limit which records are retrieved. Records are retrieved in index order.
Request examples
Minimal
{
"action": "getRecordsByPartialKeyRange",
"params": {
"tableName": "athlete",
"indexFilter": {
"indexName": "admin_athlete_id_pk",
"partialKey": "Mi"
}
},
"authToken": "replaceWithAuthTokenFromCreateSession"
}Cursor
{
"api": "db",
"requestId": "2",
"action": "getRecordsByPartialKeyRange",
"params": {
"databaseName": "ctreeSQL",
"tableName": "athlete",
"indexFilter": {
"indexName": "admin_athlete_id_pk",
"partialKey": "Mi"
},
"returnCursor": true
},
"authToken": "replaceWithAuthTokenFromCreateSession"
}Maximal
{
"api": "db",
"apiVersion": "1.0",
"requestId": "3",
"action": "getRecordsByPartialKeyRange",
"params": {
"databaseName": "ctreeSQL",
"ownerName": "admin",
"tableName": "athlete",
"fixedLengthCharFormat": "sql",
"tableFilter": "ranking < 4",
"indexFilter": {
"indexName": "admin_athlete_id_pk",
"partialKey": "M"
},
"reverseOrder": false,
"returnCursor": false,
"skipRecords": 0,
"maxRecords": -1
},
"responseOptions": {
"includebookmarks": false,
"binaryFormat": "hex",
"dataFormat": "objects",
"numberFormat": "string",
"variantFormat": "variantObject",
"includeFields": [
"name"
],
"excludeFields": []
},
"debug": "max",
"authToken": "replaceWithAuthTokenFromCreateSession"
}
Response examples
Minimal
{
"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": "1963-02-17",
"changeId": 1291366,
"earnings": 1700000000,
"favoriteSaying": "There is no 'i' in team but there is in win.",
"id": 1,
"livedPast2000": true,
"name": "Michael Jordan",
"playerNumber": 23,
"ranking": 1
},
{
"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": "1942-01-17",
"changeId": 1291366,
"earnings": 60000000,
"favoriteSaying": "Float like a butterfly, sting like a bee.",
"id": 3,
"livedPast2000": true,
"name": "Muhammad Ali",
"playerNumber": 1,
"ranking": 3
},
{
"birthDate": "1940-10-23",
"changeId": 1291366,
"earnings": 115000000,
"favoriteSaying": "Everything is practice.",
"id": 4,
"livedPast2000": true,
"name": "Pele",
"playerNumber": 10,
"ranking": 4
},
{
"birthDate": "1961-01-26",
"changeId": 1291366,
"earnings": 1720000,
"favoriteSaying": "You miss 100 percent of the shots you never take.",
"id": 5,
"livedPast2000": true,
"name": "Wayne Gretzky",
"playerNumber": 99,
"ranking": 5
},
{
"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
}
],
"primaryKeyFields": [
"id"
],
"changeIdField": "changeId",
"moreRecords": false,
"requestedRecordCount": 20,
"returnedRecordCount": 6,
"totalRecordCount": 6
},
"errorCode": 0,
"errorMessage": "",
"authToken": "replaceWithAuthTokenFromCreateSession"
}Cursor
{
"result": {
"cursorId": "cursorId",
"totalRecordCount": -1
},
"requestId": "2",
"errorCode": 0,
"errorMessage": "",
"authToken": "replaceWithAuthTokenFromCreateSession"
}Maximal
{
"result": {
"dataFormat": "objects",
"binaryFormat": "hex",
"fields": [
{
"name": "name",
"type": "varchar",
"length": 30,
"scale": null,
"defaultValue": null,
"nullable": true,
"primaryKey": 0,
"autoValue": "none"
}
],
"data": [
{
"name": "Michael Jordan"
},
{
"name": "Babe Ruth"
},
{
"name": "Muhammad Ali"
}
],
"primaryKeyFields": [
"id"
],
"changeIdField": "changeId",
"moreRecords": false,
"requestedRecordCount": 3,
"returnedRecordCount": 3,
"totalRecordCount": 3
},
"requestId": "3",
"debugInfo": {
"request": {
"api": "db",
"action": "getRecordsByPartialKeyRange",
"params": {
"databaseName": "ctreeSQL",
"ownerName": "admin",
"tableName": "athlete",
"tableFilter": "ranking < 4",
"indexFilter": {
"indexName": "admin_athlete_id_pk",
"partialKey": "M"
},
"reverseOrder": false,
"returnCursor": false,
"skipRecords": 0,
"maxRecords": -1
},
"apiVersion": "1.0",
"requestId": "3",
"responseOptions": {
"binaryFormat": "hex",
"dataFormat": "objects",
"numberFormat": "string",
"variantFormat": "variantObject",
"includeFields": [
"name"
],
"excludeFields": []
},
"debug": "max",
"authToken": "replaceWithAuthTokenFromCreateSession"
},
"serverSuppliedValues": {
"databaseName": "ctreeSQL",
"ownerName": "admin"
},
"errorData": {
"errorData": null
},
"warnings": []
},
"errorCode": 0,
"errorMessage": "",
"authToken": "replaceWithAuthTokenFromCreateSession"
}
Properties
Request properties ("params")
| Property | Description | Default | Type | Limits (inclusive) |
|---|---|---|---|---|
databaseName |
The You specify this property when you want to use a different database instead of the default. This property is useful because objects, such as tables and code packages, can have the same name in multiple databases. This feature allows you to create multiple environments in the same server and reuse the same JSON actions in each environment. For example, you can create It is an error to set If no default database is specified during |
Defaults to the session's "defaultDatabaseName" property |
string | 1 to 64 bytes |
fixedLengthCharFormat |
The
For more details, see |
Optional with default "sql"
|
string |
|
indexFilter |
The
One-field index"indexFilter":
{
"indexName": "name_livedpast2000",
"partialKey": "Mi"
}Multi-field index"indexFilter":
{
"indexName": "name_livedpast2000",
"partialKey": [ "2023-09-22", "Mi" ]
} |
Required - No default value |
object |
|
|
indexFilter .indexName |
The "params": {
"indexName": "index1"
} |
Required - No default value |
string | 1 to 64 bytes |
|
indexFilter .partialKey |
The |
Optional with default of Required in the Key-Value API |
string or array |
1 or more strings/arrays 1 to 128 bytes in the Key-Value API |
maxRecords |
The "maxRecords" property specifies the maximum number of records to be returned. It is used with "skipRecords" to paginate the results. If the value is not null or omitted, the server returns the maximum number of results specified by "maxRecords". |
Optional with default of 20 |
integer |
-1 to 65535
|
ownerName |
The You specify this property when you want to use a different account instead of the default. Your session's account must have the appropriate privileges to access the code package. This property is useful because objects, such as tables and code packages, can have the same name in the same database as long as different accounts own each object. This feature allows you to create duplicate objects for different users on the same server and reuse the same JSON actions on those objects. For example, an administrator can copy objects from a production environment to her account so she can troubleshoot an issue using the same JSON actions, JavaScript, and SQL code. It is an error to set If no default owner is specified during |
Optional with default of the session's "defaultOwnerName" property |
string | 1 to 64 bytes |
returnCursor |
The
|
Optional with default of false
|
Boolean |
|
reverseOrder |
The
|
Optional with default of false
|
Boolean |
|
skipRecords |
The "skipRecords" property specifies the number of records to skip over when paginating the results. It is used with "maxRecords" to paginate the results. If the value is not null or omitted, the server returns results from the beginning. If it is > 0, the server skips over the specified number of records and returns results starting from that point up until it returns the maximum number of results as defined by "maxRecords". |
Optional with default of 0
|
integer |
0 to 9223372036854775807
|
tableFilter |
The
|
Optional with default of ""
|
string | 0 to unlimited bytes |
tableName |
The See table name in System specifications for the table naming requirements and limitations.
"params": {
"tableName": "ctreeTable"
} |
Required - No default value | string | 1 to 64 bytes |
Response properties ("result")
| Property | Description | Type | Limits (inclusive) |
|---|---|---|---|
binaryFormat |
The "binaryFormat" property designates the format of binary values embedded in JSON strings. See binaryFormat for more details. |
string | One of the following: "base64", "hex", or "byteArray". |
changeIdField |
This property's value designates the name of the field used for change-tracking functionality if you are not using the
However, if you use the name |
string | 1 to 64 bytes |
cursorid |
The
|
string | 0 to 255 bytes |
data |
The |
array of objects | The action determines its contents. |
dataFormat |
The
|
string |
|
fields |
The
"fields": [
{
"autoValue": "none",
"name": "name",
"type": "varchar",
"length": 50,
"scale": null,
"defaultValue": null,
"nullable": false
}
] |
array |
updateRecords and deleteRecords only:
|
|
fields .autoValue |
The "autoValue" property indicates when and how the server automatically sets the field value. See autoValue for more details. |
string |
Some actions only:
|
|
fields .defaultValue |
The "defaultValue" property specifies the default value of a field. |
string | 0 to 65,500 bytes |
|
fields .length |
Identifies the length of the field. | integer |
1 to 65500 |
|
fields .name |
The The The
|
string | 1 to 64 bytes |
|
fields .nullable |
"nullable" identifies whether a field can contain a NULL value. |
Boolean |
|
|
fields .primaryKey |
When > 0, the "primaryKey" property identifies the ordinal position of the field within the table's primary key. |
integer |
0 to 32
|
|
fields .scale |
If the type is "number" or "money", the "scale" property identifies the number of places to the right of the decimal point,. |
integer |
0 to 32
|
|
fields .type |
Identifies the type of the field. See Data types. | string |
|
moreRecords |
The "moreRecords" property indicates if there are more records that match the filters in the request. |
Boolean |
|
primaryKeyFields |
This property specifies the fields of the table’s primary key when multiple fields are combined to form the primary key.
The order of fields in this property is the order of fields in the primary key index. The A primary key with multiple fields has an index named If only one field is used as the primary key, the
Example "primaryKeyFields": [
"a",
"b",
"c"
],
"fields": [
{
"name": "a",
"type": "tinyint"
},
{
"name": "b",
"type": "smallint"
},
{
"name": "c",
"type": "integer"
}
] |
array | an array |
requestedRecordCount |
The
|
integer |
|
returnedRecordCount |
The
|
integer |
|
totalRecordCount |
The
|
integer |
|