***SQLite*** ir maza izmēra iegultā relāciju datubāzu pārvaldības sistēma. Datubāzes bibliotēkas pirmkods ir publiskots. 2005.gadā projekts saņēma *Google-O'Reilly Open Source Awards* balvu.

Dizains
-------

Vārds "iegultā" nozīmē, ka SQLite neizmanto klienta-servera paradigmu, ti. SQLite nav atsevišķi strādājošs process ar kuru mijiedarbojas programmas, bet ir bibliotēka ar kuru tiek papildināta programma un tas kļūst par daļu no programmas. Tādējādi, kā saziņas protokols tiek izmantotas funkcija no SQLite bibliotēkas. Šāda pieeja samazina pieskaitāmās izmaksas, reakcijas laiku un vienkāršo programmu. SQLite visas datubāzes (ieskaitot definīcijas, tabulas, indeksus un datus) glabā vienotā standarta failā tajā datorā, kurā tiek veikta izpildāmā programma. Īstenošanas vienkāršums ir panākts, nodrošinot, ka pirms transakcijas veikšanas ieraksta visu failu, kas glabā datubāzes informāciju, tiek bloķēts.

Vairāki procesi vai plūsmas vienlaicīgi var bez problēmām nolasīt datus no vienas datubāzes. Ierakstu datubāzē var izdarīt tikai tad, ja tajā pat laikā nav citu pieprasījumu, citādi ieraksta mēģinājums neizdodas, un programma atgriež kļūdas kodu. Vēl viens scenārijs ir automātiska atkārtošana mēģinājumiem rakstīt iepriekš noteiktā laika intervālā.

Komplektā ir arī funkcionāla klienta daļa, kā izpildāmais fails sqlite3, ar kura palīdzību tiek demonstrēta bibliotēkas funkciju īstenošana. Klienta daļa strādā no komandrindas ļaujot piekļūt datubāzes failiem uz standarta OS funkciju pamata.

Pateicoties arhitektūrai SQLite var izmantot kā iegultās sistēmas, tā arī atsevišķos datoros ar gigabaitu datu masīviem.

Ierobežojumi
------------

Vecākas SQLite versijas tika veidota bez jebkādiem ierobežojumiem, vienīgais nosacījums bija, ka datu bāze ietilpst atmiņā, kurā tika veikti visi aprēķini, izmantojot 32 bitu veselus skaitļus. Tas radīja dažas problēmas. Sakarā ar to, ka augšējās robežas nav definētas un tāpēc pienācīgi pārbaudītas, tad tika konstatēts, ka bieži vien rodas kļūdas lietojot SQLite diezgan ekstremālos apstākļos. Un tāpēc SQLite jaunākajām versijām tika ieviesti ierobežojumi, kas tiek pārbaudīti ar kopējo testu komplektu.

SQLite bibliotēkai noteikti atbilstoši ierobežojumi, kurus akūtas nepieciešamības gadījumā ir iespējams palielināt:

| Apraksts | Vērtība | Konstante izejā |
| --- | --- | --- |
| Maksimālais līniju garums vai BLOB lauks | 1000000000 | SQLITE\_MAX\_LENGTH |
| Maksimālais kolonnu skaits | 2000 | SQLITE\_MAX\_COLUMN |
| Maksimālais SQL ekspresijas garums | 1.000.000 | SQLITE\_MAX\_SQL\_LENGTH |
| Maksimālais tabulu skaits ekspresijā ar JOIN | 64 |
| Maksimālais izteiksmes koka dziļums | 1000 | SQLITE\_MAX\_EXPR\_DEPTH |
| Maksimālais argumentu skaits funkcijā | 100 | SQLITE\_MAX\_FUNCTION\_ARG |
| Maksimālais termu skaits apvienotajās izteiksmi ar SELECT | 500 | SQLITE\_MAX\_COMPOUND\_SELECT |
| Maksimālais šablona garums kā argumentam operatoros LIKE vai GLOB | 50 000 | SQLITE\_MAX\_LIKE\_PATTERN\_LENGTH |
| Maksimālais aizstājējzīmju skaits vienā SQL izteiksmē | 999 | SQLITE\_MAX\_VARIABLE\_NUMBER |
| Maksimālais trigeru dziļums | 1000 | SQLITE\_MAX\_TRIGGER\_DEPTH |
| Maksimālais pievienoto datu bāzu skaits | 10 | SQLITE\_MAX\_ATTACHED |
| Maksimālais datubāzes lapas apjoms | 32 768 | SQLITE\_MAX\_PAGE\_SIZE |
| Maksimālais lappušu skaits datubāzes failā | 1073741823 | SQLITE\_MAX\_PAGE\_COUNT |

