青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

SQLite的體系結(jié)構(gòu)

簡介

Block Diagram Of SQLite

clip_image001

這篇文檔主要描述了SQLite類庫的結(jié)構(gòu)。這篇文檔的內(nèi)容對于那些想了解和修改SQLite內(nèi)部結(jié)構(gòu)的人將會(huì)非常有用。

右側(cè)是一個(gè)結(jié)構(gòu)圖,它顯示了SQLite的主要成分及各成分之間是如何相互關(guān)聯(lián)的。接下來的文本將簡要的介紹每個(gè)單一的成分。

這篇文檔描述SQLite第三版,它和 2.8版以及早期的版本基本相似,但在一些細(xì)節(jié)上是有區(qū)別的。

接口程序

SQLite類庫大部分的公共接口程序是由main.c, legacy.c, vdbeapi.c源文件中的功能執(zhí)行的。但有些程序是分散在其他文件夾的,因?yàn)樵谄渌募A里他們可以訪問有文件作用域的數(shù)據(jù)結(jié)構(gòu)。 sqlite3_get_table() 這個(gè)程序是在table.c中執(zhí)行的。 sqlite3_mprintf()printf.c中執(zhí)行。 sqlite3_complete()tokenize.c中執(zhí)行。 Tcl 接口程序用tclsqlite.c來執(zhí)行。

為了避免和其它軟件在名字上有沖突,SQLite類庫中所有的外部符號(hào)都是以sqlite3為前綴來命名的。這些被用來做外部使用的符號(hào)(換句話說,這些符號(hào)用來形成SQLiteAPI)是以sqlite3_.

來命名的。

Tokenizer

當(dāng)執(zhí)行一個(gè)包含SQL語句的字符串時(shí),接口程序要把這個(gè)字符串傳遞給tokenizerTokenizer的任務(wù)是把原有字符串分成一個(gè)個(gè)標(biāo)示符,并把這些標(biāo)示符傳遞給剖析器。Tokenizer是在C文件夾tokenize.c中用手編譯的。

在這個(gè)設(shè)計(jì)中需要注意的一點(diǎn)是,tokenizer調(diào)用parser。熟悉YACCBISON的人們也許會(huì)習(xí)慣于用parser調(diào)用tokenizer The author of SQLite的作者已經(jīng)嘗試了這兩種方法,并發(fā)現(xiàn)用tokenizer調(diào)用parser會(huì)使程序運(yùn)行的更順利。YACC使程序更滯后一些。

Parser

The parser是一個(gè)部分,它基于文件場景賦予tokens意思。SQLiteparser是由 Lemon LALR(1) parser generator產(chǎn)生的。LemonYACC/BISON一樣做同樣的工作,但是它使用不同的輸入語句,這個(gè)輸入語句是不易出錯(cuò)的。 Lemon也產(chǎn)生一個(gè)parser,這個(gè)parser是可重入的并且是線程安全的。 Lemon 定義了無終端解除程序的概念,所以當(dāng)遇到語法錯(cuò)誤的時(shí)候,它不會(huì)泄露內(nèi)存。驅(qū)動(dòng)Lemon的原文件在parse.y.

因?yàn)?span lang="EN-US">lemon是一個(gè)在發(fā)展機(jī)械上不常見的程序,所以lemon的源代碼(只是一個(gè)C文件)是在SQLite分布區(qū)的"tool"子目錄下的。 lemon的文檔是在分布區(qū)的 "doc"子目錄下的。

代碼發(fā)生器

