This commit is contained in:
parent
498ad25ccd
commit
d4db887d5a
25
go.mod
25
go.mod
@ -1,27 +1,24 @@
|
|||||||
module git.paulbsd.com/paulbsd/coronafana
|
module git.paulbsd.com/paulbsd/coronafana
|
||||||
|
|
||||||
go 1.15
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cretz/bine v0.1.0
|
github.com/cretz/bine v0.1.0
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/denisenkom/go-mssqldb v0.9.0 // indirect
|
github.com/denisenkom/go-mssqldb v0.9.0 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.6.0
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20210406100015-1e088ea4ee04 // indirect
|
||||||
github.com/jinzhu/gorm v1.9.16
|
github.com/jinzhu/gorm v1.9.16
|
||||||
github.com/jinzhu/now v1.1.1 // indirect
|
github.com/jinzhu/now v1.1.2 // indirect
|
||||||
github.com/jmoiron/sqlx v1.2.0
|
github.com/jmoiron/sqlx v1.3.1
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/lib/pq v1.10.0 // indirect
|
||||||
github.com/lib/pq v1.9.0 // indirect
|
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
|
||||||
github.com/smartystreets/assertions v1.2.0 // indirect
|
github.com/smartystreets/assertions v1.2.0 // indirect
|
||||||
github.com/smartystreets/goconvey v1.6.4 // indirect
|
github.com/smartystreets/goconvey v1.6.4 // indirect
|
||||||
github.com/stretchr/testify v1.6.1 // indirect
|
github.com/stretchr/testify v1.7.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c // indirect
|
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 // indirect
|
||||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb // indirect
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect
|
||||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435 // indirect
|
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 // indirect
|
||||||
google.golang.org/appengine v1.4.0 // indirect
|
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
|
||||||
gopkg.in/ini.v1 v1.62.0
|
gopkg.in/ini.v1 v1.62.0
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||||
)
|
)
|
||||||
|
84
go.sum
84
go.sum
@ -1,112 +1,80 @@
|
|||||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
|
||||||
github.com/cretz/bine v0.1.0 h1:1/fvhLE+fk0bPzjdO5Ci+0ComYxEMuB1JhM4X5skT3g=
|
github.com/cretz/bine v0.1.0 h1:1/fvhLE+fk0bPzjdO5Ci+0ComYxEMuB1JhM4X5skT3g=
|
||||||
github.com/cretz/bine v0.1.0/go.mod h1:6PF6fWAvYtwjRGkAuDEJeWNOv3a2hUouSP/yRYXmvHw=
|
github.com/cretz/bine v0.1.0/go.mod h1:6PF6fWAvYtwjRGkAuDEJeWNOv3a2hUouSP/yRYXmvHw=
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
|
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||||
github.com/denisenkom/go-mssqldb v0.9.0 h1:RSohk2RsiZqLZ0zCjtfn3S4Gp4exhpBWHyQ7D0yGjAk=
|
github.com/denisenkom/go-mssqldb v0.9.0 h1:RSohk2RsiZqLZ0zCjtfn3S4Gp4exhpBWHyQ7D0yGjAk=
|
||||||
github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
||||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
|
||||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
|
||||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
|
||||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
|
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
|
||||||
|
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
|
github.com/gopherjs/gopherjs v0.0.0-20210406100015-1e088ea4ee04 h1:Enykqupm0u6qiUZAc+SiFkMJVqt4o8knNcKJu8NdlJ0=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20210406100015-1e088ea4ee04/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q=
|
|
||||||
github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs=
|
|
||||||
github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
|
github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
|
||||||
github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
|
github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
|
||||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
|
|
||||||
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E=
|
github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI=
|
||||||
github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
|
github.com/jmoiron/sqlx v1.3.1 h1:aLN7YINNZ7cYOPK3QC83dbM6KT0NMqVMw961TqrejlE=
|
||||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
|
|
||||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
|
||||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
|
||||||
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
|
||||||
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8=
|
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.0 h1:Zx5DJFEYQXio93kgXnQ09fXNiUKsqv4OUEu2UtGcB1E=
|
||||||
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
|
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
|
||||||
github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
|
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs=
|
github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs=
|
||||||
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
|
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
|
||||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd h1:GGJVjV8waZKRHrgwvtH66z9ZGVurTD1MT0n1Bb+q4aM=
|
|
||||||
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w=
|
||||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c h1:9HhBz5L/UjnK9XLtiZhYAdue5BVKep3PMmS2LuPDt8k=
|
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
|
||||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
|
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
|
||||||
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435 h1:25AvDqqB9PrNqj1FLf2/70I4W0L19qqoaFq3gjNwbKk=
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
|
||||||
gopkg.in/ini.v1 v1.54.0 h1:oM5ElzbIi7gwLnNbPX2M25ED1vSAK3B6dex50eS/6Fs=
|
|
||||||
gopkg.in/ini.v1 v1.54.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
|
||||||
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
|
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
|
||||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
129
vendor/github.com/go-sql-driver/mysql/.travis.yml
generated
vendored
129
vendor/github.com/go-sql-driver/mysql/.travis.yml
generated
vendored
@ -1,129 +0,0 @@
|
|||||||
sudo: false
|
|
||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.10.x
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
|
||||||
- 1.13.x
|
|
||||||
- master
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- echo -e "[server]\ninnodb_log_file_size=256MB\ninnodb_buffer_pool_size=512MB\nmax_allowed_packet=16MB" | sudo tee -a /etc/mysql/my.cnf
|
|
||||||
- sudo service mysql restart
|
|
||||||
- .travis/wait_mysql.sh
|
|
||||||
- mysql -e 'create database gotest;'
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- env: DB=MYSQL8
|
|
||||||
sudo: required
|
|
||||||
dist: trusty
|
|
||||||
go: 1.10.x
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
before_install:
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
- docker pull mysql:8.0
|
|
||||||
- docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret
|
|
||||||
mysql:8.0 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1
|
|
||||||
- cp .travis/docker.cnf ~/.my.cnf
|
|
||||||
- .travis/wait_mysql.sh
|
|
||||||
before_script:
|
|
||||||
- export MYSQL_TEST_USER=gotest
|
|
||||||
- export MYSQL_TEST_PASS=secret
|
|
||||||
- export MYSQL_TEST_ADDR=127.0.0.1:3307
|
|
||||||
- export MYSQL_TEST_CONCURRENT=1
|
|
||||||
|
|
||||||
- env: DB=MYSQL57
|
|
||||||
sudo: required
|
|
||||||
dist: trusty
|
|
||||||
go: 1.10.x
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
before_install:
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
- docker pull mysql:5.7
|
|
||||||
- docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret
|
|
||||||
mysql:5.7 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1
|
|
||||||
- cp .travis/docker.cnf ~/.my.cnf
|
|
||||||
- .travis/wait_mysql.sh
|
|
||||||
before_script:
|
|
||||||
- export MYSQL_TEST_USER=gotest
|
|
||||||
- export MYSQL_TEST_PASS=secret
|
|
||||||
- export MYSQL_TEST_ADDR=127.0.0.1:3307
|
|
||||||
- export MYSQL_TEST_CONCURRENT=1
|
|
||||||
|
|
||||||
- env: DB=MARIA55
|
|
||||||
sudo: required
|
|
||||||
dist: trusty
|
|
||||||
go: 1.10.x
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
before_install:
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
- docker pull mariadb:5.5
|
|
||||||
- docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret
|
|
||||||
mariadb:5.5 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1
|
|
||||||
- cp .travis/docker.cnf ~/.my.cnf
|
|
||||||
- .travis/wait_mysql.sh
|
|
||||||
before_script:
|
|
||||||
- export MYSQL_TEST_USER=gotest
|
|
||||||
- export MYSQL_TEST_PASS=secret
|
|
||||||
- export MYSQL_TEST_ADDR=127.0.0.1:3307
|
|
||||||
- export MYSQL_TEST_CONCURRENT=1
|
|
||||||
|
|
||||||
- env: DB=MARIA10_1
|
|
||||||
sudo: required
|
|
||||||
dist: trusty
|
|
||||||
go: 1.10.x
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
before_install:
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
- docker pull mariadb:10.1
|
|
||||||
- docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret
|
|
||||||
mariadb:10.1 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1
|
|
||||||
- cp .travis/docker.cnf ~/.my.cnf
|
|
||||||
- .travis/wait_mysql.sh
|
|
||||||
before_script:
|
|
||||||
- export MYSQL_TEST_USER=gotest
|
|
||||||
- export MYSQL_TEST_PASS=secret
|
|
||||||
- export MYSQL_TEST_ADDR=127.0.0.1:3307
|
|
||||||
- export MYSQL_TEST_CONCURRENT=1
|
|
||||||
|
|
||||||
- os: osx
|
|
||||||
osx_image: xcode10.1
|
|
||||||
addons:
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- mysql
|
|
||||||
update: true
|
|
||||||
go: 1.12.x
|
|
||||||
before_install:
|
|
||||||
- go get golang.org/x/tools/cmd/cover
|
|
||||||
- go get github.com/mattn/goveralls
|
|
||||||
before_script:
|
|
||||||
- echo -e "[server]\ninnodb_log_file_size=256MB\ninnodb_buffer_pool_size=512MB\nmax_allowed_packet=16MB\nlocal_infile=1" >> /usr/local/etc/my.cnf
|
|
||||||
- mysql.server start
|
|
||||||
- mysql -uroot -e 'CREATE USER gotest IDENTIFIED BY "secret"'
|
|
||||||
- mysql -uroot -e 'GRANT ALL ON *.* TO gotest'
|
|
||||||
- mysql -uroot -e 'create database gotest;'
|
|
||||||
- export MYSQL_TEST_USER=gotest
|
|
||||||
- export MYSQL_TEST_PASS=secret
|
|
||||||
- export MYSQL_TEST_ADDR=127.0.0.1:3306
|
|
||||||
- export MYSQL_TEST_CONCURRENT=1
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go test -v -covermode=count -coverprofile=coverage.out
|
|
||||||
- go vet ./...
|
|
||||||
- .travis/gofmt.sh
|
|
||||||
after_script:
|
|
||||||
- $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci
|
|
12
vendor/github.com/go-sql-driver/mysql/AUTHORS
generated
vendored
12
vendor/github.com/go-sql-driver/mysql/AUTHORS
generated
vendored
@ -13,11 +13,15 @@
|
|||||||
|
|
||||||
Aaron Hopkins <go-sql-driver at die.net>
|
Aaron Hopkins <go-sql-driver at die.net>
|
||||||
Achille Roussel <achille.roussel at gmail.com>
|
Achille Roussel <achille.roussel at gmail.com>
|
||||||
|
Alex Snast <alexsn at fb.com>
|
||||||
Alexey Palazhchenko <alexey.palazhchenko at gmail.com>
|
Alexey Palazhchenko <alexey.palazhchenko at gmail.com>
|
||||||
Andrew Reid <andrew.reid at tixtrack.com>
|
Andrew Reid <andrew.reid at tixtrack.com>
|
||||||
|
Animesh Ray <mail.rayanimesh at gmail.com>
|
||||||
Arne Hormann <arnehormann at gmail.com>
|
Arne Hormann <arnehormann at gmail.com>
|
||||||
|
Ariel Mashraki <ariel at mashraki.co.il>
|
||||||
Asta Xie <xiemengjun at gmail.com>
|
Asta Xie <xiemengjun at gmail.com>
|
||||||
Bulat Gaifullin <gaifullinbf at gmail.com>
|
Bulat Gaifullin <gaifullinbf at gmail.com>
|
||||||
|
Caine Jette <jette at alum.mit.edu>
|
||||||
Carlos Nieto <jose.carlos at menteslibres.net>
|
Carlos Nieto <jose.carlos at menteslibres.net>
|
||||||
Chris Moos <chris at tech9computers.com>
|
Chris Moos <chris at tech9computers.com>
|
||||||
Craig Wilson <craiggwilson at gmail.com>
|
Craig Wilson <craiggwilson at gmail.com>
|
||||||
@ -52,6 +56,7 @@ Julien Schmidt <go-sql-driver at julienschmidt.com>
|
|||||||
Justin Li <jli at j-li.net>
|
Justin Li <jli at j-li.net>
|
||||||
Justin Nuß <nuss.justin at gmail.com>
|
Justin Nuß <nuss.justin at gmail.com>
|
||||||
Kamil Dziedzic <kamil at klecza.pl>
|
Kamil Dziedzic <kamil at klecza.pl>
|
||||||
|
Kei Kamikawa <x00.x7f.x86 at gmail.com>
|
||||||
Kevin Malachowski <kevin at chowski.com>
|
Kevin Malachowski <kevin at chowski.com>
|
||||||
Kieron Woodhouse <kieron.woodhouse at infosum.com>
|
Kieron Woodhouse <kieron.woodhouse at infosum.com>
|
||||||
Lennart Rudolph <lrudolph at hmc.edu>
|
Lennart Rudolph <lrudolph at hmc.edu>
|
||||||
@ -74,20 +79,26 @@ Reed Allman <rdallman10 at gmail.com>
|
|||||||
Richard Wilkes <wilkes at me.com>
|
Richard Wilkes <wilkes at me.com>
|
||||||
Robert Russell <robert at rrbrussell.com>
|
Robert Russell <robert at rrbrussell.com>
|
||||||
Runrioter Wung <runrioter at gmail.com>
|
Runrioter Wung <runrioter at gmail.com>
|
||||||
|
Sho Iizuka <sho.i518 at gmail.com>
|
||||||
|
Sho Ikeda <suicaicoca at gmail.com>
|
||||||
Shuode Li <elemount at qq.com>
|
Shuode Li <elemount at qq.com>
|
||||||
Simon J Mudd <sjmudd at pobox.com>
|
Simon J Mudd <sjmudd at pobox.com>
|
||||||
Soroush Pour <me at soroushjp.com>
|
Soroush Pour <me at soroushjp.com>
|
||||||
Stan Putrya <root.vagner at gmail.com>
|
Stan Putrya <root.vagner at gmail.com>
|
||||||
Stanley Gunawan <gunawan.stanley at gmail.com>
|
Stanley Gunawan <gunawan.stanley at gmail.com>
|
||||||
Steven Hartland <steven.hartland at multiplay.co.uk>
|
Steven Hartland <steven.hartland at multiplay.co.uk>
|
||||||
|
Tan Jinhua <312841925 at qq.com>
|
||||||
Thomas Wodarek <wodarekwebpage at gmail.com>
|
Thomas Wodarek <wodarekwebpage at gmail.com>
|
||||||
Tim Ruffles <timruffles at gmail.com>
|
Tim Ruffles <timruffles at gmail.com>
|
||||||
Tom Jenkinson <tom at tjenkinson.me>
|
Tom Jenkinson <tom at tjenkinson.me>
|
||||||
Vladimir Kovpak <cn007b at gmail.com>
|
Vladimir Kovpak <cn007b at gmail.com>
|
||||||
|
Vladyslav Zhelezniak <zhvladi at gmail.com>
|
||||||
Xiangyu Hu <xiangyu.hu at outlook.com>
|
Xiangyu Hu <xiangyu.hu at outlook.com>
|
||||||
Xiaobing Jiang <s7v7nislands at gmail.com>
|
Xiaobing Jiang <s7v7nislands at gmail.com>
|
||||||
Xiuming Chen <cc at cxm.cc>
|
Xiuming Chen <cc at cxm.cc>
|
||||||
|
Xuehong Chan <chanxuehong at gmail.com>
|
||||||
Zhenye Xie <xiezhenye at gmail.com>
|
Zhenye Xie <xiezhenye at gmail.com>
|
||||||
|
Zhixin Wen <john.wenzhixin at gmail.com>
|
||||||
|
|
||||||
# Organizations
|
# Organizations
|
||||||
|
|
||||||
@ -103,3 +114,4 @@ Multiplay Ltd.
|
|||||||
Percona LLC
|
Percona LLC
|
||||||
Pivotal Inc.
|
Pivotal Inc.
|
||||||
Stripe Inc.
|
Stripe Inc.
|
||||||
|
Zendesk Inc.
|
||||||
|
26
vendor/github.com/go-sql-driver/mysql/CHANGELOG.md
generated
vendored
26
vendor/github.com/go-sql-driver/mysql/CHANGELOG.md
generated
vendored
@ -1,3 +1,29 @@
|
|||||||
|
## Version 1.6 (2021-04-01)
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Migrate the CI service from travis-ci to GitHub Actions (#1176, #1183, #1190)
|
||||||
|
- `NullTime` is deprecated (#960, #1144)
|
||||||
|
- Reduce allocations when building SET command (#1111)
|
||||||
|
- Performance improvement for time formatting (#1118)
|
||||||
|
- Performance improvement for time parsing (#1098, #1113)
|
||||||
|
|
||||||
|
New Features:
|
||||||
|
|
||||||
|
- Implement `driver.Validator` interface (#1106, #1174)
|
||||||
|
- Support returning `uint64` from `Valuer` in `ConvertValue` (#1143)
|
||||||
|
- Add `json.RawMessage` for converter and prepared statement (#1059)
|
||||||
|
- Interpolate `json.RawMessage` as `string` (#1058)
|
||||||
|
- Implements `CheckNamedValue` (#1090)
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
|
||||||
|
- Stop rounding times (#1121, #1172)
|
||||||
|
- Put zero filler into the SSL handshake packet (#1066)
|
||||||
|
- Fix checking cancelled connections back into the connection pool (#1095)
|
||||||
|
- Fix remove last 0 byte for mysql_old_password when password is empty (#1133)
|
||||||
|
|
||||||
|
|
||||||
## Version 1.5 (2020-01-07)
|
## Version 1.5 (2020-01-07)
|
||||||
|
|
||||||
Changes:
|
Changes:
|
||||||
|
43
vendor/github.com/go-sql-driver/mysql/README.md
generated
vendored
43
vendor/github.com/go-sql-driver/mysql/README.md
generated
vendored
@ -35,7 +35,7 @@ A MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) pac
|
|||||||
* Supports queries larger than 16MB
|
* Supports queries larger than 16MB
|
||||||
* Full [`sql.RawBytes`](https://golang.org/pkg/database/sql/#RawBytes) support.
|
* Full [`sql.RawBytes`](https://golang.org/pkg/database/sql/#RawBytes) support.
|
||||||
* Intelligent `LONG DATA` handling in prepared statements
|
* Intelligent `LONG DATA` handling in prepared statements
|
||||||
* Secure `LOAD DATA LOCAL INFILE` support with file Whitelisting and `io.Reader` support
|
* Secure `LOAD DATA LOCAL INFILE` support with file allowlisting and `io.Reader` support
|
||||||
* Optional `time.Time` parsing
|
* Optional `time.Time` parsing
|
||||||
* Optional placeholder interpolation
|
* Optional placeholder interpolation
|
||||||
|
|
||||||
@ -56,15 +56,37 @@ Make sure [Git is installed](https://git-scm.com/downloads) on your machine and
|
|||||||
_Go MySQL Driver_ is an implementation of Go's `database/sql/driver` interface. You only need to import the driver and can use the full [`database/sql`](https://golang.org/pkg/database/sql/) API then.
|
_Go MySQL Driver_ is an implementation of Go's `database/sql/driver` interface. You only need to import the driver and can use the full [`database/sql`](https://golang.org/pkg/database/sql/) API then.
|
||||||
|
|
||||||
Use `mysql` as `driverName` and a valid [DSN](#dsn-data-source-name) as `dataSourceName`:
|
Use `mysql` as `driverName` and a valid [DSN](#dsn-data-source-name) as `dataSourceName`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import "database/sql"
|
import (
|
||||||
import _ "github.com/go-sql-driver/mysql"
|
"database/sql"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
_ "github.com/go-sql-driver/mysql"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ...
|
||||||
|
|
||||||
db, err := sql.Open("mysql", "user:password@/dbname")
|
db, err := sql.Open("mysql", "user:password@/dbname")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
// See "Important settings" section.
|
||||||
|
db.SetConnMaxLifetime(time.Minute * 3)
|
||||||
|
db.SetMaxOpenConns(10)
|
||||||
|
db.SetMaxIdleConns(10)
|
||||||
```
|
```
|
||||||
|
|
||||||
[Examples are available in our Wiki](https://github.com/go-sql-driver/mysql/wiki/Examples "Go-MySQL-Driver Examples").
|
[Examples are available in our Wiki](https://github.com/go-sql-driver/mysql/wiki/Examples "Go-MySQL-Driver Examples").
|
||||||
|
|
||||||
|
### Important settings
|
||||||
|
|
||||||
|
`db.SetConnMaxLifetime()` is required to ensure connections are closed by the driver safely before connection is closed by MySQL server, OS, or other middlewares. Since some middlewares close idle connections by 5 minutes, we recommend timeout shorter than 5 minutes. This setting helps load balancing and changing system variables too.
|
||||||
|
|
||||||
|
`db.SetMaxOpenConns()` is highly recommended to limit the number of connection used by the application. There is no recommended limit number because it depends on application and MySQL server.
|
||||||
|
|
||||||
|
`db.SetMaxIdleConns()` is recommended to be set same to (or greater than) `db.SetMaxOpenConns()`. When it is smaller than `SetMaxOpenConns()`, connections can be opened and closed very frequently than you expect. Idle connections can be closed by the `db.SetConnMaxLifetime()`. If you want to close idle connections more rapidly, you can use `db.SetConnMaxIdleTime()` since Go 1.15.
|
||||||
|
|
||||||
|
|
||||||
### DSN (Data Source Name)
|
### DSN (Data Source Name)
|
||||||
|
|
||||||
@ -122,7 +144,7 @@ Valid Values: true, false
|
|||||||
Default: false
|
Default: false
|
||||||
```
|
```
|
||||||
|
|
||||||
`allowAllFiles=true` disables the file Whitelist for `LOAD DATA LOCAL INFILE` and allows *all* files.
|
`allowAllFiles=true` disables the file allowlist for `LOAD DATA LOCAL INFILE` and allows *all* files.
|
||||||
[*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html)
|
[*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html)
|
||||||
|
|
||||||
##### `allowCleartextPasswords`
|
##### `allowCleartextPasswords`
|
||||||
@ -133,7 +155,7 @@ Valid Values: true, false
|
|||||||
Default: false
|
Default: false
|
||||||
```
|
```
|
||||||
|
|
||||||
`allowCleartextPasswords=true` allows using the [cleartext client side plugin](http://dev.mysql.com/doc/en/cleartext-authentication-plugin.html) if required by an account, such as one defined with the [PAM authentication plugin](http://dev.mysql.com/doc/en/pam-authentication-plugin.html). Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include [TLS / SSL](#tls), IPsec, or a private network.
|
`allowCleartextPasswords=true` allows using the [cleartext client side plugin](https://dev.mysql.com/doc/en/cleartext-pluggable-authentication.html) if required by an account, such as one defined with the [PAM authentication plugin](http://dev.mysql.com/doc/en/pam-authentication-plugin.html). Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include [TLS / SSL](#tls), IPsec, or a private network.
|
||||||
|
|
||||||
##### `allowNativePasswords`
|
##### `allowNativePasswords`
|
||||||
|
|
||||||
@ -230,7 +252,7 @@ Default: false
|
|||||||
|
|
||||||
If `interpolateParams` is true, placeholders (`?`) in calls to `db.Query()` and `db.Exec()` are interpolated into a single query string with given parameters. This reduces the number of roundtrips, since the driver has to prepare a statement, execute it with given parameters and close the statement again with `interpolateParams=false`.
|
If `interpolateParams` is true, placeholders (`?`) in calls to `db.Query()` and `db.Exec()` are interpolated into a single query string with given parameters. This reduces the number of roundtrips, since the driver has to prepare a statement, execute it with given parameters and close the statement again with `interpolateParams=false`.
|
||||||
|
|
||||||
*This can not be used together with the multibyte encodings BIG5, CP932, GB2312, GBK or SJIS. These are blacklisted as they may [introduce a SQL injection vulnerability](http://stackoverflow.com/a/12118602/3430118)!*
|
*This can not be used together with the multibyte encodings BIG5, CP932, GB2312, GBK or SJIS. These are rejected as they may [introduce a SQL injection vulnerability](http://stackoverflow.com/a/12118602/3430118)!*
|
||||||
|
|
||||||
##### `loc`
|
##### `loc`
|
||||||
|
|
||||||
@ -376,7 +398,7 @@ Rules:
|
|||||||
Examples:
|
Examples:
|
||||||
* `autocommit=1`: `SET autocommit=1`
|
* `autocommit=1`: `SET autocommit=1`
|
||||||
* [`time_zone=%27Europe%2FParis%27`](https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html): `SET time_zone='Europe/Paris'`
|
* [`time_zone=%27Europe%2FParis%27`](https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html): `SET time_zone='Europe/Paris'`
|
||||||
* [`tx_isolation=%27REPEATABLE-READ%27`](https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_tx_isolation): `SET tx_isolation='REPEATABLE-READ'`
|
* [`transaction_isolation=%27REPEATABLE-READ%27`](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_isolation): `SET transaction_isolation='REPEATABLE-READ'`
|
||||||
|
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
@ -445,7 +467,7 @@ For this feature you need direct access to the package. Therefore you must chang
|
|||||||
import "github.com/go-sql-driver/mysql"
|
import "github.com/go-sql-driver/mysql"
|
||||||
```
|
```
|
||||||
|
|
||||||
Files must be whitelisted by registering them with `mysql.RegisterLocalFile(filepath)` (recommended) or the Whitelist check must be deactivated by using the DSN parameter `allowAllFiles=true` ([*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html)).
|
Files must be explicitly allowed by registering them with `mysql.RegisterLocalFile(filepath)` (recommended) or the allowlist check must be deactivated by using the DSN parameter `allowAllFiles=true` ([*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html)).
|
||||||
|
|
||||||
To use a `io.Reader` a handler function must be registered with `mysql.RegisterReaderHandler(name, handler)` which returns a `io.Reader` or `io.ReadCloser`. The Reader is available with the filepath `Reader::<name>` then. Choose different names for different handlers and `DeregisterReaderHandler` when you don't need it anymore.
|
To use a `io.Reader` a handler function must be registered with `mysql.RegisterReaderHandler(name, handler)` which returns a `io.Reader` or `io.ReadCloser`. The Reader is available with the filepath `Reader::<name>` then. Choose different names for different handlers and `DeregisterReaderHandler` when you don't need it anymore.
|
||||||
|
|
||||||
@ -459,8 +481,6 @@ However, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` v
|
|||||||
|
|
||||||
**Caution:** As of Go 1.1, this makes `time.Time` the only variable type you can scan `DATE` and `DATETIME` values into. This breaks for example [`sql.RawBytes` support](https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes).
|
**Caution:** As of Go 1.1, this makes `time.Time` the only variable type you can scan `DATE` and `DATETIME` values into. This breaks for example [`sql.RawBytes` support](https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes).
|
||||||
|
|
||||||
Alternatively you can use the [`NullTime`](https://godoc.org/github.com/go-sql-driver/mysql#NullTime) type as the scan destination, which works with both `time.Time` and `string` / `[]byte`.
|
|
||||||
|
|
||||||
|
|
||||||
### Unicode support
|
### Unicode support
|
||||||
Since version 1.5 Go-MySQL-Driver automatically uses the collation ` utf8mb4_general_ci` by default.
|
Since version 1.5 Go-MySQL-Driver automatically uses the collation ` utf8mb4_general_ci` by default.
|
||||||
@ -477,7 +497,7 @@ To run the driver tests you may need to adjust the configuration. See the [Testi
|
|||||||
Go-MySQL-Driver is not feature-complete yet. Your help is very appreciated.
|
Go-MySQL-Driver is not feature-complete yet. Your help is very appreciated.
|
||||||
If you want to contribute, you can work on an [open issue](https://github.com/go-sql-driver/mysql/issues?state=open) or review a [pull request](https://github.com/go-sql-driver/mysql/pulls).
|
If you want to contribute, you can work on an [open issue](https://github.com/go-sql-driver/mysql/issues?state=open) or review a [pull request](https://github.com/go-sql-driver/mysql/pulls).
|
||||||
|
|
||||||
See the [Contribution Guidelines](https://github.com/go-sql-driver/mysql/blob/master/CONTRIBUTING.md) for details.
|
See the [Contribution Guidelines](https://github.com/go-sql-driver/mysql/blob/master/.github/CONTRIBUTING.md) for details.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
@ -498,4 +518,3 @@ Please read the [MPL 2.0 FAQ](https://www.mozilla.org/en-US/MPL/2.0/FAQ/) if you
|
|||||||
You can read the full terms here: [LICENSE](https://raw.github.com/go-sql-driver/mysql/master/LICENSE).
|
You can read the full terms here: [LICENSE](https://raw.github.com/go-sql-driver/mysql/master/LICENSE).
|
||||||
|
|
||||||
![Go Gopher and MySQL Dolphin](https://raw.github.com/wiki/go-sql-driver/mysql/go-mysql-driver_m.jpg "Golang Gopher transporting the MySQL Dolphin in a wheelbarrow")
|
![Go Gopher and MySQL Dolphin](https://raw.github.com/wiki/go-sql-driver/mysql/go-mysql-driver_m.jpg "Golang Gopher transporting the MySQL Dolphin in a wheelbarrow")
|
||||||
|
|
||||||
|
13
vendor/github.com/go-sql-driver/mysql/auth.go
generated
vendored
13
vendor/github.com/go-sql-driver/mysql/auth.go
generated
vendored
@ -15,6 +15,7 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/pem"
|
"encoding/pem"
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -136,10 +137,6 @@ func pwHash(password []byte) (result [2]uint32) {
|
|||||||
|
|
||||||
// Hash password using insecure pre 4.1 method
|
// Hash password using insecure pre 4.1 method
|
||||||
func scrambleOldPassword(scramble []byte, password string) []byte {
|
func scrambleOldPassword(scramble []byte, password string) []byte {
|
||||||
if len(password) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
scramble = scramble[:8]
|
scramble = scramble[:8]
|
||||||
|
|
||||||
hashPw := pwHash([]byte(password))
|
hashPw := pwHash([]byte(password))
|
||||||
@ -247,6 +244,9 @@ func (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, error) {
|
|||||||
if !mc.cfg.AllowOldPasswords {
|
if !mc.cfg.AllowOldPasswords {
|
||||||
return nil, ErrOldPassword
|
return nil, ErrOldPassword
|
||||||
}
|
}
|
||||||
|
if len(mc.cfg.Passwd) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
// Note: there are edge cases where this should work but doesn't;
|
// Note: there are edge cases where this should work but doesn't;
|
||||||
// this is currently "wontfix":
|
// this is currently "wontfix":
|
||||||
// https://github.com/go-sql-driver/mysql/issues/184
|
// https://github.com/go-sql-driver/mysql/issues/184
|
||||||
@ -372,7 +372,10 @@ func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
block, _ := pem.Decode(data[1:])
|
block, rest := pem.Decode(data[1:])
|
||||||
|
if block == nil {
|
||||||
|
return fmt.Errorf("No Pem data found, data: %s", rest)
|
||||||
|
}
|
||||||
pkix, err := x509.ParsePKIXPublicKey(block.Bytes)
|
pkix, err := x509.ParsePKIXPublicKey(block.Bytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
2
vendor/github.com/go-sql-driver/mysql/collations.go
generated
vendored
2
vendor/github.com/go-sql-driver/mysql/collations.go
generated
vendored
@ -247,7 +247,7 @@ var collations = map[string]byte{
|
|||||||
"utf8mb4_0900_ai_ci": 255,
|
"utf8mb4_0900_ai_ci": 255,
|
||||||
}
|
}
|
||||||
|
|
||||||
// A blacklist of collations which is unsafe to interpolate parameters.
|
// A denylist of collations which is unsafe to interpolate parameters.
|
||||||
// These multibyte encodings may contains 0x5c (`\`) in their trailing bytes.
|
// These multibyte encodings may contains 0x5c (`\`) in their trailing bytes.
|
||||||
var unsafeCollations = map[string]bool{
|
var unsafeCollations = map[string]bool{
|
||||||
"big5_chinese_ci": true,
|
"big5_chinese_ci": true,
|
||||||
|
83
vendor/github.com/go-sql-driver/mysql/connection.go
generated
vendored
83
vendor/github.com/go-sql-driver/mysql/connection.go
generated
vendored
@ -12,6 +12,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -46,9 +47,10 @@ type mysqlConn struct {
|
|||||||
|
|
||||||
// Handles parameters set in DSN after the connection is established
|
// Handles parameters set in DSN after the connection is established
|
||||||
func (mc *mysqlConn) handleParams() (err error) {
|
func (mc *mysqlConn) handleParams() (err error) {
|
||||||
|
var cmdSet strings.Builder
|
||||||
for param, val := range mc.cfg.Params {
|
for param, val := range mc.cfg.Params {
|
||||||
switch param {
|
switch param {
|
||||||
// Charset
|
// Charset: character_set_connection, character_set_client, character_set_results
|
||||||
case "charset":
|
case "charset":
|
||||||
charsets := strings.Split(val, ",")
|
charsets := strings.Split(val, ",")
|
||||||
for i := range charsets {
|
for i := range charsets {
|
||||||
@ -62,14 +64,27 @@ func (mc *mysqlConn) handleParams() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// System Vars
|
// Other system vars accumulated in a single SET command
|
||||||
default:
|
default:
|
||||||
err = mc.exec("SET " + param + "=" + val + "")
|
if cmdSet.Len() == 0 {
|
||||||
|
// Heuristic: 29 chars for each other key=value to reduce reallocations
|
||||||
|
cmdSet.Grow(4 + len(param) + 1 + len(val) + 30*(len(mc.cfg.Params)-1))
|
||||||
|
cmdSet.WriteString("SET ")
|
||||||
|
} else {
|
||||||
|
cmdSet.WriteByte(',')
|
||||||
|
}
|
||||||
|
cmdSet.WriteString(param)
|
||||||
|
cmdSet.WriteByte('=')
|
||||||
|
cmdSet.WriteString(val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if cmdSet.Len() > 0 {
|
||||||
|
err = mc.exec(cmdSet.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -230,47 +245,21 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin
|
|||||||
if v.IsZero() {
|
if v.IsZero() {
|
||||||
buf = append(buf, "'0000-00-00'"...)
|
buf = append(buf, "'0000-00-00'"...)
|
||||||
} else {
|
} else {
|
||||||
v := v.In(mc.cfg.Loc)
|
buf = append(buf, '\'')
|
||||||
v = v.Add(time.Nanosecond * 500) // To round under microsecond
|
buf, err = appendDateTime(buf, v.In(mc.cfg.Loc))
|
||||||
year := v.Year()
|
if err != nil {
|
||||||
year100 := year / 100
|
return "", err
|
||||||
year1 := year % 100
|
|
||||||
month := v.Month()
|
|
||||||
day := v.Day()
|
|
||||||
hour := v.Hour()
|
|
||||||
minute := v.Minute()
|
|
||||||
second := v.Second()
|
|
||||||
micro := v.Nanosecond() / 1000
|
|
||||||
|
|
||||||
buf = append(buf, []byte{
|
|
||||||
'\'',
|
|
||||||
digits10[year100], digits01[year100],
|
|
||||||
digits10[year1], digits01[year1],
|
|
||||||
'-',
|
|
||||||
digits10[month], digits01[month],
|
|
||||||
'-',
|
|
||||||
digits10[day], digits01[day],
|
|
||||||
' ',
|
|
||||||
digits10[hour], digits01[hour],
|
|
||||||
':',
|
|
||||||
digits10[minute], digits01[minute],
|
|
||||||
':',
|
|
||||||
digits10[second], digits01[second],
|
|
||||||
}...)
|
|
||||||
|
|
||||||
if micro != 0 {
|
|
||||||
micro10000 := micro / 10000
|
|
||||||
micro100 := micro / 100 % 100
|
|
||||||
micro1 := micro % 100
|
|
||||||
buf = append(buf, []byte{
|
|
||||||
'.',
|
|
||||||
digits10[micro10000], digits01[micro10000],
|
|
||||||
digits10[micro100], digits01[micro100],
|
|
||||||
digits10[micro1], digits01[micro1],
|
|
||||||
}...)
|
|
||||||
}
|
}
|
||||||
buf = append(buf, '\'')
|
buf = append(buf, '\'')
|
||||||
}
|
}
|
||||||
|
case json.RawMessage:
|
||||||
|
buf = append(buf, '\'')
|
||||||
|
if mc.status&statusNoBackslashEscapes == 0 {
|
||||||
|
buf = escapeBytesBackslash(buf, v)
|
||||||
|
} else {
|
||||||
|
buf = escapeBytesQuotes(buf, v)
|
||||||
|
}
|
||||||
|
buf = append(buf, '\'')
|
||||||
case []byte:
|
case []byte:
|
||||||
if v == nil {
|
if v == nil {
|
||||||
buf = append(buf, "NULL"...)
|
buf = append(buf, "NULL"...)
|
||||||
@ -480,6 +469,10 @@ func (mc *mysqlConn) Ping(ctx context.Context) (err error) {
|
|||||||
|
|
||||||
// BeginTx implements driver.ConnBeginTx interface
|
// BeginTx implements driver.ConnBeginTx interface
|
||||||
func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
|
func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
|
||||||
|
if mc.closed.IsSet() {
|
||||||
|
return nil, driver.ErrBadConn
|
||||||
|
}
|
||||||
|
|
||||||
if err := mc.watchCancel(ctx); err != nil {
|
if err := mc.watchCancel(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -649,3 +642,9 @@ func (mc *mysqlConn) ResetSession(ctx context.Context) error {
|
|||||||
mc.reset = true
|
mc.reset = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsValid implements driver.Validator interface
|
||||||
|
// (From Go 1.15)
|
||||||
|
func (mc *mysqlConn) IsValid() bool {
|
||||||
|
return !mc.closed.IsSet()
|
||||||
|
}
|
||||||
|
2
vendor/github.com/go-sql-driver/mysql/dsn.go
generated
vendored
2
vendor/github.com/go-sql-driver/mysql/dsn.go
generated
vendored
@ -375,7 +375,7 @@ func parseDSNParams(cfg *Config, params string) (err error) {
|
|||||||
|
|
||||||
// cfg params
|
// cfg params
|
||||||
switch value := param[1]; param[0] {
|
switch value := param[1]; param[0] {
|
||||||
// Disable INFILE whitelist / enable all files
|
// Disable INFILE allowlist / enable all files
|
||||||
case "allowAllFiles":
|
case "allowAllFiles":
|
||||||
var isBool bool
|
var isBool bool
|
||||||
cfg.AllowAllFiles, isBool = readBool(value)
|
cfg.AllowAllFiles, isBool = readBool(value)
|
||||||
|
2
vendor/github.com/go-sql-driver/mysql/fields.go
generated
vendored
2
vendor/github.com/go-sql-driver/mysql/fields.go
generated
vendored
@ -106,7 +106,7 @@ var (
|
|||||||
scanTypeInt64 = reflect.TypeOf(int64(0))
|
scanTypeInt64 = reflect.TypeOf(int64(0))
|
||||||
scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{})
|
scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{})
|
||||||
scanTypeNullInt = reflect.TypeOf(sql.NullInt64{})
|
scanTypeNullInt = reflect.TypeOf(sql.NullInt64{})
|
||||||
scanTypeNullTime = reflect.TypeOf(NullTime{})
|
scanTypeNullTime = reflect.TypeOf(nullTime{})
|
||||||
scanTypeUint8 = reflect.TypeOf(uint8(0))
|
scanTypeUint8 = reflect.TypeOf(uint8(0))
|
||||||
scanTypeUint16 = reflect.TypeOf(uint16(0))
|
scanTypeUint16 = reflect.TypeOf(uint16(0))
|
||||||
scanTypeUint32 = reflect.TypeOf(uint32(0))
|
scanTypeUint32 = reflect.TypeOf(uint32(0))
|
||||||
|
24
vendor/github.com/go-sql-driver/mysql/fuzz.go
generated
vendored
Normal file
24
vendor/github.com/go-sql-driver/mysql/fuzz.go
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package.
|
||||||
|
//
|
||||||
|
// Copyright 2020 The Go-MySQL-Driver Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
// +build gofuzz
|
||||||
|
|
||||||
|
package mysql
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Fuzz(data []byte) int {
|
||||||
|
db, err := sql.Open("mysql", string(data))
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
db.Close()
|
||||||
|
return 1
|
||||||
|
}
|
4
vendor/github.com/go-sql-driver/mysql/infile.go
generated
vendored
4
vendor/github.com/go-sql-driver/mysql/infile.go
generated
vendored
@ -23,7 +23,7 @@ var (
|
|||||||
readerRegisterLock sync.RWMutex
|
readerRegisterLock sync.RWMutex
|
||||||
)
|
)
|
||||||
|
|
||||||
// RegisterLocalFile adds the given file to the file whitelist,
|
// RegisterLocalFile adds the given file to the file allowlist,
|
||||||
// so that it can be used by "LOAD DATA LOCAL INFILE <filepath>".
|
// so that it can be used by "LOAD DATA LOCAL INFILE <filepath>".
|
||||||
// Alternatively you can allow the use of all local files with
|
// Alternatively you can allow the use of all local files with
|
||||||
// the DSN parameter 'allowAllFiles=true'
|
// the DSN parameter 'allowAllFiles=true'
|
||||||
@ -45,7 +45,7 @@ func RegisterLocalFile(filePath string) {
|
|||||||
fileRegisterLock.Unlock()
|
fileRegisterLock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeregisterLocalFile removes the given filepath from the whitelist.
|
// DeregisterLocalFile removes the given filepath from the allowlist.
|
||||||
func DeregisterLocalFile(filePath string) {
|
func DeregisterLocalFile(filePath string) {
|
||||||
fileRegisterLock.Lock()
|
fileRegisterLock.Lock()
|
||||||
delete(fileRegister, strings.Trim(filePath, `"`))
|
delete(fileRegister, strings.Trim(filePath, `"`))
|
||||||
|
4
vendor/github.com/go-sql-driver/mysql/nulltime.go
generated
vendored
4
vendor/github.com/go-sql-driver/mysql/nulltime.go
generated
vendored
@ -28,11 +28,11 @@ func (nt *NullTime) Scan(value interface{}) (err error) {
|
|||||||
nt.Time, nt.Valid = v, true
|
nt.Time, nt.Valid = v, true
|
||||||
return
|
return
|
||||||
case []byte:
|
case []byte:
|
||||||
nt.Time, err = parseDateTime(string(v), time.UTC)
|
nt.Time, err = parseDateTime(v, time.UTC)
|
||||||
nt.Valid = (err == nil)
|
nt.Valid = (err == nil)
|
||||||
return
|
return
|
||||||
case string:
|
case string:
|
||||||
nt.Time, err = parseDateTime(v, time.UTC)
|
nt.Time, err = parseDateTime([]byte(v), time.UTC)
|
||||||
nt.Valid = (err == nil)
|
nt.Valid = (err == nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
9
vendor/github.com/go-sql-driver/mysql/nulltime_go113.go
generated
vendored
9
vendor/github.com/go-sql-driver/mysql/nulltime_go113.go
generated
vendored
@ -28,4 +28,13 @@ import (
|
|||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// This NullTime implementation is not driver-specific
|
// This NullTime implementation is not driver-specific
|
||||||
|
//
|
||||||
|
// Deprecated: NullTime doesn't honor the loc DSN parameter.
|
||||||
|
// NullTime.Scan interprets a time as UTC, not the loc DSN parameter.
|
||||||
|
// Use sql.NullTime instead.
|
||||||
type NullTime sql.NullTime
|
type NullTime sql.NullTime
|
||||||
|
|
||||||
|
// for internal use.
|
||||||
|
// the mysql package uses sql.NullTime if it is available.
|
||||||
|
// if not, the package uses mysql.NullTime.
|
||||||
|
type nullTime = sql.NullTime // sql.NullTime is available
|
||||||
|
5
vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go
generated
vendored
5
vendor/github.com/go-sql-driver/mysql/nulltime_legacy.go
generated
vendored
@ -32,3 +32,8 @@ type NullTime struct {
|
|||||||
Time time.Time
|
Time time.Time
|
||||||
Valid bool // Valid is true if Time is not NULL
|
Valid bool // Valid is true if Time is not NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for internal use.
|
||||||
|
// the mysql package uses sql.NullTime if it is available.
|
||||||
|
// if not, the package uses mysql.NullTime.
|
||||||
|
type nullTime = NullTime // sql.NullTime is not available
|
||||||
|
23
vendor/github.com/go-sql-driver/mysql/packets.go
generated
vendored
23
vendor/github.com/go-sql-driver/mysql/packets.go
generated
vendored
@ -13,6 +13,7 @@ import (
|
|||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -348,6 +349,12 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
|
|||||||
return errors.New("unknown collation")
|
return errors.New("unknown collation")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Filler [23 bytes] (all 0x00)
|
||||||
|
pos := 13
|
||||||
|
for ; pos < 13+23; pos++ {
|
||||||
|
data[pos] = 0
|
||||||
|
}
|
||||||
|
|
||||||
// SSL Connection Request Packet
|
// SSL Connection Request Packet
|
||||||
// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest
|
// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest
|
||||||
if mc.cfg.tls != nil {
|
if mc.cfg.tls != nil {
|
||||||
@ -366,12 +373,6 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
|
|||||||
mc.buf.nc = tlsConn
|
mc.buf.nc = tlsConn
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filler [23 bytes] (all 0x00)
|
|
||||||
pos := 13
|
|
||||||
for ; pos < 13+23; pos++ {
|
|
||||||
data[pos] = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// User [null terminated string]
|
// User [null terminated string]
|
||||||
if len(mc.cfg.User) > 0 {
|
if len(mc.cfg.User) > 0 {
|
||||||
pos += copy(data[pos:], mc.cfg.User)
|
pos += copy(data[pos:], mc.cfg.User)
|
||||||
@ -777,7 +778,7 @@ func (rows *textRows) readRow(dest []driver.Value) error {
|
|||||||
case fieldTypeTimestamp, fieldTypeDateTime,
|
case fieldTypeTimestamp, fieldTypeDateTime,
|
||||||
fieldTypeDate, fieldTypeNewDate:
|
fieldTypeDate, fieldTypeNewDate:
|
||||||
dest[i], err = parseDateTime(
|
dest[i], err = parseDateTime(
|
||||||
string(dest[i].([]byte)),
|
dest[i].([]byte),
|
||||||
mc.cfg.Loc,
|
mc.cfg.Loc,
|
||||||
)
|
)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -1003,6 +1004,9 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v, ok := arg.(json.RawMessage); ok {
|
||||||
|
arg = []byte(v)
|
||||||
|
}
|
||||||
// cache types and values
|
// cache types and values
|
||||||
switch v := arg.(type) {
|
switch v := arg.(type) {
|
||||||
case int64:
|
case int64:
|
||||||
@ -1112,7 +1116,10 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
|
|||||||
if v.IsZero() {
|
if v.IsZero() {
|
||||||
b = append(b, "0000-00-00"...)
|
b = append(b, "0000-00-00"...)
|
||||||
} else {
|
} else {
|
||||||
b = v.In(mc.cfg.Loc).AppendFormat(b, timeFormat)
|
b, err = appendDateTime(b, v.In(mc.cfg.Loc))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
paramValues = appendLengthEncodedInteger(paramValues,
|
paramValues = appendLengthEncodedInteger(paramValues,
|
||||||
|
30
vendor/github.com/go-sql-driver/mysql/statement.go
generated
vendored
30
vendor/github.com/go-sql-driver/mysql/statement.go
generated
vendored
@ -10,6 +10,7 @@ package mysql
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -43,6 +44,11 @@ func (stmt *mysqlStmt) ColumnConverter(idx int) driver.ValueConverter {
|
|||||||
return converter{}
|
return converter{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (stmt *mysqlStmt) CheckNamedValue(nv *driver.NamedValue) (err error) {
|
||||||
|
nv.Value, err = converter{}.ConvertValue(nv.Value)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
|
func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
|
||||||
if stmt.mc.closed.IsSet() {
|
if stmt.mc.closed.IsSet() {
|
||||||
errLog.Print(ErrInvalidConn)
|
errLog.Print(ErrInvalidConn)
|
||||||
@ -129,6 +135,8 @@ func (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) {
|
|||||||
return rows, err
|
return rows, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var jsonType = reflect.TypeOf(json.RawMessage{})
|
||||||
|
|
||||||
type converter struct{}
|
type converter struct{}
|
||||||
|
|
||||||
// ConvertValue mirrors the reference/default converter in database/sql/driver
|
// ConvertValue mirrors the reference/default converter in database/sql/driver
|
||||||
@ -146,12 +154,17 @@ func (c converter) ConvertValue(v interface{}) (driver.Value, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if !driver.IsValue(sv) {
|
if driver.IsValue(sv) {
|
||||||
return nil, fmt.Errorf("non-Value type %T returned from Value", sv)
|
|
||||||
}
|
|
||||||
return sv, nil
|
return sv, nil
|
||||||
}
|
}
|
||||||
|
// A value returend from the Valuer interface can be "a type handled by
|
||||||
|
// a database driver's NamedValueChecker interface" so we should accept
|
||||||
|
// uint64 here as well.
|
||||||
|
if u, ok := sv.(uint64); ok {
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("non-Value type %T returned from Value", sv)
|
||||||
|
}
|
||||||
rv := reflect.ValueOf(v)
|
rv := reflect.ValueOf(v)
|
||||||
switch rv.Kind() {
|
switch rv.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
@ -170,11 +183,14 @@ func (c converter) ConvertValue(v interface{}) (driver.Value, error) {
|
|||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
return rv.Bool(), nil
|
return rv.Bool(), nil
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
ek := rv.Type().Elem().Kind()
|
switch t := rv.Type(); {
|
||||||
if ek == reflect.Uint8 {
|
case t == jsonType:
|
||||||
|
return v, nil
|
||||||
|
case t.Elem().Kind() == reflect.Uint8:
|
||||||
return rv.Bytes(), nil
|
return rv.Bytes(), nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unsupported type %T, a slice of %s", v, t.Elem().Kind())
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("unsupported type %T, a slice of %s", v, ek)
|
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
return rv.String(), nil
|
return rv.String(), nil
|
||||||
}
|
}
|
||||||
|
195
vendor/github.com/go-sql-driver/mysql/utils.go
generated
vendored
195
vendor/github.com/go-sql-driver/mysql/utils.go
generated
vendored
@ -106,27 +106,136 @@ func readBool(input string) (value bool, valid bool) {
|
|||||||
* Time related utils *
|
* Time related utils *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
func parseDateTime(str string, loc *time.Location) (t time.Time, err error) {
|
func parseDateTime(b []byte, loc *time.Location) (time.Time, error) {
|
||||||
base := "0000-00-00 00:00:00.0000000"
|
const base = "0000-00-00 00:00:00.000000"
|
||||||
switch len(str) {
|
switch len(b) {
|
||||||
case 10, 19, 21, 22, 23, 24, 25, 26: // up to "YYYY-MM-DD HH:MM:SS.MMMMMM"
|
case 10, 19, 21, 22, 23, 24, 25, 26: // up to "YYYY-MM-DD HH:MM:SS.MMMMMM"
|
||||||
if str == base[:len(str)] {
|
if string(b) == base[:len(b)] {
|
||||||
return
|
return time.Time{}, nil
|
||||||
}
|
}
|
||||||
t, err = time.Parse(timeFormat[:len(str)], str)
|
|
||||||
|
year, err := parseByteYear(b)
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
if year <= 0 {
|
||||||
|
year = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if b[4] != '-' {
|
||||||
|
return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[4])
|
||||||
|
}
|
||||||
|
|
||||||
|
m, err := parseByte2Digits(b[5], b[6])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
if m <= 0 {
|
||||||
|
m = 1
|
||||||
|
}
|
||||||
|
month := time.Month(m)
|
||||||
|
|
||||||
|
if b[7] != '-' {
|
||||||
|
return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[7])
|
||||||
|
}
|
||||||
|
|
||||||
|
day, err := parseByte2Digits(b[8], b[9])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
if day <= 0 {
|
||||||
|
day = 1
|
||||||
|
}
|
||||||
|
if len(b) == 10 {
|
||||||
|
return time.Date(year, month, day, 0, 0, 0, 0, loc), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if b[10] != ' ' {
|
||||||
|
return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[10])
|
||||||
|
}
|
||||||
|
|
||||||
|
hour, err := parseByte2Digits(b[11], b[12])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
if b[13] != ':' {
|
||||||
|
return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[13])
|
||||||
|
}
|
||||||
|
|
||||||
|
min, err := parseByte2Digits(b[14], b[15])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
if b[16] != ':' {
|
||||||
|
return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[16])
|
||||||
|
}
|
||||||
|
|
||||||
|
sec, err := parseByte2Digits(b[17], b[18])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
if len(b) == 19 {
|
||||||
|
return time.Date(year, month, day, hour, min, sec, 0, loc), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if b[19] != '.' {
|
||||||
|
return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[19])
|
||||||
|
}
|
||||||
|
nsec, err := parseByteNanoSec(b[20:])
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
return time.Date(year, month, day, hour, min, sec, nsec, loc), nil
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("invalid time string: %s", str)
|
return time.Time{}, fmt.Errorf("invalid time bytes: %s", b)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust location
|
func parseByteYear(b []byte) (int, error) {
|
||||||
if err == nil && loc != time.UTC {
|
year, n := 0, 1000
|
||||||
y, mo, d := t.Date()
|
for i := 0; i < 4; i++ {
|
||||||
h, mi, s := t.Clock()
|
v, err := bToi(b[i])
|
||||||
t, err = time.Date(y, mo, d, h, mi, s, t.Nanosecond(), loc), nil
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
}
|
}
|
||||||
|
year += v * n
|
||||||
|
n = n / 10
|
||||||
|
}
|
||||||
|
return year, nil
|
||||||
|
}
|
||||||
|
|
||||||
return
|
func parseByte2Digits(b1, b2 byte) (int, error) {
|
||||||
|
d1, err := bToi(b1)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
d2, err := bToi(b2)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return d1*10 + d2, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseByteNanoSec(b []byte) (int, error) {
|
||||||
|
ns, digit := 0, 100000 // max is 6-digits
|
||||||
|
for i := 0; i < len(b); i++ {
|
||||||
|
v, err := bToi(b[i])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
ns += v * digit
|
||||||
|
digit /= 10
|
||||||
|
}
|
||||||
|
// nanoseconds has 10-digits. (needs to scale digits)
|
||||||
|
// 10 - 6 = 4, so we have to multiple 1000.
|
||||||
|
return ns * 1000, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func bToi(b byte) (int, error) {
|
||||||
|
if b < '0' || b > '9' {
|
||||||
|
return 0, errors.New("not [0-9]")
|
||||||
|
}
|
||||||
|
return int(b - '0'), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) {
|
func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) {
|
||||||
@ -167,6 +276,64 @@ func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Va
|
|||||||
return nil, fmt.Errorf("invalid DATETIME packet length %d", num)
|
return nil, fmt.Errorf("invalid DATETIME packet length %d", num)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func appendDateTime(buf []byte, t time.Time) ([]byte, error) {
|
||||||
|
year, month, day := t.Date()
|
||||||
|
hour, min, sec := t.Clock()
|
||||||
|
nsec := t.Nanosecond()
|
||||||
|
|
||||||
|
if year < 1 || year > 9999 {
|
||||||
|
return buf, errors.New("year is not in the range [1, 9999]: " + strconv.Itoa(year)) // use errors.New instead of fmt.Errorf to avoid year escape to heap
|
||||||
|
}
|
||||||
|
year100 := year / 100
|
||||||
|
year1 := year % 100
|
||||||
|
|
||||||
|
var localBuf [len("2006-01-02T15:04:05.999999999")]byte // does not escape
|
||||||
|
localBuf[0], localBuf[1], localBuf[2], localBuf[3] = digits10[year100], digits01[year100], digits10[year1], digits01[year1]
|
||||||
|
localBuf[4] = '-'
|
||||||
|
localBuf[5], localBuf[6] = digits10[month], digits01[month]
|
||||||
|
localBuf[7] = '-'
|
||||||
|
localBuf[8], localBuf[9] = digits10[day], digits01[day]
|
||||||
|
|
||||||
|
if hour == 0 && min == 0 && sec == 0 && nsec == 0 {
|
||||||
|
return append(buf, localBuf[:10]...), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
localBuf[10] = ' '
|
||||||
|
localBuf[11], localBuf[12] = digits10[hour], digits01[hour]
|
||||||
|
localBuf[13] = ':'
|
||||||
|
localBuf[14], localBuf[15] = digits10[min], digits01[min]
|
||||||
|
localBuf[16] = ':'
|
||||||
|
localBuf[17], localBuf[18] = digits10[sec], digits01[sec]
|
||||||
|
|
||||||
|
if nsec == 0 {
|
||||||
|
return append(buf, localBuf[:19]...), nil
|
||||||
|
}
|
||||||
|
nsec100000000 := nsec / 100000000
|
||||||
|
nsec1000000 := (nsec / 1000000) % 100
|
||||||
|
nsec10000 := (nsec / 10000) % 100
|
||||||
|
nsec100 := (nsec / 100) % 100
|
||||||
|
nsec1 := nsec % 100
|
||||||
|
localBuf[19] = '.'
|
||||||
|
|
||||||
|
// milli second
|
||||||
|
localBuf[20], localBuf[21], localBuf[22] =
|
||||||
|
digits01[nsec100000000], digits10[nsec1000000], digits01[nsec1000000]
|
||||||
|
// micro second
|
||||||
|
localBuf[23], localBuf[24], localBuf[25] =
|
||||||
|
digits10[nsec10000], digits01[nsec10000], digits10[nsec100]
|
||||||
|
// nano second
|
||||||
|
localBuf[26], localBuf[27], localBuf[28] =
|
||||||
|
digits01[nsec100], digits10[nsec1], digits01[nsec1]
|
||||||
|
|
||||||
|
// trim trailing zeros
|
||||||
|
n := len(localBuf)
|
||||||
|
for n > 0 && localBuf[n-1] == '0' {
|
||||||
|
n--
|
||||||
|
}
|
||||||
|
|
||||||
|
return append(buf, localBuf[:n]...), nil
|
||||||
|
}
|
||||||
|
|
||||||
// zeroDateTime is used in formatBinaryDateTime to avoid an allocation
|
// zeroDateTime is used in formatBinaryDateTime to avoid an allocation
|
||||||
// if the DATE or DATETIME has the zero value.
|
// if the DATE or DATETIME has the zero value.
|
||||||
// It must never be changed.
|
// It must never be changed.
|
||||||
|
1
vendor/github.com/jmoiron/sqlx/.gitignore
generated
vendored
1
vendor/github.com/jmoiron/sqlx/.gitignore
generated
vendored
@ -6,6 +6,7 @@
|
|||||||
# Folders
|
# Folders
|
||||||
_obj
|
_obj
|
||||||
_test
|
_test
|
||||||
|
.idea
|
||||||
|
|
||||||
# Architecture specific extensions/prefixes
|
# Architecture specific extensions/prefixes
|
||||||
*.[568vq]
|
*.[568vq]
|
||||||
|
4
vendor/github.com/jmoiron/sqlx/.travis.yml
generated
vendored
4
vendor/github.com/jmoiron/sqlx/.travis.yml
generated
vendored
@ -18,9 +18,9 @@ before_install:
|
|||||||
|
|
||||||
# go versions to test
|
# go versions to test
|
||||||
go:
|
go:
|
||||||
- "1.8"
|
|
||||||
- "1.9"
|
|
||||||
- "1.10.x"
|
- "1.10.x"
|
||||||
|
- "1.11.x"
|
||||||
|
- "1.12.x"
|
||||||
|
|
||||||
# run tests w/ coverage
|
# run tests w/ coverage
|
||||||
script:
|
script:
|
||||||
|
58
vendor/github.com/jmoiron/sqlx/README.md
generated
vendored
58
vendor/github.com/jmoiron/sqlx/README.md
generated
vendored
@ -15,30 +15,34 @@ Major additional concepts are:
|
|||||||
* `Get` and `Select` to go quickly from query to struct/slice
|
* `Get` and `Select` to go quickly from query to struct/slice
|
||||||
|
|
||||||
In addition to the [godoc API documentation](http://godoc.org/github.com/jmoiron/sqlx),
|
In addition to the [godoc API documentation](http://godoc.org/github.com/jmoiron/sqlx),
|
||||||
there is also some [standard documentation](http://jmoiron.github.io/sqlx/) that
|
there is also some [user documentation](http://jmoiron.github.io/sqlx/) that
|
||||||
explains how to use `database/sql` along with sqlx.
|
explains how to use `database/sql` along with sqlx.
|
||||||
|
|
||||||
## Recent Changes
|
## Recent Changes
|
||||||
|
|
||||||
* The [introduction](https://github.com/jmoiron/sqlx/pull/387) of `sql.ColumnType` sets the required minimum Go version to 1.8.
|
1.3.0:
|
||||||
|
|
||||||
* sqlx/types.JsonText has been renamed to JSONText to follow Go naming conventions.
|
* `sqlx.DB.Connx(context.Context) *sqlx.Conn`
|
||||||
|
* `sqlx.BindDriver(driverName, bindType)`
|
||||||
|
* support for `[]map[string]interface{}` to do "batch" insertions
|
||||||
|
* allocation & perf improvements for `sqlx.In`
|
||||||
|
|
||||||
This breaks backwards compatibility, but it's in a way that is trivially fixable
|
DB.Connx returns an `sqlx.Conn`, which is an `sql.Conn`-alike consistent with
|
||||||
(`s/JsonText/JSONText/g`). The `types` package is both experimental and not in
|
sqlx's wrapping of other types.
|
||||||
active development currently.
|
|
||||||
|
|
||||||
* Using Go 1.6 and below with `types.JSONText` and `types.GzippedText` can be _potentially unsafe_, **especially** when used with common auto-scan sqlx idioms like `Select` and `Get`. See [golang bug #13905](https://github.com/golang/go/issues/13905).
|
`BindDriver` allows users to control the bindvars that sqlx will use for drivers,
|
||||||
|
and add new drivers at runtime. This results in a very slight performance hit
|
||||||
|
when resolving the driver into a bind type (~40ns per call), but it allows users
|
||||||
|
to specify what bindtype their driver uses even when sqlx has not been updated
|
||||||
|
to know about it by default.
|
||||||
|
|
||||||
### Backwards Compatibility
|
### Backwards Compatibility
|
||||||
|
|
||||||
There is no Go1-like promise of absolute stability, but I take the issue seriously
|
Compatibility with the most recent two versions of Go is a requirement for any
|
||||||
and will maintain the library in a compatible state unless vital bugs prevent me
|
new changes. Compatibility beyond that is not guaranteed.
|
||||||
from doing so. Since [#59](https://github.com/jmoiron/sqlx/issues/59) and
|
|
||||||
[#60](https://github.com/jmoiron/sqlx/issues/60) necessitated breaking behavior,
|
Versioning is done with Go modules. Breaking changes (eg. removing deprecated API)
|
||||||
a wider API cleanup was done at the time of fixing. It's possible this will happen
|
will get major version number bumps.
|
||||||
in future; if it does, a git tag will be provided for users requiring the old
|
|
||||||
behavior to continue to use it until such a time as they can migrate.
|
|
||||||
|
|
||||||
## install
|
## install
|
||||||
|
|
||||||
@ -102,7 +106,7 @@ type Place struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// this Pings the database trying to connect, panics on error
|
// this Pings the database trying to connect
|
||||||
// use sqlx.Open() for sql.Open() semantics
|
// use sqlx.Open() for sql.Open() semantics
|
||||||
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
|
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -182,6 +186,28 @@ func main() {
|
|||||||
// as the name -> db mapping, so struct fields are lowercased and the `db` tag
|
// as the name -> db mapping, so struct fields are lowercased and the `db` tag
|
||||||
// is taken into consideration.
|
// is taken into consideration.
|
||||||
rows, err = db.NamedQuery(`SELECT * FROM person WHERE first_name=:first_name`, jason)
|
rows, err = db.NamedQuery(`SELECT * FROM person WHERE first_name=:first_name`, jason)
|
||||||
|
|
||||||
|
|
||||||
|
// batch insert
|
||||||
|
|
||||||
|
// batch insert with structs
|
||||||
|
personStructs := []Person{
|
||||||
|
{FirstName: "Ardie", LastName: "Savea", Email: "asavea@ab.co.nz"},
|
||||||
|
{FirstName: "Sonny Bill", LastName: "Williams", Email: "sbw@ab.co.nz"},
|
||||||
|
{FirstName: "Ngani", LastName: "Laumape", Email: "nlaumape@ab.co.nz"},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.NamedExec(`INSERT INTO person (first_name, last_name, email)
|
||||||
|
VALUES (:first_name, :last_name, :email)`, personStructs)
|
||||||
|
|
||||||
|
// batch insert with maps
|
||||||
|
personMaps := []map[string]interface{}{
|
||||||
|
{"first_name": "Ardie", "last_name": "Savea", "email": "asavea@ab.co.nz"},
|
||||||
|
{"first_name": "Sonny Bill", "last_name": "Williams", "email": "sbw@ab.co.nz"},
|
||||||
|
{"first_name": "Ngani", "last_name": "Laumape", "email": "nlaumape@ab.co.nz"},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.NamedExec(`INSERT INTO person (first_name, last_name, email)
|
||||||
|
VALUES (:first_name, :last_name, :email)`, personMaps)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
94
vendor/github.com/jmoiron/sqlx/bind.go
generated
vendored
94
vendor/github.com/jmoiron/sqlx/bind.go
generated
vendored
@ -7,6 +7,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/jmoiron/sqlx/reflectx"
|
"github.com/jmoiron/sqlx/reflectx"
|
||||||
)
|
)
|
||||||
@ -20,21 +21,36 @@ const (
|
|||||||
AT
|
AT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var defaultBinds = map[int][]string{
|
||||||
|
DOLLAR: []string{"postgres", "pgx", "pq-timeouts", "cloudsqlpostgres", "ql", "nrpostgres", "cockroach"},
|
||||||
|
QUESTION: []string{"mysql", "sqlite3", "nrmysql", "nrsqlite3"},
|
||||||
|
NAMED: []string{"oci8", "ora", "goracle"},
|
||||||
|
AT: []string{"sqlserver"},
|
||||||
|
}
|
||||||
|
|
||||||
|
var binds sync.Map
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
for bind, drivers := range defaultBinds {
|
||||||
|
for _, driver := range drivers {
|
||||||
|
BindDriver(driver, bind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// BindType returns the bindtype for a given database given a drivername.
|
// BindType returns the bindtype for a given database given a drivername.
|
||||||
func BindType(driverName string) int {
|
func BindType(driverName string) int {
|
||||||
switch driverName {
|
itype, ok := binds.Load(driverName)
|
||||||
case "postgres", "pgx", "pq-timeouts", "cloudsqlpostgres":
|
if !ok {
|
||||||
return DOLLAR
|
|
||||||
case "mysql":
|
|
||||||
return QUESTION
|
|
||||||
case "sqlite3":
|
|
||||||
return QUESTION
|
|
||||||
case "oci8", "ora", "goracle":
|
|
||||||
return NAMED
|
|
||||||
case "sqlserver":
|
|
||||||
return AT
|
|
||||||
}
|
|
||||||
return UNKNOWN
|
return UNKNOWN
|
||||||
|
}
|
||||||
|
return itype.(int)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BindDriver sets the BindType for driverName to bindType.
|
||||||
|
func BindDriver(driverName string, bindType int) {
|
||||||
|
binds.Store(driverName, bindType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: this should be able to be tolerant of escaped ?'s in queries without
|
// FIXME: this should be able to be tolerant of escaped ?'s in queries without
|
||||||
@ -98,6 +114,28 @@ func rebindBuff(bindType int, query string) string {
|
|||||||
return rqb.String()
|
return rqb.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func asSliceForIn(i interface{}) (v reflect.Value, ok bool) {
|
||||||
|
if i == nil {
|
||||||
|
return reflect.Value{}, false
|
||||||
|
}
|
||||||
|
|
||||||
|
v = reflect.ValueOf(i)
|
||||||
|
t := reflectx.Deref(v.Type())
|
||||||
|
|
||||||
|
// Only expand slices
|
||||||
|
if t.Kind() != reflect.Slice {
|
||||||
|
return reflect.Value{}, false
|
||||||
|
}
|
||||||
|
|
||||||
|
// []byte is a driver.Value type so it should not be expanded
|
||||||
|
if t == reflect.TypeOf([]byte{}) {
|
||||||
|
return reflect.Value{}, false
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return v, true
|
||||||
|
}
|
||||||
|
|
||||||
// In expands slice values in args, returning the modified query string
|
// In expands slice values in args, returning the modified query string
|
||||||
// and a new arg list that can be executed by a database. The `query` should
|
// and a new arg list that can be executed by a database. The `query` should
|
||||||
// use the `?` bindVar. The return value uses the `?` bindVar.
|
// use the `?` bindVar. The return value uses the `?` bindVar.
|
||||||
@ -113,17 +151,25 @@ func In(query string, args ...interface{}) (string, []interface{}, error) {
|
|||||||
var flatArgsCount int
|
var flatArgsCount int
|
||||||
var anySlices bool
|
var anySlices bool
|
||||||
|
|
||||||
meta := make([]argMeta, len(args))
|
var stackMeta [32]argMeta
|
||||||
|
|
||||||
|
var meta []argMeta
|
||||||
|
if len(args) <= len(stackMeta) {
|
||||||
|
meta = stackMeta[:len(args)]
|
||||||
|
} else {
|
||||||
|
meta = make([]argMeta, len(args))
|
||||||
|
}
|
||||||
|
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
if a, ok := arg.(driver.Valuer); ok {
|
if a, ok := arg.(driver.Valuer); ok {
|
||||||
arg, _ = a.Value()
|
var err error
|
||||||
|
arg, err = a.Value()
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
v := reflect.ValueOf(arg)
|
|
||||||
t := reflectx.Deref(v.Type())
|
|
||||||
|
|
||||||
// []byte is a driver.Value type so it should not be expanded
|
if v, ok := asSliceForIn(arg); ok {
|
||||||
if t.Kind() == reflect.Slice && t != reflect.TypeOf([]byte{}) {
|
|
||||||
meta[i].length = v.Len()
|
meta[i].length = v.Len()
|
||||||
meta[i].v = v
|
meta[i].v = v
|
||||||
|
|
||||||
@ -146,7 +192,9 @@ func In(query string, args ...interface{}) (string, []interface{}, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
newArgs := make([]interface{}, 0, flatArgsCount)
|
newArgs := make([]interface{}, 0, flatArgsCount)
|
||||||
buf := make([]byte, 0, len(query)+len(", ?")*flatArgsCount)
|
|
||||||
|
var buf strings.Builder
|
||||||
|
buf.Grow(len(query) + len(", ?")*flatArgsCount)
|
||||||
|
|
||||||
var arg, offset int
|
var arg, offset int
|
||||||
|
|
||||||
@ -172,10 +220,10 @@ func In(query string, args ...interface{}) (string, []interface{}, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write everything up to and including our ? character
|
// write everything up to and including our ? character
|
||||||
buf = append(buf, query[:offset+i+1]...)
|
buf.WriteString(query[:offset+i+1])
|
||||||
|
|
||||||
for si := 1; si < argMeta.length; si++ {
|
for si := 1; si < argMeta.length; si++ {
|
||||||
buf = append(buf, ", ?"...)
|
buf.WriteString(", ?")
|
||||||
}
|
}
|
||||||
|
|
||||||
newArgs = appendReflectSlice(newArgs, argMeta.v, argMeta.length)
|
newArgs = appendReflectSlice(newArgs, argMeta.v, argMeta.length)
|
||||||
@ -186,13 +234,13 @@ func In(query string, args ...interface{}) (string, []interface{}, error) {
|
|||||||
offset = 0
|
offset = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = append(buf, query...)
|
buf.WriteString(query)
|
||||||
|
|
||||||
if arg < len(meta) {
|
if arg < len(meta) {
|
||||||
return "", nil, errors.New("number of bindVars less than number arguments")
|
return "", nil, errors.New("number of bindVars less than number arguments")
|
||||||
}
|
}
|
||||||
|
|
||||||
return string(buf), newArgs, nil
|
return buf.String(), newArgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendReflectSlice(args []interface{}, v reflect.Value, vlen int) []interface{} {
|
func appendReflectSlice(args []interface{}, v reflect.Value, vlen int) []interface{} {
|
||||||
|
8
vendor/github.com/jmoiron/sqlx/go.mod
generated
vendored
8
vendor/github.com/jmoiron/sqlx/go.mod
generated
vendored
@ -1,7 +1,9 @@
|
|||||||
module github.com/jmoiron/sqlx
|
module github.com/jmoiron/sqlx
|
||||||
|
|
||||||
|
go 1.10
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/go-sql-driver/mysql v1.4.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/lib/pq v1.0.0
|
github.com/lib/pq v1.2.0
|
||||||
github.com/mattn/go-sqlite3 v1.9.0
|
github.com/mattn/go-sqlite3 v1.14.6
|
||||||
)
|
)
|
||||||
|
12
vendor/github.com/jmoiron/sqlx/go.sum
generated
vendored
12
vendor/github.com/jmoiron/sqlx/go.sum
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
|
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
|
||||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4=
|
github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
|
||||||
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
|
88
vendor/github.com/jmoiron/sqlx/named.go
generated
vendored
88
vendor/github.com/jmoiron/sqlx/named.go
generated
vendored
@ -12,10 +12,12 @@ package sqlx
|
|||||||
// * bindArgs, bindMapArgs, bindAnyArgs - given a list of names, return an arglist
|
// * bindArgs, bindMapArgs, bindAnyArgs - given a list of names, return an arglist
|
||||||
//
|
//
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
@ -144,8 +146,22 @@ func prepareNamed(p namedPreparer, query string) (*NamedStmt, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convertMapStringInterface attempts to convert v to map[string]interface{}.
|
||||||
|
// Unlike v.(map[string]interface{}), this function works on named types that
|
||||||
|
// are convertible to map[string]interface{} as well.
|
||||||
|
func convertMapStringInterface(v interface{}) (map[string]interface{}, bool) {
|
||||||
|
var m map[string]interface{}
|
||||||
|
mtype := reflect.TypeOf(m)
|
||||||
|
t := reflect.TypeOf(v)
|
||||||
|
if !t.ConvertibleTo(mtype) {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(v).Convert(mtype).Interface().(map[string]interface{}), true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func bindAnyArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) {
|
func bindAnyArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) {
|
||||||
if maparg, ok := arg.(map[string]interface{}); ok {
|
if maparg, ok := convertMapStringInterface(arg); ok {
|
||||||
return bindMapArgs(names, maparg)
|
return bindMapArgs(names, maparg)
|
||||||
}
|
}
|
||||||
return bindArgs(names, arg, m)
|
return bindArgs(names, arg, m)
|
||||||
@ -200,7 +216,7 @@ func bindStruct(bindType int, query string, arg interface{}, m *reflectx.Mapper)
|
|||||||
return "", []interface{}{}, err
|
return "", []interface{}{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
arglist, err := bindArgs(names, arg, m)
|
arglist, err := bindAnyArgs(names, arg, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", []interface{}{}, err
|
return "", []interface{}{}, err
|
||||||
}
|
}
|
||||||
@ -208,6 +224,56 @@ func bindStruct(bindType int, query string, arg interface{}, m *reflectx.Mapper)
|
|||||||
return bound, arglist, nil
|
return bound, arglist, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var valueBracketReg = regexp.MustCompile(`\([^(]*.[^(]\)$`)
|
||||||
|
|
||||||
|
func fixBound(bound string, loop int) string {
|
||||||
|
loc := valueBracketReg.FindStringIndex(bound)
|
||||||
|
if len(loc) != 2 {
|
||||||
|
return bound
|
||||||
|
}
|
||||||
|
var buffer bytes.Buffer
|
||||||
|
|
||||||
|
buffer.WriteString(bound[0:loc[1]])
|
||||||
|
for i := 0; i < loop-1; i++ {
|
||||||
|
buffer.WriteString(",")
|
||||||
|
buffer.WriteString(bound[loc[0]:loc[1]])
|
||||||
|
}
|
||||||
|
buffer.WriteString(bound[loc[1]:])
|
||||||
|
return buffer.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// bindArray binds a named parameter query with fields from an array or slice of
|
||||||
|
// structs argument.
|
||||||
|
func bindArray(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) {
|
||||||
|
// do the initial binding with QUESTION; if bindType is not question,
|
||||||
|
// we can rebind it at the end.
|
||||||
|
bound, names, err := compileNamedQuery([]byte(query), QUESTION)
|
||||||
|
if err != nil {
|
||||||
|
return "", []interface{}{}, err
|
||||||
|
}
|
||||||
|
arrayValue := reflect.ValueOf(arg)
|
||||||
|
arrayLen := arrayValue.Len()
|
||||||
|
if arrayLen == 0 {
|
||||||
|
return "", []interface{}{}, fmt.Errorf("length of array is 0: %#v", arg)
|
||||||
|
}
|
||||||
|
var arglist = make([]interface{}, 0, len(names)*arrayLen)
|
||||||
|
for i := 0; i < arrayLen; i++ {
|
||||||
|
elemArglist, err := bindAnyArgs(names, arrayValue.Index(i).Interface(), m)
|
||||||
|
if err != nil {
|
||||||
|
return "", []interface{}{}, err
|
||||||
|
}
|
||||||
|
arglist = append(arglist, elemArglist...)
|
||||||
|
}
|
||||||
|
if arrayLen > 1 {
|
||||||
|
bound = fixBound(bound, arrayLen)
|
||||||
|
}
|
||||||
|
// adjust binding type if we weren't on question
|
||||||
|
if bindType != QUESTION {
|
||||||
|
bound = Rebind(bindType, bound)
|
||||||
|
}
|
||||||
|
return bound, arglist, nil
|
||||||
|
}
|
||||||
|
|
||||||
// bindMap binds a named parameter query with a map of arguments.
|
// bindMap binds a named parameter query with a map of arguments.
|
||||||
func bindMap(bindType int, query string, args map[string]interface{}) (string, []interface{}, error) {
|
func bindMap(bindType int, query string, args map[string]interface{}) (string, []interface{}, error) {
|
||||||
bound, names, err := compileNamedQuery([]byte(query), bindType)
|
bound, names, err := compileNamedQuery([]byte(query), bindType)
|
||||||
@ -259,7 +325,7 @@ func compileNamedQuery(qs []byte, bindType int) (query string, names []string, e
|
|||||||
}
|
}
|
||||||
inName = true
|
inName = true
|
||||||
name = []byte{}
|
name = []byte{}
|
||||||
} else if inName && i > 0 && b == '=' {
|
} else if inName && i > 0 && b == '=' && len(name) == 0 {
|
||||||
rebound = append(rebound, ':', '=')
|
rebound = append(rebound, ':', '=')
|
||||||
inName = false
|
inName = false
|
||||||
continue
|
continue
|
||||||
@ -327,10 +393,20 @@ func Named(query string, arg interface{}) (string, []interface{}, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func bindNamedMapper(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) {
|
func bindNamedMapper(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) {
|
||||||
if maparg, ok := arg.(map[string]interface{}); ok {
|
t := reflect.TypeOf(arg)
|
||||||
return bindMap(bindType, query, maparg)
|
k := t.Kind()
|
||||||
|
switch {
|
||||||
|
case k == reflect.Map && t.Key().Kind() == reflect.String:
|
||||||
|
m, ok := convertMapStringInterface(arg)
|
||||||
|
if !ok {
|
||||||
|
return "", nil, fmt.Errorf("sqlx.bindNamedMapper: unsupported map type: %T", arg)
|
||||||
}
|
}
|
||||||
|
return bindMap(bindType, query, m)
|
||||||
|
case k == reflect.Array || k == reflect.Slice:
|
||||||
|
return bindArray(bindType, query, arg, m)
|
||||||
|
default:
|
||||||
return bindStruct(bindType, query, arg, m)
|
return bindStruct(bindType, query, arg, m)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NamedQuery binds a named query and then runs Query on the result using the
|
// NamedQuery binds a named query and then runs Query on the result using the
|
||||||
@ -346,7 +422,7 @@ func NamedQuery(e Ext, query string, arg interface{}) (*Rows, error) {
|
|||||||
|
|
||||||
// NamedExec uses BindStruct to get a query executable by the driver and
|
// NamedExec uses BindStruct to get a query executable by the driver and
|
||||||
// then runs Exec on the result. Returns an error from the binding
|
// then runs Exec on the result. Returns an error from the binding
|
||||||
// or the query excution itself.
|
// or the query execution itself.
|
||||||
func NamedExec(e Ext, query string, arg interface{}) (sql.Result, error) {
|
func NamedExec(e Ext, query string, arg interface{}) (sql.Result, error) {
|
||||||
q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))
|
q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
2
vendor/github.com/jmoiron/sqlx/named_context.go
generated
vendored
2
vendor/github.com/jmoiron/sqlx/named_context.go
generated
vendored
@ -122,7 +122,7 @@ func NamedQueryContext(ctx context.Context, e ExtContext, query string, arg inte
|
|||||||
|
|
||||||
// NamedExecContext uses BindStruct to get a query executable by the driver and
|
// NamedExecContext uses BindStruct to get a query executable by the driver and
|
||||||
// then runs Exec on the result. Returns an error from the binding
|
// then runs Exec on the result. Returns an error from the binding
|
||||||
// or the query excution itself.
|
// or the query execution itself.
|
||||||
func NamedExecContext(ctx context.Context, e ExtContext, query string, arg interface{}) (sql.Result, error) {
|
func NamedExecContext(ctx context.Context, e ExtContext, query string, arg interface{}) (sql.Result, error) {
|
||||||
q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))
|
q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
9
vendor/github.com/jmoiron/sqlx/reflectx/reflect.go
generated
vendored
9
vendor/github.com/jmoiron/sqlx/reflectx/reflect.go
generated
vendored
@ -269,9 +269,7 @@ type typeQueue struct {
|
|||||||
// A copying append that creates a new slice each time.
|
// A copying append that creates a new slice each time.
|
||||||
func apnd(is []int, i int) []int {
|
func apnd(is []int, i int) []int {
|
||||||
x := make([]int, len(is)+1)
|
x := make([]int, len(is)+1)
|
||||||
for p, n := range is {
|
copy(x, is)
|
||||||
x[p] = n
|
|
||||||
}
|
|
||||||
x[len(x)-1] = i
|
x[len(x)-1] = i
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -431,11 +429,16 @@ QueueLoop:
|
|||||||
|
|
||||||
flds := &StructMap{Index: m, Tree: root, Paths: map[string]*FieldInfo{}, Names: map[string]*FieldInfo{}}
|
flds := &StructMap{Index: m, Tree: root, Paths: map[string]*FieldInfo{}, Names: map[string]*FieldInfo{}}
|
||||||
for _, fi := range flds.Index {
|
for _, fi := range flds.Index {
|
||||||
|
// check if nothing has already been pushed with the same path
|
||||||
|
// sometimes you can choose to override a type using embedded struct
|
||||||
|
fld, ok := flds.Paths[fi.Path]
|
||||||
|
if !ok || fld.Embedded {
|
||||||
flds.Paths[fi.Path] = fi
|
flds.Paths[fi.Path] = fi
|
||||||
if fi.Name != "" && !fi.Embedded {
|
if fi.Name != "" && !fi.Embedded {
|
||||||
flds.Names[fi.Path] = fi
|
flds.Names[fi.Path] = fi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return flds
|
return flds
|
||||||
}
|
}
|
||||||
|
24
vendor/github.com/jmoiron/sqlx/sqlx.go
generated
vendored
24
vendor/github.com/jmoiron/sqlx/sqlx.go
generated
vendored
@ -64,11 +64,7 @@ func isScannable(t reflect.Type) bool {
|
|||||||
|
|
||||||
// it's not important that we use the right mapper for this particular object,
|
// it's not important that we use the right mapper for this particular object,
|
||||||
// we're only concerned on how many exported fields this struct has
|
// we're only concerned on how many exported fields this struct has
|
||||||
m := mapper()
|
return len(mapper().TypeMap(t).Index) == 0
|
||||||
if len(m.TypeMap(t).Index) == 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ColScanner is an interface used by MapScan and SliceScan
|
// ColScanner is an interface used by MapScan and SliceScan
|
||||||
@ -149,15 +145,15 @@ func isUnsafe(i interface{}) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func mapperFor(i interface{}) *reflectx.Mapper {
|
func mapperFor(i interface{}) *reflectx.Mapper {
|
||||||
switch i.(type) {
|
switch i := i.(type) {
|
||||||
case DB:
|
case DB:
|
||||||
return i.(DB).Mapper
|
return i.Mapper
|
||||||
case *DB:
|
case *DB:
|
||||||
return i.(*DB).Mapper
|
return i.Mapper
|
||||||
case Tx:
|
case Tx:
|
||||||
return i.(Tx).Mapper
|
return i.Mapper
|
||||||
case *Tx:
|
case *Tx:
|
||||||
return i.(*Tx).Mapper
|
return i.Mapper
|
||||||
default:
|
default:
|
||||||
return mapper()
|
return mapper()
|
||||||
}
|
}
|
||||||
@ -380,6 +376,14 @@ func (db *DB) PrepareNamed(query string) (*NamedStmt, error) {
|
|||||||
return prepareNamed(db, query)
|
return prepareNamed(db, query)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Conn is a wrapper around sql.Conn with extra functionality
|
||||||
|
type Conn struct {
|
||||||
|
*sql.Conn
|
||||||
|
driverName string
|
||||||
|
unsafe bool
|
||||||
|
Mapper *reflectx.Mapper
|
||||||
|
}
|
||||||
|
|
||||||
// Tx is an sqlx wrapper around sql.Tx with extra functionality
|
// Tx is an sqlx wrapper around sql.Tx with extra functionality
|
||||||
type Tx struct {
|
type Tx struct {
|
||||||
*sql.Tx
|
*sql.Tx
|
||||||
|
68
vendor/github.com/jmoiron/sqlx/sqlx_context.go
generated
vendored
68
vendor/github.com/jmoiron/sqlx/sqlx_context.go
generated
vendored
@ -208,6 +208,74 @@ func (db *DB) BeginTxx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {
|
|||||||
return &Tx{Tx: tx, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, err
|
return &Tx{Tx: tx, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Connx returns an *sqlx.Conn instead of an *sql.Conn.
|
||||||
|
func (db *DB) Connx(ctx context.Context) (*Conn, error) {
|
||||||
|
conn, err := db.DB.Conn(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Conn{Conn: conn, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// BeginTxx begins a transaction and returns an *sqlx.Tx instead of an
|
||||||
|
// *sql.Tx.
|
||||||
|
//
|
||||||
|
// The provided context is used until the transaction is committed or rolled
|
||||||
|
// back. If the context is canceled, the sql package will roll back the
|
||||||
|
// transaction. Tx.Commit will return an error if the context provided to
|
||||||
|
// BeginxContext is canceled.
|
||||||
|
func (c *Conn) BeginTxx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {
|
||||||
|
tx, err := c.Conn.BeginTx(ctx, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Tx{Tx: tx, driverName: c.driverName, unsafe: c.unsafe, Mapper: c.Mapper}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectContext using this Conn.
|
||||||
|
// Any placeholder parameters are replaced with supplied args.
|
||||||
|
func (c *Conn) SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {
|
||||||
|
return SelectContext(ctx, c, dest, query, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetContext using this Conn.
|
||||||
|
// Any placeholder parameters are replaced with supplied args.
|
||||||
|
// An error is returned if the result set is empty.
|
||||||
|
func (c *Conn) GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {
|
||||||
|
return GetContext(ctx, c, dest, query, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PreparexContext returns an sqlx.Stmt instead of a sql.Stmt.
|
||||||
|
//
|
||||||
|
// The provided context is used for the preparation of the statement, not for
|
||||||
|
// the execution of the statement.
|
||||||
|
func (c *Conn) PreparexContext(ctx context.Context, query string) (*Stmt, error) {
|
||||||
|
return PreparexContext(ctx, c, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryxContext queries the database and returns an *sqlx.Rows.
|
||||||
|
// Any placeholder parameters are replaced with supplied args.
|
||||||
|
func (c *Conn) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) {
|
||||||
|
r, err := c.Conn.QueryContext(ctx, query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Rows{Rows: r, unsafe: c.unsafe, Mapper: c.Mapper}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryRowxContext queries the database and returns an *sqlx.Row.
|
||||||
|
// Any placeholder parameters are replaced with supplied args.
|
||||||
|
func (c *Conn) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row {
|
||||||
|
rows, err := c.Conn.QueryContext(ctx, query, args...)
|
||||||
|
return &Row{rows: rows, err: err, unsafe: c.unsafe, Mapper: c.Mapper}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rebind a query within a Conn's bindvar type.
|
||||||
|
func (c *Conn) Rebind(query string) string {
|
||||||
|
return Rebind(BindType(c.driverName), query)
|
||||||
|
}
|
||||||
|
|
||||||
// StmtxContext returns a version of the prepared statement which runs within a
|
// StmtxContext returns a version of the prepared statement which runs within a
|
||||||
// transaction. Provided stmt can be either *sql.Stmt or *sqlx.Stmt.
|
// transaction. Provided stmt can be either *sql.Stmt or *sqlx.Stmt.
|
||||||
func (tx *Tx) StmtxContext(ctx context.Context, stmt interface{}) *Stmt {
|
func (tx *Tx) StmtxContext(ctx context.Context, stmt interface{}) *Stmt {
|
||||||
|
1
vendor/golang.org/x/crypto/ed25519/ed25519.go
generated
vendored
1
vendor/golang.org/x/crypto/ed25519/ed25519.go
generated
vendored
@ -5,6 +5,7 @@
|
|||||||
// In Go 1.13, the ed25519 package was promoted to the standard library as
|
// In Go 1.13, the ed25519 package was promoted to the standard library as
|
||||||
// crypto/ed25519, and this package became a wrapper for the standard library one.
|
// crypto/ed25519, and this package became a wrapper for the standard library one.
|
||||||
//
|
//
|
||||||
|
//go:build !go1.13
|
||||||
// +build !go1.13
|
// +build !go1.13
|
||||||
|
|
||||||
// Package ed25519 implements the Ed25519 signature algorithm. See
|
// Package ed25519 implements the Ed25519 signature algorithm. See
|
||||||
|
1
vendor/golang.org/x/crypto/ed25519/ed25519_go113.go
generated
vendored
1
vendor/golang.org/x/crypto/ed25519/ed25519_go113.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build go1.13
|
||||||
// +build go1.13
|
// +build go1.13
|
||||||
|
|
||||||
// Package ed25519 implements the Ed25519 signature algorithm. See
|
// Package ed25519 implements the Ed25519 signature algorithm. See
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/hashes_generic.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/hashes_generic.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !gc || purego || !s390x
|
||||||
// +build !gc purego !s390x
|
// +build !gc purego !s390x
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/keccakf.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/keccakf.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !amd64 || purego || !gc
|
||||||
// +build !amd64 purego !gc
|
// +build !amd64 purego !gc
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/keccakf_amd64.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/keccakf_amd64.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build amd64 && !purego && gc
|
||||||
// +build amd64,!purego,gc
|
// +build amd64,!purego,gc
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/register.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/register.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build go1.4
|
||||||
// +build go1.4
|
// +build go1.4
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/sha3_s390x.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/sha3_s390x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build gc && !purego
|
||||||
// +build gc,!purego
|
// +build gc,!purego
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/shake_generic.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/shake_generic.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !gc || purego || !s390x
|
||||||
// +build !gc purego !s390x
|
// +build !gc purego !s390x
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/xor.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/xor.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build (!amd64 && !386 && !ppc64le) || purego
|
||||||
// +build !amd64,!386,!ppc64le purego
|
// +build !amd64,!386,!ppc64le purego
|
||||||
|
|
||||||
package sha3
|
package sha3
|
||||||
|
1
vendor/golang.org/x/crypto/sha3/xor_unaligned.go
generated
vendored
1
vendor/golang.org/x/crypto/sha3/xor_unaligned.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build (amd64 || 386 || ppc64le) && !purego
|
||||||
// +build amd64 386 ppc64le
|
// +build amd64 386 ppc64le
|
||||||
// +build !purego
|
// +build !purego
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_aix.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_aix.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build aix
|
||||||
// +build aix
|
// +build aix
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build gc
|
||||||
// +build gc
|
// +build gc
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build gc
|
||||||
// +build gc
|
// +build gc
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build (386 || amd64 || amd64p32) && gc
|
||||||
// +build 386 amd64 amd64p32
|
// +build 386 amd64 amd64p32
|
||||||
// +build gc
|
// +build gc
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build gccgo
|
||||||
// +build gccgo
|
// +build gccgo
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build gccgo
|
||||||
// +build gccgo
|
// +build gccgo
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build (386 || amd64 || amd64p32) && gccgo
|
||||||
// +build 386 amd64 amd64p32
|
// +build 386 amd64 amd64p32
|
||||||
// +build gccgo
|
// +build gccgo
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !386 && !amd64 && !amd64p32 && !arm64
|
||||||
// +build !386,!amd64,!amd64p32,!arm64
|
// +build !386,!amd64,!amd64p32,!arm64
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build linux && (mips64 || mips64le)
|
||||||
// +build linux
|
// +build linux
|
||||||
// +build mips64 mips64le
|
// +build mips64 mips64le
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x
|
||||||
// +build linux,!arm,!arm64,!mips64,!mips64le,!ppc64,!ppc64le,!s390x
|
// +build linux,!arm,!arm64,!mips64,!mips64le,!ppc64,!ppc64le,!s390x
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build linux && (ppc64 || ppc64le)
|
||||||
// +build linux
|
// +build linux
|
||||||
// +build ppc64 ppc64le
|
// +build ppc64 ppc64le
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_mips64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_mips64x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build mips64 || mips64le
|
||||||
// +build mips64 mips64le
|
// +build mips64 mips64le
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_mipsx.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_mipsx.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build mips || mipsle
|
||||||
// +build mips mipsle
|
// +build mips mipsle
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_other_arm.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_other_arm.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !linux && arm
|
||||||
// +build !linux,arm
|
// +build !linux,arm
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
4
vendor/golang.org/x/sys/cpu/cpu_other_arm64.go
generated
vendored
4
vendor/golang.org/x/sys/cpu/cpu_other_arm64.go
generated
vendored
@ -2,8 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build !linux,!netbsd
|
//go:build !linux && !netbsd && arm64
|
||||||
// +build arm64
|
// +build !linux,!netbsd,arm64
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !linux && (mips64 || mips64le)
|
||||||
// +build !linux
|
// +build !linux
|
||||||
// +build mips64 mips64le
|
// +build mips64 mips64le
|
||||||
|
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build ppc64 || ppc64le
|
||||||
// +build ppc64 ppc64le
|
// +build ppc64 ppc64le
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_riscv64.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_riscv64.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build riscv64
|
||||||
// +build riscv64
|
// +build riscv64
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_wasm.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_wasm.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build wasm
|
||||||
// +build wasm
|
// +build wasm
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
1
vendor/golang.org/x/sys/cpu/cpu_x86.go
generated
vendored
1
vendor/golang.org/x/sys/cpu/cpu_x86.go
generated
vendored
@ -2,6 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build 386 || amd64 || amd64p32
|
||||||
// +build 386 amd64 amd64p32
|
// +build 386 amd64 amd64p32
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
4
vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go
generated
vendored
4
vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go
generated
vendored
@ -8,8 +8,8 @@
|
|||||||
// Morever, this file will be used during the building of
|
// Morever, this file will be used during the building of
|
||||||
// gccgo's libgo and thus must not used a CGo method.
|
// gccgo's libgo and thus must not used a CGo method.
|
||||||
|
|
||||||
// +build aix
|
//go:build aix && gccgo
|
||||||
// +build gccgo
|
// +build aix,gccgo
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go
generated
vendored
4
vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go
generated
vendored
@ -6,8 +6,8 @@
|
|||||||
// system call on AIX without depending on x/sys/unix.
|
// system call on AIX without depending on x/sys/unix.
|
||||||
// (See golang.org/issue/32102)
|
// (See golang.org/issue/32102)
|
||||||
|
|
||||||
// +build aix,ppc64
|
//go:build aix && ppc64 && gc
|
||||||
// +build gc
|
// +build aix,ppc64,gc
|
||||||
|
|
||||||
package cpu
|
package cpu
|
||||||
|
|
||||||
|
26
vendor/modules.txt
vendored
26
vendor/modules.txt
vendored
@ -10,25 +10,23 @@ github.com/cretz/bine/torutil/ed25519/internal/edwards25519
|
|||||||
## explicit
|
## explicit
|
||||||
# github.com/denisenkom/go-mssqldb v0.9.0
|
# github.com/denisenkom/go-mssqldb v0.9.0
|
||||||
## explicit
|
## explicit
|
||||||
# github.com/go-sql-driver/mysql v1.5.0
|
# github.com/go-sql-driver/mysql v1.6.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/go-sql-driver/mysql
|
github.com/go-sql-driver/mysql
|
||||||
# github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00
|
# github.com/gopherjs/gopherjs v0.0.0-20210406100015-1e088ea4ee04
|
||||||
## explicit
|
## explicit
|
||||||
# github.com/jinzhu/gorm v1.9.16
|
# github.com/jinzhu/gorm v1.9.16
|
||||||
## explicit
|
## explicit
|
||||||
github.com/jinzhu/gorm
|
github.com/jinzhu/gorm
|
||||||
# github.com/jinzhu/inflection v1.0.0
|
# github.com/jinzhu/inflection v1.0.0
|
||||||
github.com/jinzhu/inflection
|
github.com/jinzhu/inflection
|
||||||
# github.com/jinzhu/now v1.1.1
|
# github.com/jinzhu/now v1.1.2
|
||||||
## explicit
|
## explicit
|
||||||
# github.com/jmoiron/sqlx v1.2.0
|
# github.com/jmoiron/sqlx v1.3.1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/jmoiron/sqlx
|
github.com/jmoiron/sqlx
|
||||||
github.com/jmoiron/sqlx/reflectx
|
github.com/jmoiron/sqlx/reflectx
|
||||||
# github.com/kr/text v0.2.0
|
# github.com/lib/pq v1.10.0
|
||||||
## explicit
|
|
||||||
# github.com/lib/pq v1.9.0
|
|
||||||
## explicit
|
## explicit
|
||||||
# github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
# github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
@ -36,26 +34,22 @@ github.com/jmoiron/sqlx/reflectx
|
|||||||
## explicit
|
## explicit
|
||||||
# github.com/smartystreets/goconvey v1.6.4
|
# github.com/smartystreets/goconvey v1.6.4
|
||||||
## explicit
|
## explicit
|
||||||
# github.com/stretchr/testify v1.6.1
|
# github.com/stretchr/testify v1.7.0
|
||||||
## explicit
|
## explicit
|
||||||
# golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c
|
# golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/crypto/ed25519
|
golang.org/x/crypto/ed25519
|
||||||
golang.org/x/crypto/ed25519/internal/edwards25519
|
golang.org/x/crypto/ed25519/internal/edwards25519
|
||||||
golang.org/x/crypto/sha3
|
golang.org/x/crypto/sha3
|
||||||
# golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb
|
# golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/net/internal/socks
|
golang.org/x/net/internal/socks
|
||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
# golang.org/x/sys v0.0.0-20201202213521-69691e467435
|
# golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sys/cpu
|
golang.org/x/sys/cpu
|
||||||
# google.golang.org/appengine v1.4.0
|
|
||||||
## explicit
|
|
||||||
# gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
|
|
||||||
## explicit
|
|
||||||
# gopkg.in/ini.v1 v1.62.0
|
# gopkg.in/ini.v1 v1.62.0
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/ini.v1
|
gopkg.in/ini.v1
|
||||||
# gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776
|
# gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||||
## explicit
|
## explicit
|
||||||
|
Loading…
Reference in New Issue
Block a user