Skip to content

Commit f420281

Browse files
authored
Load functions for PostgreSQL extensions (#640)
* tools: Generate schemas for extensions * postgresql: Add generated code * sql/catalog: Implement extension loading Add endtoend tests for common PostgreSQL extensions
1 parent 6c92132 commit f420281

File tree

19 files changed

+9841
-14632
lines changed

19 files changed

+9841
-14632
lines changed

internal/endtoend/testdata/pg_extensions/go/db.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/pg_extensions/go/models.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/pg_extensions/go/pg_trgm.sql.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/pg_extensions/go/pgcrypto.sql.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/pg_extensions/go/uuid_ossp.sql.go

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
2+
3+
-- name: WordSimilarity :one
4+
SELECT word_similarity('word', 'two words');
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
2+
3+
-- name: EncodeDigest :one
4+
SELECT encode(digest($1, 'sha1'), 'hex');
5+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
2+
3+
-- name: GenerateUUID :one
4+
SELECT uuid_generate_v4();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"engine": "postgresql",
6+
"path": "go",
7+
"name": "querytest",
8+
"schema": "sql",
9+
"queries": "sql"
10+
}
11+
]
12+
}

internal/engine/postgresql/catalog.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ func NewCatalog() *catalog.Catalog {
77
c.Schemas = append(c.Schemas, pgTemp())
88
c.Schemas = append(c.Schemas, genPGCatalog())
99
c.SearchPath = []string{"pg_catalog"}
10+
c.LoadExtension = loadExtension
1011
return c
1112
}
1213

@@ -15,5 +16,20 @@ func NewCatalog() *catalog.Catalog {
1516
func newTestCatalog() *catalog.Catalog {
1617
c := catalog.New("public")
1718
c.Schemas = append(c.Schemas, pgTemp())
19+
c.LoadExtension = loadExtension
1820
return c
1921
}
22+
23+
func loadExtension(name string) *catalog.Schema {
24+
switch name {
25+
case "citext":
26+
return genCIText()
27+
case "pg_trgm":
28+
return genPGTrigram()
29+
case "pgcrypto":
30+
return genPGCrypto()
31+
case "uuid-ossp":
32+
return genUUIDOSSP()
33+
}
34+
return nil
35+
}

internal/engine/postgresql/catalog_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ func TestUpdate(t *testing.T) {
585585
}
586586
}
587587

588-
if diff := cmp.Diff(e, c, cmpopts.EquateEmpty()); diff != "" {
588+
if diff := cmp.Diff(e.Schemas, c.Schemas, cmpopts.EquateEmpty()); diff != "" {
589589
t.Log(test.stmt)
590590
t.Errorf("catalog mismatch:\n%s", diff)
591591
}

0 commit comments

Comments
 (0)