Vad är problemet?
Först RLA står för record level access. Det är alla våra kära bekanta operationer som CHAIN, READ, READP, READE, READPE, SETLL och SETGT.
Det finns några till.
Det står ju ”record level” dvs en ”rad” i taget. Till skillnad mot SQL som i princip (men vem håller på principer) helst arbetar ett ”set” dvs en uppsättning rader per operation. Här är det en konceptuell skillnad.
Men om man ser på att gå över från RLA till SQL så är kruxet enligt min enkla mening att många operationer gör mer än en sak. Några exempel:
När vi öppnar en fil som är kopplad till ett index får vi tillgång till hela den sökväg som indexerats och kan sedan med olika operationer flytta oss helt fritt – till en viss punkt, framåt eller bakåt och så vidare.
SETLL är i synnerhet en lurig en. I program av ”en viss ålder” – varav det finns många – har man använt SETLL till att kontrollera om en matchning mot en annan tabell förekommer, men utan att läsa in data från den andra tabellen.
SETLL key tabell;
IF %found;
någonting
ENDIF;
Men man också använda samma operation till att se till att nästa läsning sker från en viss startpunkt:
SETLL key tabell;
READ tabell;
IF not %eof;
någonting;
ENDIF;
Den första varianten skulle kunna bli en ”select count…” i SQL medan den andra skulle kunna bli en ”declare cursor” + ”open cursor” + ”fetch”. Helt olika hantering således.
Andra varianter är om man gör en SETLL för att sedan göra en READP. Då stämmer inte detta med SQL cursor heller eftersom den där föregående raden inte ingår i det dataset som SQL-cursorn etablerat.
Och eftersom programmet glatt kan hoppa mellan alla dessa olika varianter av operationer är det enormt svårt att föruse hur man ska kunna skapa en komplett och säker konverterare.
Men det vore bra gott om någon lyckades!
Inte för att vi får programmen att fungera bättre men för att få de mer läsbara.