您好,登錄后才能下訂單哦!
摘自:http://www.sqlite.org/c3ref/limit.html
?
int sqlite3_limit(sqlite3*, int id, intnewVal);
??? 該接口允許在連接的過程中(by connection basis),對連接(on a connection)的變量結構(various constructs)進行限制。第一個參數指定了被限制的設置或者查詢的數據庫的句柄。第二個參數指定了被限制的類別(categories),該結構定義了一系列可被限制尺寸大小的結構變量(The second parameter is one of the limit categories that define aclass of constructs to be size limited)。第三個參數是對該結構的新的限制。如下是定義的限制類別:
#define SQLITE_LIMIT_LENGTH??????????????????? 0
#define SQLITE_LIMIT_SQL_LENGTH??????????????? 1
#define SQLITE_LIMIT_COLUMN??????????????????? 2
#define SQLITE_LIMIT_EXPR_DEPTH??????????????? 3
#define SQLITE_LIMIT_COMPOUND_SELECT?????????? 4
#define SQLITE_LIMIT_VDBE_OP?????????????????? 5
#define SQLITE_LIMIT_FUNCTION_ARG????????????? 6
#define SQLITE_LIMIT_ATTACHED????????????????? 7
#defineSQLITE_LIMIT_LIKE_PATTERN_LENGTH?????? 8
#define SQLITE_LIMIT_VARIABLE_NUMBER?????????? 9
#define SQLITE_LIMIT_TRIGGER_DEPTH??????????? 10
#define SQLITE_LIMIT_WORKER_THREADS?????????? 11
詳細請參考:http://www.sqlite.org/c3ref/c_limit_attached.html
?
????????如果一個給定的限制值是一個負值,限制不會生效。對于每一個限制的類別,在編譯的過程中,已經通過C的宏定義(變量名稱為SQLITE_MAX_NAME,當然限制名稱為SQLITE_LIMIT_NAME),指定了該值的上限(a hard upper bound).如果指定的值超出了上限,就會將該值指定為上限(truncated to the hard upper bound Categories).
????????不管限制值有沒有改變,sqlite3_limit的返回值都是上一次的限制值。因此,如果我們想知道當前設置的限制值是多少,就可以通過設置該函數的第三個參數,指定為-1,就可以查詢該結構體的限制值是 多少。
例如:
? int permitexecutelength = sqlite3_limit(pdb, 1 , -1);
? 說明:返回當前允許執行的SQL語句的長度,保存在permitexecutelength變量中。
?
????????該設計既可以用于管理客戶內部的數據庫,也可以控制一些不可靠的訪問數據來源。一個明顯的例子就是網頁瀏覽器,她自身擁有存儲歷史記錄,并且將從網上下載的JavaScript腳本和本地的數據庫進行分離(separate databases controlled by JavaScript applications downloaded off the Internet).內部的數據庫可以給一個很大的默認限制值。?為了抵御DDOS非法訪問,一般會給一個更加小的默認限制值。開發者可以調用sqlite3_set_authorizer()接口,來控制不可靠的SQL語句。可以使用max_page_count PRAGMA宏,來限制不可靠的腳本生成的數據庫的大小。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。