在剖析器收集完符號(hào)并把之轉(zhuǎn)換成完全的SQL語句時(shí),它調(diào)用代碼產(chǎn)生器來產(chǎn)生虛擬的機(jī)器代碼,這些機(jī)器代碼將按照SQL語句的要求來工作。在代碼產(chǎn)生器中有許多文件; attach.c, auth.c, build.c, delete.c, expr.c, insert.c, pragma.c, select.c, trigger.c, update.c, vacuum.c and where.c. 正是在這些文件中,最具有重要意義的事情發(fā)生了。 expr.c 處理表達(dá)式代碼的生成。 where.c 處理SELECT, UPDATE and DELETE語句中WHERE子句的代碼的生成。文件 attach.c, delete.c, insert.c, select.c, trigger.c update.c,vacuum.c處理SQL語句中具有同樣名字的語句的代碼的生成。(每個(gè)文件調(diào)用expr.c and where.c中的程序) All other 所有SQL的其它語句的代碼是由build.c生成的。文件auth.c 執(zhí)行sqlite3_set_authorizer()的功能.

虛擬機(jī)器

由代碼生成器產(chǎn)生的程序由虛擬機(jī)器來運(yùn)行。總而言之,虛擬機(jī)器主要用來執(zhí)行一個(gè)為操作數(shù)據(jù)庫而設(shè)計(jì)的抽象的計(jì)算引擎。機(jī)器有一個(gè)用來存儲(chǔ)中間數(shù)據(jù)的存儲(chǔ)棧。每個(gè)指令包含一個(gè)操作代碼和三個(gè)額外的操作數(shù)。

虛擬機(jī)器本身是被包含在一個(gè)單獨(dú)的文件vdbe.c中的。虛擬機(jī)器也有它自己的標(biāo)題文件:vdbe.h它在虛擬機(jī)器和剩下的SQLite類庫之間定義了一個(gè)接口程序,vdbeInt.h 它定義了虛擬機(jī)器的結(jié)構(gòu)。文件vdbeaux.c包含了虛擬機(jī)器所使用的實(shí)用程序和一些被其它類庫用來建立VM程序的接口程序模塊。文件vdbeapi.c 包含虛擬機(jī)器的外部接口,比如 sqlite3_bind_... 類的函數(shù)。單獨(dú)的值(字符串,整數(shù),浮動(dòng)點(diǎn)數(shù)值,BLOBS)被存儲(chǔ)在一個(gè)叫 "Mem"的內(nèi)部目標(biāo)程序里,"Mem"是由vdbemem.c執(zhí)行的。

SQLite使用C語言程序來來執(zhí)行SQL函數(shù)。即使內(nèi)置的SQL函數(shù)也是用這種方法來執(zhí)行的。大部分的SQL內(nèi)置函數(shù)(ex: coalesce(), count(),substr(), and so forth)可以在func.c里發(fā)現(xiàn)。日期和時(shí)間轉(zhuǎn)換函數(shù)在date.c.

B-

SQLite數(shù)據(jù)庫在磁盤里維護(hù),使用源文件btree.c中的B-樹執(zhí)行。數(shù)據(jù)庫中的每個(gè)表格和目錄使用一個(gè)單獨(dú)的B-tree。所有的 B-trees 被存儲(chǔ)在同樣的磁盤文件里。文件格式的細(xì)節(jié)被記錄在btree.c.

開頭的備注里。

B-tree子系統(tǒng)的接口程序被標(biāo)題文件btree.h所定義。.

頁面高速緩存

B-tree模塊要求信息來源于磁盤上固定規(guī)模的程序塊。默認(rèn)程序塊的大小是1024個(gè)字節(jié),但是可以在51265536個(gè)字節(jié)間變化。 頁面高速緩存負(fù)責(zé)讀,寫和高速緩存這些程序塊。頁面高速緩存還提供重新運(yùn)算和提交抽象命令,它還管理關(guān)閉數(shù)據(jù)庫文件夾。 B-tree驅(qū)動(dòng)器要求頁面高速緩存器中的特別的頁,當(dāng)它想修改頁或重新運(yùn)行改變的時(shí)候,它會(huì)通報(bào)頁面高速緩存。為了保證所有的需求被快速,安全和有效的處理,頁面高速緩存處理所有的微小的細(xì)節(jié)。

運(yùn)行頁面高速緩存的代碼在專門的C源文件pager.c中。頁面高速緩存的子系統(tǒng)的接口程序被目標(biāo)文件pager.h所定義。

OS 接口程序

