int sqlite3_table_column_metadata( sqlite3 *db, /* Connection handle */ const char *zDbName, /* Database name or NULL */ const char *zTableName, /* Table name */ const char *zColumnName, /* Column name */ char const **pzDataType, /* OUTPUT: Declared data type */ char const **pzCollSeq, /* OUTPUT: Collation sequence name */ int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ int *pPrimaryKey, /* OUTPUT: True if column part of PK */ int *pAutoinc /* OUTPUT: True if column is auto-increment */ );
sqlite3_table_column_metadata(X,D,T,C,....) 常式會傳回資料庫連線 X 上資料庫 D 中表格 T 的欄位 C 的相關資訊。如果指定的欄位存在,sqlite3_table_column_metadata() 介面會傳回 SQLITE_OK,並使用適當的值填入最後五個參數中的非 NULL 指標。如果指定的欄位不存在,sqlite3_table_column_metadata() 介面會傳回 SQLITE_ERROR。如果 sqlite3_table_column_metadata() 的欄位名稱參數為 NULL 指標,則此常式只會檢查表格是否存在,如果表格存在則傳回 SQLITE_OK,如果不存在則傳回 SQLITE_ERROR。如果呼叫 sqlite3_table_column_metadata(X,D,T,C,...) 中的表格名稱參數 T 為 NULL,則結果為未定義行為。
欄位由這個函式的第二、第三和第四個參數識別。第二個參數是包含指定表格的資料庫名稱(即 "main"、"temp" 或附加的資料庫),或是 NULL。如果是 NULL,則會使用資料庫引擎解析未限定表格參考的相同演算法,搜尋所有附加的資料庫以尋找該表格。
此函式的第三和第四個參數分別是所需欄位的表格名稱和欄位名稱。
Metadata 會透過寫入傳遞至此函式作為第五個及後續參數的記憶體位置來傳回。這些參數中的任何一個都可以是 NULL,在這種情況下,對應的 metadata 元素將會被省略。
參數 輸出
類型說明 第 5 個 const char* 資料類型 第 6 個 const char* 預設排序序列的名稱 第 7 個 int 如果欄位具有 NOT NULL 限制,則為 True 第 8 個 int 如果欄位是 PRIMARY KEY 的一部分,則為 True 第 9 個 int 如果欄位是 AUTOINCREMENT,則為 True
宣告類型和排序序列傳回的字元指標所指向的記憶體,在下一次呼叫任何 SQLite API 函式之前都是有效的。
如果指定的表格實際上是一個視圖,則會傳回錯誤碼。
如果指定的欄位是 "rowid"、"oid" 或 "_rowid_",且表格不是WITHOUT ROWID表格,並且已明確宣告INTEGER PRIMARY KEY欄位,則會針對明確宣告的欄位設定輸出參數。如果沒有INTEGER PRIMARY KEY欄位,則rowid的輸出設定如下:
data type: "INTEGER" collation sequence: "BINARY" not null: 0 primary key: 1 auto increment: 0
如果尚未讀取並解析所有資料庫結構描述,此函式會導致從磁碟讀取並解析所有資料庫結構描述,如果在載入結構描述時遇到任何錯誤,則會傳回錯誤。