De release van SQLite 3.42 is gepubliceerd, een lichte DBMS, gepresenteerd als een te integreren bibliotheek. De code van SQLite wordt verspreid als publiek domein, wat betekent dat deze zonder beperkingen en kosteloos voor alle doeleinden kan worden gebruikt. De financiële ondersteuning voor de ontwikkelaars van SQLite komt van een speciaal opgerichte consortium, dat bedrijven zoals Adobe, Oracle, Mozilla, Bentley en Bloomberg omvat.
Belangrijkste wijzigingen:
- Voor full-text indexen FTS5 is de secure-delete opdracht geïmplementeerd, die een volledige schoonmaak van alle resterende gegevens na verwijdering uitvoert.
- In de functies voor het verwerken van gegevens in JSON-formaat is ondersteuning voor JSON5-uitbreidingen geïmplementeerd.
- De queryplanner is verbeterd. Standaard is de optimalisatie 'count-of-view' ingeschakeld. Verwerking van niet-gebruikte kolommen in subquery's is uitgesloten. De implementatie van push-down optimalisatie is verbeterd.
- De interface van de opdrachtregel heeft de optie '--unsafe-testing' toegevoegd, waarmee sommige gevaarlijke opdrachten kunnen worden gebruikt, zoals '.testctrl', bedoeld voor testdoeleinden. In de veilige modus ('--safe') is het gebruik van de opdrachten '.log on' en '.log off' toegestaan. Een scheidingsteken '--' is toegevoegd voor argumenten na welke de verwerking van opties wordt uitgeschakeld. De parameters ':inf' en ':nan' zijn toegevoegd, die verband houden met de waarden oneindig en NaN.
- In de namen van applicatie-gedefinieerde SQL-functies is het toegestaan om te overlappen met de sleutelwoorden CROSS, FULL, INNER, LEFT, NATURAL, OUTER en RIGHT.
- De mogelijkheden van PRAGMA integrity_check zijn uitgebreid. Er is een controle toegevoegd voor het opgeven van de waarde NaN in kolommen met de NOT NULL-voorwaarde. De informativiteit van foutmeldingen is verbeterd.
- In de session-additie is het onderscheppen van wijzigingen in tabellen zonder ROWID toegestaan.
- In de functie voor het werken met tijd en data is de modifier 'subsec' toegevoegd voor het gebruik van fracties van seconden.
- De diepte van recursie voor JSON-arrays en -objecten is standaard verminderd van 2000 naar 1000.
Daarnaast is versie 0.8.0 van de DuckDB-database ontwikkeld, een uitbreiding van SQLite die mogelijkheden en optimalisaties biedt voor analytische queries. Deze versie dekt een aanzienlijk deel van de opgeslagen data, bijvoorbeeld door aggregaties van alle inhoud in tabellen of door verschillende grote tabellen samen te voegen. Er is een uitgebreide dialect van SQL beschikbaar, met extra mogelijkheden voor het verwerken van zeer complexe en langdurige queries, ondersteuning voor complexe types (arrays, structuren, unions), gelijktijdige uitvoering van meerdere queries en de mogelijkheid om queries direct uit bestanden in CSV, JSON en Parquet-formaten uit te voeren. Import vanuit PostgreSQL is ook mogelijk.
Naast de SQLite shell-code maakt het project gebruik van een apart uitgebouwde PostgreSQL-parser, de Date Math-component van MonetDB, een eigen implementatie van vensterfuncties (gebaseerd op het Segment Tree Aggregation-algoritme), een reguliere expressiehandler op basis van de RE2-bibliotheek, een eigen query-optimizer, en het MVCC-mechanisme voor gelijktijdige taakuitvoering (Multi-Version Concurrency Control). Ook is er een vectorized query execution engine ontwikkeld op basis van het Hyper-Pipelining Query Execution-algoritme, waarmee grote waarde-sets in één keer kunnen worden verwerkt. De projectcode is beschikbaar onder de MIT-licentie.
In de nieuwe versie van DuckDB:
- Nieuwe expressies 'PIVOT' en 'UNPIVOT' zijn toegevoegd voor het transformeren van rijen naar kolommen en omgekeerd.
- Het parallelle importeren en exporteren van data is verbeterd. Standaard wordt het lezen van CSV-bestanden in meerdere threads uitgevoerd en is er multithread writing bij het gebruik van Parquet-, CSV- en JSON-formaten.
- De operator '**' is toegevoegd voor het recursief doorlopen van mappen bij het definiëren van bestandslocaties (bijvoorbeeld, FROM 'data/glob/crawl/stackoverflow/**/*.csv';).
- Ondersteuning voor samengevoegde (JOIN) operaties op tijdreeksgegevens is toegevoegd, waarbij voor het samenvoegen van records niet exacte, maar benaderende overeenkomsten van waarden in het tijdveld worden gebruikt (bijvoorbeeld, records waarvan de tijd niet meer dan 1 minuut van elkaar verschilt, kunnen worden samengevoegd).
- Lazy loading van database-metadata is geïmplementeerd, wat de opstarttijd van de database aanzienlijk heeft versneld.
- Ondersteuning voor het verbinden van aangepaste functies in de programmeertaal Python is toegevoegd.
- Ondersteuning voor de ADBC API (Arrow Database Connectivity) voor gegevensoverdracht met behulp van Apache Arrow is toegevoegd.
- Binding voor integratie met code in de programmeertaal Swift is geïmplementeerd.
- Het gedrag van de delingsoperator ("/") is veranderd, deze voert nu standaard berekeningen met drijvende komma uit in plaats van gehele getaloperaties. Voor gehele delingen is een nieuwe operator "//" aangesteld. Het oude gedrag kan worden hersteld met de instelling "SET integer_division=true;".
- De methode voor het omgaan met null-waarde bij sorteren is gewijzigd van "NULLS FIRST" naar "NULLS LAST", dit betekent dat NULL-waarden nu aan het einde van de lijst worden weergegeven, in plaats van aan het begin. Het oude gedrag kan worden hersteld met de instelling "SET default_null_order='nulls_first';".
Daarnaast kan het door Facebook ontwikkelde project CG/SQL worden genoemd, dat een codegenerator biedt voor het gebruik van opgeslagen procedures met SQLite. CG/SQL maakt het mogelijk om opgeslagen procedures te schrijven in een speciale dialect van T-SQL (Transact-SQL), waardoor aanroepingen van functies uit de standaard C-bibliotheek en toegang tot gegevens in SQLite mogelijk zijn. De gemaakte opgeslagen procedures worden gecompileerd naar C-code, die de SQLite C API gebruikt om opgegeven taken uit te voeren en complexe aanvragen te verwerken. Gecompileerde opgeslagen procedures kunnen worden aangesloten op programma's in C, Java en Objective-C. De projectcode is geschreven in C en is beschikbaar onder de MIT-licentie.
Bron: opennet.ru
