const char *sqlite3_sql(sqlite3_stmt *pStmt); char *sqlite3_expanded_sql(sqlite3_stmt *pStmt); #ifdef SQLITE_ENABLE_NORMALIZE const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt); #endif
如果 P 是由 sqlite3_prepare_v2()、sqlite3_prepare_v3()、sqlite3_prepare16_v2() 或 sqlite3_prepare16_v3() 创建的,则 sqlite3_sql(P) 接口返回指向用于创建 预处理语句 P 的 UTF-8 SQL 文本副本的指针。sqlite3_expanded_sql(P) 接口返回指向一个 UTF-8 字符串的指针,该字符串包含预处理语句 P 的 SQL 文本,其中包含已 绑定参数 展开。sqlite3_normalized_sql(P) 接口返回指向一个 UTF-8 字符串的指针,该字符串包含预处理语句 P 的规范化 SQL 文本。用于规范化 SQL 语句的语义未指定,可能发生变化。至少,文字值将被替换为合适的占位符。
例如,如果使用 SQL 文本“SELECT $abc,:xyz”创建预处理语句,并且如果参数 $abc 绑定到整数 2345 且参数 :xyz 未绑定,则 sqlite3_sql() 将返回原始字符串“SELECT $abc,:xyz”,但 sqlite3_expanded_sql() 将返回“SELECT 2345,NULL”。
如果可用内存不足以容纳结果,或者结果将超过由 SQLITE_LIMIT_LENGTH 确定的最大字符串长度,则 sqlite3_expanded_sql() 接口将返回 NULL。
编译时选项 SQLITE_TRACE_SIZE_LIMIT 限制绑定参数扩展的大小。编译时选项 SQLITE_OMIT_TRACE 导致 sqlite3_expanded_sql() 始终返回 NULL。
由 sqlite3_sql(P) 和 sqlite3_normalized_sql(P) 返回的字符串由 SQLite 管理,并在预处理语句完成时自动释放。另一方面,由 sqlite3_expanded_sql(P) 返回的字符串是从 sqlite3_malloc() 获得的,必须由应用程序通过将其传递给 sqlite3_free() 来释放。
只有在定义了编译时选项 SQLITE_ENABLE_NORMALIZE 时,sqlite3_normalized_sql() 接口才可用。