Līdz šim brīdim tikai **SQLITE\_MAX\_PAGE\_SIZE** izmērs nedrīkst būt lielāks par noklusēto. Tādējādi nemainot **SQLITE\_MAX\_PAGE\_COUNT** var teikt, ka maksimālais datubāzes faila izmērs sasniedz aptuveni 32 TB (35'184'372'056'064 B).

Dažus ierobežojumus var mainīt, lai samazinātu izpildes laiku programmās, nosakot kategorijas un atbilstošās vērtības sqlite3\_limit() funkcijai:

```
int sqlite3_limit(sqlite3*, int id, int newVal)
```

| Kategorija | Apraksts |
| --- | --- |
| SQLITE\_LIMIT\_LENGTH | Maksimālais jebkuras rindas vai BLOB lauka garums |
| SQLITE\_LIMIT\_SQL\_LENGTH | Maksimālais garums SQL izteiksmei |
| SQLITE\_LIMIT\_COLUMN | Maksimālais kolonnu skaits tabulās, vai indeksos, vai izteiksmēs ar ORDER BY vai GROUP BY operandiem |
| SQLITE\_LIMIT\_EXPR\_DEPTH | Maksimālais dziļums jebkurai izteiksmei, |
| SQLITE\_LIMIT\_COMPOUND\_SELECT | Maksimālais termu skaits apvienotajās izteiksmi ar SELECT |
| SQLITE\_LIMIT\_VDBE\_OP | Maksimālais virtuālās mašīnas programma instrukciju skaits izpildot SQL izteiksmes |
| SQLITE\_LIMIT\_FUNCTION\_ARG | Maksimālais funkciju argumentu skaits |
| SQLITE\_LIMIT\_ATTACHED | Maksimālais pievienoto datu bāzu skaits |
| SQLITE\_LIMIT\_LIKE\_PATTERN\_LENGTH | Maksimālais šablona garums kā argumentam operatoros LIKE vai GLOB |
| SQLITE\_LIMIT\_VARIABLE\_NUMBER | Maksimālais SQL izteiksmes mainīgo skaits, kas var būt saistīti |
| SQLITE\_LIMIT\_TRIGGER\_DEPTH | Maksimālais trigeru dziļums |

Tas var būt noderīgi, ja SQLite tiek izmantots Web pielikumos, jo samazinātas maksimālās vērtības var novērst DoS uzbrukumus no neuzticamiem ārējiem klientiem.

Izmantošana
-----------

SQLite bibliotēka ir uzrakstīta izmantojot C, kā arī eksistē saikne arī ar lielu skaitu citām programmēšanas valodām, tostarp C++, Java, C#, VB.NET, Python, Perl, PHP, Tcl, Ruby, Haskell, Schema, Smalltalk, Lua un Parser, kā arī ar daudzām citām valodām.

Vienkāršība un ērtā SQLite implementēšana noveda pie fakta, ka tā tiek izmantota pārlūkprogrammās, mūzikas atskaņotājos un daudzās citās programmās.

SQLite pielieto:

* Adobe Integrated Runtime – vide pielikumu palaišanai;
* Gears;
* XUL platforma;
* Skype;
* Daži Garmin GPS navigatoru modeļi;
* Android API.

Daudzas programmas atbalsta SQLite, kā datu uzglabāšanas formātu (jo īpaši Mac OS un IPHONE OS, Android), to skaitā:

* 1C;
* Adobe Photoshop Lightroom;
* FlylinkDC++;
* AIMP;
* Banshee;
* Eserv;
* F-Spot;
* FAR Manager (sākot ar 3.0 versiju);
* Gajim;
* Miranda IM;
* Money IQ;
* Mozilla Firefox;
* Opera (sākot ar 10.50 versiju);
* QutIM;
* Safari;
* XnView.