Data Types
Conversions
The following is a matrix of supported by QQL data types for numerics and their conversions. The general conversion principle is that the higher priority always beats the lower priority: Int8 + Int16 = Int16.
tip
Note, that casting from higher to lower precision types causes data loss. For example cast from Int16 to Int8.
info
| Int8 | Int16 | Int32 | Int64 | Decimal64 | Float32 | Float64 | Timestamp | Timestamp(ns) | |
|---|---|---|---|---|---|---|---|---|---|
| Int8 | Int32 | Int32 | Int32 | Int64 | Decimal64 | Float32 | Float64 | Timestamp | Timestamp(ns) | 
| Int16 | Int32 | Int32 | Int32 | Int64 | Decimal64 | Float32 | Float64 | Timestamp | Timestamp(ns) | 
| Int32 | Int32 | Int32 | Int32 | Int64 | Decimal64 | Float32 | Float64 | Timestamp | Timestamp(ns) | 
| Int64 | Int64 | Int64 | Int64 | Int64 | Decimal64 | Float32 | Float64 | Timestamp | Timestamp(ns) | 
| Decimal64 | Decimal64 | Decimal64 | Decimal64 | Decimal64 | Decimal64 | Float32 | Float64 | - | - | 
| Float32 | Float32 | Float32 | Float32 | Float32 | Float32 | Float32 | Float64 | - | - | 
| Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | - | - | 
| Timestamp | Timestamp | Timestamp | Timestamp | Timestamp | - | - | - | Int64 | Int64 | 
| Timestamp(ns) | Timestamp(ns) | Timestamp(ns) | Timestamp(ns) | Timestamp(ns) | - | - | - | Int64 | Int64 | 
Operations with Timestamps
tip
0 = 1970-01-01 00:00:00.000 - Unix time in ms.
- timestamp+-- integer=- timestamp
- timestamp-- timestamp=- Int64
- timestamp><== (compare)- timestamp=- bool
- timestamp(ns)+-- integer=- timestamp(ns)
In operations involving different resolutions (- or comparison operations), timestamps will be automatically converted to the most precise type timestamp(ns).
- timestamp-- timestamp(ns)=- Int64
- timestamp(ms)><== (compare)- timestamp(ns)=- bool
SELECT '2022-10-10 10:10:10.010'd - '2022-10-10 10:10:10.000'd == 10
SELECT '2022-10-10 10:10:10.000'd + 10 == '2022-10-10 10:10:10.010'd
SELECT '2022-10-10 10:10:10.000'd + 1d5h == '2022-10-11 15:10:10.000'd
Operations with Arrays
When performing various operations with arrays of different types, the following principles apply:
- Array(a) ◦ b = Array(type(a ◦ b))
- a ◦ Array(b) = Array(type(a ◦ b))
- Array(a) ◦ Array(b) = Array(type(a ◦ b))
where
- a/b- data types
- ◦- any operation
-- select all Entries array elements with Price fields and add 3 to each Price value
SELECT entries.price +3
Nullability Conversions
Any data field in QQL may be declared as nullable, regardless of its data type. If so declared, it may contain the special out-of-band value of NULL, which basically means "no data". Additionally, NULL values are generated by queries in special cases. A NULL value is formatted as an underscore character: "_", so it can be differentiated from an empty string. Unlike ORACLE, an empty string value is distinctly different from a NULL value.
Array elements can as well be nullable and not nullable.
When performing operations with two data types with different nullability, the following principle apply:
isNullable=true + isNullable=false = isNullable=true. 
| True | False | |
|---|---|---|
| True | True | True | 
| False | True | False | 
info
Refer to Filtering to learn more about NaN and nullability.