HSQLDB 2.4 如何使用 UNIX_MILLIS() 作为 BIGINT 列的默认值

HSQLDB 2.4 How to use UNIX_MILLIS() as default value for BIGINT column

我运行下一个SQL(JDBC)

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

并得到 SQLSyntaxErrorException: unexpected token: UNIX_MILLIS

但是根据documentation

UNIX_MILLIS ( [ ] )

This function returns a BIGINT value. With no parameter, it returns the number of milliseconds since 1970-01-01. With a DATE or TIMESTAMP parameter, it converts the argument into number of milliseconds since 1970-01-01. (HyperSQL)

感谢任何帮助

查看 DEFAULT 子句的定义(在 table creation 中),事实上那里允许的内容仅限于

<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

<datetime value function> ::= ... 

Specify a function that returns a datetime value. The supported datetime value functions are listed and described in the Built In Functions chapter.

由于 UNIX_MILLIS 不是 return 日期时间值,而是 BIGINT,因此 UNIX_MILLIS 完全有可能不被视为 <datetime value function>,因此在 DEFAULT 子句中不可用。

这似乎可以通过查看 parser of the default clause 得到支持,它根据结果类型过滤允许的表达式。

提示一下,我还没有测试过,但启用 PostgreSQL 兼容模式可能允许您使用 DEFAULT UNIX_TIME() 或者 DEFAULT (UNIX_TIME()).