From cc7840516d97d1384f937aa40d65122bfc3d7951 Mon Sep 17 00:00:00 2001 From: hexxa Date: Sat, 11 Feb 2023 12:37:48 +0800 Subject: [PATCH] fix(db): migrate to modernc sqlite driver --- go.mod | 21 ++++- go.sum | 58 +++++++++++-- src/db/rdb/sqlite/init.go | 2 +- src/db/rdb/sqlitecgo/configs.go | 21 +++++ src/db/rdb/sqlitecgo/files.go | 49 +++++++++++ src/db/rdb/sqlitecgo/files_sharings.go | 40 +++++++++ src/db/rdb/sqlitecgo/files_uploadings.go | 49 +++++++++++ src/db/rdb/sqlitecgo/init.go | 84 +++++++++++++++++++ src/db/rdb/sqlitecgo/users.go | 100 +++++++++++++++++++++++ src/kvstore/kvstore_interface.go | 1 + 10 files changed, 415 insertions(+), 10 deletions(-) create mode 100644 src/db/rdb/sqlitecgo/configs.go create mode 100644 src/db/rdb/sqlitecgo/files.go create mode 100644 src/db/rdb/sqlitecgo/files_sharings.go create mode 100644 src/db/rdb/sqlitecgo/files_uploadings.go create mode 100644 src/db/rdb/sqlitecgo/init.go create mode 100644 src/db/rdb/sqlitecgo/users.go diff --git a/go.mod b/go.mod index ad1039b..b183fee 100644 --- a/go.mod +++ b/go.mod @@ -19,32 +19,49 @@ require ( github.com/robfig/cron/v3 v3.0.1 go.uber.org/zap v1.16.0 golang.org/x/crypto v0.0.0-20210812204632-0ba0e8f03122 + modernc.org/sqlite v1.20.4 ) require ( + github.com/dustin/go-humanize v1.0.0 // indirect github.com/elazarl/goproxy v0.0.0-20201021153353-00ad82a08272 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect github.com/go-playground/validator/v10 v10.9.0 // indirect github.com/golang/protobuf v1.5.2 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/ihexxa/q-radix/v3 v3.0.5 // indirect github.com/json-iterator/go v1.1.11 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-isatty v0.0.13 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect github.com/smartystreets/goconvey v1.6.4 // indirect github.com/ugorji/go/codec v1.2.6 // indirect go.uber.org/atomic v1.6.0 // indirect go.uber.org/multierr v1.5.0 // indirect + golang.org/x/mod v0.3.0 // indirect golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect - golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e // indirect + golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect golang.org/x/text v0.3.7 // indirect + golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + lukechampine.com/uint128 v1.2.0 // indirect + modernc.org/cc/v3 v3.40.0 // indirect + modernc.org/ccgo/v3 v3.16.13 // indirect + modernc.org/libc v1.22.2 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.4.0 // indirect + modernc.org/opt v0.1.3 // indirect + modernc.org/strutil v1.1.3 // indirect + modernc.org/token v1.0.1 // indirect moul.io/http2curl v1.0.0 // indirect ) diff --git a/go.sum b/go.sum index 7c12a4e..f03ccc6 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ 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/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f h1:q/DpyjJjZs94bziQ7YkBmIlpqbVP7yw179rnzoNVX1M= github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f/go.mod h1:QGrK8vMWWHQYQ3QU9bw9Y9OPNfxccGzfb41qjvVeXtY= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/elazarl/goproxy v0.0.0-20201021153353-00ad82a08272 h1:Am81SElhR3XCQBunTisljzNkNese2T1FiV8jP79+dqg= github.com/elazarl/goproxy v0.0.0-20201021153353-00ad82a08272/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= @@ -37,10 +39,13 @@ github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaW github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/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/ihexxa/fsearch v0.1.2 h1:xTHVTwpnEF5YLpHbD+XKpEz9cURPE90nOHFl5eCNe3E= @@ -61,6 +66,8 @@ github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMW github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -76,8 +83,8 @@ github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -96,6 +103,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/robbert229/jwt v2.0.0+incompatible h1:5Pc2FCpA2ahofO4QrWzXXQc0RZYfrZu0TSWHLcTOLz0= github.com/robbert229/jwt v2.0.0+incompatible/go.mod h1:I0pqJYBbhfQce4mJL2X6pYnk3T1oaAuF2ou8rSWpMBo= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= @@ -120,6 +129,7 @@ github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ= github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= @@ -130,6 +140,7 @@ go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210812204632-0ba0e8f03122 h1:AOT7vJYHE32m61R8d1WlcqhOO1AocesDsKpcMq+UOaA= @@ -137,21 +148,26 @@ golang.org/x/crypto v0.0.0-20210812204632-0ba0e8f03122/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/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-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -164,11 +180,15 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 h1:M8tBwCtWD/cZV9DZpFYRUgaymAYAr+aIUTWzDaM3uPs= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= @@ -192,5 +212,29 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/libc v1.22.2 h1:4U7v51GyhlWqQmwCHj28Rdq2Yzwk55ovjFrdPjs8Hb0= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.20.4 h1:J8+m2trkN+KKoE7jglyHYYYiaq5xmz2HoHJIiBlRzbE= +modernc.org/sqlite v1.20.4/go.mod h1:zKcGyrICaxNTMEHSr1HQ2GUraP0j+845GYw37+EyT6A= +modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.15.0 h1:oY+JeD11qVVSgVvodMJsu7Edf8tr5E/7tuhF5cNYz34= +modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= moul.io/http2curl v1.0.0 h1:6XwpyZOYsgZJrU8exnG87ncVkU1FVCcTRpwzOkTDUi8= moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= diff --git a/src/db/rdb/sqlite/init.go b/src/db/rdb/sqlite/init.go index 4d053cb..1b594da 100644 --- a/src/db/rdb/sqlite/init.go +++ b/src/db/rdb/sqlite/init.go @@ -8,7 +8,7 @@ import ( "github.com/ihexxa/quickshare/src/db" "github.com/ihexxa/quickshare/src/db/rdb/base" - _ "github.com/mattn/go-sqlite3" + _ "modernc.org/sqlite" ) type SQLite struct { diff --git a/src/db/rdb/sqlitecgo/configs.go b/src/db/rdb/sqlitecgo/configs.go new file mode 100644 index 0000000..1086421 --- /dev/null +++ b/src/db/rdb/sqlitecgo/configs.go @@ -0,0 +1,21 @@ +package sqlitecgo + +import ( + "context" + + "github.com/ihexxa/quickshare/src/db" +) + +func (st *SQLiteStore) SetClientCfg(ctx context.Context, cfg *db.ClientConfig) error { + st.Lock() + defer st.Unlock() + + return st.store.SetClientCfg(ctx, cfg) +} + +func (st *SQLiteStore) GetCfg(ctx context.Context) (*db.SiteConfig, error) { + st.RLock() + defer st.RUnlock() + + return st.store.GetCfg(ctx) +} diff --git a/src/db/rdb/sqlitecgo/files.go b/src/db/rdb/sqlitecgo/files.go new file mode 100644 index 0000000..704694d --- /dev/null +++ b/src/db/rdb/sqlitecgo/files.go @@ -0,0 +1,49 @@ +package sqlitecgo + +import ( + "context" + + "github.com/ihexxa/quickshare/src/db" +) + +func (st *SQLiteStore) GetFileInfo(ctx context.Context, itemPath string) (*db.FileInfo, error) { + st.RLock() + defer st.RUnlock() + + return st.store.GetFileInfo(ctx, itemPath) +} + +func (st *SQLiteStore) ListFileInfos(ctx context.Context, itemPaths []string) (map[string]*db.FileInfo, error) { + st.RLock() + defer st.RUnlock() + + return st.store.ListFileInfos(ctx, itemPaths) +} + +func (st *SQLiteStore) AddFileInfo(ctx context.Context, infoId, userId uint64, itemPath string, info *db.FileInfo) error { + st.Lock() + defer st.Unlock() + + return st.store.AddFileInfo(ctx, infoId, userId, itemPath, info) +} + +func (st *SQLiteStore) SetSha1(ctx context.Context, itemPath, sign string) error { + st.Lock() + defer st.Unlock() + + return st.store.SetSha1(ctx, itemPath, sign) +} + +func (st *SQLiteStore) DelFileInfo(ctx context.Context, userID uint64, itemPath string) error { + st.Lock() + defer st.Unlock() + + return st.store.DelFileInfo(ctx, userID, itemPath) +} + +func (st *SQLiteStore) MoveFileInfo(ctx context.Context, userId uint64, oldPath, newPath string, isDir bool) error { + st.Lock() + defer st.Unlock() + + return st.store.MoveFileInfo(ctx, userId, oldPath, newPath, isDir) +} diff --git a/src/db/rdb/sqlitecgo/files_sharings.go b/src/db/rdb/sqlitecgo/files_sharings.go new file mode 100644 index 0000000..290266d --- /dev/null +++ b/src/db/rdb/sqlitecgo/files_sharings.go @@ -0,0 +1,40 @@ +package sqlitecgo + +import ( + "context" +) + +func (st *SQLiteStore) IsSharing(ctx context.Context, dirPath string) (bool, error) { + st.RLock() + defer st.RUnlock() + + return st.store.IsSharing(ctx, dirPath) +} + +func (st *SQLiteStore) GetSharingDir(ctx context.Context, hashID string) (string, error) { + st.RLock() + defer st.RUnlock() + + return st.store.GetSharingDir(ctx, hashID) +} + +func (st *SQLiteStore) AddSharing(ctx context.Context, infoId, userId uint64, dirPath string) error { + st.Lock() + defer st.Unlock() + + return st.store.AddSharing(ctx, infoId, userId, dirPath) +} + +func (st *SQLiteStore) DelSharing(ctx context.Context, userId uint64, dirPath string) error { + st.Lock() + defer st.Unlock() + + return st.store.DelSharing(ctx, userId, dirPath) +} + +func (st *SQLiteStore) ListSharingsByLocation(ctx context.Context, location string) (map[string]string, error) { + st.RLock() + defer st.RUnlock() + + return st.store.ListSharingsByLocation(ctx, location) +} diff --git a/src/db/rdb/sqlitecgo/files_uploadings.go b/src/db/rdb/sqlitecgo/files_uploadings.go new file mode 100644 index 0000000..ca90e5f --- /dev/null +++ b/src/db/rdb/sqlitecgo/files_uploadings.go @@ -0,0 +1,49 @@ +package sqlitecgo + +import ( + "context" + + "github.com/ihexxa/quickshare/src/db" +) + +func (st *SQLiteStore) AddUploadInfos(ctx context.Context, uploadId, userId uint64, tmpPath, filePath string, info *db.FileInfo) error { + st.Lock() + defer st.Unlock() + + return st.store.AddUploadInfos(ctx, uploadId, userId, tmpPath, filePath, info) +} + +func (st *SQLiteStore) DelUploadingInfos(ctx context.Context, userId uint64, realPath string) error { + st.Lock() + defer st.Unlock() + + return st.store.DelUploadingInfos(ctx, userId, realPath) +} + +func (st *SQLiteStore) MoveUploadingInfos(ctx context.Context, infoId, userId uint64, uploadPath, itemPath string) error { + st.Lock() + defer st.Unlock() + + return st.store.MoveUploadingInfos(ctx, infoId, userId, uploadPath, itemPath) +} + +func (st *SQLiteStore) SetUploadInfo(ctx context.Context, userId uint64, filePath string, newUploaded int64) error { + st.Lock() + defer st.Unlock() + + return st.store.SetUploadInfo(ctx, userId, filePath, newUploaded) +} + +func (st *SQLiteStore) GetUploadInfo(ctx context.Context, userId uint64, filePath string) (string, int64, int64, error) { + st.RLock() + defer st.RUnlock() + + return st.store.GetUploadInfo(ctx, userId, filePath) +} + +func (st *SQLiteStore) ListUploadInfos(ctx context.Context, userId uint64) ([]*db.UploadInfo, error) { + st.RLock() + defer st.RUnlock() + + return st.store.ListUploadInfos(ctx, userId) +} diff --git a/src/db/rdb/sqlitecgo/init.go b/src/db/rdb/sqlitecgo/init.go new file mode 100644 index 0000000..110e527 --- /dev/null +++ b/src/db/rdb/sqlitecgo/init.go @@ -0,0 +1,84 @@ +package sqlitecgo + +import ( + "context" + "database/sql" + "sync" + + "github.com/ihexxa/quickshare/src/db" + "github.com/ihexxa/quickshare/src/db/rdb/base" + _ "modernc.org/sqlite" +) + +type SQLite struct { + db.IDB + dbPath string +} + +func NewSQLite(dbPath string) (*SQLite, error) { + db, err := sql.Open("sqlite", dbPath) + if err != nil { + return nil, err + } + + return &SQLite{ + IDB: db, + dbPath: dbPath, + }, nil +} + +type SQLiteStore struct { + store *base.BaseStore + mtx *sync.RWMutex +} + +func NewSQLiteStore(db db.IDB) (*SQLiteStore, error) { + return &SQLiteStore{ + store: base.NewBaseStore(db), + mtx: &sync.RWMutex{}, + }, nil +} + +func (st *SQLiteStore) Close() error { + return st.store.Close() +} + +func (st *SQLiteStore) Lock() { + st.mtx.Lock() +} + +func (st *SQLiteStore) Unlock() { + st.mtx.Unlock() +} + +func (st *SQLiteStore) RLock() { + st.mtx.RLock() +} + +func (st *SQLiteStore) RUnlock() { + st.mtx.RUnlock() +} + +func (st *SQLiteStore) IsInited() bool { + // always try to init the db + return false +} + +func (st *SQLiteStore) Init(ctx context.Context, rootName, rootPwd string, cfg *db.SiteConfig) error { + st.Lock() + defer st.Unlock() + + return st.store.Init(ctx, rootName, rootPwd, cfg) +} + +func (st *SQLiteStore) InitUserTable(ctx context.Context, tx *sql.Tx, rootName, rootPwd string) error { + return st.store.InitUserTable(ctx, tx, rootName, rootPwd) +} + +func (st *SQLiteStore) InitFileTables(ctx context.Context, tx *sql.Tx) error { + return st.store.InitFileTables(ctx, tx) +} + +func (st *SQLiteStore) InitConfigTable(ctx context.Context, tx *sql.Tx, cfg *db.SiteConfig) error { + return st.store.InitConfigTable(ctx, tx, cfg) +} diff --git a/src/db/rdb/sqlitecgo/users.go b/src/db/rdb/sqlitecgo/users.go new file mode 100644 index 0000000..2c9cd7d --- /dev/null +++ b/src/db/rdb/sqlitecgo/users.go @@ -0,0 +1,100 @@ +package sqlitecgo + +import ( + "context" + + "github.com/ihexxa/quickshare/src/db" +) + +func (st *SQLiteStore) AddUser(ctx context.Context, user *db.User) error { + st.Lock() + defer st.Unlock() + + return st.store.AddUser(ctx, user) +} + +func (st *SQLiteStore) DelUser(ctx context.Context, id uint64) error { + st.Lock() + defer st.Unlock() + + return st.store.DelUser(ctx, id) +} + +func (st *SQLiteStore) GetUser(ctx context.Context, id uint64) (*db.User, error) { + st.RLock() + defer st.RUnlock() + + return st.store.GetUser(ctx, id) +} + +func (st *SQLiteStore) GetUserByName(ctx context.Context, name string) (*db.User, error) { + st.RLock() + defer st.RUnlock() + + return st.store.GetUserByName(ctx, name) +} + +func (st *SQLiteStore) SetPwd(ctx context.Context, id uint64, pwd string) error { + st.Lock() + defer st.Unlock() + + return st.store.SetPwd(ctx, id, pwd) +} + +// role + quota +func (st *SQLiteStore) SetInfo(ctx context.Context, id uint64, user *db.User) error { + st.Lock() + defer st.Unlock() + + return st.store.SetInfo(ctx, id, user) +} + +func (st *SQLiteStore) SetPreferences(ctx context.Context, id uint64, prefers *db.Preferences) error { + st.Lock() + defer st.Unlock() + + return st.store.SetPreferences(ctx, id, prefers) +} + +func (st *SQLiteStore) SetUsed(ctx context.Context, id uint64, incr bool, capacity int64) error { + st.Lock() + defer st.Unlock() + + return st.store.SetUsed(ctx, id, incr, capacity) +} + +func (st *SQLiteStore) ResetUsed(ctx context.Context, id uint64, used int64) error { + st.Lock() + defer st.Unlock() + + return st.store.ResetUsed(ctx, id, used) +} + +func (st *SQLiteStore) ListUsers(ctx context.Context) ([]*db.User, error) { + st.RLock() + defer st.RUnlock() + + return st.store.ListUsers(ctx) +} + +func (st *SQLiteStore) ListUserIDs(ctx context.Context) (map[string]string, error) { + st.RLock() + defer st.RUnlock() + + return st.store.ListUserIDs(ctx) +} + +func (st *SQLiteStore) AddRole(role string) error { + // TODO: implement this after adding grant/revoke + panic("not implemented") +} + +func (st *SQLiteStore) DelRole(role string) error { + // TODO: implement this after adding grant/revoke + panic("not implemented") +} + +func (st *SQLiteStore) ListRoles() (map[string]bool, error) { + // TODO: implement this after adding grant/revoke + panic("not implemented") +} diff --git a/src/kvstore/kvstore_interface.go b/src/kvstore/kvstore_interface.go index f590753..5c7d70f 100644 --- a/src/kvstore/kvstore_interface.go +++ b/src/kvstore/kvstore_interface.go @@ -5,6 +5,7 @@ import "errors" var ErrLocked = errors.New("already locked") var ErrNoLock = errors.New("no lock to unlock") +// Deprecated: no longer supported type IKVStore interface { AddNamespace(nsName string) error DelNamespace(nsName string) error