2012-06-15 12 views
11

Chciałbym wykonać zapytanie LIKE w sposób trwały, używam sqlite. Książka Jesod podaje przykład stosując surowe SQL to zrobić, ale mówi:Przykład persistent z operatorem specyficznym dla backendu

można wyrazić operator LIKE bezpośrednio w normalnej składni powodu funkcji dodanej w utrzymujących 0,6, co pozwala backend specyficzne operatory

Nie mogłem jednak znaleźć tego przykładu. Czy ktoś mógłby podać przykład tego, co oznaczałoby użycie określonego operatora takiego jak LIKE z selectList lub czymś podobnym?

Dzięki!

Odpowiedz

7

Wiem, że już go użyłem, ale nie pamiętam, gdzie. W każdym razie, prosty przykład (GHC nie sprawdził, przeprosiny) byłoby:

selectList [Filter PersonName (Left $ PersistText "%Michael%") (BackendSpecificFilter "ILIKE")] [] 

Oczywiście można stworzyć jakąś funkcję pomocnika, np .:

icontains field val = Filter field (Left $ PersistText $ T.concat ["%", val, "%"]) (BackendSpecificFilter "ILIKE") 
selectList [Personname `icontains` "Michael"] [] 
+1

Dzięki. Kod nie kompiluje się, jak się obawiałeś, ale nie byłeś daleko: Pole filtru (lewy $ T.concat ["%", val, "%"]) (Filtr wydaje się mieć tekst, a nie PersistText) –

+3

Żadne z tych nie działało dla mnie, oto co zrobiło: 'like pole val = Pole filtru (lewy $ T.concat ["% ", val,"% "]) (BackendSpecificFilter" jak ")' –

Powiązane problemy