From 022a9b2de18ff47d57d839c0f836e44c98e00d60 Mon Sep 17 00:00:00 2001 From: devlights Date: Wed, 20 Dec 2023 08:33:51 +0000 Subject: [PATCH 1/8] Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09eff7e..d990336 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# sql-map +# sqlmap A small library that maps the results of Go's ```*sql.Rows``` to ```[]map[string]any```. From 01a4cff60c49303c20efe53d9739223668035fda Mon Sep 17 00:00:00 2001 From: devlights Date: Wed, 20 Dec 2023 10:26:41 +0000 Subject: [PATCH 2/8] Update --- .gitpod.yml | 1 + Taskfile.yml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.gitpod.yml b/.gitpod.yml index b0ceef0..bb86d59 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -11,6 +11,7 @@ tasks: go install github.com/go-delve/delve/cmd/dlv@latest && go install go.uber.org/nilaway/cmd/nilaway@latest && task download-db + task build command: go version diff --git a/Taskfile.yml b/Taskfile.yml index f280e41..8ec53a4 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -16,6 +16,9 @@ tasks: - mkdir testdb - mv "{{.DBFILE}}" testdb/ - rm -f "{{.ZIPFILE}}" + build: + cmds: + - go build test: cmds: - go test -v ./... From 2eecd361a1fc937cd717e8722d8d5c9df7142dcf Mon Sep 17 00:00:00 2001 From: devlights Date: Wed, 20 Dec 2023 10:29:04 +0000 Subject: [PATCH 3/8] Update --- .gitpod.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index bb86d59..e2e91a5 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -10,8 +10,7 @@ tasks: go install github.com/mgechev/revive@latest && go install github.com/go-delve/delve/cmd/dlv@latest && go install go.uber.org/nilaway/cmd/nilaway@latest && - task download-db - task build + task download-db build command: go version From 7fa6ae30ffe8695c787f148cdb01835bd918f3f4 Mon Sep 17 00:00:00 2001 From: devlights Date: Wed, 20 Dec 2023 10:44:13 +0000 Subject: [PATCH 4/8] Update README --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index d990336..3eeba1f 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,25 @@ go get github.com/devlights/sqlmap@latest ## Usage ```go +var ( + db *sql.DB + err error +) + db, _ := sql.Open("sqlite", "path/to/db") defer db.Close() +var ( + rows *sql.Rows +) + rows, _ := db.Query("SELECT * FROM xxxxx") defer rows.Close() +var ( + mapRows []map[string]any +) + mapRows, err := sqlmap.MapRows(rows) if err != nil { return err From 9d86bfef09db6610b68233f22aed1516504d6dbe Mon Sep 17 00:00:00 2001 From: devlights Date: Wed, 20 Dec 2023 20:08:00 +0900 Subject: [PATCH 5/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3eeba1f..ec68e74 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # sqlmap -A small library that maps the results of Go's ```*sql.Rows``` to ```[]map[string]any```. +A small library that maps the results of ```*sql.Rows``` to ```[]map[string]any```. ## Install From a178f0f127f9b506b2c59adfc3b2123f48d71775 Mon Sep 17 00:00:00 2001 From: devlights Date: Mon, 22 Jan 2024 08:38:55 +0000 Subject: [PATCH 6/8] Update --- README.md | 11 ++++++++++- maprows.go | 10 ++++++---- maprows_test.go | 7 ++++++- row.go | 21 +++++++++++++++++++++ 4 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 row.go diff --git a/README.md b/README.md index ec68e74..19caad5 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ rows, _ := db.Query("SELECT * FROM xxxxx") defer rows.Close() var ( - mapRows []map[string]any + mapRows []RowView ) mapRows, err := sqlmap.MapRows(rows) @@ -36,4 +36,13 @@ if err != nil { } fmt.Println(mapRows) + +for _, v := range m { + name, err := v.Get("Name") + if err != nil { + t.Error(err) + } + + fmt.Printf("[row] %v\n", name) +} ``` diff --git a/maprows.go b/maprows.go index 77c100e..572142c 100644 --- a/maprows.go +++ b/maprows.go @@ -2,11 +2,13 @@ package sqlmap import "database/sql" -// MapRows maps the data in the given *sql.Rows to []map[string]any. +// MapRows maps the data in the given *sql.Rows to []RowView. +// +// RowView is based on map[string]any. // // This code is based on the ideas presented at the following URL: // - https://kylewbanks.com/blog/query-result-to-map-in-golang -func MapRows(rows *sql.Rows) ([]map[string]any, error) { +func MapRows(rows *sql.Rows) ([]RowView, error) { var ( cols []string err error @@ -18,7 +20,7 @@ func MapRows(rows *sql.Rows) ([]map[string]any, error) { } var ( - result = make([]map[string]any, 0) + result = make([]RowView, 0) ) for rows.Next() { @@ -37,7 +39,7 @@ func MapRows(rows *sql.Rows) ([]map[string]any, error) { } var ( - m = make(map[string]any) + m = make(RowView) ) for i, name := range cols { diff --git a/maprows_test.go b/maprows_test.go index 8fea65c..e8b4f70 100644 --- a/maprows_test.go +++ b/maprows_test.go @@ -40,6 +40,11 @@ func TestMapRows(t *testing.T) { } for _, v := range m { - t.Logf("[row] %v", v) + name, err := v.Get("Name") + if err != nil { + t.Error(err) + } + + t.Logf("[row] %v", name) } } diff --git a/row.go b/row.go new file mode 100644 index 0000000..de1983f --- /dev/null +++ b/row.go @@ -0,0 +1,21 @@ +package sqlmap + +import "errors" + +var ( + // ErrNotFound is raised when the specified column name does not exist. + ErrNotFound = errors.New("column name is not found") +) + +// RowView represents a row-view in the database. +type RowView map[string]any + +// Get retrieves the value of a given column name. +func (me RowView) Get(col string) (any, error) { + v, ok := me[col] + if !ok { + return nil, ErrNotFound + } + + return v, nil +} From 032e34ad6dba93cf2911555642528bef3bc6b4f0 Mon Sep 17 00:00:00 2001 From: devlights Date: Thu, 16 May 2024 09:50:47 +0000 Subject: [PATCH 7/8] Update Go version to 1.22.3 --- .gitpod.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index fce92f7..7cb7087 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -1,6 +1,6 @@ FROM gitpod/workspace-base:latest -ENV GO_VERSION=1.21.5 +ENV GO_VERSION=1.22.3 # For ref, see: https://github.com/gitpod-io/workspace-images/blob/61df77aad71689504112e1087bb7e26d45a43d10/chunks/lang-go/Dockerfile#L10 ENV GOPATH=$HOME/go-packages From 4657b18fa8360553b50d642d7ebef4b834e8fba3 Mon Sep 17 00:00:00 2001 From: devlights Date: Thu, 16 May 2024 10:07:44 +0000 Subject: [PATCH 8/8] Update go.mod --- go.mod | 19 +++++++++--------- go.sum | 61 +++++++++++++++++++++++++++++++++++++++------------------- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index 0b187ff..312ecae 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,18 @@ module github.com/devlights/sqlmap -go 1.21.5 +go 1.22 -require github.com/glebarez/go-sqlite v1.21.2 +require github.com/glebarez/go-sqlite v1.22.0 require ( github.com/dustin/go-humanize v1.0.1 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - golang.org/x/sys v0.7.0 // indirect - modernc.org/libc v1.22.5 // indirect - modernc.org/mathutil v1.5.0 // indirect - modernc.org/memory v1.5.0 // indirect - modernc.org/sqlite v1.23.1 // indirect + golang.org/x/sys v0.20.0 // indirect + modernc.org/libc v1.50.6 // indirect + modernc.org/mathutil v1.6.0 // indirect + modernc.org/memory v1.8.0 // indirect + modernc.org/sqlite v1.29.9 // indirect ) diff --git a/go.sum b/go.sum index 2f9c930..070caae 100644 --- a/go.sum +++ b/go.sum @@ -1,24 +1,45 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= -github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ= +github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc= +github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= +github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= -modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= -modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM= -modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +modernc.org/cc/v4 v4.21.2 h1:dycHFB/jDc3IyacKipCNSDrjIC0Lm1hyoWOZTRR20Lk= +modernc.org/cc/v4 v4.21.2/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.17.7 h1:+MG+Np7uYtsuPvtoH3KtZ1+pqNiJAOqqqVIxggE1iIo= +modernc.org/ccgo/v4 v4.17.7/go.mod h1:x87xuLLXuJv3Nn5ULTUqJn/HsTMMMiT1Eavo6rz1NiY= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/libc v1.50.6 h1:72NPEFMyKP01RJrKXS2eLXv35UklKqlJZ1b9P7gSo6I= +modernc.org/libc v1.50.6/go.mod h1:8lr2m1THY5Z3ikGyUc3JhLEQg1oaIBz/AQixw8/eksQ= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.29.9 h1:9RhNMklxJs+1596GNuAX+O/6040bvOwacTxuFcRuQow= +modernc.org/sqlite v1.29.9/go.mod h1:ItX2a1OVGgNsFh6Dv60JQvGfJfTPHPVpV6DF59akYOA= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=