Skip to content

Commit a8fa316

Browse files
author
Dean Karn
committed
fix add & buffered pipe
1 parent d10b360 commit a8fa316

File tree

4 files changed

+40
-11
lines changed

4 files changed

+40
-11
lines changed

cmd/ksql/main.go

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package main
22

33
import (
4+
"bufio"
45
"fmt"
5-
"io/ioutil"
66
"os"
77

88
"github.com/go-playground/ksql"
9+
"github.com/go-playground/pkg/v5/bytes"
910
)
1011

1112
func main() {
@@ -25,21 +26,35 @@ func main() {
2526
var input []byte
2627

2728
if isPipe {
28-
input, err = ioutil.ReadAll(os.Stdin)
29+
w := bufio.NewWriter(os.Stdout)
30+
scanner := bufio.NewScanner(os.Stdin)
31+
scanner.Buffer(make([]byte, 0, 200*bytesext.KiB), 5*bytesext.MiB)
32+
for scanner.Scan() {
33+
result, err := ex.Calculate(scanner.Bytes())
34+
if err != nil {
35+
fmt.Fprintln(os.Stderr, "reading standard input:", err)
36+
return
37+
}
38+
if _, err = fmt.Fprintln(w, result); err != nil {
39+
fmt.Fprintln(os.Stderr, "writing standard output:", err)
40+
return
41+
}
42+
}
43+
if err := scanner.Err(); err != nil {
44+
fmt.Fprintln(os.Stderr, "reading standard input:", err)
45+
}
46+
if err = w.Flush(); err != nil {
47+
fmt.Fprintln(os.Stderr, "writing standard output:", err)
48+
}
49+
} else {
50+
input = []byte(args[1])
51+
result, err := ex.Calculate(input)
2952
if err != nil {
3053
usage()
3154
return
3255
}
33-
} else {
34-
input = []byte(args[1])
35-
}
36-
37-
result, err := ex.Calculate(input)
38-
if err != nil {
39-
usage()
40-
return
56+
fmt.Println(result)
4157
}
42-
fmt.Println(result)
4358
}
4459

4560
func usage() {

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99

1010
require (
1111
github.com/davecgh/go-spew v1.1.0 // indirect
12+
github.com/go-playground/pkg/v5 v5.5.0 // indirect
1213
github.com/pmezard/go-difflib v1.0.0 // indirect
1314
github.com/tidwall/match v1.1.1 // indirect
1415
github.com/tidwall/pretty v1.2.0 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
22
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/go-playground/pkg/v5 v5.5.0 h1:I+2yXV/GSH4MB/s2RXIlRnWZZdSgttS+MnAH4yRt8sE=
4+
github.com/go-playground/pkg/v5 v5.5.0/go.mod h1:TvZ2nNtNh6VfoNteY9ApA2BXt1ZwJliFZ4hzPAwLS9Y=
35
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
46
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
57
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=

parser.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,17 @@ func (a add) Calculate(src []byte) (any, error) {
390390
}
391391

392392
if reflect.TypeOf(left) != reflect.TypeOf(right) {
393+
if left != nil && right == nil {
394+
switch left.(type) {
395+
case string, float64:
396+
return left, nil
397+
}
398+
} else if right != nil && left == nil {
399+
switch right.(type) {
400+
case string, float64:
401+
return right, nil
402+
}
403+
}
393404
return nil, ErrUnsupportedTypeComparison{s: fmt.Sprintf("%s + %s", left, right)}
394405
}
395406

0 commit comments

Comments
 (0)