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

woaidongmao

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

SQLite的體系結構

簡介

Block Diagram Of SQLite

clip_image001

這篇文檔主要描述了SQLite類庫的結構。這篇文檔的內容對于那些想了解和修改SQLite內部結構的人將會非常有用。

右側是一個結構圖,它顯示了SQLite的主要成分及各成分之間是如何相互關聯的。接下來的文本將簡要的介紹每個單一的成分。

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

接口程序

SQLite類庫大部分的公共接口程序是由main.c, legacy.c, vdbeapi.c源文件中的功能執行的。但有些程序是分散在其他文件夾的,因為在其他文件夾里他們可以訪問有文件作用域的數據結構。 sqlite3_get_table() 這個程序是在table.c中執行的。 sqlite3_mprintf()printf.c中執行。 sqlite3_complete()tokenize.c中執行。 Tcl 接口程序用tclsqlite.c來執行。

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

來命名的。

Tokenizer

當執行一個包含SQL語句的字符串時,接口程序要把這個字符串傳遞給tokenizer。Tokenizer的任務是把原有字符串分成一個個標示符,并把這些標示符傳遞給剖析器。Tokenizer是在C文件夾tokenize.c中用手編譯的。

在這個設計中需要注意的一點是,tokenizer調用parser。熟悉YACCBISON的人們也許會習慣于用parser調用tokenizer The author of SQLite的作者已經嘗試了這兩種方法,并發現用tokenizer調用parser會使程序運行的更順利。YACC使程序更滯后一些。

Parser

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

因為lemon是一個在發展機械上不常見的程序,所以lemon的源代碼(只是一個C文件)是在SQLite分布區的"tool"子目錄下的。 lemon的文檔是在分布區的 "doc"子目錄下的。

代碼發生器

在剖析器收集完符號并把之轉換成完全的SQL語句時,它調用代碼產生器來產生虛擬的機器代碼,這些機器代碼將按照SQL語句的要求來工作。在代碼產生器中有許多文件; 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. 正是在這些文件中,最具有重要意義的事情發生了。 expr.c 處理表達式代碼的生成。 where.c 處理SELECT, UPDATE and DELETE語句中WHERE子句的代碼的生成。文件 attach.c, delete.c, insert.c, select.c, trigger.c update.c,vacuum.c處理SQL語句中具有同樣名字的語句的代碼的生成。(每個文件調用expr.c and where.c中的程序) All other 所有SQL的其它語句的代碼是由build.c生成的。文件auth.c 執行sqlite3_set_authorizer()的功能.

虛擬機器

由代碼生成器產生的程序由虛擬機器來運行??偠灾?,虛擬機器主要用來執行一個為操作數據庫而設計的抽象的計算引擎。機器有一個用來存儲中間數據的存儲棧。每個指令包含一個操作代碼和三個額外的操作數。

虛擬機器本身是被包含在一個單獨的文件vdbe.c中的。虛擬機器也有它自己的標題文件:vdbe.h它在虛擬機器和剩下的SQLite類庫之間定義了一個接口程序,vdbeInt.h 它定義了虛擬機器的結構。文件vdbeaux.c包含了虛擬機器所使用的實用程序和一些被其它類庫用來建立VM程序的接口程序模塊。文件vdbeapi.c 包含虛擬機器的外部接口,比如 sqlite3_bind_... 類的函數。單獨的值(字符串,整數,浮動點數值,BLOBS)被存儲在一個叫 "Mem"的內部目標程序里,"Mem"是由vdbemem.c執行的。

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

B-

SQLite數據庫在磁盤里維護,使用源文件btree.c中的B-樹執行。數據庫中的每個表格和目錄使用一個單獨的B-tree。所有的 B-trees 被存儲在同樣的磁盤文件里。文件格式的細節被記錄在btree.c.

開頭的備注里。

B-tree子系統的接口程序被標題文件btree.h所定義。.

頁面高速緩存

B-tree模塊要求信息來源于磁盤上固定規模的程序塊。默認程序塊的大小是1024個字節,但是可以在51265536個字節間變化。 頁面高速緩存負責讀,寫和高速緩存這些程序塊。頁面高速緩存還提供重新運算和提交抽象命令,它還管理關閉數據庫文件夾。 B-tree驅動器要求頁面高速緩存器中的特別的頁,當它想修改頁或重新運行改變的時候,它會通報頁面高速緩存。為了保證所有的需求被快速,安全和有效的處理,頁面高速緩存處理所有的微小的細節。

運行頁面高速緩存的代碼在專門的C源文件pager.c中。頁面高速緩存的子系統的接口程序被目標文件pager.h所定義。

OS 接口程序

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

Utilities

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

