/api/db/.../byindex/list
针对 HTTP GET 和 DELETE 执行以下操作:
- GET:使用由 index_no 指定的索引返回指定类别的记录(一条或多条)
- DELETE:删除查询参数指定的单个对象
GET
GET 请求使用由 index_no 指定的索引返回指定类别的记录。此端点支持以下查询参数:
- count:要返回的对象数量;默认值:1。
- skip:在返回结果之前要跳过的对象数量;默认值:0。
- max_array:返回数组中的最大条目数;默认值:10。
- max_vector:返回向量中的最大条目数;默认值:10。
- max_seq:返回序列中的最大条目数;默认值:10。
- max_blob:返回的二进制大对象的最大大小;默认值:1024。
当调用此端点时,网络服务会使用 index_no 索引创建一个游标,跳过 skip 次迭代,然后以 JSON 数组的形式返回 count 条记录。
响应是一个包含两个键“header”和“resultset”的 JSON 对象。 “header”包含字段描述符数组“fields”。
描述符的格式与数据库模式中的格式相同。唯一的区别在于结构字段的描述符会被递归展开,也就是说,每个结构字段描述符还将包含该结构字段的描述符数组。
结果集是一个由 JSON 对象组成的数组,这些对象代表数据库记录。SmartEDB 记录字段值按照以下规则编码为 JSON 值:
- 标量值:JSON 数值
- 日期和时间值:作为 JSON 数值的时间戳
- 布尔值:JSON 文本(true、false)
- ASCII 字符串:JSON 字符串
- 2 字节和宽字符字符串:JSON 十六进制编码字符串(例如,使用 UTF-16-LE 编码时,字符串 "test" 编码为 "7400650073007400")
- 固定大小和可变大小的二进制字段:JSON 十六进制编码字符串
- 二进制大对象(BLOB):JSON 十六进制编码字符串
- 数组、向量和序列:JSON 数组
- 结构体:JSON 对象
此外,字符串、二进制、二进制大对象(blob)、数组、向量和序列值会包含在包含两个字段的 JSON 对象中发送:“len”和“val”。“val”字段包含如上所述编码的值。“len”字段指定了数据库中值的大小。这样做是为了在值因某些原因被截断时提供实际的字段大小,例如,如果受到 max_array/max_vector/... 阈值的限制,或者由于内存限制。对“len”字段的解释取决于数据类型:
- 字符串(ASCII、2 字节和宽字符):字符串的字节大小(非字符数)。
- 二进制值:值的字节大小。
- 二进制大对象(BLOB):BLOB 的字节大小。
- 数组、向量和序列:值中的元素数量。
当值以十六进制编码的字符串形式传输时,这种情况适用于二进制值、二进制大对象(blob)和非 ASCII 字符串,“len”反映的是值的大小,而非其十六进制表示的大小。也就是说,对于十六进制编码的字符串“0a0b0c0d”,“len”将等于 4。
例如,考虑以下表格及其字段:
CREATE TABLE T4(pk INTEGER PRIMARY KEY, str STRING, bin BINARY(3),
arr ARRAY(INTEGER), seq SEQUENCE(CHAR(4)), b BOOLEAN);
如果该表包含以下数据:
XSQL>SELECT * FROM T4;
pk str bin arr seq b
------------------------------------------------------------
1 string1 010203 [1, 2, 3, 4] {AAAA, BBB, CC, D} false
2 string2 null null null true
可以通过以下请求从网络服务中检索数据:
GET http://localhost:8083/api/db/xsqldb/classes/3/byindex/0/list?count=2
以下将是返回的 JSON 响应:
{
"header":
{
"fields":
[
{
"field_no": 0,
"name": "pk",
"type": 6,
"type_s": "MCO_DD_INT4"
},
{
"field_no": 1,
"name": "str",
"type": 16,
"type_s": "MCO_DD_STRING",
"flags": 64,
"flags_s": [ "MCO_DICT_FI_NULLABLE" ]
},
{
"field_no": 2,
"name": "bin",
"type": 38,
"type_s": "MCO_DD_BINARY",
"flags": 64,
"flags_s": [ "MCO_DICT_FI_NULLABLE" ],
"size": 3
},
{
"field_no": 3,
"name": "arr",
"type": 6,
"type_s": "MCO_DD_INT4",
"flags": 68,
"flags_s": [ "MCO_DICT_FI_VECTOR", "MCO_DICT_FI_NULLABLE" ]
},
{
"field_no": 4,
"name": "seq",
"type": 36,
"type_s": "MCO_DD_SEQUENCE_CHAR",
"flags": 1088,
"flags_s": [ "MCO_DICT_FI_NULLABLE", "MCO_DICT_FI_SEQUENCE" ],
"size": 4
},
{
"field_no": 5,
"name": "b",
"type": 25,
"type_s": "MCO_DD_BOOL",
"flags": 64,
"flags_s": [ "MCO_DICT_FI_NULLABLE" ]
}
]
},
"resultset":
[
[
1,
{ "len": 7, "val": "string1" },
{ "len": 3, "val": "010203" },
{ "len": 4, "val": [ 1, 2, 3, 4 ] },
{ "len": 4,
"val":
[
{ "len": 4, "val": "AAAA" },
{ "len": 4, "val": "BBB" },
{ "len": 4, "val": "CC" },
{ "len": 4, "val": "D" }
]
},
false
],
[
2,
{ "len": 7, "val": "string2" },
null,
null,
null,
true
]
]
}
DELETE
DELETE 请求会删除由查询参数指定的单个对象。此方法支持与 GET 相同的 count 和 skip 查询参数。 仅返回 HTTP 结果代码。 例如,以下请求会删除索引中的第一个对象:
DELETE http://localhost:8083/api/db/xsqldb/classes/3/byindex/0/list
以下请求将删除第二个和第三个对象:
DELETE http://localhost:8083/api/db/xsqldb/classes/3/byindex/0/list?skip=1&count=2