: 找出沒有包含在任何括號中的以下關(guān)鍵字:select、from、where、group by、having、order by ; 將在select與from之間的select子句存儲在SqlProxy.select屬性中;from子句位于from與where之間,在檢查時如果沒有where關(guān)鍵字則檢查group by關(guān)鍵字,如果也沒有則檢查order by關(guān)鍵字,如果還沒有則從from關(guān)鍵字一直檢查至字符串結(jié)束,將from子句存儲在SqlProxy.from屬性中; 如果有where關(guān)鍵字,在where與group by之間的是where子句,如果沒有g(shù)roup by關(guān)鍵字則在where與order by之間,否則一直包含到字符串結(jié)束,將where子句存儲在SqlProxy.where 屬性中; 如果有g(shù)roup by關(guān)鍵字,同時有having關(guān)鍵字,則group by與having之間的是group by子句,如果有order by關(guān)鍵字則having與order by之間是having子句,如果沒有order by關(guān)鍵字則從having到結(jié)尾的是having子句;如果沒有having關(guān)鍵字,如果有order by關(guān)鍵字則group by與order by之間的是group by子句,如果沒有order by關(guān)鍵字則從group by到結(jié)尾的是group by子句^fgroup by子句和having子句分別存儲到 SqlProxy.groupBy 和 SqlProxy.having 屬性中; 如果有order by關(guān)鍵字,則將該關(guān)鍵字后的字符存儲到SqlProxy.0rderBy屬性中。
3.根據(jù)權(quán)利要求1所述的查詢語句解析與再處理的方法,其特征在于,如果用戶傳遞參數(shù)時傳遞了變量page與size,則將對該查詢提供分頁查詢的功能,使其只查詢變量page對應頁所需的數(shù)據(jù),其中,在第一次查詢時計算出頁數(shù)與行數(shù)的總數(shù)據(jù)量,并與變量page和size —起計算出“第η頁/共m頁”和“第X條/共y條”信息,其中變量page為第幾頁,變量size為每頁多少行,n、m、x、y均為自然數(shù)。
4.根據(jù)權(quán)利要求1所述的查詢語句解析與再處理的方法,其特征在于,如果用戶傳遞參數(shù)時傳遞了變量ordering,則對原查詢拆分后的order by子句進行替換更新,將更新后的各個子句重新進行拼裝,形成新的查詢語句,執(zhí)行排序查詢。
5.根據(jù)權(quán)利要求1所述的查詢語句解析與再處理的方法,其特征在于,如果用戶傳遞參數(shù)時傳遞了變量groupBy、having,則對原查詢拆分后的group by子句進行替換更新,將更新后的各個子句重新進行拼裝,形成新的查詢語句,執(zhí)行分組查詢。
6.一種查詢語句解析與再處理的裝置,其特征在于,包括: 解析模塊,首先定義一個類,所述類包含6項屬性,分別對應標準查詢語句的6個查詢子句; 根據(jù)用戶提供的原始查詢語句和查詢參數(shù)集,將所述原始查詢語句的主查詢語句解析為6個查詢子句,包括select、from、where、group by、having、order by,并用查詢對象對應的6個屬性分別將得到的查詢子句進行存儲,其中所述原查詢語句包含至少一個查詢子句,對于所述原查詢語句不包含的查詢子句,所述類對應的屬性為空; 處理模塊,在查詢對象中,分別對解析后的查詢子句進行分頁、分組、排序至少一項的處理,根據(jù)所述處理后,重新拼裝進而形成新的查詢語句及其查詢參數(shù),執(zhí)行查詢操作。
7.根據(jù)權(quán)利要求6所述的查詢語句解析與再處理的裝置,其特征在于,所述標準查詢語句的6個查詢子句分別為select、from、where、group by、having、order by,對應于所述類中的 6 項屬性分別為 SqlProxy.select、SqlProxy.from、SqlProxy.where、SqlProxy.groupBy> SqlProxy.having、SqlProxy.0rderBy,對所述原查詢語句的解析過程如下: 找出沒有包含在任何括號中的以下關(guān)鍵字:select、from、where、group by、having、order by ; 將在select與from之間的select子句存儲在SqlProxy.select屬性中; from子句位于from與where之間,在檢查時如果沒有where關(guān)鍵字則檢查group by關(guān)鍵字,如果也沒有則檢查order by關(guān)鍵字,如果還沒有則從from關(guān)鍵字一直檢查至字符串結(jié)束,將from子句存儲在SqlProxy.from屬性中; 如果有where關(guān)鍵字,在where與group by之間的是where子句,如果沒有g(shù)roup by關(guān)鍵字則在where與order by之間,否則一直包含到字符串結(jié)束,將where子句存儲在SqlProxy.where 屬性中; 如果有g(shù)roup by關(guān)鍵字,同時有having關(guān)鍵字,則group by與having之間的是group by子句,如果有order by關(guān)鍵字則having與order by之間是having子句,如果沒有order by關(guān)鍵字則從having到結(jié)尾的是having子句;如果沒有having關(guān)鍵字,如果有order by關(guān)鍵字則group by與order by之間的是group by子句,如果沒有order by關(guān)鍵字則從group by到結(jié)尾的是group by子句^fgroup by子句和having子句分別存儲到 SqlProxy.groupBy 和 SqlProxy.having 屬性中; 如果有order by關(guān)鍵字,則將該關(guān)鍵字后的字符存儲到SqlProxy.0rderBy屬性中。
8.根據(jù)權(quán)利要求6所述的查詢語句解析與再處理的裝置,其特征在于,如果用戶傳遞參數(shù)時傳遞了變量page與size,則將對該查詢提供分頁查詢的功能,使其只查詢變量page對應頁所需的數(shù)據(jù),其中,在第一次查詢時計算出頁數(shù)與行數(shù)的總數(shù)據(jù)量,并與變量page和size —起計算出“第η頁/共m頁”和“第X條/共y條”信息,其中變量page為第幾頁,變量size為每頁多少行,n、m、x、y均為自然數(shù)。
9.根據(jù)權(quán)利要求6所述的查詢語句解析與再處理的裝置,其特征在于,如果用戶傳遞參數(shù)時傳遞了變量ordering,則對原查詢拆分后的order by子句進行替換更新,將更新后的各個子句重新進行拼裝,形成新的查詢語句,執(zhí)行排序查詢。
10.根據(jù)權(quán)利要求6所述的查詢語句解析與再處理的裝置,其特征在于,如果用戶傳遞參數(shù)時傳遞了變量groupBy、having,則對原查詢拆分后的group by子句進行替換更新,將更新后的各個子句重新進行拼裝,形成新的查詢語句,執(zhí)行分組查詢。
【專利摘要】本發(fā)明公開一種查詢語句解析與再處理的方法和裝置,其中方法包括:定義一個類,所述類包含6項屬性,分別對應標準查詢語句的6個查詢子句;根據(jù)用戶提供的原始查詢語句和查詢參數(shù)集,將所述原始查詢語句的主查詢語句解析為6個查詢子句,包括select、from、where、group by、having、order by,并用查詢對象對應的6個屬性分別將得到的查詢子句進行存儲;在查詢對象中,分別對解析后的查詢子句進行分頁、分組、排序至少一項的處理;根據(jù)所述處理后,重新拼裝進而形成新的查詢語句及其查詢參數(shù),執(zhí)行查詢操作。
【IPC分類】G06F9-44, G06F17-30
【公開號】CN104714974
【申請?zhí)枴緾N201310692598
【發(fā)明人】范鋼, 偶瑞軍
【申請人】航天信息股份有限公司
【公開日】2015年6月17日
【申請日】2013年12月17日