DataQL 服務查詢引擎
  DataQL 是一款服務查詢框架,你可以把任意的服務通過 DataQL 進行查詢整合形成新的結果來使用。使用DataQL 將會極大的滿足業務靈活性上的開發需要。
   重要的事情要說三遍:DataQL 不是一門腳本語言!DataQL 不是一門腳本語言!!DataQL 不是一門腳本語言!!!
設計思想
  DataQL 的設計思想借鑒了 GraphQL。在借鑒的同時使用了全新的語法,同時增加了一些新特性。這些新特性會讓您用起來比 GraphQL 更加舒心,更加接地氣。
架構
特性
-
融入腳本特性,突破 GraphQL 只能做數據組織的界限,讓業務開發更加容易。
-
采用編譯執行,擁有飛快的執行速度。
-
支持使用 lambda 在查詢中定義函數。
-
支持表達式計算。
-
靈活的 UDF 擴展函數。
-
完全獨立,脫離 Hasor 依然可用。
-
DataQL 支持 JSON 數據輸入。
-
支持運算符重載(功能暫不開放)
數據類型
-
在 DataQL 中總共包含三大數據類型。
-
通常指的是具有一個或多個屬性集合的數據對象。任何一個 Java 對象都可以在 DataQL 當做結構體。
-
當訪問結構體中的屬性時將會通過 get/set or field 進行讀取和訪問。
-
數組、多維數組、List、Set。在 DataQL 中都可以作為集合類型進行處理。
-
默認集合類型采用的是 ArrayList 保存和處理。
-
udf函數調用後未經處理的原始數據,原始數據可能是任何一個 java 中的對象。
-
基本類型
-
原始類型
-
集合類型(List)
-
結構體(struts)
-
基本類型定義及其取值範圍(基本與Java相同)
-
null
-
雙引號括起來的,或者是單引號括起來的:"xxx" or 'xxx'
-
字節型(byte),長度8, 取值範圍:-128 ~ 127
-
短整型(sort),長度16,取值範圍:-32768 ~ 32768
-
整型(int), 長度32,取值範圍:-2147483648 ~ 2147483648
-
長整型(long),長度64,取值範圍:-9233372036854477808 ~ 9233372036854477808
-
浮點型(float),長度32,取值範圍:-3.40292347E+38 ~ 3.40292347E+38
-
雙精度(double),長度64,取值範圍:-1.79769313486231570E+308 ~ 1.79769313486231570E+308
-
大整數(BigInteger),取值範圍:java.math.BigInteger
-
大浮點數(BigDecimal),取值範圍:java.math.BigDecimal
-
true、false
-
布爾(boolean)
-
數值(number)
-
字符串(string)
-
空或未定義
計算精度
-
浮點數計算精度,默認值保留小數點後20位。
-
您可以通過 “option MAX_DECIMAL_DIGITS = 20” 來硒鼓改浮點數的默認保留位數。
-
小數默認舍入規則為:四舍五入。如需更換舍入規則需要通過 “option NUMBER_ROUNDING = "HALF_EVEN" ” 更換
-
UP:向遠離零的方向舍入。舍棄非零部分,並將非零舍棄部分相鄰的一位數字加一。
-
DOWN:向接近零的方向舍入。舍棄非零部分,同時不會非零舍棄部分相鄰的一位數字加一,采取截取行為。
-
CEILING:向正無窮的方向舍入。如果為正數,舍入結果同ROUND_UP一致;如果為負數,舍入結果同ROUND_DOWN一致。註意:此模式不會減少數值大小。
-
FLOOR:向負無窮的方向舍入。如果為正數,舍入結果同ROUND_DOWN一致;如果為負數,舍入結果同ROUND_UP一致。註意:此模式不會增加數值大小。
-
HALF_UP:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則為向上舍入的舍入模式。如果舍棄部分>= 0.5,則舍入行為與ROUND_UP相同;否則舍入行為與ROUND_DOWN相同。這種模式也就是我們常說的我們的“四舍五入”。
-
HALF_DOWN:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則為向下舍入的舍入模式。如果舍棄部分> 0.5,則舍入行為與ROUND_UP相同;否則舍入行為與ROUND_DOWN相同。這種模式也就是我們常說的我們的“五舍六入”。
-
HALF_EVEN:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則相鄰的偶數舍入。如果舍棄部分左邊的數字奇數,則舍入行為與 ROUND_HALF_UP 相同;如果為偶數,則舍入行為與 ROUND_HALF_DOWN 相同。註意:在重復進行一系列計算時,此舍入模式可以將累加錯誤減到最小。此舍入模式也稱為“銀行家舍入法”,主要在美國使用。四舍六入,五分兩種情況,如果前一位為奇數,則入位,否則舍去。*/
-
UNNECESSARY:斷言請求的操作具有精確的結果,因此不需要舍入。如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException。
表達式計算
-
算數運算:加(+)、減(-)、乘(*)、除(\)、整除(/)、求余(%)、取反(-)
-
邏輯運算:與(&&)、或(||)、非(!)、異或(^)
-
比較運算:大於(>)、大於等於(>=)、小於(<)、小於等於(<=)、不等於(!=)、等於(==)
-
二進制位運算:與(&)、或(|)、異或(^)、向左位移(<<)、向右位移(>>)、不帶符號向右位移(>>>)
基礎語法
-
設置查詢選項:"option key = value;"
-
執行查詢:"var query = ..."
-
結束查詢並返回結果:"return ..."
-
退出整個查詢並返回結果:"exit ..."
-
中斷查詢並拋出異常:"throw ..."
-
定義函數:"var name = lambda : () -> ..."
-
調用UDF或lambda函數:"var name = udfName() ..."
-
未完待續...
Tags: DataQL 數據 服務查詢 一門 腳本 emsp
文章來源: