Типы#

Интерфейс Type в Trino используется для реализации типа в SQL-языке. Trino поставляется с рядом встроенных типов, таких как VarcharType и BigintType. Интерфейс ParametricType используется для задания параметров типов, что позволяет использовать типы вроде VARCHAR(10) или DECIMAL(22, 5). Плагин (Plugin) может предоставлять новые объекты Type, возвращая их из метода getTypes(), и новые объекты ParametricType, возвращая их из метода getParametricTypes().

Ниже приведён обзор интерфейса Type на высоком уровне. Для получения более подробной информации см. JavaDocs для Type.

Нативный контейнерный тип (Native container type)#

Все типы определяют метод getJavaType(), который часто называют “нативным контейнерным типом”. Это Java-тип, используемый для хранения значений во время выполнения и их сохранения в Block. Например, это тот тип, который используется в Java-коде, реализующем функции, создающие или потребляющие данный Type.

Нативное кодирование (Native encoding)#

Интерпретация значения в его нативной форме контейнерного типа определяется самим Type. Для некоторых типов, таких как BigintType, она совпадает с интерпретацией Java (64-битное число в дополнительном коде). Однако для других типов, например TimestampWithTimeZoneType, который также использует long как нативный контейнерный тип, значение в long представляет собой 8-байтовое двоичное значение, объединяющее временную зону и миллисекунды с начала Unix-эпохи. Это означает, что нельзя просто сравнивать два нативных значения и ожидать осмысленный результат без понимания их нативного кодирования.

Сигнатура типа (Type signature)#

Сигнатура типа определяет его идентичность, а также кодирует общую информацию о типе, такую как его параметры (если тип параметризованный) и литеральные параметры. Литеральные параметры используются, например, в типах вида VARCHAR(10).