Wie mache ich eine INSERT IGNORE Abfrage mit Slick?

8

Aufgrund der Natur der Subjektdaten, die ich in einem meiner Projekte verwende, sind doppelte Datensätze häufig in den Eingabesätzen zu finden (manchmal bedeutet das doppelte Datensätze in demselben Eingabesatz, und dies kann leicht durch Filter vor dem Einfügen, aber normalerweise kann der Eingabe-Satz Datensätze enthalten, die Duplikate von bereits in der Datenbank vorhandenen Datensätzen sind.)

MySQL und SQLite INSERT IGNORE Feature hilft sehr dabei.

Die Fragen, die ich habe, sind also:

  1. Wie kann Slick INSERT IGNORE anstelle von bare INSERT beim Einfügen von Daten in eine MySQL- oder SQLite-Datenbank verwenden?

  2. Was ist der optimale Weg, INSERT IGNORE -Funktionalität zu emulieren, wenn Sie Slick mit MS SQL Server verwenden, der es nicht nativ unterstützt?

Ivan 13.02.2013, 19:29
quelle

1 Antwort

5

Ich habe keine Erfahrung mit Slick. Aus dem Quellcode habe ich gelernt, dass Slick, um INSERT IGNORE verwenden zu können, einige Schritte ausführen müsste:

  • Verlängert den Treiber der gewünschten Datenbank
  • Überschreiben Sie den Standard InsertBuilder , der durch def createInsertBuilder(node: Node): InsertBuilder erstellt wird. Erweitern Sie es und fügen Sie eine spezielle Methode hinzu, die der buildInsert -Methode ähnelt.
  • Überschreiben Sie den Standard InsertInvoker , der durch def createCountingInsertInvoker[T, U](u: ShapedValue[T, U]) erstellt wird. Erweitern Sie es und fügen Sie insertIgnore hinzu, das ähnlich sein sollte wie def insert[TT](query: Query[TT, U])(implicit session: Session): RetQuery von FullInsertInvoker

Was Ihre zweite Frage betrifft. Die Implementierung einer Problemumgehung für INSERT IGNORE , wenn diese nicht unterstützt wird, hängt von der Datenbank ab. Google hilft Ihnen dabei, die verschiedenen Implementierungen zu finden. Da die obige Methode zum Hinzufügen von INSERT IGNORE treiberunabhängig ist, könnten Sie dieselbe Struktur verwenden, um die Funktionalität für jede Datenbank hinzuzufügen.

    
EECOLOR 18.02.2013 12:05
quelle

Tags und Links