Skip to content

Commit

Permalink
Merge pull request #36 from mackee/feature/support-tinygo
Browse files Browse the repository at this point in the history
add feature: sqlla supports tinygo. for the edge worker services
  • Loading branch information
mackee committed Jun 24, 2023
2 parents 912f5f5 + 4b8d025 commit 6b13725
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 127 deletions.
48 changes: 0 additions & 48 deletions expr.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import (
"database/sql"
"strconv"
"time"

"github.com/go-sql-driver/mysql"
)

type Expr interface {
Expand Down Expand Up @@ -347,52 +345,6 @@ func (e ExprMultiNullTime) ToSql() (string, []interface{}, error) {
return e.Column + " " + ops, vs, nil
}

type ExprMysqlNullTime struct {
Column string
Value mysql.NullTime
Op Operator
}

func (e ExprMysqlNullTime) ToSql() (string, []interface{}, error) {
var ops, placeholder string
var err error
vs := []interface{}{}
if !e.Value.Valid {
if e.Op == OpNot {
ops, err = opIsNotNull.ToSql()
} else {
ops, err = opIsNull.ToSql()
}
} else {
ops, err = e.Op.ToSql()
placeholder = " ?"
vs = append(vs, e.Value)
}
if err != nil {
return "", nil, err
}

return e.Column + " " + ops + placeholder, vs, nil
}

type ExprMultiMysqlNullTime struct {
Column string
Values []mysql.NullTime
Op Operator
}

func (e ExprMultiMysqlNullTime) ToSql() (string, []interface{}, error) {
ops, err := e.Op.ToSql()
if err != nil {
return "", nil, err
}
vs := make([]interface{}, 0, len(e.Values))
for _, v := range e.Values {
vs = append(vs, interface{}(v))
}
return e.Column + " " + ops, vs, nil
}

type ExprNullFloat64 struct {
Column string
Value sql.NullFloat64
Expand Down
53 changes: 53 additions & 0 deletions exprmysql.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
//go:build !tinygo.wasm

package sqlla

import (
"github.com/go-sql-driver/mysql"
)

type ExprMysqlNullTime struct {
Column string
Value mysql.NullTime
Op Operator
}

func (e ExprMysqlNullTime) ToSql() (string, []interface{}, error) {
var ops, placeholder string
var err error
vs := []interface{}{}
if !e.Value.Valid {
if e.Op == OpNot {
ops, err = opIsNotNull.ToSql()
} else {
ops, err = opIsNull.ToSql()
}
} else {
ops, err = e.Op.ToSql()
placeholder = " ?"
vs = append(vs, e.Value)
}
if err != nil {
return "", nil, err
}

return e.Column + " " + ops + placeholder, vs, nil
}

type ExprMultiMysqlNullTime struct {
Column string
Values []mysql.NullTime
Op Operator
}

func (e ExprMultiMysqlNullTime) ToSql() (string, []interface{}, error) {
ops, err := e.Op.ToSql()
if err != nil {
return "", nil, err
}
vs := make([]interface{}, 0, len(e.Values))
for _, v := range e.Values {
vs = append(vs, interface{}(v))
}
return e.Column + " " + ops, vs, nil
}
69 changes: 65 additions & 4 deletions generator.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,74 @@
// +build !go1.16
//go:build !tinygo.wasm

package sqlla

import (
"fmt"
"bytes"
"embed"
"go/format"
"io"
"runtime"
"log"
"strings"
"text/template"
"unicode"

"github.com/pkg/errors"
"github.com/serenize/snaker"
)

//go:embed template/*
var templates embed.FS

//go:embed template/table.tmpl
var tableTmpl []byte

var tmpl = template.New("table")

func init() {
tmpl = tmpl.Funcs(
template.FuncMap{
"Title": strings.Title,
"Exprize": func(s string) string {
s = strings.TrimPrefix(s, "sql.")
s = strings.TrimPrefix(s, "time.")
s = strings.TrimPrefix(s, "mysql.")

return s
},
"Untitle": func(s string) string {
s0 := rune(s[0])
if !unicode.IsUpper(s0) {
return s
}
s0l := unicode.ToLower(rune(s[0]))
return string(s0l) + s[1:]
},
"toLower": strings.ToLower,
"toSnake": snaker.CamelToSnake,
"toCamel": snaker.SnakeToCamel,
},
)
var err error
tmpl, err = tmpl.ParseFS(templates, "template/*.tmpl")
if err != nil {
log.Fatal(err)
}
tmpl, err = tmpl.Parse(string(tableTmpl))
if err != nil {
log.Fatal(err)
}
}

func WriteCode(w io.Writer, table *Table) error {
return fmt.Errorf("must build by go version of 1.16 or higher. this built by %s", runtime.Version())
buf := new(bytes.Buffer)
err := tmpl.Execute(buf, table)
if err != nil {
return errors.Wrapf(err, "fail to render")
}
bs, err := format.Source(buf.Bytes())
if err != nil {
return errors.Wrapf(err, "fail to format: table=%s", table.Name)
}
_, err = w.Write(bs)
return err
}
75 changes: 0 additions & 75 deletions generator_go116.go

This file was deleted.

2 changes: 2 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build !tinygo.wasm

package sqlla

import (
Expand Down
2 changes: 2 additions & 0 deletions table.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build !tinygo.wasm

package sqlla

import (
Expand Down

0 comments on commit 6b13725

Please sign in to comment.