2014-10-26 6 views
12

ScalaDoc of the functions Nie został wypełniony.Jaka jest różnica między inSet i inSetBind w Slick

Wiem, że metody są używane do naśladowania słowa kluczowego SQL IN (np. SELECT * FROM table WHERE id IN VALUES(1, 42, 101) można zrobić przy pomocy table.filter(_.id inSet Seq(1, 42, 101))). Nie wiem, czym jest ta "wiążąca" wersja lub jak wybrać, z której powinienem korzystać.

+0

Kod jest dostępny na github. Czy spojrzałeś na to? –

+11

@BobDalgleish The Slick kod źródłowy jest dość wrogo nastawiony do ludzkiego życia. –

Odpowiedz

14

inSet to niebezpieczna wersja inSetBind, która generuje bezpieczną/unikniętą wartość sql na podstawie przekazanych danych wejściowych. W twoim przykładzie, w którym wartość jest ustawiona ręcznie, oba typy powiązań są równie bezpieczne.

Zwykle przy powiązanych parametrach uzyskuje się zwiększenie wydajności (poprzez wygenerowane gotowe polecenie), ale nie ma to miejsca w przypadku wartości kolekcji. Aby uzyskać szczegółowe informacje, patrz here.

+1

Nie rozumiem różnicy. Czy możesz wyjaśnić. Próbowałem z zapytaniami w gładki sposób. Okazało się, że jeśli używam inSet (List (1,2,3)), zapytanie s jest budowane jako id w (1,2,3). Jeśli używam inSetBind (List (1,2,3)), zapytanie staje się id w (?,?,?). –

+0

@YaduKrishnan ten drugi jest składnią zastępczą, o której mowa powyżej, każdy? jest zamieniane na wartość safe/escaped. – virtualeyes

+0

co masz na myśli przez wartości "safe/escaped"? czy możesz podać przykład? –

Powiązane problemy