From f92d2ee5b52c153c7118cf78c16233bf55ea9e3d Mon Sep 17 00:00:00 2001 From: ak686 Date: Sun, 8 Aug 2021 20:45:29 +0300 Subject: [PATCH] Kropotov - go2hw07 --- codegen/go.mod | 5 ++++ codegen/go.sum | 4 ++++ codegen/main.go | 6 +++++ codegen/struct.go | 11 +++++++++ codegen/struct_easyjson.go | 16 +++++++++++++ codegen/struct_easyjson.go.tmp | 0 go.mod | 3 --- ref/go.mod | 3 +++ ref/main.go | 42 ++++++++++++++++++++++++++++++++++ 9 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 codegen/go.mod create mode 100644 codegen/go.sum create mode 100644 codegen/main.go create mode 100644 codegen/struct.go create mode 100644 codegen/struct_easyjson.go create mode 100644 codegen/struct_easyjson.go.tmp delete mode 100644 go.mod create mode 100644 ref/go.mod create mode 100644 ref/main.go diff --git a/codegen/go.mod b/codegen/go.mod new file mode 100644 index 0000000..46c669c --- /dev/null +++ b/codegen/go.mod @@ -0,0 +1,5 @@ +module hw07/codegen + +go 1.16 + +require github.com/mailru/easyjson v0.7.7 // indirect diff --git a/codegen/go.sum b/codegen/go.sum new file mode 100644 index 0000000..7707cb6 --- /dev/null +++ b/codegen/go.sum @@ -0,0 +1,4 @@ +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= diff --git a/codegen/main.go b/codegen/main.go new file mode 100644 index 0000000..37ff221 --- /dev/null +++ b/codegen/main.go @@ -0,0 +1,6 @@ +package main + + +func main() { + +} diff --git a/codegen/struct.go b/codegen/struct.go new file mode 100644 index 0000000..d0df7af --- /dev/null +++ b/codegen/struct.go @@ -0,0 +1,11 @@ +package main + +//easyjson:json + +type Product struct { + Id int64 + Name string + Code string + Price float64 + Status int +} diff --git a/codegen/struct_easyjson.go b/codegen/struct_easyjson.go new file mode 100644 index 0000000..afc60b2 --- /dev/null +++ b/codegen/struct_easyjson.go @@ -0,0 +1,16 @@ +// TEMPORARY AUTOGENERATED FILE: easyjson stub code to make the package +// compilable during generation. + +package main + +import ( + "github.com/mailru/easyjson/jwriter" + "github.com/mailru/easyjson/jlexer" +) + +func ( Product ) MarshalJSON() ([]byte, error) { return nil, nil } +func (* Product ) UnmarshalJSON([]byte) error { return nil } +func ( Product ) MarshalEasyJSON(w *jwriter.Writer) {} +func (* Product ) UnmarshalEasyJSON(l *jlexer.Lexer) {} + +type EasyJSON_exporter_Product *Product diff --git a/codegen/struct_easyjson.go.tmp b/codegen/struct_easyjson.go.tmp new file mode 100644 index 0000000..e69de29 diff --git a/go.mod b/go.mod deleted file mode 100644 index 04289a3..0000000 --- a/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/alex-kropotov/go2 - -go 1.16 diff --git a/ref/go.mod b/ref/go.mod new file mode 100644 index 0000000..aeb22ba --- /dev/null +++ b/ref/go.mod @@ -0,0 +1,3 @@ +module hw07/ref + +go 1.16 diff --git a/ref/main.go b/ref/main.go new file mode 100644 index 0000000..7fdd99e --- /dev/null +++ b/ref/main.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + "reflect" + "strings" +) + +func sqlConvert(sqlText string, params ...interface{}) (sqlTextResult string, paramsResult []interface{}) { + + paramsResult = []interface{}(nil) + sqlTextParts := strings.Split(sqlText, "?") + sqlTextResult = sqlTextParts[0] + for i, val := range params { + rv := reflect.ValueOf(val) + if rv.Kind() == reflect.Slice { + blank := "" + for j := 0; j < rv.Len(); j++ { + paramsResult = append(paramsResult, rv.Index(j).Interface()) + if j < rv.Len() -1 { + blank += "?," + } else { + blank += "?" + } + } + sqlTextResult = sqlTextResult + blank + sqlTextParts[i+1] + } else { + paramsResult = append(paramsResult, interface{}(val)) + sqlTextResult = sqlTextResult + "?" + sqlTextParts[i+1] + } + } + return sqlTextResult, paramsResult +} + +func main() { + a, b := sqlConvert("SELECT * FROM table WHERE deleted = ? AND id IN(?) AND count < ?", + false, []int{1, 6, 234}, 555 ) + fmt.Println(a, b) + // + // SELECT * FROM table WHERE deleted = ? AND id IN(?,?,?) AND count < ? [false 1 6 234 555] + // +} \ No newline at end of file