Witam po dłuższej przerwie,
słowem wstępu, tworzę funkcjonalność, która pozwoli na tworzenie filtrów do pewnej z tablicy - takich filtrów mogę mieć do 10 sztuk, każdy jest obiektem przechowującym 3 wartości - nazwa pola, operator oraz wartość porównywana: w końcowej fazie będzie to zamieniane na część zapytania WHERE: "NazwaPola__c < 100". Obecnie każdy z tych filtrów jest łączony za pomocą "AND", tak więc posiadając takie filtry:
1. Koszt < 100
2. Nazwa LIKE '%Test'
otrzymam wszystkie, które mają w nazwie Test i ich koszt jest mniejszy niż 100. Po dodaniu trzeciego filtra:
3. Koszt > 150
nie będę miał żadnego rekordu, bo nie możliwe, aby Koszt był zarówno mniejszy od 100 i większy od 150 - i tu dochodzimy do sedna. Użytkownik mam mieć możliwość dostosowania filtrów w taki sposób, że może w odpowiednim polu wpisać coś w stylu:
"(1 AND 2) OR 3"
wtedy, zapytanie ma być zbudowane według tego wzorca i za 1, 2 oraz 3 wstawić odpowiednio filtry - to już mam obcykane. Problemem jest walidacja tej logiki: w jaki sposób mogę sprawdzić, czy aby na pewno użytkownik wpisał poprawnie warunek (tj. liczba nawiasów się zgadza) oraz mam pewność, że nie ma czegoś takiego jak "1 AND OR 2" czy "1 AND ()". Liczbę nawiasów obecnie waliduję w taki sposób, że zliczam od lewej liczbę nawiasów otwierających oraz zamykających - jeśli zamykających w trakcie przechodzenia od lewej mam więcej niż otwierających, lub otwierających na zakończenie jest więcej niż zamykających, jednak nie wiem, co zrobić z samą logiką.
Dziękuję za wszelkie rady, pozdrawiam.