Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions MODERNIZATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Also fix the test files:

---

## 5. Use `strings.ReplaceAll` instead of `strings.Replace(..., -1)` (Go 1.12+)
## ~~5. Use `strings.ReplaceAll` instead of `strings.Replace(..., -1)` (Go 1.12+)~~ (DONE)

`strings.ReplaceAll` is a clearer, more idiomatic function for replacing all occurrences.

Expand All @@ -104,7 +104,7 @@ Also applies to `bench_test.go` lines 229-230.

---

## 6. Use `strings.Builder` instead of `bytes.Buffer` for String Building
## ~~6. Use `strings.Builder` instead of `bytes.Buffer` for String Building~~ (DONE)

`strings.Builder` (Go 1.10+) is purpose-built for building strings and avoids the `[]byte` to `string` copy that `bytes.Buffer.String()` performs.

Expand Down Expand Up @@ -396,8 +396,8 @@ If `Build` returns an error, `productDao` will have nil function fields. Subsequ
- #11 — Update dependencies

**Lower priority (cleanup):**
- #5 — `strings.ReplaceAll`
- #6 — `strings.Builder`
- ~~#5 — `strings.ReplaceAll`~~ *(DONE)*
- ~~#6 — `strings.Builder`~~ *(DONE)*
- #9 — Delete `cmp/errors.go`
- #10 — Deprecation annotations
- #12 — Testing improvements
Expand Down
4 changes: 2 additions & 2 deletions bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,8 @@ func (spd standardPersonDao) GetByAge(db *sql.DB, id int, ages []int, name strin

inClause := strings.Join(params, ",")

finalQuery := strings.Replace(startQuery, ":ages:", inClause, -1)
finalQuery = strings.Replace(finalQuery, ":id:", fmt.Sprintf("$%d", len(ages)+2), -1)
finalQuery := strings.ReplaceAll(startQuery, ":ages:", inClause)
finalQuery = strings.ReplaceAll(finalQuery, ":id:", fmt.Sprintf("$%d", len(ages)+2))

args := make([]any, 0, len(ages)+2)
args = append(args, name)
Expand Down
25 changes: 12 additions & 13 deletions builder.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package proteus

import (
"bytes"
"context"
"fmt"
"go/scanner"
Expand Down Expand Up @@ -64,7 +63,7 @@ type posType interface {
}

func buildFixedQueryAndParamOrder(ctx context.Context, query string, nameOrderMap map[string]int, funcType posType, pa ParamAdapter) (queryHolder, []paramInfo, error) {
var out bytes.Buffer
var out strings.Builder

var paramOrder []paramInfo

Expand All @@ -73,7 +72,7 @@ func buildFixedQueryAndParamOrder(ctx context.Context, query string, nameOrderMa
// ending on a single \ means the \ is ignored
inEscape := false
inVar := false
curVar := []rune{}
var curVar strings.Builder
hasSlice := false
for k, v := range query {
if inEscape {
Expand All @@ -86,11 +85,11 @@ func buildFixedQueryAndParamOrder(ctx context.Context, query string, nameOrderMa
inEscape = true
case ':':
if inVar {
if len(curVar) == 0 {
if curVar.Len() == 0 {
//error! must have a something
return nil, nil, stackerr.Errorf("empty variable declaration at position %d", k)
}
curVarS := string(curVar)
curVarS := curVar.String()
id, err := validIdentifier(ctx, curVarS)
if err != nil {
//error, identifier must be valid go identifier with . for path
Expand Down Expand Up @@ -137,13 +136,13 @@ func buildFixedQueryAndParamOrder(ctx context.Context, query string, nameOrderMa
}

inVar = false
curVar = []rune{}
curVar.Reset()
} else {
inVar = true
}
default:
if inVar {
curVar = append(curVar, v)
curVar.WriteRune(v)
} else {
out.WriteRune(v)
}
Expand Down Expand Up @@ -187,7 +186,7 @@ func doFinalize(ctx context.Context, queryString string, paramOrder []paramInfo,
sliceMap[fixNameForTemplate(v.name)] = 1
}
}
var b bytes.Buffer
var b strings.Builder
err = temp.Execute(&b, sliceMap)
if err != nil {
return "", err
Expand All @@ -207,7 +206,7 @@ const (

func joinFactory(startPos int, paramAdapter ParamAdapter) func(int) string {
return func(total int) string {
var b bytes.Buffer
var b strings.Builder
for i := 0; i < total; i++ {
if i > 0 {
b.WriteString(", ")
Expand All @@ -221,10 +220,10 @@ func joinFactory(startPos int, paramAdapter ParamAdapter) func(int) string {

func fixNameForTemplate(name string) string {
//need to make sure that foo.bar and fooDOTbar don't collide, however unlikely
name = strings.Replace(name, "DOT", "DOTDOT", -1)
name = strings.Replace(name, ".", "DOT", -1)
name = strings.Replace(name, "DOLLAR", "DOLLARDOLLAR", -1)
name = strings.Replace(name, "$", "DOLLAR", -1)
name = strings.ReplaceAll(name, "DOT", "DOTDOT")
name = strings.ReplaceAll(name, ".", "DOT")
name = strings.ReplaceAll(name, "DOLLAR", "DOLLARDOLLAR")
name = strings.ReplaceAll(name, "$", "DOLLAR")
return name
}

Expand Down
3 changes: 1 addition & 2 deletions line_logger.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package proteus

import (
"bytes"
"log/slog"
"strings"
"testing"
Expand All @@ -12,7 +11,7 @@ func RegisterLineLogger(t *testing.T) func() []string {
t.Cleanup(func() {
slog.SetDefault(defaultLogger)
})
var buf bytes.Buffer
var buf strings.Builder
logger := slog.New(slog.NewTextHandler(&buf, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
Expand Down
4 changes: 2 additions & 2 deletions template_test.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package proteus

import (
"bytes"
"fmt"
"html/template"
"strings"
"testing"
)

Expand All @@ -19,7 +19,7 @@ func TestTemplate(t *testing.T) {
t.Error(err)
return
}
var b bytes.Buffer
var b strings.Builder

err = tmpl.Execute(&b, map[string]any{"vals": 3})
if err != nil {
Expand Down
Loading