TABLE, TROIA'nın kalbi
TROIA'da neredeyse her CANIAS ekranı, en az bir TABLE tipli değişken etrafında döner. TABLE, veritabanı tablosuna benzeyen, satır-sütun yapılı, bellekte tutulan iki boyutlu bir veri tipidir. Bir TABLE değişkeni tanımlamak, sütunlarını eklemek kadar basittir:
LOCAL:
TABLE PERSONELLER;
APPEND COLUMN AD, STRING, 100 TO PERSONELLER;
APPEND COLUMN SOYAD, STRING, 100 TO PERSONELLER;
APPEND COLUMN MAAS, DECIMAL, 10 TO PERSONELLER;
Ya da doğrudan bir SELECT ... INTO ile hem sütun yapısını hem de veriyi tek seferde doldurabilirsiniz — CANIAS'ta SQL sorguları TROIA kodunun içine gömülür.
LOOP AT: satırlar üzerinde gezinmek
TROIA'da klasik bir FOR/FOREACH döngüsü yoktur. Onun yerine tablolar için özel tasarlanmış LOOP AT komutu kullanılır:
LOCAL:
TABLE PERSONELLER,
STRING SONUC;
SELECT AD, SOYAD, MAAS FROM PERSONEL INTO PERSONELLER;
SONUC = '';
LOOP AT PERSONELLER
BEGIN
SONUC = SONUC + PERSONELLER_AD + ' ' + PERSONELLER_SOYAD + TOCHAR(10);
ENDLOOP;
Dikkat: aktif satırın bir sütununa erişmek için _ operatörü kullanılır (PERSONELLER_AD gibi) — nokta değil alt çizgi.
Performans: WHERE mi, CRITERIA COLUMNS mı?
LOOP AT bir WHERE koşuluyla da filtrelenebilir, ama bu koşul her satır için TROIA yorumlayıcısı (interpreter) katmanında çalışır. Büyük tablolarda gerçek fark yaratan yöntem CRITERIA COLUMNS varyasyonudur — filtreleme Java katmanında yapılır ve gözle görülür şekilde daha hızlıdır:
LOOP AT PERSONELLER CRITERIA COLUMNS SEHIR VALUES 'Istanbul'
BEGIN
SONUC = SONUC + PERSONELLER_AD + TOCHAR(10);
ENDLOOP;
Aynı sütun/değer kombinasyonuyla defalarca arama yapacaksanız, BUILDHASHINDEX ile bir kez indeks kurup LOOP AT ... CRITERIA INDEXED ile o indeksten okumak daha da hızlıdır.
Küçük ama önemli bir detay
TROIA'da satır bulmak için hiç döngüye girmeden LOCATERECORD komutu da var — tek bir satır arıyorsanız tüm tabloyu gezmenize gerek yok. SEQUENTIAL, sıralı tablolarda BINARYSEARCH ve hash index üzerinden INDEXED olmak üzere üç varyasyonu var.
Sonuç
CANIAS ekranlarının binlerce satırlık tablo verisiyle akıcı çalışabilmesinin sırrı, aslında bu üç komutun doğru seçilmesinde saklı: LOOP AT, CRITERIA COLUMNS ve LOCATERECORD. Hangisini seçtiğiniz, veri büyüklüğüne göre gözle görülür bir performans farkı yaratıyor.
Yorumlar (0)
Yorum Yaz