測試代碼

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

 

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品免费在线播放| 久久久女女女女999久久| 亚洲摸下面视频| 亚洲精品久久久久| 亚洲激情第一页| 亚洲欧洲午夜| 在线视频一区观看| 欧美亚洲一区二区三区| 久久裸体艺术| 欧美成人一二三| 亚洲日韩第九十九页| 日韩视频―中文字幕| 亚洲免费在线电影| 久久综合伊人| 久久婷婷蜜乳一本欲蜜臀| 国产亚洲毛片| 亚洲国产日本| 在线亚洲高清视频| 久久国内精品自在自线400部| 久久久久久网站| 亚洲国产另类久久精品| 中文在线资源观看网站视频免费不卡| 亚洲欧美影院| 欧美成年视频| 国产日韩欧美亚洲| 亚洲精品一区二区三区婷婷月| 亚洲一区二区免费| 久久青草福利网站| 99re6热在线精品视频播放速度| 亚洲自拍偷拍网址| 欧美韩日精品| 红桃视频成人| 亚洲欧洲av一区二区| 欧美二区在线播放| 欧美一级成年大片在线观看| 欧美日韩国产精品专区| 影音先锋日韩资源| 欧美主播一区二区三区美女 久久精品人| 免播放器亚洲一区| 午夜精品久久久久久99热| 欧美激情一二三区| 亚洲高清在线观看| 久久久夜精品| 性视频1819p久久| 欧美视频在线观看免费| 亚洲另类自拍| 欧美激情精品久久久久久蜜臀| 午夜精品久久久久久久| 国产精品久久久久久妇女6080 | 久久精品人人爽| 亚洲电影av在线| 久久久91精品国产| 国产日韩欧美中文在线播放| 亚洲一级黄色片| 亚洲精品欧美日韩专区| 美女日韩欧美| 亚洲高清一区二区三区| 欧美.com| 久久综合五月天婷婷伊人| 激情成人综合| 嫩草成人www欧美| 久久久亚洲综合| 亚洲国产精品一区| 亚洲福利在线看| 欧美大尺度在线观看| 亚洲人成网在线播放| 亚洲成人自拍视频| 一本色道久久综合亚洲精品不卡| 欧美国产先锋| 欧美不卡在线| 一区二区三区四区国产| 日韩视频免费在线观看| 欧美视频在线一区| 欧美一区二区视频在线观看| 性8sex亚洲区入口| 国产一区二区三区高清在线观看 | 欧美午夜美女看片| 亚洲永久在线| 性久久久久久久久| 韩国成人福利片在线播放| 美日韩精品视频| 欧美成人蜜桃| 亚洲欧美综合v| 欧美呦呦网站| 亚洲高清在线观看一区| 99国产精品自拍| 国产欧美一区二区三区另类精品| 久久综合中文色婷婷| 欧美精品情趣视频| 欧美在线啊v一区| 欧美freesex交免费视频| 亚洲一区三区视频在线观看 | 一区二区久久久久| 亚洲一区二区三区视频播放| 国产一区二区电影在线观看| 亚洲高清视频一区| 国产九九精品| 亚洲成色777777在线观看影院| 国产精品jizz在线观看美国| 久久精品国产亚洲一区二区| 欧美gay视频| 欧美亚洲日本网站| 欧美成年人视频网站| 欧美一区永久视频免费观看| 久久人人爽爽爽人久久久| 一区二区高清| 久久全国免费视频| 亚洲欧美日韩中文播放| 久久综合999| 午夜国产不卡在线观看视频| 免费在线观看一区二区| 欧美一区二区视频在线| 欧美另类极品videosbest最新版本 | 久久综合婷婷| 国产精品美女诱惑| 亚洲高清一二三区| 国产有码一区二区| 亚洲一区www| 日韩视频一区二区在线观看| 久久久蜜桃一区二区人| 欧美制服丝袜第一页| 国产精品vvv| 亚洲免费观看视频| 91久久夜色精品国产网站| 久久一区二区三区av| 亚洲专区一区二区三区| 亚洲伦理久久| 久久夜色精品国产噜噜av| 欧美在线免费一级片| 欧美精品午夜| 亚洲国产高清高潮精品美女| 激情伊人五月天久久综合| 亚洲欧美在线观看| 亚洲欧美一区二区精品久久久| 欧美精品亚洲一区二区在线播放| 欧美激情女人20p| 亚洲第一区在线| 久久久久国色av免费看影院| 久久米奇亚洲| 在线观看中文字幕亚洲| 美女黄网久久| 亚洲人在线视频| 一区二区三区日韩欧美精品| 欧美日韩亚洲视频一区| 日韩视频免费| 亚洲欧美日韩在线| 国产精品视频你懂的| 亚洲一区激情| 久久精品网址| 亚洲第一网站| 免费欧美高清视频| 91久久精品国产91久久| 一区二区不卡在线视频 午夜欧美不卡'| 蜜臀av性久久久久蜜臀aⅴ| 亚洲国内高清视频| 一二三区精品福利视频| 国产精品视频午夜| 久久高清一区| 亚洲国产视频一区| 亚洲午夜精品一区二区| 亚洲人成7777| 亚洲欧美日本国产专区一区| 国产欧美一区二区三区久久人妖| 久久精品亚洲精品国产欧美kt∨| 免费短视频成人日韩| 99精品久久| 国产欧美日韩精品a在线观看| 久久免费视频网| 夜色激情一区二区| 久久人体大胆视频| 99riav国产精品| 国产三级精品三级| 欧美成人有码| 欧美一区二区精品在线| 亚洲国产欧美国产综合一区| 午夜精品久久久久久久蜜桃app| 精品1区2区3区4区| 欧美视频在线观看一区二区| 欧美在线观看一区| 亚洲美女福利视频网站| 久久久水蜜桃| 亚洲视频电影图片偷拍一区| 国模精品娜娜一二三区| 欧美精品情趣视频| 久久精品国产99精品国产亚洲性色 | 激情校园亚洲| 欧美视频在线观看视频极品| 久久综合久久久久88| 亚洲一区二区三区中文字幕在线| 美女尤物久久精品| 久久精品视频在线观看| 亚洲一级在线观看| 亚洲人成7777| 国产在线一区二区三区四区| 99精品视频免费在线观看| 国产精品va在线| 老司机免费视频一区二区三区 | 亚洲美女精品一区| 老牛嫩草一区二区三区日本 | 亚洲一区中文|