Skip to content

Commit 26af4db

Browse files
authored
fix(postgres): Emit correct types for pg_catalog types (#4)
1 parent 9867e64 commit 26af4db

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

src/drivers/pg.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@ export function columnType(column?: Column): TypeNode {
77
if (column === undefined || column.type === undefined) {
88
return factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);
99
}
10+
// Some of the type names have the `pgcatalog.` prefix. Remove this.
11+
let typeName = column.type.name;
12+
const pgCatalog = "pg_catalog.";
13+
if (typeName.startsWith(pgCatalog)) {
14+
typeName = typeName.slice(pgCatalog.length);
15+
}
1016
let typ: TypeNode = factory.createKeywordTypeNode(SyntaxKind.StringKeyword);
11-
switch (column.type.name) {
17+
switch (typeName) {
1218
case "aclitem": {
1319
// string
1420
break;

src/drivers/postgres.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@ import { SyntaxKind, NodeFlags, TypeNode, factory } from "typescript";
22

33
import { Parameter, Column } from "../gen/plugin/codegen_pb";
44
import { argName } from "./utlis";
5+
import { log } from "../logger";
56

67
export function columnType(column?: Column): TypeNode {
78
if (column === undefined || column.type === undefined) {
89
return factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);
910
}
11+
// Some of the type names have the `pgcatalog.` prefix. Remove this.
12+
let typeName = column.type.name;
13+
const pgCatalog = "pg_catalog.";
14+
if (typeName.startsWith(pgCatalog)) {
15+
typeName = typeName.slice(pgCatalog.length);
16+
}
1017
let typ: TypeNode = factory.createKeywordTypeNode(SyntaxKind.StringKeyword);
11-
switch (column.type.name) {
18+
switch (typeName) {
1219
case "aclitem": {
1320
// string
1421
break;
@@ -230,6 +237,10 @@ export function columnType(column?: Column): TypeNode {
230237
// string
231238
break;
232239
}
240+
default: {
241+
log(`unknown type ${column.type?.name}`);
242+
break;
243+
}
233244
}
234245
if (column.isArray || column.arrayDims > 0) {
235246
let dims = Math.max(column.arrayDims || 1);

src/logger.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// I cant' get this import to work locally. The import in node_modules is
2+
// javy/dist but esbuild requires the import to be javy/fs
3+
//
4+
// @ts-expect-error
5+
import { readFileSync, writeFileSync, STDIO } from "javy/fs";
6+
7+
export function log(msg: string) {
8+
const encoder = new TextEncoder();
9+
writeFileSync(STDIO.Stderr, encoder.encode(msg));
10+
}

0 commit comments

Comments
 (0)