SQLite is een open source, multiplatform, gratis en kleine C-bibliotheek die een zelfstandige, geïntegreerde, transactionele, serverloze en zero-configuratie SQL-database-engine implementeert. Het is de meest gebruikte SQL-database-engine ter wereld.
Functies in één oogopslag
Belangrijkste functies zijn onder meer ondersteuning voor geïsoleerde, atomaire, duurzame en consistente transacties, SQL92-implementatie, databasebestanden kunnen vrij worden gedeeld tussen computers, ondersteunt databases tot 2 terabytes, ondersteuning voor gigabyte-grootte blobs en strings, kleine code footprint, als evenals een eenvoudig te gebruiken en zeer eenvoudige API (Application Programming Interface).
Bovendien vereist SQLite geen initiële configuratie of verder beheer, kunnen ontwikkelaars een volledige database opslaan in een enkel platformonafhankelijk schijfbestand, dat perfect is voor het gebruik van bestandsindelingen van toepassingen, geen externe afhankelijkheden heeft, wordt geleverd met ingebouwde in TCL (Tool Command Language) -bindingen en uitgebreide documentatie.
Bindingen voor tal van andere programmeertalen zijn afzonderlijk verkrijgbaar. De broncode is goed voorzien van commentaar en wordt geleverd met een stand-alone CLI (Command-line Interface) -client die is ontworpen vanuit de offset die moet worden gebruikt voor het beheer van SQLite-databases.
Waar kan ik het voor gebruiken?
De SQLite-database-engine kan voor elk doel, persoonlijk of commercieel worden gebruikt. Voorgestelde toepassingen voor SQLite omvatten een database voor gadgets, een websitedatabase, een stand-in voor een bedrijfs-RDBMS (relationeel databasebeheersysteem) en een indeling voor het toepassingsbestand.
Onder de motorkap en ondersteunde besturingssystemen
De SQLite-distributie wordt geleverd met een zelfstandig opdrachtregelprogramma (sqlite) dat kan worden gebruikt om een SQLite-database te beheren en dat dient als een voorbeeld van het gebruik van de SQLite-bibliotheek. Het is volledig geschreven in de ANSI-C programmeertaal.
Ondersteunde desktopbesturingssystemen zijn GNU / Linux, Mac OS X en Microsoft Windows. Ondersteunde mobiele besturingssystemen omvatten Android en iOS. Het is met succes getest met zowel 32-bits als 64-bits hardwareplatforms en het is gemakkelijk draagbaar naar andere besturingssystemen.
Wat is nieuw in deze versie:
- Hoogtepunten van deze release zijn ondersteuning voor UPSERT in PostgreSQL-stijl en verbeterde prestaties, met name voor ORDER BY LIMIT-query's.
Wat is nieuw in versie:
- Profiteer van de atomisch-schrijf-mogelijkheden in het F2FS-bestandssysteem indien beschikbaar, voor sterk verminderde transactiekosten. Dit vereist momenteel de SQLITE_ENABLE_BATCH_ATOMIC_WRITE compileeroptie.
- Toestaan ATTACH en DETACH-opdrachten om in een transactie te werken.
- Allow WITHOUT ROWID virtuele tabellen kunnen worden beschreven als de PRIMARY KEY exact één kolom bevat.
- De & quot; fsync () & quot; dat gebeurt nadat de header is geschreven in een WAL-reset gebruikt nu de synchronisatie-instellingen voor ijkpunten. Dit betekent dat het een & quot; fullfsync & quot; op macs als PRAGMA checkpoint_fullfsync is ingeschakeld.
- De sqlite3_sourceid () -functie probeert te detecteren of de broncode is gewijzigd van wat is gecontroleerd in versiebeheer en als er wijzigingen zijn, worden de laatste vier tekens van de hash van de versie weergegeven als & quot; alt1 & quot; of & quot; alt2 & quot ;. Het doel is om onbedoelde en / of onvoorzichtige bewerkingen te detecteren. Een vervalser kan deze functie ondermijnen.
- Verbeterde declassering van kolomnamen voor CREATE TABLE AS-instructies met een verzamelquery aan de rechterkant.
- Minder & quot; stat () & quot; systeemoproepen uitgegeven door de Unix VFS.
- Verbeterde de LIKE-optimalisatie zodat deze werkt met een ESCAPE-component.
- Verbeterde PRAGMA integrity_check en PRAGMA quick_check om obscure rijcorruptie te detecteren die ze voorheen misten. Werk ook beide pragma's bij zodat ze fouttekst retourneren in plaats van SQLITE_CORRUPT wanneer corruptie in records wordt aangetroffen.
- De queryplanner geeft er nu de voorkeur aan om FROM-clausule subquery's te implementeren met behulp van co-routines in plaats van de optimalisatie van de query-flattener. Ondersteuning voor het gebruik van co-routines voor subquery's is mogelijk niet langer uitgeschakeld.
- Geef informatie over! =, IS, IS NIET, NIET NULL en IS NULL-beperkingen door aan de xBestIndex-methode van virtuele tabellen.
- Verbeterde de virtuele CSV-tabel zodat deze de laatste rij invoer accepteert als het laatste nieuwe regel ontbreekt.
- Verwijder de zelden gebruikte & quot; scratch & quot; geheugen allocator. Vervang deze door de SQLITE_CONFIG_SMALL_MALLOC-configuratie-instelling die SQLite een hint geeft dat grote geheugenallocaties moeten worden vermeden wanneer mogelijk.
- Heeft de virtuele zwerm-tabel toegevoegd aan de bestaande uniale virtuele tafelverlenging.
- De sqlite_dbpage virtuele tabel toegevoegd voor directe toegang tot pagina's van het databasebestand. De broncode is ingebouwd in de samenvoeging en wordt geactiveerd met de optie -SQLITE_ENABLE_DBPAGE_VTAB compileertijd.
- Een nieuw type virtuele fts5vocab-tabel toevoegen - "exemplaar" & quot; - die directe toegang biedt tot een FTS5 full-text index op het laagst mogelijke niveau.
- Een oproep verwijderen naar rand_s () in Windows VFS omdat dit problemen veroorzaakte in Firefox op sommige oudere laptops.
- De broncode src / shell.c naar de shell van de opdrachtregel is niet langer onder versiebeheer. Dat bestand wordt nu gegenereerd als onderdeel van het bouwproces.
- Diverse micro-optimalisaties verminderen het CPU-gebruik met ongeveer 2,1%.
- Bugfixes:
- Bevestig een foutieve assert () -instructie ontdekt door OSSFuzz. Ticket cb91bf4290c211d
- Verhelp een obscuur geheugenlek in sqlite3_result_pointer (). Ticket 7486aa54b968e9b
- Vermijd een mogelijke use-after-free-fout door schema-resets uit te stellen tot nadat de queryplanner is voltooid. Ticket be436a7f4587ce5
- Gebruik alleen indexen-op-uitdrukkingen om ORDER BY of GROUP BY te optimaliseren als de COLLATE correct is. Ticket e20dd54ab0e4383
- Herstel een assertiefout die opkwam toen de expressie in een index-op-expressies echt een constante was. Ticket aa98619ad08ddca
- Bevestig een beweringfout die zou kunnen optreden na PRAGMA reverse_unordered_selects. Ticket cb91bf4290c211d
- Repareer een segfault die kan optreden voor query's die gebruikmaken van tabelwaardige functies in een IN- of EXISTS-subquery. Ticket b899b6042f97f5
- Los een mogelijk probleem met een overloop met gehele getallen op bij het compileren van een bepaalde afschuwelijke algemene tabelexpressie. Dit was een ander probleem dat werd ontdekt door OSSFuzz. Check-in 6ee8cb6ae5.
- Herstel een mogelijk out-of-bound lezen bij het opvragen van een corrupt databasebestand, een probleem dat is gedetecteerd door Natalie Silvanovich van Google Project Zero. Inchecken 04925dee41a21f.
Wat is nieuw in versie 3.20.1:
- De patchversie van versie 3.20.1 wijzigt twee regels code in de sqlite3_result_pointer () -interface om een zeldzaam geheugenlek te herstellen.
Wat is nieuw in versie 3.9.2:
- SQLite versie 3.9.2 is een patch-versie die twee obscure bugs repareert.
Wat is nieuw in versie 3.8.9:
- Nieuwe functies in deze release zijn de PRAGMA index_xinfo-opdracht, de sqlite3_status64 () -interface en de opdracht ".dbinfo" van de opdrachtregelshell.
Wat is nieuw in versie 3.8.8.2:
- De patchversie 3.8.8.2 lost een enkel klein probleem op: het zorgt ervoor dat de bewerking sqlite3_wal_checkpoint (TRUNCATE) altijd het logboek van de write-ahead afsnijdt, zelfs als het logboek al is gereset en geen nieuwe inhoud bevat. Het is onduidelijk of dit een bugfix of een nieuwe functie is.
- Zoiets zou normaal gesproken in de volgende reguliere geplande release vallen, maar een prominente SQLite-gebruiker had de verandering snel nodig, dus we waren blij dat hij deze via deze patch kon overhaasten.
- Er is geen reden om te upgraden, tenzij je het verbeterde gedrag van sqlite3_wal_checkpoint (TRUNCATE) echt nodig hebt.
Wat is nieuw in versie 3.8.8.1:
- Een bug repareren in de sorteerlogica, aanwezig sinds versie 3.8.4, die ervoor kan zorgen dat de uitvoer in de verkeerde volgorde wordt weergegeven bij query's die een ORDER BY-component bevatten, een LIMIT-clausule en die ongeveer 60 of meer kolommen bevatten de resultatenset. Ticket f97c4637102a3ae72b79.
- SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
- SHA1 voor sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
Wat is nieuw in versie 3.8.8:
- Nieuwe functies:
- De PRAGMA data_version-opdracht toegevoegd die kan worden gebruikt om te bepalen of een databasebestand is gewijzigd door een ander proces.
- De SQLITE_CHECKPOINT_TRUNCATE-optie toegevoegd aan de sqlite3_wal_checkpoint_v2 () -interface, met overeenkomstige verbeteringen aan PRAGMA wal_checkpoint.
- De sqlite3_stmt_scanstatus () -interface toegevoegd, alleen beschikbaar wanneer gecompileerd met SQLITE_ENABLE_STMT_SCANSTATUS.
- De sqlite3_table_column_metadata () is verbeterd om correct te werken op WITHOUT ROWID-tabellen en om te controleren op het bestaan van een a-tabel als de parameter kolomnaam NULL is. De interface is nu ook standaard opgenomen in de build, zonder dat de SQLITE_ENABLE_COLUMN_METADATA compileeroptie vereist is.
- De SQLATE_ENABLE_API_ARMOR compileertijdoptie toegevoegd.
- De SQLATE_REVERSE_UNORDERED_SELECTS compileeroptie toegevoegd.
- Toegevoegd de compileertijdoptie SQLITE_SORTER_PMASZ en de starttijdoptie SQLITE_CONFIG_PMASZ.
- De SQLITE_CONFIG_PCACHE_HDRSZ-optie toegevoegd aan sqlite3_config (), waardoor het voor applicaties eenvoudiger wordt om de juiste hoeveelheid geheugen te bepalen voor gebruik met SQLITE_CONFIG_PAGECACHE.
- Het aantal rijen in een VALUES-component wordt niet langer beperkt door SQLITE_LIMIT_COMPOUND_SELECT.
- De voor eval.c laadbare extensie toegevoegd die een eval () SQL-functie implementeert die SQL recursief evalueert.
- Prestatieverbeteringen:
- Verminder het aantal memcpy () -bewerkingen bij het balanceren van een b-tree, voor een algemene prestatieverbetering van 3,2%.
- Verbeteringen in kostenramingen voor de scan-scan-optimalisatie.
- De automatische optimalisatie van indexering kan nu een gedeeltelijke index genereren als dat passend is.
- Bugfixes:
- Zorg voor duurzaamheid na een stroomverlies met "PRAGMA journal_mode = TRUNCATE" door fsync () aan te roepen direct na het afkappen van het journaalbestand.
- De queryplanner herkent nu dat elke kolom in de rechtse tabel van een LEFT JOIN NULL kan zijn, zelfs als die kolom een NOT NULL-beperking heeft. Probeer in die gevallen niet om NULL-tests te optimaliseren. Oplossing voor kaartje 6f2222d550f5b0ee7ed.
- Zorg ervoor dat ORDER BY rijen in stijgende volgorde plaatst, zelfs als de operator DISTINCT is geïmplementeerd met een dalende index. Oplossing voor kaartje c5ea805691bfc4204b1cb9e.
- Repareer gegevensraces die kunnen optreden onder stress bij het uitvoeren van veel threads in de gedeelde cachemodus, waarbij sommige threads verbindingen openen en sluiten.
- Fix obscure crash bugs gevonden door Amerikaanse fuzzy lop. Ticket a59ae93ee990a55.
- Omzeil een bug voor de GCC-optimizer (voor gcc 4.2.1 op MacOS 10.7) waardoor de R-Tree-extensie onjuiste resultaten berekende wanneer deze werden gecompileerd met -O3.
- Andere wijzigingen:
- Schakel het gebruik van de C-library-routine strchrnul () uit, tenzij deze specifiek is ingeschakeld met de -DHAVE_STRCHRNULL compileeroptie.
- Verbeteringen in de effectiviteit en nauwkeurigheid van de waarschijnlijkheid (), waarschijnlijke () en onwaarschijnlijke () SQL-hintfuncties.
- SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
- SHA1 voor sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
Wat is nieuw in versie 3.8.7.4:
- Deze release corrigeert toevoegingen in een mutex die vereist is door de wijzigingen van de 3.8.7.3-patch maar per ongeluk is weggelaten. De mutex was niet vereist door een van de interne SQLite-tests, maar Firefox crasht zonder. Testgevallen zijn toegevoegd om ervoor te zorgen dat mutex nooit meer wordt gemist.
Wat is nieuw in versie 3.8.7.3:
- Bugfix: zorg ervoor dat de KeyInfo-objecten in de cache (een interne abstractie die niet zichtbaar is voor de toepassing) niet oud worden als ze in de gedeelde cachemodus werken en vaak sommige databaseverbindingen sluiten en opnieuw openen terwijl andere databaseverbindingen op dezelfde gedeelde cache open blijven doorlopend. Ticket e4a18565a36884b00edf.
- Bugfix: herken dat elke kolom in de rechtse tabel van een LINKERLOOP NULL kan zijn, zelfs als de kolom een NOT NULL-beperking heeft. Pas geen optimalisaties toe die ervan uitgaan dat de kolom nooit NULL is. Ticket 6f2222d550f5b0ee7ed.
- SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
- SHA1 voor sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
Wat is nieuw in versie 3.8.7.2:
- De belangrijkste reden voor deze release is om de ROLLBACK-opdracht te verbeteren zodat het mogelijk maakt om query's op dezelfde databaseverbinding uit te voeren zolang de ROLLBACK het schema niet wijzigt. In alle voorgaande versies van SQLite zou een ROLLBACK ervoor zorgen dat wachtende zoekopdrachten onmiddellijk zouden stoppen en SQLITE_ABORT of SQLITE_ABORT_ROLLBACK retourneren. Wachtende zoekopdrachten worden afgebroken als de ROLLBACK het databaseschema wijzigt, maar vanaf deze patchrelease mogen de query's worden voortgezet als het schema niet wordt gewijzigd.
- Naast de ROLLBACK-verbetering bevat deze patchversie ook oplossingen voor drie obscure bugs.
Wat is nieuw in versie 3.8.7.1:
- De belangrijkste reden voor deze bug-fixrelease is om een probleem aan te pakken met het bijwerken van de waarde van velden aan het einde van een tabel die zijn toegevoegd met ALTER TABLE ADD COLUMN. Dit probleem 1 verscheen voor het eerst in de 3.8.7-release.
- Een andere kleine ergernis in de 3.8.7-release was het feit dat de Android-build probeerde de strchrnul () -functie uit de standaard C-bibliotheek te gebruiken, maar die functie is niet beschikbaar op Android. Android builds moest -DHAVE_STRCHRNUL = 0 toevoegen om het probleem te omzeilen. Deze patch corrigeert dat, zodat Android Builds nu zonder enige wijzigingen moet werken.
- De werking van PRAGMA journal_mode = TRUNCATE is verbeterd zodat fsync () wordt aangeroepen na het trunceren van het journaalbestand wanneer PRAGMA synchroon = VOLLEDIG. Dit helpt de transactieduurzaamheid te behouden in het geval van een vermogensverlies dat optreedt kort na commit.
- Ten slotte zijn een aantal oude en duistere problemen verbonden aan het uitvoeren van UPDATE en DELETE op VIEWs opgelost.
Wat is nieuw in versie 3.8.7:
- De meeste wijzigingen ten opzichte van de vorige release zijn micro-optimalisaties die zijn ontworpen om SQLite een beetje sneller te laten werken. Elke individuele optimalisatie heeft een onevenredig kleine impact op de prestaties. Maar de verbeteringen tellen op. Gemeten op een goed gedefinieerde werkbelasting (die de SQLite-ontwikkelaars gebruiken als een proxy voor een typische applicatie-werklast) met cachegrind op Linux en gecompileerd met gcc 4.8.1 en -Os op x64 linux, doet de huidige release meer dan 20% meer werk voor hetzelfde aantal CPU-cycli vergeleken met de vorige release. Cachegrind is geen echte CPU en de werklast die wordt gebruikt voor de meting is slechts een proxy. Dus je prestaties kunnen variëren. We verwachten ongeveer de helft van de gemeten en gerapporteerde verbetering in real-world applicaties te zien. 10% is minder dan 20%, maar het is nog steeds redelijk goed, denken we.
- Deze release bevat een nieuwe set C-taalinterfaces met niet-ondertekende 64-bits in plaats van 32-bits lengte-parameters. De nieuwe API's bieden geen nieuwe mogelijkheden. Maar ze maken het wel eenvoudiger om applicaties te schrijven die beter bestand zijn tegen kwetsbaarheden van gehele overvloeden.
- Deze versie bevat ook een nieuwe sorteerder die meerdere threads kan gebruiken om grote sorteerbewerkingen te ondersteunen. (Soms zijn sorteerbewerkingen vereist om ORDER BY- en / of GROUP BY-clausules te implementeren en zijn bijna altijd vereist voor CREATE INDEX.) De multi-threads-sorter is standaard uitgeschakeld en moet worden ingeschakeld met behulp van de SQL-opdracht PRAGMA-threads. Houd er rekening mee dat de sorteermachine met meerdere threads snellere realtime prestaties biedt voor grote typen, maar ook meer CPU-cycli en meer energie gebruikt.
Wat is nieuw in versie 3.8.3.1:
- SQLite-versie 3.8.3.1 repareert een bug in de versies 3.8.1, 3.8.2 en 3.8.3 die ervoor kunnen zorgen dat query's geldige rijen weglaten. Een upgrade van die versies wordt aanbevolen.
- Het probleem komt alleen naar voren als SQLite is gecompileerd met de SQLITE_ENABLE_STAT3 of SQLITE_ENABLE_STAT4 compileertijdopties. In dat geval, als een vraag een WHERE-component heeft die uitdrukkingen als deze bevat:
- WAAR (expr1 OF expr2 OF ... OF exprN) EN kolom IS NIET NULL
- Waar alle expr1 tot en met exprN geschikt zijn voor gebruik door indexen, kan SQLite tijdens de queryplanning de term "column IS NOT NULL" ten onrechte in "column & gt; NULL" hebben omgezet. Maar de laatste term is nooit waar, en dus zou de query geen rijen opleveren.
Wat is nieuw in versie 3.8.3:
- Ondersteuning toegevoegd voor algemene tabeluitdrukkingen en de WITH-component.
- De printf () SQL-functie toegevoegd.
- SQLITE_DETERMINISTIC is toegevoegd als een optioneel bit in het vierde argument voor de sqlite3_create_function () en gerelateerde interfaces, waardoor applicaties de mogelijkheid hebben om nieuwe functies te maken die uit de binnenste loops kunnen worden verwijderd als ze constante argumenten hebben.
- SQLITE_READONLY_DBMOVED-foutcode toevoegen, geretourneerd aan het begin van een transactie, om aan te geven dat het onderliggende databasebestand is hernoemd of verplaatst van onder SQLite.
- Sta arbitraire uitdrukkingen toe, inclusief functieaanroepen en subquery's, in het argument bestandsnaame om te ATTACHEN.
- Sta toe dat een VALUES-component wordt gebruikt overal waar een SELECT-instructie geldig is.
- Voer de PRNG opnieuw die wordt gebruikt door sqlite3_randomness (N, P) wanneer deze wordt aangeroepen met N == 0. Automatisch reseeden na een fork () op unix.
- Verbeter de spreidix1 virtuele tabel zodat deze efficiënt door rowid kan zoeken.
- Prestatieverbeteringen.
- Verbeteringen aan de opmerkingen in de bytecodeweergave van VDBE tijdens het uitvoeren van EXPLAIN.
- Voeg de "% token_class" -richtlijn toe aan de LEMON-parsergenerator en gebruik deze om de grammatica te vereenvoudigen.
- Wijzig de LEMON-broncode om te voorkomen dat C-bibliotheekfuncties worden aangeroepen die OpenBSD gevaarlijk vindt. (Ex: sprintf).
- Bugfix: stop in de opdracht CSV-import van opdrachtregelhulpprogramma geen veld wanneer een dubbele dubbele aanhalingsteken voorkomt aan het einde van een CRLN-regel.
- SQLITE_SOURCE_ID: "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
- SHA1 voor sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
Reacties niet gevonden