Skip to content

Commit da17ed1

Browse files
mergin
2 parents 21ce3cc + 9f58aa6 commit da17ed1

File tree

6 files changed

+496
-391
lines changed

6 files changed

+496
-391
lines changed

src/lib/sql/indexes.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ SELECT
1414
idx.indisready AS is_ready,
1515
idx.indislive AS is_live,
1616
idx.indisreplident AS is_replica_identity,
17-
idx.indkey AS key_attributes,
18-
idx.indcollation AS collation,
19-
idx.indclass AS class,
20-
idx.indoption AS options,
17+
idx.indkey::smallint[] AS key_attributes,
18+
idx.indcollation::integer[] AS collation,
19+
idx.indclass::integer[] AS class,
20+
idx.indoption::smallint[] AS options,
2121
idx.indpred AS index_predicate,
2222
obj_description(idx.indexrelid, 'pg_class') AS comment,
2323
ix.indexdef as index_definition,

src/server/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ export const GENERATE_TYPES = process.env.PG_META_GENERATE_TYPES
4040
export const GENERATE_TYPES_INCLUDED_SCHEMAS = GENERATE_TYPES
4141
? (process.env.PG_META_GENERATE_TYPES_INCLUDED_SCHEMAS?.split(',') ?? [])
4242
: []
43+
export const GENERATE_TYPES_DEFAULT_SCHEMA =
44+
process.env.PG_META_GENERATE_TYPES_DEFAULT_SCHEMA || 'public'
4345
export const GENERATE_TYPES_DETECT_ONE_TO_ONE_RELATIONSHIPS =
4446
process.env.PG_META_GENERATE_TYPES_DETECT_ONE_TO_ONE_RELATIONSHIPS === 'true'
4547
export const GENERATE_TYPES_SWIFT_ACCESS_CONTROL = process.env
4648
.PG_META_GENERATE_TYPES_SWIFT_ACCESS_CONTROL
4749
? (process.env.PG_META_GENERATE_TYPES_SWIFT_ACCESS_CONTROL as AccessControl)
4850
: 'internal'
51+
4952
export const DEFAULT_POOL_CONFIG: PoolConfig = {
5053
max: 1,
5154
connectionTimeoutMillis: PG_CONN_TIMEOUT_SECS * 1000,

src/server/templates/go.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ export const apply = ({
3434
let output = `
3535
package database
3636
37-
import "database/sql"
38-
3937
${tables
4038
.filter((table) => schemas.some((schema) => schema.name === table.schema))
4139
.flatMap((table) =>
@@ -275,13 +273,13 @@ const GO_TYPE_MAP = {
275273
type GoType = (typeof GO_TYPE_MAP)[keyof typeof GO_TYPE_MAP]
276274

277275
const GO_NULLABLE_TYPE_MAP: Record<GoType, string> = {
278-
string: 'sql.NullString',
279-
bool: 'sql.NullBool',
280-
int16: 'sql.NullInt32',
281-
int32: 'sql.NullInt32',
282-
int64: 'sql.NullInt64',
283-
float32: 'sql.NullFloat64',
284-
float64: 'sql.NullFloat64',
276+
string: '*string',
277+
bool: '*bool',
278+
int16: '*int16',
279+
int32: '*int32',
280+
int64: '*int64',
281+
float32: '*float32',
282+
float64: '*float64',
285283
'[]byte': '[]byte',
286284
'interface{}': 'interface{}',
287285
'map[string]interface{}': 'map[string]interface{}',

src/server/templates/typescript.ts

Lines changed: 89 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
PostgresView,
99
} from '../../lib/index.js'
1010
import type { GeneratorMetadata } from '../../lib/generators.js'
11+
import { GENERATE_TYPES_DEFAULT_SCHEMA } from '../constants.js'
1112

1213
export const apply = async ({
1314
schemas,
@@ -434,98 +435,130 @@ export type Database = {
434435
})}
435436
}
436437
437-
type PublicSchema = Database[Extract<keyof Database, "public">]
438+
type DefaultSchema = Database[Extract<keyof Database, ${JSON.stringify(GENERATE_TYPES_DEFAULT_SCHEMA)}>]
438439
439440
export type Tables<
440-
PublicTableNameOrOptions extends
441-
| keyof (PublicSchema["Tables"] & PublicSchema["Views"])
441+
DefaultSchemaTableNameOrOptions extends
442+
| keyof (DefaultSchema["Tables"] & DefaultSchema["Views"])
442443
| { schema: keyof Database },
443-
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
444-
? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
445-
Database[PublicTableNameOrOptions["schema"]]["Views"])
446-
: never = never
447-
> = PublicTableNameOrOptions extends { schema: keyof Database }
448-
? (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
449-
Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends {
444+
TableName extends DefaultSchemaTableNameOrOptions extends {
445+
schema: keyof Database
446+
}
447+
? keyof (Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
448+
Database[DefaultSchemaTableNameOrOptions["schema"]]["Views"])
449+
: never = never,
450+
> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }
451+
? (Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
452+
Database[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends {
450453
Row: infer R
451454
}
452455
? R
453456
: never
454-
: PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] & PublicSchema["Views"])
455-
? (PublicSchema["Tables"] & PublicSchema["Views"])[PublicTableNameOrOptions] extends {
457+
: DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] &
458+
DefaultSchema["Views"])
459+
? (DefaultSchema["Tables"] &
460+
DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends {
456461
Row: infer R
457462
}
458463
? R
459464
: never
460465
: never
461466
462467
export type TablesInsert<
463-
PublicTableNameOrOptions extends
464-
| keyof PublicSchema["Tables"]
468+
DefaultSchemaTableNameOrOptions extends
469+
| keyof DefaultSchema["Tables"]
465470
| { schema: keyof Database },
466-
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
467-
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
468-
: never = never
469-
> = PublicTableNameOrOptions extends { schema: keyof Database }
470-
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
471+
TableName extends DefaultSchemaTableNameOrOptions extends {
472+
schema: keyof Database
473+
}
474+
? keyof Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
475+
: never = never,
476+
> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }
477+
? Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
471478
Insert: infer I
472479
}
473480
? I
474481
: never
475-
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
476-
? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
477-
Insert: infer I
478-
}
479-
? I
482+
: DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
483+
? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
484+
Insert: infer I
485+
}
486+
? I
487+
: never
480488
: never
481-
: never
482489
483490
export type TablesUpdate<
484-
PublicTableNameOrOptions extends
485-
| keyof PublicSchema["Tables"]
491+
DefaultSchemaTableNameOrOptions extends
492+
| keyof DefaultSchema["Tables"]
486493
| { schema: keyof Database },
487-
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
488-
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
489-
: never = never
490-
> = PublicTableNameOrOptions extends { schema: keyof Database }
491-
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
494+
TableName extends DefaultSchemaTableNameOrOptions extends {
495+
schema: keyof Database
496+
}
497+
? keyof Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
498+
: never = never,
499+
> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }
500+
? Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
492501
Update: infer U
493502
}
494503
? U
495504
: never
496-
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
497-
? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
498-
Update: infer U
499-
}
500-
? U
505+
: DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
506+
? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
507+
Update: infer U
508+
}
509+
? U
510+
: never
501511
: never
502-
: never
503512
504513
export type Enums<
505-
PublicEnumNameOrOptions extends
506-
| keyof PublicSchema["Enums"]
514+
DefaultSchemaEnumNameOrOptions extends
515+
| keyof DefaultSchema["Enums"]
507516
| { schema: keyof Database },
508-
EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database }
509-
? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
510-
: never = never
511-
> = PublicEnumNameOrOptions extends { schema: keyof Database }
512-
? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName]
513-
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
514-
? PublicSchema["Enums"][PublicEnumNameOrOptions]
515-
: never
517+
EnumName extends DefaultSchemaEnumNameOrOptions extends {
518+
schema: keyof Database
519+
}
520+
? keyof Database[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"]
521+
: never = never,
522+
> = DefaultSchemaEnumNameOrOptions extends { schema: keyof Database }
523+
? Database[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName]
524+
: DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"]
525+
? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions]
526+
: never
516527
517528
export type CompositeTypes<
518529
PublicCompositeTypeNameOrOptions extends
519-
| keyof PublicSchema['CompositeTypes']
530+
| keyof DefaultSchema["CompositeTypes"]
520531
| { schema: keyof Database },
521-
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
522-
? keyof Database[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes']
523-
: never = never
532+
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
533+
schema: keyof Database
534+
}
535+
? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
536+
: never = never,
524537
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
525-
? Database[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName]
526-
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema['CompositeTypes']
527-
? PublicSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions]
528-
: never;
538+
? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
539+
: PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"]
540+
? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
541+
: never
542+
543+
export const Constants = {
544+
${schemas
545+
.sort(({ name: a }, { name: b }) => a.localeCompare(b))
546+
.map((schema) => {
547+
const schemaEnums = types
548+
.filter((type) => type.schema === schema.name && type.enums.length > 0)
549+
.sort(({ name: a }, { name: b }) => a.localeCompare(b))
550+
return `${JSON.stringify(schema.name)}: {
551+
Enums: {
552+
${schemaEnums.map(
553+
(enum_) =>
554+
`${JSON.stringify(enum_.name)}: [${enum_.enums
555+
.map((variant) => JSON.stringify(variant))
556+
.join(', ')}]`
557+
)}
558+
}
559+
}`
560+
})}
561+
} as const
529562
`
530563

531564
output = await prettier.format(output, {

test/server/indexes.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ test('list indexes', async () => {
1515
{
1616
"access_method": "btree",
1717
"check_xmin": false,
18-
"class": "3124",
19-
"collation": "0",
18+
"class": [
19+
3124,
20+
],
21+
"collation": [
22+
0,
23+
],
2024
"comment": null,
2125
"id": 16399,
2226
"index_attributes": [
@@ -37,10 +41,14 @@ test('list indexes', async () => {
3741
"is_replica_identity": false,
3842
"is_unique": true,
3943
"is_valid": true,
40-
"key_attributes": "1",
44+
"key_attributes": [
45+
1,
46+
],
4147
"number_of_attributes": 1,
4248
"number_of_key_attributes": 1,
43-
"options": "0",
49+
"options": [
50+
0,
51+
],
4452
"schema": "public",
4553
"table_id": 16393,
4654
}
@@ -56,8 +64,12 @@ test('retrieve index', async () => {
5664
{
5765
"access_method": "btree",
5866
"check_xmin": false,
59-
"class": "3124",
60-
"collation": "0",
67+
"class": [
68+
3124,
69+
],
70+
"collation": [
71+
0,
72+
],
6173
"comment": null,
6274
"id": 16399,
6375
"index_attributes": [
@@ -78,10 +90,14 @@ test('retrieve index', async () => {
7890
"is_replica_identity": false,
7991
"is_unique": true,
8092
"is_valid": true,
81-
"key_attributes": "1",
93+
"key_attributes": [
94+
1,
95+
],
8296
"number_of_attributes": 1,
8397
"number_of_key_attributes": 1,
84-
"options": "0",
98+
"options": [
99+
0,
100+
],
85101
"schema": "public",
86102
"table_id": 16393,
87103
}

0 commit comments

Comments
 (0)