Colbert biedt unieke functionaliteit 

Data analyse

Data analyseren met SQL is soms omslachtig of onmogelijk. Dat is jammer want SQL is in de basisopzet een krachtig gereedschap.
Zo is het concept van de view een goed mechanisme om eenmalig te definiëren hoe de door jouw gewenste informatie er uit moet zien zonder hierbij data te moeten kopiëren naar aparte tabellen.

Colbert heeft SQL uitgebreid met functionaliteit die krachtige, ongeëvenaarde mogelijkheden biedt voor het doen van data analyse. Deze extra functionaliteit is met een zeer geringe uitbreiding van SQL geïmplementeerd. De meest in het oog springende is de mogelijkheid om formules op te slaan in database velden. Maar Colbert kent meer bijzondere functionaliteit.

Formules

In Colbert kun je velden definiëren van het type formule. Hierbij hoef je alleen het resultaat van de formule te definiëren. Het aantal parameters is in gebruik steeds variabel.
Bij aanroep van een formule in een SQL statement wordt elke formule eenmalig vertaald en gebonden aan de parameters die daarbij in de dan geldende scoop worden gezocht.

De tabel Medewerkers is gedefinieerd als:
create table Medewerkers (Naam String, Salaris Double, Bonus Expr<Double> )

Medewerkers

insert into Medewerkers values ‘Bert’, 4500, Doel / 5000

Meer informatie en voorbeelden van formules zijn te vinden onder Toepassingsgebieden:

Former 

Former is een functie die een veld uit het vorige record benadert. Vorig wordt daarbij bepaald door een dan verplicht order by clause.

Met Former kunnen allerlei cumulatieve, ranking en andere analytische functies worden gedaan.

Omzet
Toon per jaar de groei in Doel en de cumulatieven van Behaald

De eerste Former heeft als parameter Doel, de tweede Former heeft geen parameter en verwijst naar zichzelf in het vorige record

Colbert SQL met Former

Select *, Doel – Former Doel as GrowDoel, Behaald + Former as CumBehaald
from Omzet [Henk] order by Jaar

Slim SQL

In Colbert mag je samen met standaard SQL ook een aangepaste SQL gebruiken. Je mag dan niet relevante SQL zoals SELECT * FROM, ORDER BY, HAVING en GROUP BY weglaten. De ORDER BY mag je ook in de from clause aangeven.

Sql

Colbert SQL

Select * from Afdeling

Afdeling

Select * from Afdeling where id > 12

Afdeling : id > 12

SELECT Beer, COUNT(*) as “number” FROM Beers GROUP BY Beer ORDER BY “number” desc;

Beer, count desc as Number from Beers

CREATE FUNCTION mini(v1 number, v2 number)
RETURN number IS
BEGIN
  IF v1 < v2 THEN RETURN v1; ELSE RETURN v2; END IF;
END;

create func mini as a < b ? a : b         *

Select afdid, id from famsource where id = 10 oder by afdid

Id, afdid asc from FamSource[10]

* In Colbert is mini hier ook nog eens generiek gedefinieerd !     Zie hieronder voor meer uitleg.

Tekst analyse en mutatie

Haddock is een krachtige taal voor het onderzoeken en muteren van tekst.
Haddock bestaat uit één-letter operatoren, hebben nul of meer parameters en zijn meestal overloaded.
Haddock is naadloos geïntegreerd in SQL waarbij de parameters van de Haddock operatoren ook waarden uit database velden mogen zijn.
Met Haddock is elke analyse of manipulatie op tekst mogelijk

R  Rechts
L  Links
V  Verify
E   Erase
B  Erase Back
G  Find char in range
F  Find
S  Substitute
C  Copy to Buffer

*  Herhaal zolang true
{ .. }  maak tot één operator
{ .. ; .. ; ..}  eerste match
@  buffer
#  counter
^  position
$  length
::  Haddock

Overload voorbeeld:

L4         Left 4
L$2       Lower (lengte < 2)
L’eoa’    Left if next in (e,o,a)

Haddock operator voorbeelden
Diag
Toon tweede PWS code

Haddock kan zowel tekst als boolean als int opleveren. Hier wordt een tekst opgeleverd.

Colbert SQL met Haddock in from clause
Line, Line:: f’pws’2b*r3r’0-9’* t e* as Pws2 from Diag
Toon alle met PWS code met numeriek deel beginnend met 34 of niet meer dan 4 karakters
Haddock levert hier een boolean op.
Colbert SQL met Haddock in where clause
Diag where Line:: {t’pws’ {v’34’ ; r’0-9’*l%5 }}~
Toon alle records met Name is palindrome.
Colbert SQL met Haddock in where clause
Fam where Name :: {c r*l@e l* e}* l$2
Normalisatie
Data met herhaalde structuren kunnen met Colbert in SQL worden genormaliseerd. Colbert doet dit on the fly. Er wordt dus geen genormaliseerde kopie opgeslagen.
FamAttr
Toon de genormaliseerde tabel

Colbert biedt voor normalisatie een virtuele tabel Normalize die zijn waarden uit een veld van een andere tabel haalt.
Het resultaat is in SQL weer normaal te benaderen als relationele tabel.

Colbert SQL met Normalize
Name, SubSports from FamAttr join Normalize Sports by ‘,’
Generieke Functies

In Colbert is het heel eenvoudig om functies te definiëren. Je hoeft je hierbij niet druk te maken over typering: Als je het weglaat zoekt Colbert uit voor welke types hij een implementatie ka maken.

Fam
Definieer getypeerde functie IsPalindroom

Create func (string X => bool) IsPalindroom as X :: {c r*l@e l* e}* l$2

Definieer generiek functie Next
Create func Next as X + 1
Colbert SQL met Next en IsPalindrome
Bij een functie met geen of een parameter hoeven deze niet tussen haakjes te staan
*, next id, next birthday, next salary from Fam : IsPalindrome name
Definieer functie GetNumber (Nr uit S)
Create func GetNumber as S :: {g’0-9′ b* r’0-9’*} Nr t e* g$0

Toon eerste en tweede getal 

Colbert SQL met GetNumber in from clause

Line, GetNumber(Line, 1) , GetNumber(Line, 2) from Diag

Toon alle met een vijfde getal
Haddock is zowel een string als bool als int en Colbert kent impliciete type coercion die in de where clause de boolean oplevert.
Colbert SQL met GetNumber in where clause

Diag where GetNumber(Line, 5)