專利名稱::批量操作的制作方法
技術領域:
:本發(fā)明涉及批量操作。
背景技術:
:數(shù)據(jù)處理是計算機編程的基本部分。可從各種編程語言中選擇創(chuàng)建程序的編程語言。用于特定的應用程序的所選語言可取決于應用程序上下文、開發(fā)者的偏好、或公司策略,以及其他因素。無論所選語言如何,開發(fā)者最終將必須處理數(shù)據(jù),即查詢以及創(chuàng)建、更新和刪除數(shù)據(jù)。已開發(fā)稱為語言集成查詢(LINQ)的技術以便于從編程語言內(nèi)查詢或者換言之讀取數(shù)據(jù)。LINQ提供方便且聲明性簡寫查詢句法以在編程語言(例如,C#、VisualBasic...)內(nèi)部允許對查詢的指定。更具體而言,提供映射到較低層語言構造或原語的查詢運算符,諸如方法和拉姆達表達式(lambdaexpression)。提供用于各種運算(例如,過濾、投影、連接、分組、排序……)族的查詢運算符,并且查詢運算符可包括但不限于映射到實現(xiàn)這些名稱所表示的運算符的方法的“where”和“select”運算符。作為示例,用戶可以以諸如“fromninnumberswheren<IOselectn”的形式指定查詢,其中“numbers”是數(shù)據(jù)源并且查詢從數(shù)據(jù)源返回小于10的整數(shù)。此外,可以以各種方式組合查詢運算符以生成任意復雜度的查詢。為了在編程語言內(nèi)部執(zhí)行創(chuàng)建、更新和刪除操作,可利用LINQ的查詢功能。更具體地,使用LINQ將在其上可執(zhí)行創(chuàng)建、更新或刪除操作的數(shù)據(jù)集合從持久數(shù)據(jù)存儲(例如,數(shù)據(jù)的非易失性儲存庫)讀取至存儲器中。后續(xù)地,在存儲器內(nèi)表示上執(zhí)行一個或多個操作并將變更推送回至持久數(shù)據(jù)存儲。換言之,可跟蹤對檢索自數(shù)據(jù)庫的實體的變更,并且當在數(shù)據(jù)庫上調(diào)用“SubmitChangesO”或類似過程時,在底層數(shù)據(jù)結構(例如,表)上執(zhí)行累積的變更。
發(fā)明內(nèi)容下面呈現(xiàn)了簡化的
發(fā)明內(nèi)容,以便提供對所公開主題的某些方面的基本概念。本
發(fā)明內(nèi)容不是廣泛性的概觀。它并不旨在標識關鍵/重要元素,也不旨在劃定所要求保護主題的范圍。其唯一目的是以簡化形式呈現(xiàn)一些概念,作為稍后呈現(xiàn)的更具體實施例的序簡言之,本發(fā)明一般涉及批量操作??衫谜Z言集成查詢指定創(chuàng)建、讀取、更新和刪除操作。然而,例如,每一批量操作可與其他批量操作不同地來實現(xiàn)——與根據(jù)諸如讀取操作之類的特定操作相反。此外,可將批量操作相關的功能可根據(jù)特定批量操作來約束,以防止或至少減少運行時錯誤。根據(jù)本發(fā)明的一個方面,批量操作可關于為操作(例如,IQuerable,IInsertable,IUpdatable,IDeletable)所特有的類型的專用集合來操作。此外,對集合的其他操作可基于集合類型來進行限制,包括但不限于用于定義集合的查詢運算符。為實現(xiàn)上述及相關目的,在此結合以下描述和附圖描述了所要求保護主題的某些說明性方面。這些方面指示可實踐本主題的各種方式,它們均落在所要求保護主題的范圍之內(nèi)。當結合附圖閱讀以下詳細描述時,本發(fā)明的其他優(yōu)點和新穎特征將變得顯而易見。圖I是便于與持久數(shù)據(jù)存儲處交互的系統(tǒng)的框圖。圖2是代表性LINQ批量操作的框圖。圖3A-C圖形化地示出創(chuàng)建、更新和刪除操作。圖4是與持久數(shù)據(jù)存儲交互的方法的流程圖。圖5是編碼批量操作的方法的流程圖。圖6是驗證批量操作的方法的流程圖。圖7是示出用于本公開各方面的合適操作環(huán)境的示意性框圖。具體實施例方式以下細節(jié)大體針對包括在語言集成查詢上下文中創(chuàng)建、更新和刪除的批量操作。常規(guī)上,支持單個批量操作,即讀取操作??勺⑷氪a以利用讀取操作來執(zhí)行其他批量操作,例如,通過將數(shù)據(jù)從持久數(shù)據(jù)存儲(例如,數(shù)據(jù)庫)讀取至存儲器,允許對存儲器內(nèi)數(shù)據(jù)進行變更并將變更推送回持久數(shù)據(jù)存儲。然而,關于上述方法至少有兩個問題。首先,盡管對于讀取操作將數(shù)據(jù)加載至存儲器是合乎需要的,但是對于其他批量操作,至少由于效率原因優(yōu)選直接在持久數(shù)據(jù)存儲上執(zhí)行操作而不創(chuàng)建存儲器內(nèi)表示(例如,對象)。例如,考慮涉及一百萬個記錄的情形。此處,從持久數(shù)據(jù)存儲加載一百萬個記錄、跟蹤變更并將數(shù)據(jù)推送回持久數(shù)據(jù)存儲將是非常低效的。其次,由讀取查詢標識的集合對于其他操作可能是不兼容的,由此導致運行時錯誤。例如,如果對多個表執(zhí)行“Join(聯(lián)合)”查詢運算符,則刪除操作將難以(如果不是不可能的話)執(zhí)行,因為接收特定數(shù)據(jù)所針對的表是未知的。本發(fā)明解決了這些和其他問題。更具體地,提供彼此不同的批量運算符,而非修改的讀取操作。因此,創(chuàng)建、更新和刪除操作可直接在持久數(shù)據(jù)存儲上執(zhí)行,而非間接地使用本地修改以及后續(xù)提交至數(shù)據(jù)存儲。進一步地,在指定對其執(zhí)行操作的集合之前可指定操作的意圖,例如使用查詢句法。根據(jù)一個實施例,可對于特定的集合類型(例如,IInsertable<T>,IUpdatable〈T>,IDeletable<T>)指定每一操作,其可尤其限制可用于定義集合的各種查詢運算符?,F(xiàn)在參考附圖更詳細地描述本公開的各個方面,在全部附圖中用相似的標記來指示相似或相應的元素。然而應該理解,附圖及其相關詳細描述不旨在將所要求保護的主題限于所公開的具體形式。相反,其意圖是覆蓋落在所要求保護主題的精神和范圍之內(nèi)的所有修改、等價物和替換的方案。最初參考圖1,示出了便于與諸如數(shù)據(jù)庫之類的持久數(shù)據(jù)存儲交互的系統(tǒng)100。系統(tǒng)100包括被配置為接收、檢索、或以其他方式獲得或獲取計算機程序源代碼的編輯器組件110。更具體地,編輯器組件110可啟用語言集成(LINQ)批量操作的指定和/或編輯。批量操作對應于基本數(shù)據(jù)庫操作,或者換言之,所謂的CRUD操作,即創(chuàng)建、讀取、更新和刪除。創(chuàng)建操作將一組一個或多個項目插入至集合中。因此,創(chuàng)建操作在本文中也稱為插入操作。讀取操作從集合中至少檢索項目子集。有時讀取操作被不嚴格地稱為查詢操作,因為查詢指定了將要讀取的數(shù)據(jù)。然而,如本文將進一步討論的,查詢可指定可對其執(zhí)行多個操作的數(shù)據(jù)集合。更新操作至少修改集合中的項目子集,刪除至少移除集合中的項目子集。常規(guī)語言集成查詢涉及讀取操作。使用“IQuerable”接口來提供這樣的功能,顧名思義,“IQuerable”接口使用查詢標識了一組項目。例如,給定專利數(shù)據(jù)庫,可通過構造以下語言集成查詢來標識作者字段中包含“JohnSmith”的那些專利varpatents=frompatentinUSPTO.GetTable<Patents>()wherepatent.Author.Includes(“JohnSmith,,)selectpatent;創(chuàng)建、更新和刪除操作可實現(xiàn)為修改的讀取操作。作為示例而并非限制,為了將名稱“JohnSmith”變更為“JonathanSmith”,可結合以下代碼片段使用以上的讀取操作來獲取具有作者“JohnSmith”的專利foreach(varpatentinpatents)Patent.Author=“JonathanSmith”USPTO.SubmitChangesO;換言之,更新操作可以和將全部項目讀入至存儲器的讀取操作一起執(zhí)行,之后是存儲器內(nèi)項目的修改,然后將累積的變更發(fā)送回數(shù)據(jù)庫以實現(xiàn)對實際的底層數(shù)據(jù)結構(例如,表)的變更。盡管對于讀取操作需要將標識的項目讀取至存儲器中,但是對于其他操作(創(chuàng)建、更新和刪除)并不是必要的。結果,將其他操作實現(xiàn)為修改的讀取操作(例如,讀取加附加功能)可能是相當?shù)托У?。此外,這樣的實現(xiàn)還可根據(jù)客戶機計算機系統(tǒng)在操作上施加潛在的限制。作為說明性示例,假定在以上的示例中,有一百萬個作者為“JohnSmith”的專利。從數(shù)據(jù)庫取回一百萬個專利、在存儲器中創(chuàng)建專利、跟蹤對它們的變更以及之后將變更推送回數(shù)據(jù)庫中將是非常低效的。此外,如果客戶機計算機系統(tǒng)不能創(chuàng)建和/或操縱存儲器中的一百萬個專利,那么操作將無法完成。再進一步,將讀取操作用作其他批量操作的基礎可導致問題,因為讀取操作可支持比特定操作所支持的更多的查詢運算符和/或相關聯(lián)的功能。例如,考慮以下在讀取操作之上實現(xiàn)的刪除操作vardeleted=(frompatentinUSPTO.GetTable<Patents>()wherepatent.Author.Includes(“JohnSmith)selectpatent.Date).Delete();此處,通過不適當?shù)耐队皝順嬙觳粯俗R底層表中的任何實際項目的刪除操作。結果將生成運行時錯誤。因此,關于編輯器組件110的批量操作可以不同于在讀取操作上方生成。此外,在包括一個或多個相關的查詢運算符的語言集成查詢表達式尤其用于標識將對其執(zhí)行批量操作的集合的情況下,可提前指定意圖以允許根據(jù)需要就每一批量操作(即創(chuàng)建、更新和刪除)約束查詢表達式??赏ㄟ^對底層編程語言進行變更來注入這樣的功能,例如通過添加對于特定關鍵詞(例如,Insert(插入),Update(更新),Delete(刪除))的支持以及支持代碼。另選地,相對于類型系統(tǒng)可如下所述來實現(xiàn)該功能。注意力轉向圖2,圖形地描繪了代表性LINQ批量操作200。每一LINQ批量操作(例如,創(chuàng)建、更新、刪除)可包括為操作以及可對于特定集合及其類型操作的一個或多個允許的查詢運算符220所特有的集合類型210。此外,可使用一個或多個輸出運算符230來控制操作的輸出。集合類型210是為特定操作所特有的,并操作用于至少標識關于就查詢表達式所指定的集合的意圖。此外,可通過限制查詢運算符220及其相對于集合類型的使用來約束查詢表達式。常規(guī)的讀取操作支持“IQueryable”接口或“IQueryable〈T>”。如果集合實現(xiàn)了接口“IQueryableCD”(其中“T”是集合中的項目的類型(例如,串、整數(shù)……)),那么意味著集合實現(xiàn)了該接口規(guī)定的功能并且由此可以說該集合是“IQueryableCD”類型的。類似地,可實現(xiàn)創(chuàng)建操作并且是“IlnsertableCD”類型的,可實現(xiàn)更新操作并且是“IUpdatable〈T>”類型的,可實現(xiàn)刪除操作并且是“IDeletableCD”類型的。這些集合類型現(xiàn)在可用于根據(jù)特定批量操作限制對集合的操作(例如,查詢運算符(Select,Where,Join...))ο根據(jù)一個實施例,批量運算符類型“IlnsertableCD”、“IUpdatableCD”和“IDeletableCD”可從讀取操作類型“IQueryableCD”導出或者是其子類型。由此,可存在用于在這樣的類型之間轉換的操作。作為示例而非限制,可使用從數(shù)據(jù)庫返回“IDeletable〈T>”集合的“GetForDelete〈T>O”運算符等來指定刪除運算符。vardeleted=frompatentinUSPTO.GetForDelete<Patents>()wherepatent.Author.Includes(“JohnSmith,,)selectpatent;此處,集合類型可限制可被應用的各種查詢運算符。更具體地,集合類型可確保結果類型是“IDeletableCD”,以使得標識正確類型的項目來刪除。類似地,對于創(chuàng)建或者換言之插入,可指定返回“IlnsertableCD”集合的“GetForlnsertionCD”運算符。此外,具體的值的集合或從可能不同的位置返回值的集合的查詢可被提供來作為創(chuàng)建操作的輸入。例如varinserted=USPTO.GetForInsertion<Patents>().Insert(frompatentinxxx.com.GetTable<Disclosure>()wherepatent.Author.Includes(“JohnSmith”)selectpatent);varinserted〗=inserted.Insert(newPatent{·.·,Author=“JohnSmith’’,Title=“Abettermousetrap”,...});最終,對于更新,可調(diào)用返回“IUpdatable〈T>”集合(不要與對象數(shù)據(jù)協(xié)議(Odata)可更新的概念混淆)的“GetForUpdates〈T>”運算符。例如varchanged=frompatentinUSPTO.GetForUpdates(old=>{old.Author=“JohnSmith”;})wherepatent.Author.Includes(“JohnSmith”)selectpatent;再次,對“IUpdatable〈T>”集合的查詢運算符組維持其僅標識相同類型的子集的不變性。如圖2所示,LINQ批量操作還可選地包括輸出運算符230。這些運算符可用于指定對于批量操作的響應。對于讀取操作,很清楚在返回滿足查詢的項目時操作已經(jīng)被執(zhí)行。對于其他批量操作,這較不清楚,例如,因為操作是直接在數(shù)據(jù)庫上執(zhí)行的。因此,例如可指定輸出運算符230返回對應于受操作影響的項目數(shù)量的整數(shù)或者可返回實際的項目。例如,在執(zhí)行使用查詢指定的刪除時,可返回被刪除的項目的數(shù)量和/或可返回被刪除的實際項目。圖3A-C如先前所述圖形地描繪了創(chuàng)建、更新和刪除操作以進一步助于對于本發(fā)明各方面的清晰度和理解。圖3A涉及創(chuàng)建或插入操作。如所示出的,可以對諸如關系數(shù)據(jù)庫表之類的數(shù)據(jù)源300執(zhí)行創(chuàng)建操作??芍付ā癎etForlnsertionO”操作302以產(chǎn)生“IInsertable”集合304。對于“IInsertable”集合304,可指定選擇查詢運算符306??稍谀繕藬?shù)據(jù)源300上執(zhí)行或運行(run)308創(chuàng)建操作,并且作為響應,可返回插入的項目的數(shù)量或實際插入的項目,如所示的“Int”或“IEnumerable〈T>”309。圖3B涉及更新操作,其可再次對于數(shù)據(jù)源300執(zhí)行。進一步地,可指定“GetForUpdate”運算符312以返回“IUpdatable”集合314??芍付▽τ凇癐Updatable”集合314的可允許運算符316以聲明性地表示將更新的特定項目。可在目標數(shù)據(jù)源300上執(zhí)行或運行318更新的操作,并且可返回更新的項目的數(shù)量或實際更新的項目組,如“Int”或“IEnumerable〈T>”319所捕捉的。圖3C涉及刪除操作。再次地,數(shù)據(jù)源300中的項目可被定標以供刪除??芍付ǚ祷亍癐Deletable”集合324的“GetForDeletion”運算符322,可對于“IDeletable”集合324指定特定的查詢運算符326的組。可在數(shù)據(jù)源300上執(zhí)行或運行328刪除操作,并且可返回插入的項目的數(shù)量或實際刪除的項目組,如“Int”或“IEnumerableCD”329指定的?;仡^參考圖I的系統(tǒng)100,如所提及的,編輯器組件110可如前所述地允許LINQ批量操作的指定和編輯。系統(tǒng)100還包括可將包括LINQ批量操作的源代碼變換為諸如另一計算機語言之類的另一種形式的編譯器組件120。更具體地,編譯器組件120可執(zhí)行包括類型檢查或者換言之類型錯誤的檢查的語義分析。因此,編譯器可檢查為批量操作所特有的集合類型,并確定給定特定的集合類型,包括一個或多個運算符的查詢表達式是否是可接受的。如果查詢表達式是不可接受的,那么就可生成編譯時錯誤。例如,對于“IDeletable〈T>”集合,如果指定了身份投影之外的投影(例如,“selectpatent.Date”而非“selectpatent”),那么編譯器可指示發(fā)生了類型錯誤。因此,至少可減少(如果未被消除的話)關于批量操作的運行時錯誤的發(fā)生。此外,編輯器組件110和編譯器組件120可進行協(xié)作來向程序員提供關于批量操作的指定的基本上實時的反饋。例如,可利用編譯器組件120來根據(jù)類型提供非正確指定的批量操作的指示,諸如通過使用代碼的非正確部分下的紅色波浪線。進一步地,可使用編譯器組件120來在輸入源代碼時提供提示或做出建議。例如,一旦提供或以其他方式確定或推斷出了集合類型,那么查詢運算符可根據(jù)其類型來過濾并在源代碼指定期間被建議。系統(tǒng)100還包括被配置為生成目標專用批量運算符的翻譯器組件130。更具體地,基于編譯器組件120產(chǎn)生的批量操作的本地表示,翻譯器組件130可將該表示變換為或者從該表示生成可由目標執(zhí)行環(huán)境執(zhí)行的批量操作。例如,如果批量操作將在關系數(shù)據(jù)庫系統(tǒng)上執(zhí)行,那么翻譯器組件130可生成批量操作的結構化查詢語言(SQL)表示以供關系數(shù)據(jù)庫系統(tǒng)執(zhí)行。參考若干組件之間的交互已經(jīng)描述了上述系統(tǒng)、體系結構、環(huán)境等。應該理解,這樣的系統(tǒng)和組件可以包括這些組件或其中指定的子組件,某些指定的組件或子組件,和/或附加的組件。子組件也可以被實現(xiàn)為在通信上被耦合到其他組件而不是被包括在父組件中的組件。此外,一個或多個組件和/或子組件可以結合成提供聚集功能的單個組件。系統(tǒng)、組件、和/或子組件之間的通信可以根據(jù)推送(push)和/或拉取(pull)模型來實現(xiàn)。各組件也可以與一個或多個其他組件進行交互,出于簡要考慮在此未具體描述該組件,但本領域的技術人員均已知。此外,以上公開系統(tǒng)以及以下方法的各個部分可以包括或包含基于人工智能、機器學習或知識或規(guī)則的組件、子組件、進程、裝置、方法或機制(例如,支持向量機、神經(jīng)網(wǎng)絡、專家系統(tǒng)、貝葉斯信任網(wǎng)絡、模糊邏輯、數(shù)據(jù)融合引擎、分類器...)。這樣的組件和其它組件可以自動化執(zhí)行某些機制或進程,由此使得系統(tǒng)和方法的各部分更為自適應、高效及智能。作為示例而非限制,編譯器組件120可特別地使用這樣的對于執(zhí)行類型推理的機制??紤]到以上描述的示例性系統(tǒng),參考圖4-6的流程圖將可以更好地理解依照所公開的主題實現(xiàn)的方法。盡管為了說明簡潔起見,作為一系列框示出和描述了方法,但是,應該理解,所要求保護的主題不僅限于所描述框的順序,一些框可以按與此處所描繪和描述的不同的順序進行和/或與其它框并發(fā)地進行。此外,并非全部所示出的框都是實現(xiàn)下面所描述的方法所必需的。參考圖4,示出了與持久數(shù)據(jù)存儲交互的方法400。在附圖標記410處,標識語言集成查詢批量操作。批量操作可對應于使用語言集成查詢表達式等指定的創(chuàng)建、更新或刪除操作。在附圖標記420處,將操作變換為用于執(zhí)行的目標語言。例如,如果可使用多用途編程語言(例如,C#,VisualBasic,Java)來指定批量操作,則該多用途編程語言之后可被用于產(chǎn)生關于諸如關系數(shù)據(jù)庫系統(tǒng)之類的持久數(shù)據(jù)存儲的可執(zhí)行代碼(例如,Τ-SQL)。在430處,至少發(fā)起批量操作的傳輸或者換言之通信以供執(zhí)行。在附圖標記440處,例如可獲取指示受操作影響的數(shù)據(jù)庫項數(shù)量和/或提供被影響的實際項目的響應。圖5是編碼批量操作的方法500的流程圖。在附圖標記510處,指定關于諸如創(chuàng)建、更新或刪除之類的批量操作的集合類型。此外,指定的集合類型是唯一的或為特定批量操作所特有的(例如,“IlnsertableCD”->創(chuàng)建(也稱為插入),“IUpdatable〈T>”->更新,以及“IDeletableCD”->刪除)。在附圖標記520處,對特定集合指定一個或多個可用操作。集合類型可限制可在集合上執(zhí)行的操作。因此,可在批量操作的指定中使用并沒有被有效過濾的那些操作。例如,可使用查詢運算符來生成至少聲明性地指定在其上可執(zhí)行批量操作的數(shù)據(jù)子集的查詢表達式——作為例如具體的值的集合的顯式指定的替換或補充。因此,可指定規(guī)定是否返回受操作影響的項目的數(shù)量和/或提供特定項目的輸出操作。圖6示出一種驗證批量操作的方法600。在附圖標記610處,標識對于特定批量操作(例如,創(chuàng)建、更新、刪除)的源集合類型,例如“IInsertabIe〈T>”、“IUpdatabIeCDIP“IDeletableCD”。在標記620處,標識為集合所特有的操作。例如,可對于聲明性地定義集合值的查詢表達式標識查詢運算符及其使用。在標記630處,做出關于操作是否有效的判定。每一集合類型可定義對于集合可允許的一組操作。因此,在630處的判定可對應于可允許的操作與指定的操作的比較。如果批量操作如所指定的(“YES(是)”)(例如,沒有類型錯誤)是有效的,那么方法600可終止。凌旋地,如果批量操作是無效的(“NO(否)”)(例如,類型錯誤),那么該方法在終結之前在附圖標記640處生成錯誤。此處使用的術語“組件”和“系統(tǒng)”及其各種形式旨在表示與計算機相關的實體,其可以是硬件、硬件和軟件的組合、軟件、或執(zhí)行中的軟件。例如,組件可以是但不限于是,在處理器上運行的進程、處理器、對象、實例、可執(zhí)行程序、執(zhí)行的線程、程序和/或計算機。作為說明,在計算機上運行的應用和計算機都可以是組件。一個或多個組件可駐留在進程和/或執(zhí)行的線程內(nèi),并且組件可位于一個計算機上和/或分布在兩個或更多的計算機之間。在本文中使用的詞語“示例性”或其各種形式意味著用作示例、實例或說明。在此被描述為“示例性”的任何方面或設計并不一定要被解釋為相比其它方面或設計更優(yōu)選或有利。此外,各示例只是出于清楚和理解的目的來提供的并且并不意味著以任何方式限制或約束所要求保護主題或本發(fā)明的相關部分??梢岳斫猓緛砜沙尸F(xiàn)不同范圍的多個附加或替換示例,但出于簡明的目的已被省略。如此處所使用,術語“推論”或“推斷”通常指的是從經(jīng)由事件和/或數(shù)據(jù)捕捉的一組觀察結果來推理或推斷系統(tǒng)、環(huán)境、和/或用戶的狀態(tài)的過程。可以使用推斷來標識特定上下文或動作,也可以生成例如狀態(tài)上的概率分布。推斷可以是概率性的,即,基于對數(shù)據(jù)和事件的考慮,計算在感興趣狀態(tài)上的概率分布。推斷也可以是指用于從一組事件和/或數(shù)據(jù)構成較高級別的事件的技術。這樣的推斷導致從一組觀察到的事件和/或存儲的事件數(shù)據(jù)構建新的事件或動作,不管事件在時間上是否緊密相關,以及事件和數(shù)據(jù)是來自一個還是多個事件和數(shù)據(jù)源。可采用各種分類方案和/或系統(tǒng)(例如,支持向量機、神經(jīng)網(wǎng)絡、專家系統(tǒng)、貝葉斯信任網(wǎng)絡、模糊邏輯、數(shù)據(jù)融合引擎……)來執(zhí)行關于所要求保護主題的自動化和/或推斷的動作。而且,對于在詳細描述或權利要求書中使用術語“包括”、“包含”、“具有”、“含有”或其它形式的變型而言,這樣的術語旨在以類似于術語“包括”的方式體現(xiàn)包含性,如同“包括”在用作權利要求書中的過渡詞時所解釋的那樣。為了為所要求保護主題提供上下文,圖7以及以下討論旨在提供對其中可以實現(xiàn)本主題的各方面的合適環(huán)境的簡要、概括描述。然而,合適的環(huán)境只是示例并且并非旨在對使用范圍或功能提出任何限制。盡管能夠在可以在一臺或多臺計算機上運行的程序的計算機可執(zhí)行指令的一般上下文中描述以上公開的系統(tǒng)和方法,但是,本領域的技術人員將認識到,各方面也可以與其他程序模塊等相結合地實現(xiàn)。一般而言,程序模塊包括執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件和數(shù)據(jù)結構等。此外,本領域技術人員可以理解,上述系統(tǒng)和方法可用各種計算機系統(tǒng)配置實現(xiàn),包括單處理器、多處理器或多核處理器計算機系統(tǒng)、小型計算設備、大型計算機、以及個人計算機、手持式計算設備(例如,個人數(shù)字助理(PDA)、電話、手表……)、基于微處理器或可編程消費者或工業(yè)電子設備等。各方面也可以在其中任務由通過通信網(wǎng)絡鏈接的遠程處理設備執(zhí)行的分布式計算環(huán)境中實現(xiàn)。然而,所要求保護主題的某些方面,如果不是所有方面的話,可以在獨立計算機上實施。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設備中的一個或兩者中。參考圖7,示出了示例通用計算機710或計算設備(例如,臺式機、膝上型計算機、服務器、手持式設備、可編程消費或工業(yè)電子產(chǎn)品、機頂盒、游戲系統(tǒng)……)。計算機710包括一個或多個處理器720、存儲器730、系統(tǒng)總線740、大容量存儲750、以及一個或多個接口組件770。系統(tǒng)總線740與至少上述系統(tǒng)組件通信地耦合。然而,可以理解,在其最簡單的形式中,計算機710可包括耦合到存儲器730的一個或多個處理器720,該一個或多個處理器720執(zhí)行存儲在存儲器730中的各種計算機可執(zhí)行動作、指令和或組件。處理器720可以用通用處理器、數(shù)字信號處理器(DSP)、應用程序專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)或其它可編程邏輯設備、分立門或晶體管邏輯、分立硬件組件或被設計為執(zhí)行此處描述的功能的其任意組合來實現(xiàn)。通用處理器可以是微處理器,但在替換方案中,處理器可以是任何處理器、控制器、微控制器、或狀態(tài)機。處理器720還可被實現(xiàn)為計算設備的組合,例如DSP和微處理器的組合、多個微處理器、多核處理器、結合一個DSP核的一個或多個微處理器、或任何其它這種配置。計算機710可包括各種計算機可讀介質或以其他方式與各種計算機可讀介質交互以便于控制計算機710來實現(xiàn)所要求保護主題的一個或多個方面。計算機可讀介質可以是能由計算機710訪問的任何可用介質,并包含易失性和非易失性介質以及可移動和不可移動介質。作為示例而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算機存儲介質包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結構、程序模塊或其它數(shù)據(jù)這樣的信息的任意方法或技術來實現(xiàn)的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括,但不限于,存儲器設備(例如,隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)……)、磁存儲設備(例如,硬盤、軟盤、磁帶盒、磁帶……)、光盤(例如,緊致盤(CD)、數(shù)字多功能盤(DVD)……)、以及固態(tài)設備(例如,固態(tài)驅動器(SSD)、閃存驅動器(例如,卡、棒、鍵驅動器……)……)、或者可用于存儲所需信息并且可由計算機710訪問的任何其他介質。通信介質通常以諸如載波或其他傳輸機制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機可讀指令、數(shù)據(jù)結構、程序模塊或其他數(shù)據(jù),并包括任何信息傳送介質。術語“已調(diào)制數(shù)據(jù)信號”是指具有以在信號中編碼信息的方式被設定或改變其一個或多個特征的信號。作為示例而非限制,通信介質包括諸如有線網(wǎng)絡或直接線連接之類的有線介質,以及諸如聲學、RF、紅外及其他無線介質之類的無線介質。上述的任意組合也應包含在計算機可讀介質的范圍內(nèi)。存儲器730和大容量存儲750是計算機可讀存儲介質的示例。取決于計算設備的確切配置和類型,存儲器730可以是易失性的(例如RAM)、非易失性的(例如ROM、閃存……)或是兩者的某種組合。作為示例,基本輸入/輸出系統(tǒng)(BIOS),包括諸如在啟動期間在計算機710內(nèi)的元件之間傳輸信息的基本例程,可被存儲在非易失性存儲器中,而易失性存儲器可擔當外部高速緩存存儲器以便于處理器720的處理等。大容量存儲750包括相對于存儲器730用于存儲大量數(shù)據(jù)的可移動/不可移動、易失性/非易失性計算機存儲介質。例如,大容量存儲750包括但不限于,諸如磁盤或光盤驅動器、軟盤驅動器、閃存存儲器、固態(tài)驅動器、或記憶棒的一個或多個設備。存儲器730和大容量存儲750可包括或其中存儲有操作系統(tǒng)760、一個或多個應用762、一個或多個程序模塊764和數(shù)據(jù)766。操作系統(tǒng)760用于控制和分配計算機710的資源。應用762包括系統(tǒng)和應用軟件中的一個或兩個,并且可利用操作系統(tǒng)760對資源的管理通過存儲在存儲器730和/或大容量存儲750中的程序模塊764和數(shù)據(jù)766來執(zhí)行一個或多個動作。因此,應用762可根據(jù)由此提供的邏輯來將通用計算機710變成專用機器。所要求保護主題的全部或各部分可以使用產(chǎn)生控制計算機以實現(xiàn)所公開功能的軟件、固件、硬件或其任意組合的標準編程和/或工程技術來實現(xiàn)。作為示例而非限制,系統(tǒng)100或其一部分可以是應用762或形成應用762的一部分,并且包括存儲在存儲器和/或大容量存儲750中的一個或多個模塊764和數(shù)據(jù)766,這些模塊和數(shù)據(jù)的功能可在由一個或多個處理器720執(zhí)行時可實現(xiàn)。根據(jù)一個特定實施例,處理器720可與片上系統(tǒng)(SOC)或在單個集成電路基座上包括或換言之集成硬件和軟件的類似體系結構相對應。此處,處理器720可包括至少與處理器720和存儲器730相似的一個或多個處理器以及存儲器等。常規(guī)處理器包括最少量的硬件和軟件并且廣泛依賴于外部硬件和軟件。作為對比,處理器的SOC實現(xiàn)更強大,因為它將硬件和軟件嵌入其中以能夠用最少的硬件和軟件或不依賴于外部硬件和軟件來啟用特定功能。例如,系統(tǒng)100和/或相關聯(lián)的功能可被嵌入到SOC體系結構中的硬件內(nèi)。計算機710還包括通信地耦合到系統(tǒng)總線740并方便與計算機710的交互的一個或多個接口組件770。作為示例,接口組件770可以是端口(例如,串行、并行、PCMCIA、USB、火線......)或接口卡(例如,聲音、視頻......)等等。在一個示例實現(xiàn)中,接口組件770可被具體化為用戶輸入/輸出接口,該用戶輸入/輸出接口使得用戶能夠通過一個或多個輸入設備(例如,諸如鼠標等定點設備、跟蹤球、指示筆、觸摸墊、鍵盤、話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀、照相機、其他計算機……)來將命令和信息輸入到計算機710中。在另一示例實現(xiàn)中,接口組件770可被具體化為輸出外圍接口,該輸出外圍接口向顯示器(例如,CRT、LCD、等離子……)、揚聲器、打印機和/或其它計算機等提供輸出。此外,接口組件770可被具體化為網(wǎng)絡接口,該網(wǎng)絡接口使得能夠諸如通過有線或無線通信鏈路與其他計算設備(未示出)通信。以上所已經(jīng)描述的內(nèi)容包括所要求保護主題的各方面的示例。當然,出于描繪所要求保護主題的目的而描述每一個可以想到的組件或方法的組合是不可能的,但本領域內(nèi)的普通技術人員應該認識到,所要求保護主題的許多進一步的組合和排列都是可能的。因此,所公開的主題旨在涵蓋落入所附權利要求書的精神和范圍內(nèi)的所有這樣的變更、修改和變化。權利要求1.一種便于與持久數(shù)據(jù)存儲交互的方法,包括采用被配置來執(zhí)行存儲在存儲器(730)中的計算機可執(zhí)行指令以執(zhí)行以下動作的至少一個處理器(720)限制與指定創(chuàng)建、更新或刪除操作中的至少一個相關的一個或多個語言集成查詢運算符的使用。2.如權利要求I所述的方法,其特征在于,還包括直接在持久數(shù)據(jù)存儲上啟動所述創(chuàng)建、更新或刪除操作的執(zhí)行。3.如權利要求2所述的方法,其特征在于,還包括接收對所述創(chuàng)建、更新或刪除操作的執(zhí)行的確認。4.如權利要求I所述的方法,其特征在于,還包括根據(jù)為所述創(chuàng)建、更新或刪除操作所特有的集合類型限制所述一個或多個語言集成查詢運算符的使用。5.如權利要求4所述的方法,其特征在于,根據(jù)讀取操作集合類型的子類型限制所述使用。6.一種便于與持久數(shù)據(jù)存儲交互的系統(tǒng),包括耦合到存儲器(730)的處理器(720),所述處理器(720)被配置來執(zhí)行存儲在所述存儲器(730)中的以下計算機可執(zhí)行組件第一組件,其被配置來分析對一集合的語言集成查詢創(chuàng)建、更新或刪除操作,所述操作是根據(jù)為所述操作所特有的集合類型用一個或多個查詢運算符指定的。7.如權利要求6所述的系統(tǒng),其特征在于,所述第一組件被配置為如果所述一個或多個查詢運算符中的至少一個不被為對其指定所述查詢運算符的所述操作所特有的集合類型支持,則生成錯誤。8.如權利要求6所述的系統(tǒng),其特征在于,所述集合類型是讀取操作集合類型的子類型。9.如權利要求6所述的系統(tǒng),其特征在于,所述操作包括指定返回值的輸出運算符。10.如權利要求6所述的系統(tǒng),其特征在于,還包括第二組件,其被配置來將所述操作變換為目標查詢語言。全文摘要本文描述了批量操作。在語言集成查詢上下文內(nèi)支持包括創(chuàng)建、更新和刪除操作的批量操作。這樣的批量操作可被實現(xiàn)為不同的操作??筛鶕?jù)特定批量操作來限制包括定義可對其執(zhí)行批量操作的數(shù)據(jù)集合的查詢運算符的其他操作。文檔編號G06F17/30GK102591933SQ20111044011公開日2012年7月18日申請日期2011年12月16日優(yōu)先權日2010年12月17日發(fā)明者H·J·M·梅杰申請人:微軟公司