HSQLDB 2.4 Как использовать UNIX_MILLIS () в качестве значения по умолчанию для столбца BIGINT - PullRequest
0 голосов
/ 12 февраля 2020

Я запускаю следующую SQL (JDB C)

CREATE TABLE IF NOT EXISTS PUBLIC.MY_DATA(
ID BIGINT IDENTITY PRIMARY KEY NOT NULL,
...,
LAST_MODIFIED BIGINT DEFAULT UNIX_MILLIS() NOT NULL)

и получаю SQLSyntaxErrorException: неожиданный токен: UNIX_MILLIS

Но согласно документации

UNIX_MILLIS ([])

Эта функция возвращает значение BIGINT. Без параметра возвращает число миллисекунд с 1970-01-01. С параметром DATE или TIMESTAMP он преобразует аргумент в количество миллисекунд с 1970-01-01. (Hyper SQL)

Любая помощь приветствуется

1 Ответ

1 голос
/ 12 февраля 2020

Рассматривая определение предложения DEFAULT создание таблицы ) и тот факт, что то, что там разрешено, ограничено

<default option> ::= <literal> | <datetime value function> | USER
| CURRENT_USER | CURRENT_ROLE | SESSION_USER | SYSTEM_USER |
CURRENT_CATALOG | CURRENT_SCHEMA | CURRENT_PATH | NULL 

И <datetime value function> определяется как

функция значения даты-времени

<datetime value function> ::= ... 

Укажите функцию, которая возвращает значение даты-времени. Поддерживаемые функции значений даты и времени перечислены и описаны в главе Встроенные функции .

Поскольку UNIX_MILLIS не возвращает значение даты и времени, но BIGINT, это Вполне возможно, что UNIX_MILLIS не считается <datetime value function> и поэтому недоступен в предложении DEFAULT.

Это, кажется, подтверждается просмотром синтаксического анализатора предложения по умолчанию , который фильтрует разрешенные выражения на основе их типа результата.

Как совет, я не проверял его, но возможно, что включение режима совместимости PostgreSQL может позволить вам использовать DEFAULT UNIX_TIME() или, возможно, DEFAULT (UNIX_TIME()).

...