[發(fā)明專利]去除SQL查詢語句恒條件的方法有效
| 申請?zhí)枺?/td> | 200710100359.6 | 申請日: | 2007-06-08 |
| 公開(公告)號(hào): | CN101075255A | 公開(公告)日: | 2007-11-21 |
| 發(fā)明(設(shè)計(jì))人: | 郭毅 | 申請(專利權(quán))人: | 北京神舟航天軟件技術(shù)有限公司 |
| 主分類號(hào): | G06F17/30 | 分類號(hào): | G06F17/30 |
| 代理公司: | 北京北新智誠知識(shí)產(chǎn)權(quán)代理有限公司 | 代理人: | 張衛(wèi)華 |
| 地址: | 100036北京*** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 去除 sql 查詢 語句 條件 方法 | ||
1、一種去除SQL查詢語句恒條件的方法,其特征在于它包括步驟:
創(chuàng)建鏈表步驟:對SQL查詢語句的查詢樹中的CHECK約束子樹和WHERE條件子樹進(jìn)行后序遍歷,這兩個(gè)子樹的葉節(jié)點(diǎn)是CHECK約束和WHERE條件中的表達(dá)式節(jié)點(diǎn),其它的節(jié)點(diǎn)是AND或OR節(jié)點(diǎn),遇到表達(dá)式節(jié)點(diǎn),則生成一個(gè)列屬性鏈表;
合并鏈表步驟:在進(jìn)行后序遍歷過程中,遇到AND或者OR節(jié)點(diǎn)則合并該節(jié)點(diǎn)的子樹的列屬性鏈表;
改寫查詢語句步驟:在合并鏈表的過程中,若發(fā)現(xiàn)節(jié)點(diǎn)是恒真或恒假條件,則將該節(jié)點(diǎn)改寫為TRUE或FALSE常量節(jié)點(diǎn),若最后該WHERE條件子樹的根節(jié)點(diǎn)被改寫為TRUE,則去掉WHERE條件;若根節(jié)點(diǎn)被改寫為FALSE,則將該SQL查詢直接改寫為空查詢。
2、根據(jù)權(quán)利要求1所述的去除SQL查詢語句恒條件的方法,其特征在于:
在所述創(chuàng)建鏈表步驟中,遍歷CHECK約束和WHERE條件時(shí),對遇到的每個(gè)表達(dá)式節(jié)點(diǎn)創(chuàng)建一結(jié)構(gòu)體ExprListNode,并由該結(jié)構(gòu)體生成一個(gè)單節(jié)點(diǎn)的列屬性鏈表。
3、根據(jù)權(quán)利要求2所述的去除SQL查詢語句恒條件的方法,其特征在于:
所述結(jié)構(gòu)體ExprListNode有四個(gè)域:(1)col:列名;(2)is_null:CHECK約束和WHERE條件中有沒有對該列的IS?NULL約束;(3)is_not_null:CHECK約束和WHERE條件中有沒有對該列的IS?NOT?NULL約束;(4)exprFieldList:列的區(qū)間鏈表,區(qū)間鏈表的每個(gè)節(jié)點(diǎn)為一ExprField結(jié)構(gòu)體,每個(gè)節(jié)點(diǎn)表示該列在CHECK約束和WHERE條件語句中出現(xiàn)的一個(gè)區(qū)間,節(jié)點(diǎn)間的關(guān)系體現(xiàn)為區(qū)間之間的OR連接,
該結(jié)構(gòu)體ExprField也有四個(gè)域:(1)minnum:區(qū)間的左邊界;(2)maxnum:區(qū)間的右邊界;(3)left_is_close:左邊界是否為閉區(qū)間;(4)right_is_close:右邊界是否為閉區(qū)間。
4、根據(jù)權(quán)利要求3所述的去除SQL查詢語句恒條件的方法,其特征在于:
所述創(chuàng)建表達(dá)式節(jié)點(diǎn)的列屬性鏈表的步驟是:
步驟(1):創(chuàng)建結(jié)構(gòu)體ExprListNode,對is_null和is_not_null域賦初值FALSE,exprFieldList域賦初值為空鏈表,將表達(dá)式中的列提取出來賦值給col域;
步驟(2):如果表達(dá)式是IS?NULL或者IS?NOT?NULL約束,則將ExprListNode結(jié)構(gòu)體中對應(yīng)的域賦值為TRUE,轉(zhuǎn)到步驟(5);
步驟(3):如果表達(dá)式是列+操作符+常數(shù),則創(chuàng)建ExprField結(jié)構(gòu)體ExprField1,ExprField1的minnum和maxnum域賦初值為空指針NULL,left_is_close和right_is_close域賦初值為FALSE;
步驟(4):判斷表達(dá)式的操作符
(a)若是列=常數(shù)con,表示為區(qū)間[con,con],則ExprField1的四個(gè)域(minnum,maxnum,left_is_close,right_is_close)分別賦值為(con,con,TRUE,TRUE),用ExprField1生成單個(gè)節(jié)點(diǎn)的鏈表,賦值給ExprListNode結(jié)構(gòu)體的exprFieldList域,轉(zhuǎn)到步驟(5);
(b)若是列<常數(shù)con,表示為區(qū)間(-∞,con),則ExprField1的四個(gè)域(minnum,maxnum,left_is_close,right_is_close)分別賦值為(NULL,con,F(xiàn)ALSE,F(xiàn)ALSE),用ExprField1生成單個(gè)節(jié)點(diǎn)的鏈表,賦值給ExprListNode結(jié)構(gòu)體的exprFieldList域,轉(zhuǎn)到步驟(5);
(c)若是列<=常數(shù)con,表示為區(qū)間(-∞,con],則ExprField1的四個(gè)域(minnum,maxnum,left_is_close,right_is_close)分別賦值為(NULL,con,F(xiàn)ALSE,TRUE),用ExprField1生成單個(gè)節(jié)點(diǎn)的鏈表,賦值給ExprListNode結(jié)構(gòu)體的exprFieldList域,轉(zhuǎn)到步驟(5);
(d)若是列>常數(shù)con,表示為區(qū)間(con,+∞),則ExprField?1的四個(gè)域(minnum,maxnum,left_is_close,right_is_close)分別賦值為(con,NULL,F(xiàn)ALSE,F(xiàn)ALSE),用ExprField1生成單個(gè)節(jié)點(diǎn)的鏈表,賦值給ExprListNode結(jié)構(gòu)體的exprFieldList域,轉(zhuǎn)到步驟(5);
(e)若是列>=常數(shù)con,表示為區(qū)間[con,+∞),則ExprField1的四個(gè)域(minnum.maxnum,left_is_close,right_is_close)分別賦值為(con,NULL,TRUE,F(xiàn)ALSE),用ExprField1生成單個(gè)節(jié)點(diǎn)的鏈表,賦值給ExprListNode結(jié)構(gòu)體的exprFieldList域,轉(zhuǎn)到步驟(5);
(f)若是列<>常數(shù)con,表示為區(qū)間(-∞,con)∪(con,+∞),則ExprField1的四個(gè)域(minnum,maxnum,left_is_close,right_is_close)分別賦值為(NULL,con,F(xiàn)ALSE,F(xiàn)ALSE),創(chuàng)建ExprField結(jié)構(gòu)體ExprField2,ExprField2的四個(gè)域(minnum,maxnum,left_is_close,right_is_close)分別賦值為(con,NULL,F(xiàn)ALSE,F(xiàn)ALSE),用ExprField1和ExprField2生成兩個(gè)節(jié)點(diǎn)的鏈表,賦值給ExprListNode結(jié)構(gòu)體的exprFieldList域,轉(zhuǎn)到步驟(5);
步驟(5):返回用ExprListNode生成的單個(gè)節(jié)點(diǎn)的鏈表,結(jié)束。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京神舟航天軟件技術(shù)有限公司,未經(jīng)北京神舟航天軟件技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200710100359.6/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F17-00 特別適用于特定功能的數(shù)字計(jì)算設(shè)備或數(shù)據(jù)處理設(shè)備或數(shù)據(jù)處理方法
G06F17-10 .復(fù)雜數(shù)學(xué)運(yùn)算的
G06F17-20 .處理自然語言數(shù)據(jù)的
G06F17-30 .信息檢索;及其數(shù)據(jù)庫結(jié)構(gòu)
G06F17-40 .數(shù)據(jù)的獲取和記錄
G06F17-50 .計(jì)算機(jī)輔助設(shè)計(jì)
- 一種SQL注入檢測方法及裝置
- SQL檢查方法與裝置
- 一種結(jié)構(gòu)化查詢語言性能優(yōu)化方法及系統(tǒng)
- 使用SQL實(shí)現(xiàn)MDX查詢效果的方法和裝置
- SQL語句處理方法和系統(tǒng)
- 一種SQL審核方法與系統(tǒng)
- 異常SQL語句檢測方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)
- SQL代碼信息顯示方法、裝置、計(jì)算機(jī)裝置及存儲(chǔ)介質(zhì)
- PaaS平臺(tái)中SQL執(zhí)行引擎的適配方法及裝置
- 一種SQL預(yù)執(zhí)行優(yōu)化的方法、裝置、設(shè)備及可讀介質(zhì)
- 帶有前處理和后處理的數(shù)據(jù)庫復(fù)合查詢系統(tǒng)及方法
- 數(shù)據(jù)庫查詢的方法和系統(tǒng)
- 查詢系統(tǒng)、查詢終端以及查詢方法
- 交易信息查詢方法、查詢裝置及查詢系統(tǒng)
- 數(shù)據(jù)查詢與結(jié)果生成方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 在RDF數(shù)據(jù)集上進(jìn)行OPTIONAL查詢的方法及存儲(chǔ)介質(zhì)
- 一種多表關(guān)聯(lián)查詢方法、裝置及設(shè)備
- 一種基于Impala的查詢方法和裝置
- 從查詢生成子查詢
- 一種基于通用查詢語言的查詢方法及查詢系統(tǒng)
- 基于聊天大數(shù)據(jù)知識(shí)庫的機(jī)器人對話控制方法和系統(tǒng)
- 基于大數(shù)據(jù)搜索的幽默型機(jī)器人對話控制方法和系統(tǒng)
- 基于對話知識(shí)庫的機(jī)器人對話控制方法和系統(tǒng)
- 一種自然語言語句評(píng)價(jià)方法及裝置
- 句子級(jí)雙語對齊方法及系統(tǒng)
- 一種獲取相似語句的方法、裝置、存儲(chǔ)介質(zhì)及電子設(shè)備
- 一種翻譯模型結(jié)果重排序的方法及裝置
- 用于輸出信息的方法、裝置、設(shè)備以及存儲(chǔ)介質(zhì)
- 搜索推薦方法和裝置、服務(wù)器、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 文本識(shí)別方法、裝置、電子設(shè)備和可讀存儲(chǔ)介質(zhì)





