DB 컬럼명으로 새로운 프레임워크의 dbio 에서 사용할 insert, update 구문을 만들어주는 간단한 기능을 go 의 template 를 이용해서 만들어보았습니다. go template 기능 처음 사용해서 급조한거라 코드는 지저분하지만 ...
package main
import (
"os"
"text/template"
"tzara/util"
"bufio"
)
// exec : % go run insert_mdm.go MDM_CNTI
type Query struct {
TableName string
Cols, Vals []string
Where string
}
func sliceToCamel(snake []string) []string {
camel := make([]string, 0, len(snake))
for _, a := range snake {
camel = append(camel, util.ToCamel(a))
}
return camel
}
func sliceUpdate(snake []string) []string {
camel := make([]string, 0, len(snake))
for _, a := range snake {
camel = append(camel, genSetStr(a))
}
return camel
}
func genSetStr(snake string) string {
return snake + " = @{" + util.ToCamel(snake) + "}"
}
func readCols(path string) ([]string) {
file, _ := os.Open(path)
defer file.Close()
var lines []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines
}
func main() {
if len(os.Args) < 2 {
panic("argument error")
}
tableName := os.Args[1]
colsArr := readCols("D:/" + tableName + ".txt")
insertSql := &Query{
TableName: tableName,
Cols: colsArr,
Vals: sliceToCamel(colsArr),
}
selectSql := &Query{
TableName: tableName,
Cols: colsArr,
Where: genSetStr(colsArr[0]),
}
updateSql := &Query{
TableName: tableName,
Cols: sliceUpdate(colsArr[1:]),
Where: genSetStr(colsArr[0]),
}
tmplInsertSql := `
INSERT INTO {{ .TableName }} (
{{- range $i, $e := .Cols }}
{{if $i}}, {{end}}{{$e}}
{{- end }}
) VALUES (
{{- range $i, $e := .Vals }}
{{if $i}}, {{end}}@{{"{"}}{{$e}}{{"}"}}
{{- end}}
)
`
tmplUpdateSql := `
UPDATE {{ .TableName }}
SET
{{- range $i, $e := .Cols }}
{{if $i}}, {{end}}{{$e}}
{{- end }}
WHERE
{{ .Where }}
`
tmplSelectSql := `
SELECT
{{- range $i, $e := .Cols }}
{{if $i}}, {{end}}{{$e}}
{{- end }}
FROM {{ .TableName }}
WHERE
{{ .Where }}
`
tmpl := template.Must(template.New("test").Parse(tmplInsertSql))
tmpl.Execute(os.Stdout, insertSql)
tmpl = template.Must(template.New("test").Parse(tmplUpdateSql))
tmpl.Execute(os.Stdout, updateSql)
tmpl = template.Must(template.New("test").Parse(tmplSelectSql))
tmpl.Execute(os.Stdout, selectSql)
}
'Slack 채널 정리' 카테고리의 다른 글
groovy - snake to camel (0) | 2019.11.26 |
---|---|
vim 에서 snake, camel 변환 (0) | 2019.11.26 |
여러 엑셀 파일의 sheet 통합하기 (0) | 2019.11.26 |
[Go]Snake to Camel (0) | 2019.11.26 |
파일명의 접두어 일괄 바꾸기 (0) | 2019.11.26 |