小巧。快速。可靠。
三选二。

SQLite C 接口

更改预处理语句的 EXPLAIN 设置

int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode);

sqlite3_stmt_explain(S,E) 接口更改了预处理语句 S 的 EXPLAIN 设置。如果 E 为零,则 S 变为正常的预处理语句。如果 E 为 1,则 S 的行为就像其 SQL 文本以 "EXPLAIN" 开头一样。如果 E 为 2,则 S 的行为就像其 SQL 文本以 "EXPLAIN QUERY PLAN" 开头一样。

调用 sqlite3_stmt_explain(S,E) 可能会导致 S 被重新准备。SQLite 会尝试避免重新准备,但在第一次切换到 EXPLAIN 或 EXPLAIN QUERY PLAN 模式时,可能需要重新准备。

由于可能需要重新准备,如果 S 无法重新准备,则对 sqlite3_stmt_explain(S,E) 的调用将失败并返回 SQLITE_ERROR,因为它是使用 sqlite3_prepare() 而不是更新的 sqlite3_prepare_v2()sqlite3_prepare_v3() 接口创建的,因此没有保存的 SQL 文本来重新准备。

更改预处理语句的 explain 设置不会更改语句的原始 SQL 文本。因此,如果 SQL 文本最初以 EXPLAIN 或 EXPLAIN QUERY PLAN 开头,但调用 sqlite3_stmt_explain(S,0) 将语句转换为普通语句,则 EXPLAIN 或 EXPLAIN QUERY PLAN 关键字仍将出现在 sqlite3_sql(S) 输出中,即使语句现在像一个普通的 SQL 语句一样工作。

如果成功更改了 explain 模式,则此例程返回 SQLITE_OK,如果无法更改 explain 模式,则返回错误代码。在语句处于活动状态时,无法更改 explain 模式。因此,最好在调用 sqlite3_stmt_explain(S,E) 之前立即调用 sqlite3_reset(S)

另请参见 对象常量函数 列表。