為了在POSIXWin32 之間提供一些可移植性,SQLite操作系統(tǒng)的接口程序使用一個(gè)提取層。 OS提取層的接口程序被定義在os.h. 每個(gè)支持的操作系統(tǒng)有它自己的執(zhí)行文件: Unix使用os_unix.cwindows使用os_win.c。每個(gè)具體的操作器具有它自己的標(biāo)題文件: os_unix.h, os_win.h, etc.

Utilities

內(nèi)存分配和字符串比較程序位于util.c。剖析器使用的表格符號(hào)被hash.c中的無用信息表格維護(hù)。源文件utf.c包含UNICODE轉(zhuǎn)換子程序。SQLite有它自己的執(zhí)行文件printf() (有一些擴(kuò)展)在printf.c中,還有它自己隨機(jī)數(shù)量產(chǎn)生器在random.c.

測試代碼

如果你計(jì)算回歸測試腳本,多于一半的SQLite代碼數(shù)據(jù)庫的代碼將被測試。 在主要代碼文件中有許多assert()語句。另外,源文件test1.c通過test5.cmd5.c 執(zhí)行只為測試用的擴(kuò)展名。os_test.c向后的接口程序用來模擬斷電,來驗(yàn)證頁面調(diào)度程序中的系統(tǒng)性事故恢復(fù)機(jī)制。

 

