Skip to content

Commit 3996769

Browse files
Merge pull request #1883 from DemonHa/fix-types
fix: broken type generator
2 parents 5158a5b + 2e44a67 commit 3996769

File tree

4 files changed

+77
-14
lines changed

4 files changed

+77
-14
lines changed

ast/postgresql.ts

+41-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ export interface create_table_stmt_node_like extends create_table_stmt_node_base
164164
like: create_like_table;
165165
}
166166

167-
export type create_table_stmt = AstStatement<create_table_stmt_node> | AstStatement<create_table_stmt_node>;;
167+
export type create_table_stmt = AstStatement<create_table_stmt_node_base & { partition_of: create_table_partition_of }> | AstStatement<create_table_stmt_node>;
168168

169169
export type create_sequence_stmt = {
170170
type: 'create',
@@ -230,6 +230,46 @@ export type create_like_table_simple = { type: 'like'; table: table_ref_list; };
230230

231231
export type create_like_table = create_like_table_simple | create_like_table_simple & { parentheses?: boolean; };
232232

233+
234+
235+
236+
237+
238+
239+
export type for_values_item = {
240+
type: 'for_values_item';
241+
keyword: 'from';
242+
from: literal_string;
243+
to: literal_string;
244+
} | {
245+
type: 'for_values_item';
246+
keyword: 'in';
247+
in: expr_list;
248+
} | {
249+
type: 'for_values_item';
250+
keyword: 'with';
251+
modulus: literal_numeric;
252+
remainder: literal_numeric;
253+
};
254+
255+
256+
257+
export type for_values = {
258+
type: 'for_values';
259+
keyword: 'for values';
260+
expr: for_values_item;
261+
};
262+
263+
264+
265+
export type create_table_partition_of = {
266+
type: 'partition_of';
267+
keyword: 'partition of';
268+
table: table_name;
269+
for_values: for_values;
270+
tablespace: ident_without_kw_type | undefined;
271+
};
272+
233273
export type create_table_definition = create_definition[];
234274

235275
export type create_definition = create_column_definition | create_index_definition | create_fulltext_spatial_index_definition | create_constraint_definition;

package-lock.json

+2-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"mocha": "^10.0.0",
7878
"mochapack": "^2.0.3",
7979
"nyc": "15.1.0",
80+
"pegjs": "^0.10.0",
8081
"pegjs-loader": "^0.5.6",
8182
"pre-commit": "^1.2.2",
8283
"rimraf": "^5.0.1",
@@ -95,7 +96,7 @@
9596
"sourceMap": false
9697
},
9798
"dependencies": {
98-
"big-integer": "^1.6.48",
99-
"@types/pegjs": "^0.10.0"
99+
"@types/pegjs": "^0.10.0",
100+
"big-integer": "^1.6.48"
100101
}
101102
}

pegjs/postgresql.pegjs

+31-8
Original file line numberDiff line numberDiff line change
@@ -798,13 +798,7 @@ create_table_stmt
798798
ife:if_not_exists_stmt? __
799799
t:table_ref_list __
800800
po:create_table_partition_of {
801-
/*
802-
803-
export interface create_table_partition_of extends create_table_stmt_node_base {
804-
partition_of: create_table_partition_of;
805-
}
806-
=> AstStatement<create_table_partition_of>;
807-
*/
801+
// => AstStatement<create_table_stmt_node_base & { partition_of: create_table_partition_of }>
808802
if(t) t.forEach(tt => tableList.add(`create::${tt.db}::${tt.table}`));
809803
return {
810804
tableList: Array.from(tableList),
@@ -876,7 +870,7 @@ create_table_stmt
876870
export interface create_table_stmt_node_like extends create_table_stmt_node_base{
877871
like: create_like_table;
878872
}
879-
=> AstStatement<create_table_stmt_node>;
873+
=> AstStatement<create_table_stmt_node>
880874
*/
881875
if(t) t.forEach(tt => tableList.add(`create::${tt.db}::${tt.table}`));
882876
return {
@@ -1145,6 +1139,12 @@ create_like_table
11451139

11461140
for_values_item
11471141
= KW_FROM __ LPAREN __ f:literal_string __ RPAREN __ KW_TO __ LPAREN __ t:literal_string __ RPAREN {
1142+
/* => {
1143+
type: 'for_values_item';
1144+
keyword: 'from';
1145+
from: literal_string;
1146+
to: literal_string;
1147+
} */
11481148
return {
11491149
type: 'for_values_item',
11501150
keyword: 'from',
@@ -1153,13 +1153,24 @@ for_values_item
11531153
}
11541154
}
11551155
/ KW_IN __ LPAREN __ e:expr_list __ RPAREN {
1156+
/* => {
1157+
type: 'for_values_item';
1158+
keyword: 'in';
1159+
in: expr_list;
1160+
} */
11561161
return {
11571162
type: 'for_values_item',
11581163
keyword: 'in',
11591164
in: e,
11601165
}
11611166
}
11621167
/ KW_WITH __ LPAREN __ 'MODULUS'i __ m:literal_numeric __ COMMA __ 'REMAINDER'i __ r:literal_numeric __ RPAREN {
1168+
/* => {
1169+
type: 'for_values_item';
1170+
keyword: 'with';
1171+
modulus: literal_numeric;
1172+
remainder: literal_numeric;
1173+
} */
11631174
return {
11641175
type: 'for_values_item',
11651176
keyword: 'with',
@@ -1170,6 +1181,11 @@ for_values_item
11701181

11711182
for_values
11721183
= 'FOR'i __ KW_VALUES __ fvi:for_values_item {
1184+
/* => {
1185+
type: 'for_values';
1186+
keyword: 'for values';
1187+
expr: for_values_item;
1188+
} */
11731189
return {
11741190
type: 'for_values',
11751191
keyword: 'for values',
@@ -1178,6 +1194,13 @@ for_values
11781194
}
11791195
create_table_partition_of
11801196
= KW_PARTITION __ 'OF'i __ t:table_name __ fv:for_values __ ts:(KW_TABLESPACE __ ident_without_kw_type)? {
1197+
/* => {
1198+
type: 'partition_of';
1199+
keyword: 'partition of';
1200+
table: table_name;
1201+
for_values: for_values;
1202+
tablespace: ident_without_kw_type | undefined;
1203+
} */
11811204
return {
11821205
type: 'partition_of',
11831206
keyword: 'partition of',

0 commit comments

Comments
 (0)