Small. Fast. Reliable.
Choose any three.
Carray()表值函数

1.概述

Carray()是一个表值函数,具有单列(称为“值”)和零行或更多行。carray()中每一行的“值”取自应用程序通过参数绑定提供的C语言数组。这样,carray()函数提供了一种方便的机制,可将C语言数组绑定到SQL查询。

2.可用性

默认情况下,carray()函数未编译到SQLite中。它可以作为ext / misc / carray.c 源文件中的可加载扩展名使用 。

carray()函数最初是在3.14版(2016-08-08)中添加到SQLite的。在SQLite版本3.34.0(2020-12-01)中添加了sqlite3_carray_bind()接口和carray()的单参数变体。

3.细节

carray()函数采用一个,两个或三个参数。

对于carray()的两个和三个参数版本,第一个参数是指向数组的指针。由于指针值不能直接在SQL中指定,第一个参数必须是一个参数绑定到使用该指针值sqlite3_bind_pointer()接口使用指针型“CARRAY”的。第二个参数是数组中元素的数量。可选的第三个参数是一个字符串,用于确定C语言数组中元素的数据类型。第三个参数的允许值为:

  1. 'int32'
  2. 'int64'
  3. '双倍的'
  4. '字符*'

默认数据类型为“ int32”。

3.1。单参数CARRAY

carray()的单参数形式需要一个特殊的C语言接口,名为“ sqlite3_carray_bind()”,以便附加值:

  int sqlite3_carray_bind(
    sqlite3_stmt * pStmt,/ *包含CARRAY的语句* /
    int idx,/ * CARRAY参数的参数号* /
    无效* aData,/ *数据数组* /
    int nData,/ *数组中的条目数* /
    int mFlags,/ *数据类型标志* /
    void(* xDestroy)(void *)/ * aData的析构函数* /
  );

sqlite3_carray_bind()的mFlags参数必须为以下之一:

  #定义CARRAY_INT32 0
  #define CARRAY_INT64 1
  #定义CARRAY_DOUBLE 2
  #define CARRAY_TEXT 3

尽管现在可以在将来的增强中使用它们,但mFlags参数的高阶位现在必须全部为零。辅助头文件ext / misc / carray.h中都提供了用于指定数据类型的常量的定义以及sqlite3_carray_bind()函数的原型 。

sqlite3_carray_bind()例程的xDestroy参数是指向释放输入数组的函数的指针。完成数据处理后,SQLite将调用此函数。xDestroy参数可以选择是“ sqlite3.h”中定义的以下常量之一:

4.用法

carray()函数可在查询的FROM子句中使用。例如,使用从地址$ PTR的C语言数组中获取的rowid从OBJ表中查询两个条目。

SELECT obj。* FROM obj,carray($ PTR,10)AS x
 在哪里obj.rowid = x.value;

该查询给出相同的结果:

SELECT * FROM obj WHERE在carray中的rowid($ PTR,10);