Selaajan toiminta ================= Selaaja luo tekstialkioita saamastaan tavuvirrasta, jotka se toimittaa jäsentäjälle. Tekstialkiot erotellaan tyhjillä merkeillä ja kommenteilla, joita saa olla kahden alkion välissä kuinka paljon tahansa sekä toisilla tekstialkioilla. Selaaja pyrkii aina pisimpään mahdolliseen tekstialkioon. Täten esim. 'abc123':stä tulee vain yksi alkio: . Sen sijaan 'abc 123' synnyttää kaksi eri alkiota: ja . Ja edelleen 'abc*123' synnyttää kolme eri alkiota: ja . Kts. kohta Tunnisteet. Toisaalta 'abc-123':sta tulee , koska on määritelty ennen viiva-merkkiä ja se voi myös alkaa viivalla. Eli esiintymisjärjestyksellä on myös väliä. Tyhjämerkit (whitespace) ------------------------ välilyönti tabulaattori rivinvaihdot: NL, CR, CR+NL Kommentit --------- REM rivikommentti, jossa REM-sanan oltava rivin alussa Oraclessa REM missä kohtaa tahansa rivillä, poistaa koko rivin, mutta esim. CREATE TABLE -lauseen keskellä ei saa olla REM-kommenttia. -- rivikommentti mistä sarakkeesta tahansa rivin loppuun /* monirivinen kommentti, SISÄKKÄISIÄ EI SALLITA toistaiseksi */ Tunnetut merkit --------------- SQL-92:sta: " ' % & ( ) * + , - . / : ; < = > ? _ | Oraclesta lisäksi: # $ -alkio poimii muut merkit. Tällöin tulostetaan virheilmoitus ja keskeytetään selaaminen. Varatut sanat ------------- kts. tiedostosta SQLParser.jjt kohdista /* Varatut sanat */ ja /* Tietotyypit */ Tunnisteet ---------- UNSIGNEDINT: yksi tai useampi numeromerkki peräkkäin SIGNEDINT: [+|-] IDENTIFIER: alkaa kirjaimella (A-Z, a-z), jonka jälkeen seuraavia merkkejä: _ # $ kirjain numero QUOTEDSTRING: lainausmerkkien sisällä oleva kasa merkkejä, jossa lainausmerkkipari muutettu yhdeksi lainausmerkiksi. ***************************************************************************** Jäsentäjän toiminnasta ====================== Hyväksytyt lauseet ----------------- SQL-lauseen kaksi ensimmäistä sanaa riittävät erottelemaan tunnistettavat lauseet. Muut lauseet ohitetaan ilman tarkistuksia selaamalla lauseen loppuun etsien lauseen päättävä puolipiste tai kauttaviiva. Tunnistetut tietotyypit ----------------------- Tietotyypit yhdistetty yhdeksi pötköksi, jolloin se tunnistaa vähän ylimääräisiäkin yhdistelmiä. INTERVAL-tyyppi on erikseen. [xx] - tarkoittaa, että xx on valinnainen. a | b - tarkoittaa vaihtoehtoa: joko a tai b merkinnät sanojen perässä kertovat mistä tietotyyppi on peräisin: ei mitään = SQL-92 1 = Oracle7 2 = Oracle7:ssä tukena muille järjestelmille 3 = joku muu (esmes. DB2) [ NATIONAL ] BIT CHARACTER CHAR NCHAR DATE DEC DECIMAL DOUBLE PRECISION FLOAT GRAPHIC /* 3 */ INT INTEGER LONG /* 1 */ MLSLABEL NUMERIC NUMBER /* 1 */ RAW LONG RAW REAL ROWID SMALLINT TIME TIMESTAMP VARCHAR LONG VARCHAR /* 2 */ VARCHAR2 /* 1 */ VARGRAPHIC /* 3 */ LONG VARGRAPHIC /* 3 */ [ VARYING ] [(int [, [+|-]int])] [ CHARACTER SET ] | [ WITH TIME ZONE ] /* näitä ei tallenneta */ ja INTERVAL-tyyppi: -- toteuttamatta vielä -- Tunnisteet ---------- _ tunnisteen edessä voi SQL-92:n mukaan määritellä siinä käytettävän merkistön nimen alaviivalla varustettuna. Oraclessa tätä ei tueta. EI TALLENNETA on joko yksi selaajan antama -alkio tai mahdollisesti useampi -alkio esim. "tavu" "-" "viiva", jotka jäsentäjä yhdistää merkkijonoksi "tavu-viiva" standardin mukaan. Hyväksytyt nimet ---------------- Sarakenimi on mikä tahansa hyväksytty tunniste. Standardin mukaan osa nimistä mm. taulun nimi ja arvojoukon nimi, voivat koostua kolmesta pisteellä erotetusta osasta. Näinollen seuraavat nimet ovat mahdollisia: taulunimi schema.taulunimi catalog.schema.taulunimi taulunimeksi hyväksytään mikä tahansa tunniste. scheman ja catalogin (standardin nimityksiä) vastattava tyyppiä. Edelleen standardin mukaan pisteiden ja sanojen välissä ei saa olla tyhjää. Tästä säännöstä poiketaan, koska muutoin kieliopin laadinta hankaloituisi suuresti. Näistä nimistä jäsentäjä unohtaa alkuosan ja välittää vain taulunimen eteenpäin. (Oli vissiin sovittu erilailla. Muutan tarpeen mukaan.) Oletusarvo ---------- Oletusarvomäärittelyssa DEFAULT-sanan jälkeen on oltava jokin seuraavavista: kokonaislukuvakio esim. -32768 merkkijonovakio esim. 'heittomerkit oltava' jokin seuraavista: NULL, USER, CURRENT_USER, SESSION_USER, SYSTEM_USER "date time value function" -- toteuttamatta -- Käytännössä jäsentäjä hyväksyy arvoksi myös minkä tahansa -alkion sisällön.