2013-02-13 31 views
8

विषय की प्रकृति के कारण मैं अपनी परियोजना में उपयोग करता हूं, इनपुट सेट में डुप्लिकेट रिकॉर्ड अक्सर मिलने जाते हैं (कुछ बार इसका मतलब है कि एक ही इनपुट सेट में डुप्लिकेट रिकॉर्ड होते हैं, और इसे आसानी से संभाला जा सकता है फ़िल्टरिंग डालें, लेकिन आमतौर पर इनपुट सेट में ऐसे रिकॉर्ड हो सकते हैं जो पहले से ही डेटाबेस में रिकॉर्ड्स के डुप्लिकेट हैं)।Slick के साथ INSERT IGNORE क्वेरी कैसे बनाएं?

MySQL और SQLite INSERT IGNORE सुविधा इसे संभालने में काफी मदद करता है।

तो सवाल मुझे मिल गया है कर रहे हैं:

  1. बजाय INSERT IGNORE उपयोग करने के लिए स्लिक कैसे पैदा करने के लिए नंगे INSERT जब एक MySQL या SQLite डेटाबेस में डेटा डालने?

  2. एमएस एसक्यूएल सर्वर के साथ स्लिम का उपयोग करते समय INSERT IGNORE कार्यक्षमता अनुकरण करने का सबसे अच्छा तरीका क्या है जो इसे मूल रूप से समर्थन नहीं करता है?

+1

मेरा सुझाव है कि आप स्लिम के लिए एक फीचर अनुरोध बढ़ाएं, मुझे लगता है कि यदि यह डिफ़ॉल्ट विधि के रूप में उपलब्ध था तो अधिक लोगों को लाभ होगा। – EECOLOR

उत्तर

5

मुझे स्लिम के साथ कोई अनुभव नहीं है। स्रोत कोड से मैं इकट्ठा इसी क्रम में स्लिक INSERT IGNORE उपयोग करने के लिए आपको कुछ चरणों को पूरा करने की आवश्यकता होगी सक्षम होने के लिए पैदा करने के लिए:

  • वांछित डेटाबेस
  • अवहेलना डिफ़ॉल्ट InsertBuilder जो बनाई गई है के ड्राइवर का विस्तार def createInsertBuilder(node: Node): InsertBuilder के माध्यम से। इसे बढ़ाएं और एक विशेष विधि जोड़ें जो buildInsert विधि के समान है।
  • डिफ़ॉल्ट InsertInvoker ओवरराइड करें जो def createCountingInsertInvoker[T, U](u: ShapedValue[T, U]) के माध्यम से बनाया गया है। यह का विस्तार करें और से FullInsertInvoker

insertIgnore जो def insert[TT](query: Query[TT, U])(implicit session: Session): RetQuery के समान होना चाहिए जोड़ने के अपने दूसरे प्रश्न का सवाल है। INSERT IGNORE के लिए वर्कअराउंड का कार्यान्वयन जब यह समर्थित नहीं है डेटाबेस निर्भर है, तो Google आपको विभिन्न कार्यान्वयन खोजने में मदद करेगा। चूंकि INSERT IGNORE जोड़ने की उपरोक्त विधि ड्राइवर स्वतंत्र है, इसलिए आप किसी भी डेटाबेस के लिए कार्यक्षमता जोड़ने के लिए उसी संरचना का उपयोग कर सकते हैं।