2012-06-27 16 views
6

रिकॉर्ड के बैच को हटाने का प्रयास करते समय, केवल विषम पंक्तियां हटा दी गई हैं!यह ScalaQuery कथन केवल विषम पंक्तियों को क्यों हटाता है?

val byUser = Orders.createFinderBy(_.userID) 
byUser(id).mutate(_.delete) 

यदि मैं इसके बजाय रिकॉर्ड प्रिंट करता हूं, तो मुझे पंक्तियों की सही संख्या मिलती है।

byUser(id).mutate{x => x.echo} 

मैंने इस तरह के मुद्दे के आसपास काम किया, जो वांछित एसक्यूएल उत्पन्न करता है।

(for{o <- Orders if o.userID is id.bind } yield o).delete 

लेकिन, म्यूटेट संस्करण केवल विषम पंक्तियों को कैसे प्रभावित करता है या कैसे?

+5

हालांकि मुझे नहीं पता कि इस विशेष मामले में क्या चल रहा है, यह लिंक की गई सूचियों के साथ एक बहुत ही आम समस्या है: जब आप हटाने की कोशिश करते हैं पुनरावृत्ति करते समय, आप एक को हटाते हैं, फिर एक को फिर से करें, फिर एक हटाएं, आदि। अपनी आधा सूची शेष छोड़ दें। एक परिवर्तनीय संग्रह पर कोई भी इटरेटर इस समस्या से पीड़ित हो सकता है, यह कैसे बनाया गया है इसके आधार पर। मुझे नहीं पता कि यहां आपके लिए वैकल्पिक रणनीतियों क्या उपलब्ध हैं - लिंक्ड सूचियों के साथ, आप केवल उन्मूलन करके समस्या को हल करते हैं और हटाने को पूरी सूची के माध्यम से हटा देते हैं। –

+0

@RexKerr कुछ जो आप वर्णन कर रहे हैं उसके समान होना चाहिए। विकल्प एक ऐसी क्वेरी बनाना है जो MutatingUnitInvoker (create.cinderBy जैसे तैयार कथन अभिव्यक्तियों द्वारा उत्पन्न क्वेरी का प्रकार और पैरामीटर्स [टी] के माध्यम से बाध्य अभिव्यक्तियों के लिए) – virtualeyes

+0

@RexKerr ऐसा लगता है कि आपको एकमात्र उत्तर मिल गया है, मैं इसे इस तरह पोस्ट करेंगे और कुछ वोट प्राप्त करेंगे :) –

उत्तर

1

मेरे पास स्रोत कोड में चारों ओर खुदाई हुई है और ऐसा लगता है कि @RexKerr कहता है - एक इटरेटर का उपयोग तत्वों को संसाधित करने के लिए किया जाता है, इसे हटाए जाने के रूप में हटाने को लागू करता है (यहां उत्परिवर्ती विधि में जबकि लूप) :

https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/MutatingInvoker.scala

दिलचस्प बात यह है कि वहाँ एक previousAfterDelete झंडा कि प्रत्येक हटाए जाने के बाद पीछे की ओर इटरेटर मजबूर करने के लिए इस्तेमाल किया जा सकता है। यह एक्सेस डेटाबेस (AccessQueryInvoker वर्ग देखें) लेकिन दूसरों को नहीं करने के लिए सही पर सेट किया जा करने के लिए प्रकट होता है:

https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/ql/extended/AccessDriver.scala

मैं स्रोतों को डाउनलोड करने और debugging कोड की सिफारिश करेंगे। शायद यह ध्वज उस डेटाबेस विक्रेता के लिए सेट किया जाना चाहिए जिसका आप उपयोग कर रहे हैं। मैं भी एक बग रिपोर्ट दर्ज करने पर विचार करेंगे:

http://scalaquery.org/community.html

पी एस। मुझे पता है कि यह एक पुराना सवाल है, लेकिन अगर किसी और को यह समस्या हो तो

+0

समुदाय लंबे समय से लाइब्रेरी के अगले संस्करण पर चला गया है, स्लिम, लेकिन मेरे पास अभी भी एसक्यू पर एक प्रोजेक्ट है, इसलिए लंबे समय से प्रतीक्षित उत्तर के लिए धन्यवाद ;-) – virtualeyes

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^