摘自:http://www.sqlite.org/c3ref/limit.html
成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元景德鎮(zhèn)做網(wǎng)站,已為上家服務(wù),為景德鎮(zhèn)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
?
int sqlite3_limit(sqlite3*, int id, intnewVal);
??? 該接口允許在連接的過程中(by connection basis),對(duì)連接(on a connection)的變量結(jié)構(gòu)(various constructs)進(jìn)行限制。第一個(gè)參數(shù)指定了被限制的設(shè)置或者查詢的數(shù)據(jù)庫(kù)的句柄。第二個(gè)參數(shù)指定了被限制的類別(categories),該結(jié)構(gòu)定義了一系列可被限制尺寸大小的結(jié)構(gòu)變量(The second parameter is one of the limit categories that define aclass of constructs to be size limited)。第三個(gè)參數(shù)是對(duì)該結(jié)構(gòu)的新的限制。如下是定義的限制類別:
#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
詳細(xì)請(qǐng)參考:http://www.sqlite.org/c3ref/c_limit_attached.html
?
????????如果一個(gè)給定的限制值是一個(gè)負(fù)值,限制不會(huì)生效。對(duì)于每一個(gè)限制的類別,在編譯的過程中,已經(jīng)通過C的宏定義(變量名稱為SQLITE_MAX_NAME,當(dāng)然限制名稱為SQLITE_LIMIT_NAME),指定了該值的上限(a hard upper bound).如果指定的值超出了上限,就會(huì)將該值指定為上限(truncated to the hard upper bound Categories).
????????不管限制值有沒有改變,sqlite3_limit的返回值都是上一次的限制值。因此,如果我們想知道當(dāng)前設(shè)置的限制值是多少,就可以通過設(shè)置該函數(shù)的第三個(gè)參數(shù),指定為-1,就可以查詢?cè)摻Y(jié)構(gòu)體的限制值是 多少。
例如:
? int permitexecutelength = sqlite3_limit(pdb, 1 , -1);
? 說明:返回當(dāng)前允許執(zhí)行的SQL語句的長(zhǎng)度,保存在permitexecutelength變量中。
?
????????該設(shè)計(jì)既可以用于管理客戶內(nèi)部的數(shù)據(jù)庫(kù),也可以控制一些不可靠的訪問數(shù)據(jù)來源。一個(gè)明顯的例子就是網(wǎng)頁(yè)瀏覽器,她自身?yè)碛写鎯?chǔ)歷史記錄,并且將從網(wǎng)上下載的JavaScript腳本和本地的數(shù)據(jù)庫(kù)進(jìn)行分離(separate databases controlled by JavaScript applications downloaded off the Internet).內(nèi)部的數(shù)據(jù)庫(kù)可以給一個(gè)很大的默認(rèn)限制值。?為了抵御DDOS非法訪問,一般會(huì)給一個(gè)更加小的默認(rèn)限制值。開發(fā)者可以調(diào)用sqlite3_set_authorizer()接口,來控制不可靠的SQL語句??梢允褂胢ax_page_count PRAGMA宏,來限制不可靠的腳本生成的數(shù)據(jù)庫(kù)的大小。