SQLite, footprint minuscul pentru baze de date în aplicații

Citisem mai demult câteva rânduri despre SQLite, dar nu știam mai nimic de el. Când am primit comanda pentru o aplicație foarte simplă de afișat niște date, am zis să fac o incursiune.

Scula este foarte cool. Este mică și rea ca un șot de palincă pe burta goală. E rea, da’ bună. În 3 MB încap aplicația în linie de comandă pentru manipularea bazei de date și DLL-ul pentru accesarea bazelor de date din aplicațiile tale. Ca să te joci cu baze de date, să interoghezi și să manipulezi niște înregistrări, nu trebuie să instalezi nimic: EXE-ul merge out-of-the-box. Nu-ți trebuie licență că este „public domain” și suportă o droaie de platforme. Io m-am bucurat să văd că există o implementare și pentru .NET Core, descărcabilă cu Nuget, care merge șnur pe aplicații ASP.NET 5 / MVC 6. În fine… aproape șnur.

Însă…

SQLite nu este un server de baze de date. Este o bibliotecă, cu ceva scule, pentru manipularea unor fișiere tip bază de date, folosind SQL ca limbaj de interogare. Este foarte performantă, și ușor de înglobat într-o droaie de aplicații și platforme, având footprint foarte mic. Dar a trebuit să sacrifice unele funcționalități pentru asta.

Venind din lumea SQL Server, primele bariere de care m-am lovit au fost:

  • Nu suportă proceduri stocate. Dacă ai cod ceva mai complex, trebuie să-l pui hard-coded în aplicație. Sau să citești fișiere de pe disc cu comenzile de executat.
  • Nu suportă variabile, tocmai pentru că este o bibliotecă, nu un server. Nu poți zice un

DECALARE @variable INTEGER
SET @variable = 1234

La un moment dat trebuia să inserez o înregistrare doar dacă nu exista ceva similar deja (puneam un flag în dreptul unei persoane numai dacă nu-l avea deja). Cum nu mergea să folosesc EXISTS pentru că n-am găsit IF, am ajuns la o construcție de genul scărpinat cu mâna dreaptă-n urechea stângă:

INSERT INTO Person_Flags(Person_ID, Flag_ID)
SELECT @PersonID, @FlagID
WHERE NOT EXISTS
(SELECT * FROM Person_Flags WHERE Person_ID = @PersonID AND Flag_ID = @FlagID);

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s