The H2 Console can display DatabaseMetaData, however it is not documented. This script works in the H2 Console only, and will call DatabaseMetaData.getColumns:
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
A VARCHAR(255) DEFAULT '',
B VARCHAR(255) DEFAULT 'X',
C VARCHAR(255) DEFAULT NULL);
@LIST @COLUMNS null null TEST;
The result is:
H2:
Column Data
Row # 1
COLUMN_DEF ''
Row # 2
COLUMN_NAME B
COLUMN_DEF 'X'
Row # 3
COLUMN_NAME C
COLUMN_DEF NULL
PostgreSQL:
@LIST @COLUMNS null null test;
Column Data
Row # 1
COLUMN_NAME a
COLUMN_DEF ''::character varying
Row # 2
COLUMN_NAME b
COLUMN_DEF 'X'::character varying
Row # 3
COLUMN_NAME c
COLUMN_DEF null
MySQL:
Column Data
Row # 1
COLUMN_NAME A
COLUMN_DEF
Row # 2
COLUMN_NAME B
COLUMN_DEF X
Row # 3
COLUMN_NAME C
COLUMN_DEF null
So MySQL does what you suggest (display the raw value, without quotes), however what about computed expressions? H2 supports this as well (other databases don't):
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(A VARCHAR(255) DEFAULT 'X' || RAND());
@LIST @COLUMNS null null TEST;
Column Data
Row # 1
COLUMN_NAME A
COLUMN_DEF ('X' || RAND())
So I think it makes sense to keep the current behavior.
Regards,
Thomas
You are right, all other databases return SQL 'null' if there is no
column default defined. The next release of H2 will do the same.
Regards,
Thomas