2013-02-13 2 views
8

광산 프로젝트에서 사용하는 주제 데이터의 특성으로 인해 중복 된 레코드가 입력 세트에서 자주 만날 수 있습니다 (동일한 입력 세트에서 중복 레코드를 의미하는 경우가 많으며 사전 -insert 필터링을 사용하지만 일반적으로 입력 집합에는 이미 데이터베이스에있는 레코드의 중복 레코드가 포함될 수 있습니다.Slick으로 INSERT IGNORE 쿼리를 만드는 방법은 무엇입니까?

MySQL과 SQLite INSERT IGNORE 기능이 크게 처리하는 데 도움이됩니다.

그래서 내가있어 질문은 다음과 같습니다

  1. 어떻게 슬릭 대신 INSERT IGNORE를 사용하게하는 INSERT 벌거 벗은 MySQL의 또는 SQLite는 데이터베이스에 데이터를 삽입 할 때?

  2. Slick을 기본적으로 지원하지 않는 MS SQL Server와 함께 사용할 때 INSERT IGNORE 기능을 에뮬레이션하는 가장 좋은 방법은 무엇입니까?

+1

Slick에 대한 기능 요청을 제기하는 것이 좋습니다. 더 많은 사람들이 이것이 기본 방법으로 사용 가능하면 도움이 될 것이라고 생각합니다. – EECOLOR

답변

5

저는 Slick에 대한 경험이 없습니다. 소스 코드에서 나는 순서 슬릭은 몇 단계를 수행 할 필요가 INSERT IGNORE을 사용할 수 있도록 일으킬 것을 수집 :

  • 을 원하는 데이터베이스
  • 오버라이드 생성되는 기본 InsertBuilder의 드라이버를 확장 def createInsertBuilder(node: Node): InsertBuilder 통해 그것을 확장하고 buildInsert 메서드와 유사한 특수 메서드를 추가하십시오.
  • def createCountingInsertInvoker[T, U](u: ShapedValue[T, U])을 통해 생성되는 InsertInvoker 기본값보다 우선합니다. 를 확장하고 두 번째 질문에 관해서는 FullInsertInvoker

에서 def insert[TT](query: Query[TT, U])(implicit session: Session): RetQuery 비슷해야 insertIgnore를 추가합니다. INSERT IGNORE에 대한 해결 방법 구현이 지원되지 않는 경우 데이터베이스에 따라 다르므로 Google은 다양한 구현 방법을 찾는 데 도움을줍니다. 위의 INSERT IGNORE 추가 방법은 드라이버에 독립적이므로 동일한 구조를 사용하여 모든 데이터베이스 기능을 추가 할 수 있습니다.

관련 문제