Code generator voor SQL statements

Een belangrijk product voor een fysiek datamodel is het genereren van code. Standaard zit in EA al de mogelijkheid om DDL te genereren, rechtstreeks in een database of op basis van SQL scripts. 

Echter als je een detail fysiek model hebt van een tabel dan is ook het kunnen genereren van SQL statements zoals voor insert, update of delete interessant. Zeker als je interfaces gebruikt voor de definitie van subsets e.d. Dit kun je eenvoudig verder uitbreiden met bijvoorbeeld filtering, ordering, aanmaken van stored procedures e.d.

Ten behoeve van deze werkwijze is in het kader van het IDEA project een prototype gemaakt. Hiervoor is de standaard code generator in EA gebruikt. Deze component had ik nog nooit nader bekeken. 

Na wat opstartproblemen (je moet eerst een datatype definieren voor je codegenerator voordat je iets kunt doen in de codegenerator. Daarna kun je uitgebreid geebruik maken van de reeds aanwezige templates, want voor iedere taal zie je de templates en kun je hieruit delen kopieren.

code scherm

In de bovenstaande afbeelding zie je hoe een scherm in de code editor eruit ziet. Hieronder een aantal code snippets.

$insertfields = %list="Attribute__Select" @separator=", " @indent=""%

$insertparameters = %list="Attribute__Parameter" @separator=", " @indent=""%

INSERT INTO %TO_UPPER(className)%

( $insertfields ) 

VALUES 

( $insertparameters ) 

Dit stukje code laat zien hoe je gebruik kunt maken van de temlate, daarin tekst plaatst en op basis van placeholders details maakt. Bijvoorbeeld een  lijst van attributen en values. Vervolgens worden deze in variabelen geplaatst waarmee je een getrapte werkwijze kunt toepassen.

%if attType=="Text" or attType =="String"%

'#%TO_LOWER(attName)%#'

%elseIf attType=="Date" or attType =="DateTime"%

##%TO_LOWER(attName)%##

%else%

#%TO_LOWER(attName)%#

%endIf%

Het tweede voorbeeld laat zien hoe je op basis van een interne code taal if statements en dergelijke kunt toepassen. Ook zie je dat er ingebouwde routines zijn die tekstmanipulaties kunnen doen.

Samenvattend kan het volgende genoemd worden over de code generator:

  • Krachtige omgeving voor het opstellen van code op basis van klasse modellen.
  • Met name de templates en de lijst verwijzingen maken krachtige codetemplates modelijk
  • Hergebruik en een logische opbouw van de verschillende code templates is noodzakelijk.
  • Sterk gericht op het genereren van klasse definities, minder geschikt voor het gebruik voor SQL statements
  • Bij gebruik van feature links schiet deze inrichting te kort

In de voorbeeld repository voor IDEA is een uitwerking opgenomen van deze code generator genaamd FormFactory.