const char * sqlite3_sql(sqlite3_stmt * pStmt); char * sqlite3_expanded_sql(sqlite3_stmt * pStmt); const char * sqlite3_normalized_sql(sqlite3_stmt * pStmt);
如果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)接口返回一个指向包含已准备好的语句P的规范化SQL文本的UTF-8字符串的指针。用于规范化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()来释放。