[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: BUG w wersjach 6,7,8 ????



Zgadzam sie z tym, ze Progress moglby w bardziej wyrafinowany sposob 
analizowac kryteria zapytania. Natomiast, jako ze opisany ponizej 
przyklad zachowuje sie dokladnie wg. dokumentacji, nie nalezy 
okreslac tego mianem BUG.

> Witam
> Pozwolę sobie przedstawić moim zdaniem dużą "niedoróbkę" która
> pozostaje niezmieniona do wersji 8 włącznie.
> 
> Interesuje mnie konstrukcja 
>  "FOR EACH rekord WHERE wyrazenie ..."
> która m.in. ma zastosowanie w składni OPEN QUERY...
> 
> Chcę dać użytkownikowi mozliwość wyboru rekordów wg ustalonych przez
> niego parametrów. Przyklad:
> 
> Zalozmy nastepujaca tabele:
>   Tabela: Czlowiek
>     Pola: Imie
>           Nazwisko
>           Nr_PESEL (index idx-pesel)
> 
> Chcę, aby użytkownik mógł sobie szukać wg dowolnego pola (pól) w tabeli.
> Robię mu ot taki interfejs do wprowadzania filtru.
> 
> +-------- Warunki wyszukiwania ------+
> |     imie: Jan________              |
> | nazwisko: ___________              | (nasza_ramka)
> | nr PESEL: 6907_______              |
> +------------------------------------+
> 
> W powyższym przykładzie chcę znaleźć wszystkich Janków, Januszów itp
> których pesel zaczyna się od "6907". Ale założenie jest takie, że
> użytkownik może zadać dowolną kombinację warunków. Dla uproszczenia
> przykładu, zakładam, iż łączy je spónik logiczny "and".
> 
> Tworzę więc kod...
> 
> --------------------------------------------------------------------
> 
> DEF VAR par1 LIKE czlowiek.imie      LABEL "imie".
> DEF VAR par2 LIKE czlowiek.nazwisko  LABEL "nazwisko".
> DEF VAR par3 LIKE czlowiek.nr_pesel  LABEL "nr PESEL".
> 
> UPDATE par1 par2 par3 WITH nasza_ramka.
> 
> FOR EACH czlowiek WHERE
>   (IF par1 <> "" THEN czlowiek.imie     BEGINS par1 ELSE true) AND
>   (IF par2 <> "" THEN czlowiek.nazwisko BEGINS par2 ELSE true) AND
>   (IF par3 <> "" THEN czlowiek.nr_pesel BEGINS par3 ELSE true):
> 
>   /* i tu jakieś akcje np: */
>   DISPLAY czlowiek.
> END.
> 
> --------------------------------------------------------------------
> 
> Wydawałoby się, iż sprawa jest oczywista. Kod działa jak trzeba.
> Użytkownik podaje dowolne parametry, procedura je łączy w odpowiednie
> warunki i wybiera rekordy. Gdy wszystkie parametry będą puste, w pętli
> zostaną wyświetlone wszystkie rekordy. Jest tylko małe "ALE".
> 
> DLACZEGO DO LICHA PROGRESS NIE KORZYSTA Z ŻADNEGO INDEKSU????!!!!
> 
> W naszym przykładzie z Jankami powinien zgrabnie wykorzystać index
> idx-pesel. A tego ewidentnie nie robi. Jeśli natomiast trzeci warunek:
> 
>    "(IF par3 <> "" THEN czlowiek.nr_pesel BEGINS par3 ELSE true)"
> 
>    zastąpimy przez
> 
>    "czlowiek.nr_pesel BEGINS par3"
> 
> ... to wszystko przebiega szybko i indeks jest wykorzystany.
> 
> Jest to moim zdaniem ewidentny BUG i potwierdza, iż wykorzystanie
> indeksów w produkcie firmy PSC jest kiepściutkie.
> 

--
Tomasz Judycki     tj@csbi.waw.pl

CSBI SA,                tel (48 22) 610 85 80 ext. 334
Plowiecka 1,            fax (48 22) 612 20 61
04-501 Warsaw,
Poland
http://www.csbi.waw.pl