类型系统

DataQL 是弱类型定义的查询语言,在DataQL 中所有数据都会被归结到有限的几种类型上。无需定义数据类型结构,在弱类型系统中编写查询会非常方便,它去掉了繁杂的类型定义。

警告

弱类型定义会带来 字段不确定性 的问题。即:在没有搭配类型转换函数情况下,字段类型可能是 boolean 也有可能是 string,这具体要看原始数据是什么类型。

类型定义

数据类型表示方式详情
布尔truefalse表示真假值
数值负无穷大0正无穷大浮点数、整数、科学计数法表示的数
字符串'…'"…"字符串 或 单个字符
空值nullNULL空值
集合[…] 数组 或 多维数组带有顺序的多组数据的集合
对象{'key':…} 具有键值对的数据体DataQL 的对象不支持方法,但是可以具备 Udf 类型的属性
UDFlambda 函数 或 一个外部的 Udf一个外部的 net.hasor.dataql.Udf 接口函数定义。DataQL 中书写的 lambda 函数也被称作为 UDF。一个扩展代码片段的定义,也属于 UDF 的范畴。

数据的表示

  • 布尔类型
    • 举例:var bool = true;
  • 数值类型

    • 二进制表示法:0b010101011000B01010101100

    • 十进制表示法:0o12345670O1234567

    • 八进制表示法:-0000234123

    • 十六进制表示法:0x123450X12345

    • 科学计数法:a * 10的n次幂的形式,其中 1 < a < 10

    • 关于负数:目前只有十进制表示法中提供了负数的表示能力。

  • 字符串

    • 举例:var str = ‘abcdefg…’;var str = “abcdefg…”;

    • 空字符串:var empty = ‘’;var empty = “”;

    • Unicode字符表示:var unicode = ‘u0041’; 拉丁字母 A

  • 空值

    • 举例:null
  • 集合

    • 格式:[…]

    • 空集合:[]

    • 多维集合:[[…],[…]]

  • 对象

    • 格式:{“k1”: … ,”k2”: …}

    • 空对象:{}

    • 多层结构:{“k1”: { … }, “k2”: { … } }

  • UDF

    • 外部Udf:外部的 Udf 被引入之后,通常以标识符形式表示它。

    • DataQL 中书写的 lambda 表达方式为:var foo = () -> { / 代码块 / }

    • 外部代码片段:var a = @@xxx() <% / 外部代码块 / %>

  • JSON

    • DataQL 可以直接表达 Json 数据(Json 的 Key 必须通过双引号或单引号形式包裹起来)

类型提升

当两个操作数之间做运算时,其中一个数值类型和另外一个数值的类型不一致情况下。将两个数值的类型统一转换成同一种类型的行为。

类型自动提升行为表:

boolbytesortintlongfloatdoubleBigIntDecimalstring
bool-bytesortintlongfloatdoubleBigIntDecimalstring
bytebyte-sortintlongfloatdoubleBigIntDecimalstring
sortsortsort-intlongfloatdoubleBigIntDecimalstring
intintintint-longdoubledoubleBigIntDecimalstring
longlonglonglonglong-doubledoubleBigIntDecimalstring
floatfloatfloatfloatdoubledouble-doubleDecimalDecimalstring
doubledoubledoubledoubledoubledoubledouble-DecimalDecimalstring
BigIntBigIntBigIntBigIntBigIntBigIntDecimalDecimal-Decimalstring
DecimalDecimalDecimalDecimalDecimalDecimalDecimalDecimalDecimal-string
stringstringstringstringstringstringstringstringstringstring-