Skip to content

Commit 9b5ed8c

Browse files
Merge pull request #2 from NicklasWallgren/support-filesystem
Added support for filesystem and embedded files.
2 parents e5db2af + 3d70ea6 commit 9b5ed8c

12 files changed

Lines changed: 68 additions & 63 deletions

File tree

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ We support the two major Go versions, which are 1.17 and 1.18 at the moment.
3030
- Keeps the templated query as close as possible to the actual SQL query.
3131
- Extensible template language with support for https://github.com/Masterminds/sprig
3232
- No third party dependencies
33+
- Support for embedded filesystem
3334

3435
# API
3536
```go
@@ -50,8 +51,11 @@ Register(namespace string, templateRoot string, extensions string) error
5051

5152
## Register a namespace and parse a template
5253
```go
54+
//go:embed queries/users/*.tsql
55+
var fs embed.FS
56+
5357
sqlt := sqlTemplate.NewQueryTemplateEngine()
54-
sqlt.Register("users", "queries/users", ".tsql");
58+
sqlt.Register("users", fs, ".tsql");
5559

5660
criteria := map[string]interface{}{"Name": "Bill", "Order": "id"}
5761
tmpl, _ := sqlt.ParseWithValuesFromMap("users", "findByName", criteria)

examples/embedded_files/main.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package main
2+
3+
import (
4+
"embed"
5+
"fmt"
6+
7+
sqlTemplate "github.com/NicklasWallgren/sqlTemplate/pkg"
8+
)
9+
10+
//go:embed queries/users/*.tsql
11+
var fs embed.FS
12+
13+
func main() {
14+
sqlT := sqlTemplate.NewQueryTemplateEngine()
15+
if err := sqlT.Register("users", fs, ".tsql"); err != nil {
16+
panic(err)
17+
}
18+
19+
criteria := map[string]interface{}{"Id": "1", "Order": "id"}
20+
21+
tmpl, err := sqlT.ParseWithValuesFromMap("users", "findById", criteria)
22+
if err != nil {
23+
panic(err)
24+
}
25+
26+
// nolint:forbidigo
27+
fmt.Printf("query %v\n", tmpl.GetQuery())
28+
// nolint:forbidigo
29+
fmt.Printf("query parameters %v\n", tmpl.GetParams())
30+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{define "findById"}}
2+
SELECT *
3+
FROM users
4+
WHERE id={{bind .Id}}
5+
{{if .Order}}ORDER BY {{.Order}}{{end}}
6+
{{end}}

examples/map_as_param/go.mod

Lines changed: 0 additions & 7 deletions
This file was deleted.

examples/map_as_param/go.sum

Lines changed: 0 additions & 16 deletions
This file was deleted.

examples/map_as_param/main.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ package main
22

33
import (
44
"fmt"
5+
"os"
56

67
sqlTemplate "github.com/NicklasWallgren/sqlTemplate/pkg"
78
)
89

910
func main() {
11+
wd, _ := os.Getwd()
12+
fs := os.DirFS(wd + "/examples/map_as_param/queries/users")
13+
1014
sqlT := sqlTemplate.NewQueryTemplateEngine()
11-
if err := sqlT.Register("users", "queries/users", ".tsql"); err != nil {
15+
if err := sqlT.Register("users", fs, ".tsql"); err != nil {
1216
panic(err)
1317
}
1418

examples/struct_as_param/go.mod

Lines changed: 0 additions & 7 deletions
This file was deleted.

examples/struct_as_param/go.sum

Lines changed: 0 additions & 10 deletions
This file was deleted.

examples/struct_as_param/main.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"fmt"
5+
"os"
56

67
sqlTemplate "github.com/NicklasWallgren/sqlTemplate/pkg"
78
)
@@ -13,8 +14,11 @@ type searchCriteria struct {
1314
}
1415

1516
func main() {
17+
wd, _ := os.Getwd()
18+
fs := os.DirFS(wd + "/examples/struct_as_param/queries/users")
19+
1620
sqlT := sqlTemplate.NewQueryTemplateEngine()
17-
if err := sqlT.Register("users", "queries/users", ".tsql"); err != nil {
21+
if err := sqlT.Register("users", fs, ".tsql"); err != nil {
1822
panic(err)
1923
}
2024

pkg/template_engine.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pkg
22

33
import (
44
"fmt"
5+
"io/fs"
56
"text/template"
67
)
78

@@ -13,8 +14,8 @@ type QueryTemplateEngine interface {
1314
ParseWithValuesFromMap(namespace string, templateName string, parameters map[string]interface{}) (QueryTemplate, error)
1415
// ParseWithValuesFromStruct parses a sql template with values from a struct and returns the 'QueryTemplate'
1516
ParseWithValuesFromStruct(namespace string, templateName string, parameters interface{}) (QueryTemplate, error)
16-
// Register registers a new namespace by template root and extension
17-
Register(namespace string, templateRoot string, extensions string) error
17+
// Register registers a new namespace by template filesystem and extension
18+
Register(namespace string, filesystem fs.FS, extensions string) error
1819
}
1920

2021
// QueryTemplate is the interface implemented by types that holds the parsed template sql query context.
@@ -29,7 +30,6 @@ type QueryTemplate interface {
2930
type Option func(*queryTemplateEngine)
3031

3132
type queryTemplateEngine struct {
32-
data interface{}
3333
repository *repository
3434
}
3535

@@ -66,8 +66,8 @@ func NewQueryTemplateEngine(options ...Option) QueryTemplateEngine {
6666
return templateEngine
6767
}
6868

69-
func (q queryTemplateEngine) Register(namespace string, templateRoot string, ext string) error {
70-
err := q.repository.add(namespace, templateRoot, ext)
69+
func (q queryTemplateEngine) Register(namespace string, filesystem fs.FS, ext string) error {
70+
err := q.repository.add(namespace, filesystem, ext)
7171
if err != nil {
7272
return fmt.Errorf("could not register the namespace %s %w", namespace, err)
7373
}

0 commit comments

Comments
 (0)