2014-10-26 2 views
12

Die ScalaDoc of the functions wurde nicht ausgefüllt.Was ist der Unterschied zwischen InSet und InSetBind in Slick

Ich weiß, dass die Methoden zum Nachahmen von SQL IN Schlüsselwort verwendet werden (zB SELECT * FROM table WHERE id IN VALUES(1, 42, 101) könnte mit table.filter(_.id inSet Seq(1, 42, 101)) getan werden). Ich weiß nicht, was diese "bind" -Version ist oder wie ich wählen soll, was ich verwenden soll.

+0

Der Code ist auf GitHub verfügbar. Hast du es angeschaut? –

+11

@BobDalgleish Der Slick-Quellcode ist ziemlich menschenfeindlich. –

Antwort

14

inSet ist eine unsichere Version von inSetBind, die einen Safe/Escape-SQL-Wert basierend auf übergebener Eingabe generiert. In Ihrem Beispiel, in dem der Wert manuell festgelegt wird, sind die beiden Bindungstypen gleichermaßen sicher.

Normalerweise mit gebundenen Parameter erhalten Sie eine Leistungssteigerung (über generierte vorbereitete Anweisung), aber nicht den Fall mit Sammlungswerten. Einzelheiten finden Sie unter here.

+1

Ich habe den Unterschied nicht verstanden. Können Sie bitte erklären. Ich habe es mit den Anfragen glatt versucht. Herausgefunden, dass, wenn ich InSet (List (1,2,3)) verwenden die Abfrage s als wo ID in (1,2,3) gebaut. Wenn ich inSetBind (List (1,2,3)) verwende, wird die Abfrage ID in (?,?,?). –

+0

@ YaduKrishnan letzteres ist die Platzhalter-Syntax, auf die oben, jeweils? wird durch safe/escapted ersetzt. – virtualeyes

+0

Was meinen Sie mit "Safe/Escape" -Werten? Können Sie bitte ein Beispiel geben? –