@dbml/core 5.3.1 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +0 -0
- package/README.md +201 -1
- package/lib/export/DbmlExporter.js +5 -1
- package/lib/export/JsonExporter.js +0 -0
- package/lib/export/ModelExporter.js +0 -0
- package/lib/export/MysqlExporter.js +0 -0
- package/lib/export/OracleExporter.js +0 -0
- package/lib/export/PostgresExporter.js +0 -0
- package/lib/export/README.md +0 -0
- package/lib/export/SqlServerExporter.js +0 -0
- package/lib/export/index.js +0 -0
- package/lib/export/utils.js +0 -0
- package/lib/import/index.js +0 -0
- package/lib/index.js +7 -0
- package/lib/model_structure/check.js +0 -0
- package/lib/model_structure/config.js +0 -0
- package/lib/model_structure/database.js +0 -0
- package/lib/model_structure/dbState.js +0 -0
- package/lib/model_structure/element.js +0 -0
- package/lib/model_structure/endpoint.js +0 -0
- package/lib/model_structure/enum.js +0 -0
- package/lib/model_structure/enumValue.js +0 -0
- package/lib/model_structure/field.js +0 -0
- package/lib/model_structure/indexColumn.js +0 -0
- package/lib/model_structure/indexes.js +0 -0
- package/lib/model_structure/ref.js +0 -0
- package/lib/model_structure/schema.js +0 -0
- package/lib/model_structure/stickyNote.js +0 -0
- package/lib/model_structure/table.js +0 -0
- package/lib/model_structure/tableGroup.js +0 -0
- package/lib/model_structure/tablePartial.js +0 -0
- package/lib/model_structure/utils.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/AST.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/ParserErrorListener.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/SyntaxError.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/constants.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/helpers.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/index.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/mssql/MssqlASTGen.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/mssql/README.md +263 -157
- package/lib/parse/ANTLR/ASTGeneration/mysql/MySQLASTGen.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/mysql/README.md +262 -157
- package/lib/parse/ANTLR/ASTGeneration/oraclesql/OracleSQLASTGen.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/oraclesql/README.md +261 -157
- package/lib/parse/ANTLR/ASTGeneration/postgres/PostgreSQLLexerBase.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/postgres/PostgreSQLParserBase.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/postgres/PostgresASTGen.js +0 -0
- package/lib/parse/ANTLR/ASTGeneration/postgres/README.md +252 -157
- package/lib/parse/ANTLR/ASTGeneration/snowflake/README.md +236 -157
- package/lib/parse/ANTLR/ASTGeneration/snowflake/SnowflakeASTGen.js +0 -0
- package/lib/parse/ANTLR/README.md +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.g4 +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.interp +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.js +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.tokens +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlParser.g4 +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlParser.interp +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlParser.js +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlParser.tokens +0 -0
- package/lib/parse/ANTLR/parsers/mssql/TSqlParserVisitor.js +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.g4 +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.interp +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.js +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.tokens +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlLexerBase.js +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlParser.g4 +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlParser.interp +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlParser.js +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlParser.tokens +0 -0
- package/lib/parse/ANTLR/parsers/mysql/MySqlParserVisitor.js +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlLexer.g4 +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlLexer.interp +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlLexer.js +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlLexer.tokens +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlLexerBase.js +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlParser.g4 +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlParser.interp +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlParser.js +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlParser.tokens +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlParserBase.js +0 -0
- package/lib/parse/ANTLR/parsers/oraclesql/OracleSqlParserVisitor.js +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.g4 +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.interp +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.js +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.tokens +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.g4 +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.interp +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.js +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.tokens +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParserVisitor.js +0 -0
- package/lib/parse/ANTLR/parsers/postgresql/README.md +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.g4 +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.interp +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.js +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.tokens +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.g4 +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.interp +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.js +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.tokens +0 -0
- package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParserVisitor.js +0 -0
- package/lib/parse/Parser.js +0 -0
- package/lib/parse/buildParser.js +0 -0
- package/lib/parse/databaseGenerator.js +0 -0
- package/lib/parse/dbml/parser.pegjs +0 -0
- package/lib/parse/dbmlParser.js +0 -0
- package/lib/parse/error.js +0 -0
- package/lib/parse/mssql/base_parsers.js +0 -0
- package/lib/parse/mssql/column_definition/actions.js +0 -0
- package/lib/parse/mssql/column_definition/index.js +0 -0
- package/lib/parse/mssql/constraint_definition/actions.js +0 -0
- package/lib/parse/mssql/constraint_definition/index.js +0 -0
- package/lib/parse/mssql/expression.js +0 -0
- package/lib/parse/mssql/fk_definition/actions.js +0 -0
- package/lib/parse/mssql/fk_definition/index.js +0 -0
- package/lib/parse/mssql/index.js +0 -0
- package/lib/parse/mssql/index_definition/actions.js +0 -0
- package/lib/parse/mssql/index_definition/index.js +0 -0
- package/lib/parse/mssql/keyword_parsers.js +0 -0
- package/lib/parse/mssql/keyword_utils.js +0 -0
- package/lib/parse/mssql/statements/actions.js +0 -0
- package/lib/parse/mssql/statements/index.js +0 -0
- package/lib/parse/mssql/statements/statement_types/alter_table/actions.js +0 -0
- package/lib/parse/mssql/statements/statement_types/alter_table/add/actions.js +0 -0
- package/lib/parse/mssql/statements/statement_types/alter_table/add/index.js +0 -0
- package/lib/parse/mssql/statements/statement_types/alter_table/index.js +0 -0
- package/lib/parse/mssql/statements/statement_types/comments/actions.js +0 -0
- package/lib/parse/mssql/statements/statement_types/comments/index.js +0 -0
- package/lib/parse/mssql/statements/statement_types/create_index/actions.js +0 -0
- package/lib/parse/mssql/statements/statement_types/create_index/index.js +0 -0
- package/lib/parse/mssql/statements/statement_types/create_table/actions.js +0 -0
- package/lib/parse/mssql/statements/statement_types/create_table/index.js +0 -0
- package/lib/parse/mssql/statements/statement_types/index.js +0 -0
- package/lib/parse/mssql/utils.js +0 -0
- package/lib/parse/mssql/whitespaces.js +0 -0
- package/lib/parse/mssqlParser.js +0 -0
- package/lib/parse/mysql/parser.pegjs +0 -0
- package/lib/parse/mysqlParser.js +0 -0
- package/lib/parse/postgresParser.js +0 -0
- package/lib/parse/postgresql/Base_rules.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Alter_table/Alter_table.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Commands.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Comment.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_index.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_table/Create_table.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_table/Create_table_normal.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_table/Create_table_of.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_table/Create_table_partition_of.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_type/Create_type.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_type/Create_type_enum.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Create_type/Create_type_range.pegjs +0 -0
- package/lib/parse/postgresql/Commands/Ignore_syntax.pegjs +0 -0
- package/lib/parse/postgresql/Expression.pegjs +0 -0
- package/lib/parse/postgresql/InitializerUtils.pegjs +0 -0
- package/lib/parse/postgresql/Keywords.pegjs +0 -0
- package/lib/parse/postgresql/get_parser.js +0 -0
- package/lib/parse/postgresql/parser.pegjs +0 -0
- package/lib/parse/schemarb/parser.pegjs +0 -0
- package/lib/parse/schemarbParser.js +0 -0
- package/lib/transform/index.js +30 -0
- package/lib/utils/version.js +0 -0
- package/package.json +3 -3
- package/types/export/ModelExporter.d.ts +0 -0
- package/types/export/index.d.ts +0 -0
- package/types/import/index.d.ts +0 -0
- package/types/index.d.ts +2 -1
- package/types/model_structure/check.d.ts +0 -0
- package/types/model_structure/database.d.ts +0 -0
- package/types/model_structure/dbState.d.ts +0 -0
- package/types/model_structure/element.d.ts +0 -0
- package/types/model_structure/endpoint.d.ts +0 -0
- package/types/model_structure/enum.d.ts +0 -0
- package/types/model_structure/enumValue.d.ts +0 -0
- package/types/model_structure/field.d.ts +0 -0
- package/types/model_structure/indexColumn.d.ts +0 -0
- package/types/model_structure/indexes.d.ts +0 -0
- package/types/model_structure/ref.d.ts +0 -0
- package/types/model_structure/schema.d.ts +0 -0
- package/types/model_structure/stickyNote.d.ts +0 -0
- package/types/model_structure/table.d.ts +0 -0
- package/types/model_structure/tableGroup.d.ts +0 -0
- package/types/model_structure/tablePartial.d.ts +0 -0
- package/types/parse/Parser.d.ts +0 -0
- package/types/parse/error.d.ts +0 -0
- package/types/transform/index.d.ts +7 -0
|
@@ -1,157 +1,252 @@
|
|
|
1
|
-
# PostgreSQL
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
|
14
|
-
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
|
45
|
-
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
|
59
|
-
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
|
81
|
-
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
|
93
|
-
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
|
102
|
-
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
|
111
|
-
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
|
120
|
-
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
131
|
-
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
|
138
|
-
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
|
147
|
-
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
|
|
|
1
|
+
# PostgreSQL SQL Parser Support
|
|
2
|
+
|
|
3
|
+
> Comprehensive documentation for the PostgreSQL model structure generator based on the ANTLR4 parser.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This module provides SQL parsing capabilities for PostgreSQL databases, enabling conversion of PostgreSQL DDL statements to DBML format. The parser supports a wide range of PostgreSQL-specific syntax including enumerated types, `SERIAL`/`BIGSERIAL` columns, `GENERATED AS IDENTITY`, and various constraint definitions.
|
|
8
|
+
|
|
9
|
+
## Support Legend
|
|
10
|
+
|
|
11
|
+
| Symbol | Meaning |
|
|
12
|
+
|--------|---------|
|
|
13
|
+
| ✓ | Fully supported and correctly parsed |
|
|
14
|
+
| ◐ | Valid SQL that is parsed, but some options/clauses are ignored |
|
|
15
|
+
| ✗ | Valid PostgreSQL syntax, but the parser fails to generate output |
|
|
16
|
+
| — | Syntax not valid in PostgreSQL |
|
|
17
|
+
|
|
18
|
+
## Key Capabilities
|
|
19
|
+
|
|
20
|
+
- **Data Definition**
|
|
21
|
+
- `CREATE TABLE` with full syntax support
|
|
22
|
+
- Data types: enumerated types, parameterized types (e.g., `VARCHAR(255)`), array types (e.g., `INTEGER[]`)
|
|
23
|
+
- **Constraints**
|
|
24
|
+
- `PRIMARY KEY` (column-level, table-level, multi-column, with explicit name)
|
|
25
|
+
- `FOREIGN KEY` with `ON UPDATE` / `ON DELETE` actions
|
|
26
|
+
- `UNIQUE`, `CHECK`, `DEFAULT`, `NOT NULL`
|
|
27
|
+
- **Auto-increment**
|
|
28
|
+
- `SERIAL` / `BIGSERIAL`
|
|
29
|
+
- `GENERATED AS IDENTITY`
|
|
30
|
+
- **Indexes**
|
|
31
|
+
- `CREATE INDEX` with BTREE, HASH, GIST, BRIN, GIN
|
|
32
|
+
- Function-based indexes (e.g., `LOWER(column)`)
|
|
33
|
+
- **Comments**
|
|
34
|
+
- `COMMENT ON TABLE` / `COMMENT ON COLUMN` statements
|
|
35
|
+
- **Data Manipulation**
|
|
36
|
+
- Basic `INSERT` and multi-row `INSERT`
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Feature Support Matrix
|
|
41
|
+
|
|
42
|
+
### `CREATE TABLE`
|
|
43
|
+
|
|
44
|
+
| Feature | Status | Notes |
|
|
45
|
+
|---------|---------|-------|
|
|
46
|
+
| Basic `CREATE TABLE` syntax | ✓ | |
|
|
47
|
+
| Enumerated data types | ✓ | |
|
|
48
|
+
| Parameterized types `name(...)` | ✓ | e.g., `VARCHAR(255)`, `NUMERIC(10,2)` |
|
|
49
|
+
| Array types `name[...]` | ✓ | e.g., `INTEGER[]`, `TEXT[][]` |
|
|
50
|
+
| TEMPORARY tables | ◐ | Parsed but no indication of temporary status in output |
|
|
51
|
+
| `CREATE TABLE` AS SELECT | ✗ | |
|
|
52
|
+
| Table options (UNLOGGED, partition, etc.) | ◐ | Options are ignored |
|
|
53
|
+
|
|
54
|
+
### Constraints
|
|
55
|
+
|
|
56
|
+
#### `PRIMARY KEY`
|
|
57
|
+
|
|
58
|
+
| Feature | Status | Notes |
|
|
59
|
+
|---------|---------|-------|
|
|
60
|
+
| Column-level `PRIMARY KEY` | ✓ | Defined with column: `id INT PRIMARY KEY` |
|
|
61
|
+
| Table-level `PRIMARY KEY` | ✓ | Defined separately: `PRIMARY KEY (id)` |
|
|
62
|
+
| Multi-column `PRIMARY KEY` | ✓ | Multiple columns: `PRIMARY KEY (a, b)` |
|
|
63
|
+
| Explicitly named (CONSTRAINT name) | ✓ | `CONSTRAINT pk_name PRIMARY KEY (id)` |
|
|
64
|
+
| DEFERRABLE / NOT DEFERRABLE | ◐ | Constraint timing options are ignored |
|
|
65
|
+
|
|
66
|
+
#### `FOREIGN KEY`
|
|
67
|
+
|
|
68
|
+
| Feature | Status | Notes |
|
|
69
|
+
|---------|---------|-------|
|
|
70
|
+
| Column-level `FOREIGN KEY` | ✓ | `col INT REFERENCES other(id)` |
|
|
71
|
+
| Table-level `FOREIGN KEY` | ✓ | `FOREIGN KEY (col) REFERENCES other(id)` |
|
|
72
|
+
| Multi-column `FOREIGN KEY` | ✓ | `FOREIGN KEY (a, b) REFERENCES other(x, y)` |
|
|
73
|
+
| Explicitly named (CONSTRAINT name) | ✓ | `CONSTRAINT fk_name FOREIGN KEY ...` |
|
|
74
|
+
| `ON UPDATE` action | ✓ | CASCADE, SET NULL, SET DEFAULT, NO ACTION, RESTRICT |
|
|
75
|
+
| `ON DELETE` action | ✓ | CASCADE, SET NULL, SET DEFAULT, NO ACTION, RESTRICT |
|
|
76
|
+
| DEFERRABLE / NOT DEFERRABLE | ◐ | Constraint timing options are ignored |
|
|
77
|
+
|
|
78
|
+
#### `UNIQUE`
|
|
79
|
+
|
|
80
|
+
| Feature | Status | Notes |
|
|
81
|
+
|---------|---------|-------|
|
|
82
|
+
| Column-level `UNIQUE` | ✓ | `col INT UNIQUE` |
|
|
83
|
+
| Table-level `UNIQUE` | ✓ | `UNIQUE (col)` |
|
|
84
|
+
| Multi-column `UNIQUE` | ✓ | `UNIQUE (a, b)` |
|
|
85
|
+
| Explicitly named (CONSTRAINT name) | ✓ | `CONSTRAINT uq_name UNIQUE (col)` |
|
|
86
|
+
| DEFERRABLE / NOT DEFERRABLE | ◐ | Constraint timing options are ignored |
|
|
87
|
+
| NULLS NOT DISTINCT | — | Treats NULLs as equal (PostgreSQL 15+) - not valid in older versions |
|
|
88
|
+
| `UNIQUE` KEY/`UNIQUE` INDEX syntax | — | MySQL syntax; use `CREATE INDEX` for indexes |
|
|
89
|
+
|
|
90
|
+
#### `CHECK`
|
|
91
|
+
|
|
92
|
+
| Feature | Status | Notes |
|
|
93
|
+
|---------|---------|-------|
|
|
94
|
+
| Column-level `CHECK` | ✓ | `col INT CHECK (col > 0)` |
|
|
95
|
+
| Table-level `CHECK` | ✓ | `CHECK (col > 0)` |
|
|
96
|
+
| Explicitly named (CONSTRAINT name) | ✓ | Name ignored for column-level checks |
|
|
97
|
+
| NOT VALID / NO INHERIT | ◐ | Enforcement options are ignored |
|
|
98
|
+
|
|
99
|
+
#### `DEFAULT`
|
|
100
|
+
|
|
101
|
+
| Feature | Status | Notes |
|
|
102
|
+
|---------|---------|-------|
|
|
103
|
+
| Column-level `DEFAULT` | ✓ | `col INT DEFAULT 0` |
|
|
104
|
+
| Table-level `DEFAULT` | — | PostgreSQL only supports column-level `DEFAULT` |
|
|
105
|
+
| Function as `DEFAULT` | ✓ | `DEFAULT NOW()`, `DEFAULT gen_random_uuid()` |
|
|
106
|
+
| Explicitly named `DEFAULT` | — | PostgreSQL doesn't support named `DEFAULT` constraints |
|
|
107
|
+
|
|
108
|
+
#### `NOT NULL` / NULL
|
|
109
|
+
|
|
110
|
+
| Feature | Status | Notes |
|
|
111
|
+
|---------|---------|-------|
|
|
112
|
+
| Column-level `NOT NULL` | ✓ | `col INT NOT NULL` |
|
|
113
|
+
| NULL (explicitly nullable) | ✓ | `col INT NULL` |
|
|
114
|
+
| Table-level `NOT NULL` | — | PostgreSQL only supports column-level `NOT NULL` |
|
|
115
|
+
| DEFERRABLE / NOT DEFERRABLE | ◐ | Constraint timing options are ignored |
|
|
116
|
+
|
|
117
|
+
### Auto-Increment Columns
|
|
118
|
+
|
|
119
|
+
| Feature | Status | Notes |
|
|
120
|
+
|---------|---------|-------|
|
|
121
|
+
| `SERIAL` (pseudo-type) | ✓ | `id SERIAL` - auto-incrementing 4-byte integer |
|
|
122
|
+
| `BIGSERIAL` (pseudo-type) | ✓ | `id BIGSERIAL` - auto-incrementing 8-byte integer |
|
|
123
|
+
| `GENERATED AS IDENTITY` (column property) | ✓ | `id INT GENERATED ALWAYS AS IDENTITY` |
|
|
124
|
+
| START WITH / INCREMENT BY | ◐ | Sequence options are ignored |
|
|
125
|
+
| `AUTO_INCREMENT` (column attribute) | — | MySQL syntax - not valid in PostgreSQL |
|
|
126
|
+
| `IDENTITY(seed, increment)` (column property) | — | SQL Server/Snowflake syntax - not valid in PostgreSQL |
|
|
127
|
+
|
|
128
|
+
### Inline Indexes (in `CREATE TABLE`)
|
|
129
|
+
|
|
130
|
+
| Feature | Status | Notes |
|
|
131
|
+
|---------|---------|-------|
|
|
132
|
+
| Column-level indexes | — | Except for `UNIQUE`/`PRIMARY KEY` constraints |
|
|
133
|
+
| Table-level indexes | — | Use `CREATE INDEX` statement |
|
|
134
|
+
|
|
135
|
+
### Table/Column Comments (in `CREATE TABLE`)
|
|
136
|
+
|
|
137
|
+
| Feature | Status | Notes |
|
|
138
|
+
|---------|---------|-------|
|
|
139
|
+
| Table comments in `CREATE TABLE` | — | Use `COMMENT ON` statement |
|
|
140
|
+
| Column comments in `CREATE TABLE` | — | Use `COMMENT ON` statement |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### `CREATE INDEX`
|
|
145
|
+
|
|
146
|
+
| Feature | Status | Notes |
|
|
147
|
+
|---------|---------|-------|
|
|
148
|
+
| Basic `CREATE INDEX` | ✓ | `CREATE INDEX idx ON table (col)` |
|
|
149
|
+
| Multi-column index | ✓ | `CREATE INDEX idx ON table (a, b)` |
|
|
150
|
+
| Explicitly named index | ✓ | Index name is required in PostgreSQL |
|
|
151
|
+
| `UNIQUE` index | ✓ | `CREATE UNIQUE INDEX idx ON table (col)` |
|
|
152
|
+
| BTREE index | ✓ | Default index type, B-tree structure |
|
|
153
|
+
| HASH index | ✓ | Hash-based index for equality comparisons |
|
|
154
|
+
| GIST index | ✓ | Generalized Search Tree for complex types |
|
|
155
|
+
| BRIN index | ✓ | Block Range Index for large sequential data |
|
|
156
|
+
| GIN index | ✓ | Generalized Inverted Index for arrays/JSON |
|
|
157
|
+
| Function-based index | ✓ | `CREATE INDEX ON t (LOWER(col))` |
|
|
158
|
+
| Partial index (WHERE clause) | ◐ | `WHERE condition` is ignored |
|
|
159
|
+
| INCLUDE columns | ◐ | Covering index columns are ignored |
|
|
160
|
+
| NULLS FIRST/LAST | ◐ | NULL ordering is ignored |
|
|
161
|
+
| ASC/DESC | ◐ | Sort direction is ignored |
|
|
162
|
+
| COLLATE | ◐ | Collation settings are ignored |
|
|
163
|
+
| Index comments | ◐ | Comments are ignored |
|
|
164
|
+
| CLUSTERED/NONCLUSTERED | — | SQL Server syntax - not valid in PostgreSQL |
|
|
165
|
+
| FULLTEXT index | — | MySQL syntax - use GIN with tsvector |
|
|
166
|
+
| SPATIAL index | — | MySQL syntax - use GIST with geometry |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### `INSERT` Statements
|
|
171
|
+
|
|
172
|
+
| Feature | Status | Notes |
|
|
173
|
+
|---------|---------|-------|
|
|
174
|
+
| Basic `INSERT` ... VALUES | ✓ | `INSERT INTO t (col) VALUES (1)` |
|
|
175
|
+
| Multi-row `INSERT` | ✓ | `INSERT INTO t VALUES (1), (2), (3)` |
|
|
176
|
+
| `INSERT` ... SELECT | ✗ | Subquery as data source |
|
|
177
|
+
| WITH clause (CTE) | ✗ | Common Table Expression before `INSERT` |
|
|
178
|
+
| Table alias in `INSERT` | ✗ | `INSERT INTO t AS alias ...` |
|
|
179
|
+
| `INSERT` ... RETURNING | ◐ | Returns inserted rows - clause is ignored |
|
|
180
|
+
| `INSERT` ... ON CONFLICT (UPSERT) | ◐ | Upsert behavior - clause is ignored |
|
|
181
|
+
| `INSERT` OVERWRITE | — | Snowflake/Hive syntax - not valid in PostgreSQL |
|
|
182
|
+
| Multi-table `INSERT` | ✗ | Insert into multiple tables at once |
|
|
183
|
+
| Conditional `INSERT` (WHEN/ALL/FIRST) | ✗ | Oracle syntax for conditional inserts |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### `ALTER TABLE`
|
|
188
|
+
|
|
189
|
+
| Feature | Status | Notes |
|
|
190
|
+
|---------|---------|-------|
|
|
191
|
+
| **ADD COLUMN** | | |
|
|
192
|
+
| - All column properties | ✗ | |
|
|
193
|
+
| **DROP COLUMN** | ✗ | |
|
|
194
|
+
| **ALTER COLUMN / MODIFY** | | |
|
|
195
|
+
| - All modifications | ✗ | |
|
|
196
|
+
| **RENAME COLUMN** | ✗ | |
|
|
197
|
+
| **ADD CONSTRAINT** | | |
|
|
198
|
+
| - Named `CHECK` | ✓ | |
|
|
199
|
+
| - Unnamed `CHECK` | ✓ | |
|
|
200
|
+
| - Named `UNIQUE` | ✓ | Name is ignored |
|
|
201
|
+
| - Unnamed `UNIQUE` | ✓ | |
|
|
202
|
+
| - Named `PRIMARY KEY` | ◐ | Name is ignored |
|
|
203
|
+
| - Unnamed `PRIMARY KEY` | ✓ | |
|
|
204
|
+
| - Named `FOREIGN KEY` | ✓ | |
|
|
205
|
+
| - Unnamed `FOREIGN KEY` | ✓ | |
|
|
206
|
+
| - `DEFAULT` | ✗ | Parse failure |
|
|
207
|
+
| - `NOT NULL` / NULL | ✗ | |
|
|
208
|
+
| **DROP CONSTRAINT** | ✗ | |
|
|
209
|
+
| **ALTER CONSTRAINT** | ✗ | |
|
|
210
|
+
| **RENAME TABLE** | ✗ | |
|
|
211
|
+
| **SET SCHEMA** | ✗ | |
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
### Other DDL Statements
|
|
216
|
+
|
|
217
|
+
| Feature | Status | Notes |
|
|
218
|
+
|---------|---------|-------|
|
|
219
|
+
| `DROP TABLE` | ✗ | |
|
|
220
|
+
| `DROP INDEX` | ✗ | |
|
|
221
|
+
| `ALTER INDEX` | ✗ | |
|
|
222
|
+
| `CREATE VIEW` | ✗ | |
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
### Comments (`COMMENT ON`)
|
|
227
|
+
|
|
228
|
+
| Feature | Status | Notes |
|
|
229
|
+
|---------|---------|-------|
|
|
230
|
+
| `COMMENT ON TABLE` | ✓ | |
|
|
231
|
+
| `COMMENT ON COLUMN` | ✓ | |
|
|
232
|
+
| COMMENT ... IS NULL | ✓ | Removes comment |
|
|
233
|
+
| `COMMENT ON INDEX` | ◐ | Ignored |
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Known Limitations
|
|
238
|
+
|
|
239
|
+
- **`ALTER TABLE` operations**: Limited support; primarily ADD CONSTRAINT is functional
|
|
240
|
+
- **DDL modification statements**: `DROP TABLE`, `DROP INDEX`, `ALTER INDEX` not supported
|
|
241
|
+
- **`INSERT` ... SELECT**: Subqueries in `INSERT` statements not supported
|
|
242
|
+
- **`CREATE VIEW`**: View definitions are not parsed
|
|
243
|
+
- **Constraint options**: Advanced options like DEFERRABLE, INITIALLY DEFERRED are ignored
|
|
244
|
+
- **Index options**: Partial indexes (WHERE clause), INCLUDE columns, and ordering options are parsed but ignored
|
|
245
|
+
|
|
246
|
+
## PostgreSQL-Specific Notes
|
|
247
|
+
|
|
248
|
+
1. **`SERIAL`/`BIGSERIAL`**: These pseudo-types are correctly recognized and converted to auto-increment columns in DBML
|
|
249
|
+
2. **Enumerated Types**: `CREATE TYPE ... AS ENUM` definitions are supported and referenced enum types in columns are recognized
|
|
250
|
+
3. **Array Types**: PostgreSQL array syntax (e.g., `INTEGER[]`, `TEXT[][]`) is properly parsed
|
|
251
|
+
4. **`GENERATED AS IDENTITY`**: The SQL standard identity column syntax is fully supported as an alternative to `SERIAL`
|
|
252
|
+
5. **Comments**: Use separate `COMMENT ON TABLE/COLUMN` statements rather than inline comments
|