Microsoft introduceerde tijdens de Microsoft’s Professional Developers Conference in Los Angeles hun nieuwe technologie om databases te benaderen, Language Integrated Query (LINQ).
Menigeen noemde het de meeste spannende annoncering, terwijl in datzelfde evenement de nadruk lag op de annoncering van het indrukwekkende Windows Vista (voorheen Longhorn) en het veelbelovende SQL Server 2005. LINQ ging niet verloren in al dat marketing geweld. Niet zo vreemd, als je bedenkt dat architect Aders Hejlsberg, ook hoofdarchitect van J++, de Windows Foundation Classes en meer recentelijk C#, door de Microsoft-wereld op handen wordt gedragen.
Door de jaren heen heeft Microsoft vele api’s geïntroduceerd om vanuit programmeertalen als C# en VisualBasic de database te benaderen. Eerst was daar ODBC, daarna OLE DB, nu is het ADO.NET en daartussen hebben we nog vele andere gehad. Voor elk api geldt dat de programmeur naast kennis over de programmeertaal moet begrijpen hoe de api werkt en hij moet ook weten wat er met SQL mogelijk is.
Het integreren van SQL met een programmeertaal geeft namelijk altijd conflicten. Deze talen gaan niet uit van dezelfde bouwstenen. SQL ondersteunt bijvoorbeeld null-waarden, maar de meeste programmeertalen niet. Ook de ondersteunde datatypes komen niet overeen, en SQL is set-oriented terwijl de programmeertalen dat niet zijn. Daarom moeten er allerlei bruggen gebouwd worden, die meestal niet uitblinken in elegantie.
Bij een taal die LINQ ondersteunt is de databasetaal onderdeel van de programmeertaal geworden. Constructies om gegevens te bevragen en te wijzigen zijn net zo goed onderdeel van de taal als ‘if-then-else’-instructies, loops en klasse-declaraties. Er is geen api meer nodig. De datatypes komen overeen en het omgaan met sets is aan de programmeertaal toegevoegd.
Een additioneel voordeel is dat we met LINQ niet beperkt zijn tot het benaderen van tabellen in een database. Ook objecten in het geheugen kunnen geraadpleegd worden. Als er bijvoorbeeld een ‘array’ gedefinieerd is, kan deze met LINQ gebruikt worden alsof het een SQL-tabel is. Hiermee wordt de programmeertaal ‘set-oriented’. Deze gegevens in geheugen kunnen zelfs gejoined worden met de databasegegevens. LINQ maakt het ook mogelijk XML-documenten te raadplegen.
Er wordt niet geheel terecht gesuggereerd dat met de komt van LINQ, de programmeur nog maar één taal hoeft te kennen: C# of VisualBasic. Omdat de SQL-instructies onderdeel van die taal zijn geworden is dat deels waar. Je moet echter nog steeds de principes van tabellen begrijpen en weten hoe je ‘joins’ en ‘subqueries’ moet schrijven. Kennis van SQL blijft dus wel een vereiste. Alleen is er een SQL-dialect bijgekomen, het dialect dat ondersteund wordt door de programmeertalen.
Vanuit het standpunt van een programmeertaal is dit een elegante oplossing. Programmacode wordt niet meer door lelijke api’s verstoord. Uiteraard is dit geen overdraagbare technologie. Het werkt alleen in de .NET omgeving. Maar het zou niet erg zijn als de Java-wereld het idee kopieert.
Is het opnemen van SQL-instructies binnen een programmeertaal een nieuw idee? Niet helemaal. In de research wereld zijn er al varianten van programmeertalen geweest waarbij SQL volledig geïntegreerd werd. Pascal is in het verre verleden ooit met database-instructies uitgebreid. Maar waar we dit het sterkst gezien hebben, is uiteraard in de wereld van de klassieke 4GL’s. De 4GL’s haalden voor een groot deel hun kracht uit het feit dat ze goed geïntegreerd waren met de onderliggende databasetalen. Het heeft lang geduurd, maar het lijkt alsof Microsoft de waarde van dat concept eindelijk begrijpt.
Het is interessant om te zien dat 4GL’s jarenlang persona non grata zijn geweest, maar dat we nu toch onze moderne talen weer op 4GL’s laten lijken. Misschien moeten we C# en VisualBasic weer 4GL’s gaan noemen?
Rick F. van der Lans is onafhankelijk adviseur, een internationaal bekend spreker en auteur van diverse boeken, tevens gespecialiseerd in softwareontwikkeling, datawarehousing en internet.