posted on 2009-06-22 16:48 肥仔 閱讀(712) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久午夜影视| 鲁大师影院一区二区三区| 夜夜嗨av一区二区三区四区| 亚洲精品影视在线观看| 亚洲欧洲精品一区| 亚洲精品免费在线播放| a91a精品视频在线观看| 亚洲性线免费观看视频成熟| 亚洲视频综合| 性做久久久久久免费观看欧美| 亚洲欧美日韩一区二区三区在线观看 | 国产亚洲一区二区精品| 国产一区二区0| 黄色成人在线免费| 亚洲三级影院| 亚洲愉拍自拍另类高清精品| 亚洲欧美日韩另类| 久久精品欧美日韩| 免费国产一区二区| 亚洲黄色成人网| 99pao成人国产永久免费视频| 在线午夜精品| 国产精品一区视频网站| 国产精品五月天| 国产在线高清精品| 亚洲日本欧美日韩高观看| 在线亚洲电影| 久久国产88| 欧美va亚洲va国产综合| 亚洲理论在线| 午夜精品福利视频| 毛片av中文字幕一区二区| 欧美精品一区二区三区一线天视频| 欧美日韩亚洲高清一区二区| 国产精品推荐精品| 亚洲第一毛片| 亚洲在线免费| 久久影院亚洲| 日韩亚洲欧美高清| 欧美在线资源| 欧美日韩午夜在线| 黄色av一区| 亚洲淫性视频| 模特精品在线| 亚洲视频观看| 欧美jizz19性欧美| 国产精品一区二区男女羞羞无遮挡| 在线不卡中文字幕播放| 亚洲特级毛片| 免费的成人av| 亚洲午夜一区二区| 你懂的网址国产 欧美| 国产精品免费一区二区三区观看| 亚洲国产日韩综合一区| 欧美自拍偷拍| 日韩西西人体444www| 久久免费高清| 国产精品一区二区三区成人| 亚洲精品日日夜夜| 久久婷婷一区| 亚洲网站啪啪| 欧美成人激情视频| 国内偷自视频区视频综合| 在线中文字幕不卡| 欧美成黄导航| 久久aⅴ国产紧身牛仔裤| 欧美日韩国产不卡在线看| 精品电影一区| 欧美在线观看一区二区| 亚洲美女在线国产| 欧美aⅴ99久久黑人专区| 国产视频自拍一区| 亚洲欧美日韩一区二区在线 | 久久综合久久综合久久综合| 国产精品视频成人| 亚洲午夜精品17c| 亚洲电影网站| 久久天天躁夜夜躁狠狠躁2022| 国产欧美va欧美va香蕉在| 亚洲影院色无极综合| 亚洲国产精品悠悠久久琪琪| 久久久天天操| 韩国av一区二区| 久久精品国产99| 亚洲欧美日韩精品| 国产精品成人免费| 亚洲视频免费| 日韩视频免费看| 欧美二区在线播放| 亚洲精品久久久久久一区二区| 美女亚洲精品| 久久天天躁狠狠躁夜夜av| 国精产品99永久一区一区| 久久av一区二区| 午夜一区二区三区在线观看| 国产精品一区二区久激情瑜伽| 亚洲免费视频在线观看| 一区二区三区四区五区视频 | 蜜乳av另类精品一区二区| 亚洲国产99精品国自产| 蜜臀a∨国产成人精品 | 亚洲国产精品一区二区第四页av| 麻豆精品一区二区av白丝在线| 欧美在线在线| 伊人久久av导航| 欧美韩国一区| 欧美国产日韩一区二区三区| 亚洲伦理精品| 日韩一级大片在线| 欧美体内she精视频| 午夜免费电影一区在线观看| 亚洲欧美日韩国产综合精品二区| 国产日韩欧美在线看| 久久久亚洲欧洲日产国码αv| 久久精品日韩一区二区三区| 在线看日韩欧美| 亚洲国产欧美一区二区三区久久| 欧美剧在线观看| 亚洲资源在线观看| 午夜精品久久久久久久99水蜜桃 | 久久久精品网| 玖玖玖国产精品| 亚洲毛片在线免费观看| 一区二区三区四区国产精品| 国产女主播在线一区二区| 美日韩精品视频| 欧美成人免费在线| 亚洲综合色激情五月| 午夜精品免费视频| 亚洲国产一区二区三区a毛片 | 欧美日韩精品免费观看| 亚洲女ⅴideoshd黑人| 欧美一区二区三区四区在线观看| 一区二区三区在线免费视频| 亚洲国产女人aaa毛片在线| 欧美视频免费| 久久久在线视频| 欧美精品日韩精品| 欧美一区二区三区播放老司机| 久久aⅴ国产紧身牛仔裤| 99国产精品久久久久久久成人热| 亚洲一区二区三区中文字幕| 精品91久久久久| 99成人在线| 黄色精品一区| 在线视频免费在线观看一区二区| 国产一区视频网站| 99re66热这里只有精品4| 黄色精品一区| 亚洲网站在线播放| 亚洲风情在线资源站| 亚洲尤物在线视频观看| 亚洲人成网站影音先锋播放| 亚洲欧美视频一区| 99视频国产精品免费观看| 午夜精品免费视频| 一区二区三欧美| 欧美在线视频免费| 亚洲天堂网站在线观看视频| 久久亚洲一区| 欧美中文在线观看| 欧美高清视频一区| 久久久久高清| 国产精品久久9| 亚洲欧洲精品一区| 尤物九九久久国产精品的特点| 亚洲一区三区视频在线观看| 亚洲精品中文在线| 久久久久久久综合日本| 亚洲综合电影| 欧美精品aa| 欧美成人黑人xx视频免费观看| 国产欧美精品日韩| 在线亚洲免费| 一本一本久久a久久精品综合妖精| 久久久噜噜噜久久狠狠50岁| 欧美在线视频网站| 国产精品国产亚洲精品看不卡15 | 亚洲国产一成人久久精品| 欧美一区二区免费观在线| 亚洲欧美网站| 欧美日韩在线视频一区| 亚洲国产va精品久久久不卡综合| 精品电影一区| 久久高清免费观看| 久久精品国产999大香线蕉| 国产精品久久久久永久免费观看| 亚洲精品视频在线观看网站 | 亚洲国产精品久久精品怡红院| 黄色工厂这里只有精品| 欧美尤物一区| 久久久久www| 国户精品久久久久久久久久久不卡| 午夜电影亚洲| 欧美一区二区大片| 国产精品日韩在线播放| 亚洲婷婷国产精品电影人久久| 一区二区三区免费看| 欧美日韩亚洲另类| 99re66热这里只有精品4|