类型系统
DataQL 是弱类型定义的查询语言,在DataQL 中所有数据都会被归结到有限的几种类型上。无需定义数据类型结构,在弱类型系统中编写查询会非常方便,它去掉了繁杂的类型定义。
提示
弱类型定义会带来 字段类型不确定 的问题。即:在没有搭配类型转换函数情况下,字段类型可能是 boolean
也有可能是 string
,这具体要看原始数据是什么类型。
数据类型
数据类型 | 表示方式 | 详情 |
---|---|---|
布尔 | true 或 false | 表示真假值 |
数值 | 负无穷大 或 0 或 正无穷大 | 浮点数、整数、科学计数法表示的数 |
字符串 | '...' 或 "..." | 字符串 或 单个字符 |
空值 | null 或 NULL | 空值 |
集合 | [...] 数组 或 多维数组 | 带有顺序的多组数据的集合 |
对象 | {'key':...} 具有键值对的数据体 | DataQL 的对象不支持方法,但是可以具备 UDF 类型的属性 |
UDF | lambda 函数 或 一个外部的 UDF | 一个外部的 net.hasor.dataql.Udf 接口函数定义 DataQL 中书写的 lambda 函数也被称作为 UDF。 一个扩展代码片段的定义,也属于 UDF 的范畴 |
数据的表示
布尔类型
- 举例:
var bool = true;
数值类型
- 二进制表示法:
0b01010101100
或0B01010101100
- 十进制表示法:
-0000234
或123
- 八进制表示法:
0o1234567
或0O1234567
- 十六进制表示法:
0x12345
或0X12345
- 科学计数法: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 被引入之后,通常以标识符形式表示它。
- lambda: 中书写的 lambda 表达方式为:
var foo = () -> { /* 代码块 */ }
- 外部代码片段:
var a = @@xxx() <% /* 外部代码块 */ %>
JSON
- DataQL 可以直接表达 Json 数据(Json 的 Key 必须通过双引号或单引号形式包裹起来)
自动类型提升
当两个操作数之间做运算时,其中一个数值类型和另外一个数值的类型不一致情况下。将两个数值的类型统一转换成同一种类型的行为。
类型自动提升行为表:
• | bool | byte | sort | int | long | float | double | BigInt | Decimal | string |
---|---|---|---|---|---|---|---|---|---|---|
bool | • | byte | sort | int | long | float | double | BigInt | Decimal | string |
byte | byte | • | sort | int | long | float | double | BigInt | Decimal | string |
sort | sort | sort | • | int | long | float | double | BigInt | Decimal | string |
int | int | int | int | • | long | double | double | BigInt | Decimal | string |
long | long | long | long | long | • | double | double | BigInt | Decimal | string |
float | float | float | float | double | double | • | double | Decimal | Decimal | string |
double | double | double | double | double | double | double | • | Decimal | Decimal | string |
BigInt | BigInt | BigInt | BigInt | BigInt | BigInt | Decimal | Decimal | • | Decimal | string |
Decimal | Decimal | Decimal | Decimal | Decimal | Decimal | Decimal | Decimal | Decimal | • | string |
string | string | string | string | string | string | string | string | string | string | • |