From 6ec8dc0ab209547ac58dd8c07cd0c8c4dd876639 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Mon, 7 Apr 2025 02:24:05 +0300
Subject: [PATCH 01/27] feat(surrealdb): add initial implementation of
SurrealDB storage with configuration and tests
---
surrealdb/config.go | 59 +++++++++++++
surrealdb/go.mod | 65 ++++++++++++++
surrealdb/go.sum | 163 ++++++++++++++++++++++++++++++++++++
surrealdb/surrealdb.go | 74 ++++++++++++++++
surrealdb/surrealdb_test.go | 24 ++++++
5 files changed, 385 insertions(+)
create mode 100644 surrealdb/config.go
create mode 100644 surrealdb/go.mod
create mode 100644 surrealdb/go.sum
create mode 100644 surrealdb/surrealdb.go
create mode 100644 surrealdb/surrealdb_test.go
diff --git a/surrealdb/config.go b/surrealdb/config.go
new file mode 100644
index 00000000..e8ba6926
--- /dev/null
+++ b/surrealdb/config.go
@@ -0,0 +1,59 @@
+package surrealdb
+
+type Config struct {
+ ConnectionString string
+ Namespace string
+ Database string
+
+ // auth
+ Username string
+ Password string
+ Access string
+ Scope string
+}
+
+var ConfigDefault = Config{
+ ConnectionString: "ws://localhost:8000",
+ Namespace: "fiber_storage",
+ Database: "fiber_storage",
+ Username: "root",
+ Password: "root",
+ Access: "full",
+ Scope: "all",
+}
+
+func configDefault(config ...Config) Config {
+ // Return default config if nothing provided
+ if len(config) < 1 {
+ return ConfigDefault
+ }
+
+ // Override default config
+ cfg := config[0]
+
+ // Set default values
+ if cfg.ConnectionString == "" {
+ cfg.ConnectionString = ConfigDefault.ConnectionString
+ }
+ if cfg.Namespace == "" {
+ cfg.Namespace = ConfigDefault.Namespace
+ }
+
+ if cfg.Database == "" {
+ cfg.Database = ConfigDefault.Database
+ }
+
+ if cfg.Username == "" {
+ cfg.Username = ConfigDefault.Username
+ }
+
+ if cfg.Password == "" {
+ cfg.Password = ConfigDefault.Password
+ }
+
+ if cfg.Scope == "" {
+ cfg.Scope = ConfigDefault.Scope
+ }
+
+ return cfg
+}
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
new file mode 100644
index 00000000..67788233
--- /dev/null
+++ b/surrealdb/go.mod
@@ -0,0 +1,65 @@
+module github.com/gofiber/storage/surrealdb/v2
+
+go 1.23.3
+
+require (
+ github.com/stretchr/testify v1.10.0
+ github.com/surrealdb/surrealdb.go v0.3.2
+)
+
+require (
+ dario.cat/mergo v1.0.1 // indirect
+ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
+ github.com/Microsoft/go-winio v0.6.2 // indirect
+ github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/containerd/log v0.1.0 // indirect
+ github.com/containerd/platforms v0.2.1 // indirect
+ github.com/cpuguy83/dockercfg v0.3.2 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
+ github.com/docker/docker v28.0.1+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
+ github.com/docker/go-units v0.5.0 // indirect
+ github.com/ebitengine/purego v0.8.2 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/fxamacker/cbor/v2 v2.7.0 // indirect
+ github.com/go-logr/logr v1.4.2 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/gofrs/uuid v4.4.0+incompatible // indirect
+ github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/gorilla/websocket v1.5.3 // indirect
+ github.com/klauspost/compress v1.17.4 // indirect
+ github.com/kr/text v0.2.0 // indirect
+ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
+ github.com/magiconair/properties v1.8.9 // indirect
+ github.com/moby/docker-image-spec v1.3.1 // indirect
+ github.com/moby/patternmatcher v0.6.0 // indirect
+ github.com/moby/sys/sequential v0.5.0 // indirect
+ github.com/moby/sys/user v0.1.0 // indirect
+ github.com/moby/sys/userns v0.1.0 // indirect
+ github.com/moby/term v0.5.0 // indirect
+ github.com/morikuni/aec v1.0.0 // indirect
+ github.com/opencontainers/go-digest v1.0.0 // indirect
+ github.com/opencontainers/image-spec v1.1.1 // indirect
+ github.com/pkg/errors v0.9.1 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
+ github.com/shirou/gopsutil/v4 v4.25.1 // indirect
+ github.com/sirupsen/logrus v1.9.3 // indirect
+ github.com/testcontainers/testcontainers-go v0.36.0 // indirect
+ github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect
+ github.com/tklauser/go-sysconf v0.3.12 // indirect
+ github.com/tklauser/numcpus v0.6.1 // indirect
+ github.com/x448/float16 v0.8.4 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opentelemetry.io/auto/sdk v1.1.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.35.0 // indirect
+ go.opentelemetry.io/otel/metric v1.35.0 // indirect
+ go.opentelemetry.io/otel/trace v1.35.0 // indirect
+ golang.org/x/crypto v0.35.0 // indirect
+ golang.org/x/sys v0.31.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/surrealdb/go.sum b/surrealdb/go.sum
new file mode 100644
index 00000000..91f0ae08
--- /dev/null
+++ b/surrealdb/go.sum
@@ -0,0 +1,163 @@
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
+github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
+github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
+github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
+github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
+github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
+github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
+github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
+github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
+github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
+github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
+github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
+github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
+github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
+github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
+github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
+github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
+github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
+github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
+github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
+github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
+github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
+github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
+github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
+github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
+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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
+github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
+github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ=
+github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q=
+github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00=
+github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0=
+github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI=
+github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ=
+github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
+github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
+github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
+github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
+github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
+go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
+go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
+go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
+go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
+go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+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.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
+golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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-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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go
new file mode 100644
index 00000000..ff32a779
--- /dev/null
+++ b/surrealdb/surrealdb.go
@@ -0,0 +1,74 @@
+package surrealdb
+
+import (
+ "github.com/surrealdb/surrealdb.go"
+ "time"
+)
+
+// Storage interface that is implemented by storage providers
+type Storage struct {
+ db *surrealdb.DB
+}
+
+func New(config ...Config) *Storage {
+ cfg := configDefault(config...)
+ db, err := surrealdb.New(cfg.ConnectionString)
+ if err != nil {
+ panic(err)
+ }
+
+ if err = db.Use(cfg.Namespace, cfg.Database); err != nil {
+ panic(err)
+ }
+
+ authData := &surrealdb.Auth{
+ Username: cfg.Username,
+ Password: cfg.Password,
+ Access: cfg.Access,
+ Scope: cfg.Scope,
+ }
+
+ token, err := db.SignIn(authData)
+ if err != nil {
+ panic(err)
+ }
+
+ if err := db.Authenticate(token); err != nil {
+ panic(err)
+ }
+
+ //defer func(token string) {
+ // if err := db.Invalidate(); err != nil {
+ // panic(err)
+ // }
+ //}(token)
+
+ return &Storage{
+ db: db,
+ }
+}
+
+func (s *Storage) Get(key string) ([]byte, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (s *Storage) Delete(key string) error {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (s *Storage) Reset() error {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (s *Storage) Close() error {
+ //TODO implement me
+ panic("implement me")
+}
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
new file mode 100644
index 00000000..bfdb97a5
--- /dev/null
+++ b/surrealdb/surrealdb_test.go
@@ -0,0 +1,24 @@
+package surrealdb
+
+import (
+ "github.com/stretchr/testify/require"
+ "os"
+ "testing"
+)
+
+var testStore *Storage
+var testConfig = ConfigDefault
+
+func TestMain(m *testing.M) {
+ testStore = New(testConfig)
+
+ code := m.Run()
+ testStore.Close()
+ os.Exit(code)
+}
+
+func Test_Surrealdb_Get(t *testing.T) {
+ bytes, err := testStore.Get("")
+ require.NoError(t, err)
+ require.Nil(t, bytes)
+}
From 38d42c947fd2ddec96c3767744a1298581c95803 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Mon, 7 Apr 2025 21:27:32 +0300
Subject: [PATCH 02/27] feat(surrealdb): add crud methods and write basic tests
---
surrealdb/config.go | 11 ++++++
surrealdb/surrealdb.go | 71 +++++++++++++++++++++++++++++--------
surrealdb/surrealdb_test.go | 57 ++++++++++++++++++++++++++---
3 files changed, 121 insertions(+), 18 deletions(-)
diff --git a/surrealdb/config.go b/surrealdb/config.go
index e8ba6926..fbcc8219 100644
--- a/surrealdb/config.go
+++ b/surrealdb/config.go
@@ -10,6 +10,8 @@ type Config struct {
Password string
Access string
Scope string
+
+ DefaultTable string
}
var ConfigDefault = Config{
@@ -20,6 +22,7 @@ var ConfigDefault = Config{
Password: "root",
Access: "full",
Scope: "all",
+ DefaultTable: "fiber_storage",
}
func configDefault(config ...Config) Config {
@@ -55,5 +58,13 @@ func configDefault(config ...Config) Config {
cfg.Scope = ConfigDefault.Scope
}
+ if cfg.Access == "" {
+ cfg.Access = ConfigDefault.Access
+ }
+
+ if cfg.DefaultTable == "" {
+ cfg.DefaultTable = ConfigDefault.DefaultTable
+ }
+
return cfg
}
diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go
index ff32a779..3f693e10 100644
--- a/surrealdb/surrealdb.go
+++ b/surrealdb/surrealdb.go
@@ -1,13 +1,23 @@
package surrealdb
import (
+ "encoding/json"
+ "fmt"
"github.com/surrealdb/surrealdb.go"
+ "github.com/surrealdb/surrealdb.go/pkg/models"
"time"
)
// Storage interface that is implemented by storage providers
type Storage struct {
- db *surrealdb.DB
+ db *surrealdb.DB
+ table string
+}
+
+type model struct {
+ Key string `json:"k"`
+ Val []byte `json:"v"`
+ Exp int64 `json:"e"`
}
func New(config ...Config) *Storage {
@@ -24,8 +34,6 @@ func New(config ...Config) *Storage {
authData := &surrealdb.Auth{
Username: cfg.Username,
Password: cfg.Password,
- Access: cfg.Access,
- Scope: cfg.Scope,
}
token, err := db.SignIn(authData)
@@ -44,31 +52,66 @@ func New(config ...Config) *Storage {
//}(token)
return &Storage{
- db: db,
+ db: db,
+ table: cfg.DefaultTable,
}
}
func (s *Storage) Get(key string) ([]byte, error) {
- // TODO implement me
- panic("implement me")
+ recordID := models.NewRecordID(s.table, key)
+ m, err := surrealdb.Select[model, models.RecordID](s.db, recordID)
+ if err != nil {
+ return nil, err
+ }
+ bytes, err := json.Marshal(m)
+ if err != nil {
+ return nil, err
+ }
+ return bytes, nil
}
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
- //TODO implement me
- panic("implement me")
+ create, err := surrealdb.Create[model](s.db, models.Table(key), &model{Key: key, Val: val, Exp: int64(exp)})
+ if err != nil {
+ return err
+ }
+
+ bytes, err := json.Marshal(create)
+ if err != nil {
+ return err
+ }
+ fmt.Println(string(bytes))
+ return nil
}
func (s *Storage) Delete(key string) error {
- //TODO implement me
- panic("implement me")
+ _, err := surrealdb.Delete[model](s.db, models.NewRecordID(s.table, key))
+ if err != nil {
+ return err
+ }
+ return nil
}
func (s *Storage) Reset() error {
- //TODO implement me
- panic("implement me")
+ _, err := surrealdb.Delete[[]model](s.db, models.Table(s.table))
+ if err != nil {
+ return err
+ }
+ return nil
}
func (s *Storage) Close() error {
- //TODO implement me
- panic("implement me")
+ return s.db.Close()
+}
+
+func (s *Storage) List(table string) ([]byte, error) {
+ a, err := surrealdb.Select[[]map[string]interface{}, models.Table](s.db, models.Table(table))
+ if err != nil {
+ return nil, err
+ }
+ bytes, err := json.Marshal(a)
+ if err != nil {
+ return nil, err
+ }
+ return bytes, nil
}
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index bfdb97a5..45281b14 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -1,6 +1,8 @@
package surrealdb
import (
+ "encoding/json"
+ "fmt"
"github.com/stretchr/testify/require"
"os"
"testing"
@@ -17,8 +19,55 @@ func TestMain(m *testing.M) {
os.Exit(code)
}
-func Test_Surrealdb_Get(t *testing.T) {
- bytes, err := testStore.Get("")
- require.NoError(t, err)
- require.Nil(t, bytes)
+type testData struct {
+ Name string `json:"name"`
+ Age int `json:"age"`
+}
+
+var data = testData{
+ Name: "john",
+ Age: 35,
+}
+
+func Test_Surrealdb_Create(t *testing.T) {
+ jsonData, err := json.Marshal(data)
+ require.NoError(t, err)
+ err = testStore.Set(testConfig.DefaultTable, jsonData, 0)
+ require.NoError(t, err)
+}
+
+func Test_Surrealdb_CreateAndGet(t *testing.T) {
+ jsonData, err := json.Marshal(data)
+ require.NoError(t, err)
+ err = testStore.Set(testConfig.DefaultTable, jsonData, 0)
+ require.NoError(t, err)
+
+ get, err := testStore.Get("yy2l8qwx55wc7ksxxjiz")
+ require.NoError(t, err)
+ require.NotEmpty(t, get)
+
+}
+
+func Test_Surrealdb_ListTable(t *testing.T) {
+ bytes, err := testStore.List(testConfig.DefaultTable)
+ require.NoError(t, err)
+ require.NotEmpty(t, bytes)
+
+ fmt.Println(string(bytes))
+}
+
+func Test_Surrealdb_Get(t *testing.T) {
+ get, err := testStore.Get("783njhf8t4gkwlrvapsl")
+ require.NoError(t, err)
+ require.NotEmpty(t, get)
+}
+
+func Test_Surrealdb_Delete(t *testing.T) {
+ err := testStore.Delete("qzplvi8yadeymz3az09c")
+ require.NoError(t, err)
+}
+
+func Test_Surrealdb_Flush(t *testing.T) {
+ err := testStore.Reset()
+ require.NoError(t, err)
}
From bc1d9a9bdc1703cc14fc30ccfa718482a0e8aa96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 01:21:19 +0300
Subject: [PATCH 03/27] added "testStore.Close()" to error handling
---
surrealdb/config.go | 36 ++++++++--
surrealdb/go.mod | 49 +------------
surrealdb/go.sum | 139 +-----------------------------------
surrealdb/surrealdb.go | 105 ++++++++++++++++-----------
surrealdb/surrealdb_test.go | 59 ++++++++-------
5 files changed, 129 insertions(+), 259 deletions(-)
diff --git a/surrealdb/config.go b/surrealdb/config.go
index fbcc8219..bae58cbf 100644
--- a/surrealdb/config.go
+++ b/surrealdb/config.go
@@ -1,16 +1,40 @@
package surrealdb
+// Config holds the configuration required to initialize and connect to a SurrealDB instance.
+// It includes authentication credentials, namespace/database selection, and default storage settings.
+//
+// Fields:
+// - ConnectionString: the full SurrealDB connection URL (e.g., "ws://localhost:8000").
+// - Namespace: the namespace to use when connecting to SurrealDB.
+// - Database: the database name within the specified namespace.
+// - Username: the SurrealDB root or application-level username for authentication.
+// - Password: the associated password for the given username.
+// - Access: optional field for token-based access (not always required).
+// - Scope: optional scope name for scoped authentication (e.g., user login scopes).
+// - DefaultTable: the default table name where key-value records will be stored.
type Config struct {
+ // The connection URL to connect to SurrealDB
ConnectionString string
- Namespace string
- Database string
- // auth
+ // The namespace to be used in SurrealDB
+ Namespace string
+
+ // The database to be used within the specified namespace
+ Database string
+
+ // The application username to connect to SurrealDB
Username string
- Password string
- Access string
- Scope string
+ // The application password to connect to SurrealDB
+ Password string
+
+ // Optional access token or access type
+ Access string
+
+ // Optional scope for scoped logins (e.g., user-defined scopes)
+ Scope string
+
+ // The default table used to store key-value records
DefaultTable string
}
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
index 67788233..8b284a0c 100644
--- a/surrealdb/go.mod
+++ b/surrealdb/go.mod
@@ -1,6 +1,6 @@
module github.com/gofiber/storage/surrealdb/v2
-go 1.23.3
+go 1.22
require (
github.com/stretchr/testify v1.10.0
@@ -8,58 +8,13 @@ require (
)
require (
- dario.cat/mergo v1.0.1 // indirect
- github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
- github.com/Microsoft/go-winio v0.6.2 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
- github.com/containerd/log v0.1.0 // indirect
- github.com/containerd/platforms v0.2.1 // indirect
- github.com/cpuguy83/dockercfg v0.3.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/distribution/reference v0.6.0 // indirect
- github.com/docker/docker v28.0.1+incompatible // indirect
- github.com/docker/go-connections v0.5.0 // indirect
- github.com/docker/go-units v0.5.0 // indirect
- github.com/ebitengine/purego v0.8.2 // indirect
- github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
- github.com/go-logr/logr v1.4.2 // indirect
- github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
github.com/gofrs/uuid v4.4.0+incompatible // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
- github.com/klauspost/compress v1.17.4 // indirect
github.com/kr/text v0.2.0 // indirect
- github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/magiconair/properties v1.8.9 // indirect
- github.com/moby/docker-image-spec v1.3.1 // indirect
- github.com/moby/patternmatcher v0.6.0 // indirect
- github.com/moby/sys/sequential v0.5.0 // indirect
- github.com/moby/sys/user v0.1.0 // indirect
- github.com/moby/sys/userns v0.1.0 // indirect
- github.com/moby/term v0.5.0 // indirect
- github.com/morikuni/aec v1.0.0 // indirect
- github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.1 // indirect
- github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/shirou/gopsutil/v4 v4.25.1 // indirect
- github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/testcontainers/testcontainers-go v0.36.0 // indirect
- github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect
- github.com/tklauser/go-sysconf v0.3.12 // indirect
- github.com/tklauser/numcpus v0.6.1 // indirect
+ github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
- github.com/yusufpapurcu/wmi v1.2.4 // indirect
- go.opentelemetry.io/auto/sdk v1.1.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
- go.opentelemetry.io/otel v1.35.0 // indirect
- go.opentelemetry.io/otel/metric v1.35.0 // indirect
- go.opentelemetry.io/otel/trace v1.35.0 // indirect
- golang.org/x/crypto v0.35.0 // indirect
- golang.org/x/sys v0.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/surrealdb/go.sum b/surrealdb/go.sum
index 91f0ae08..83e1e50e 100644
--- a/surrealdb/go.sum
+++ b/surrealdb/go.sum
@@ -1,163 +1,28 @@
-dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
-dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
-github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
-github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
-github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
-github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
-github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
-github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
-github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
-github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
-github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
-github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
-github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
-github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
-github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
-github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
-github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
-github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
-github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
-github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
-github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
-github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
-github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
-github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
-github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
-github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
-github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
-github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
-github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
-github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
-github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
-github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
-github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
-github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
-github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
-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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
-github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
-github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=
-github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
-github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
+github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ=
github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q=
-github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00=
-github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0=
-github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI=
-github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ=
-github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
-github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
-github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
-github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
-go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
-go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
-go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
-go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
-go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
-go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-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.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
-golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
-golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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-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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go
index 3f693e10..c562300e 100644
--- a/surrealdb/surrealdb.go
+++ b/surrealdb/surrealdb.go
@@ -2,7 +2,7 @@ package surrealdb
import (
"encoding/json"
- "fmt"
+ "errors"
"github.com/surrealdb/surrealdb.go"
"github.com/surrealdb/surrealdb.go/pkg/models"
"time"
@@ -14,21 +14,30 @@ type Storage struct {
table string
}
+// model represents a key-value storage record used in SurrealDB.
+// It contains the key name, the stored byte value, and an optional expiration timestamp.
+//
+// Fields:
+// - Key: the unique identifier for the stored item.
+// - Body: the value stored as a byte slice (can represent any serialized data, such as JSON).
+// - Exp: the expiration time as a Unix timestamp (0 means no expiration).
type model struct {
- Key string `json:"k"`
- Val []byte `json:"v"`
- Exp int64 `json:"e"`
+ Key string `json:"key"`
+ Body []byte `json:"body"`
+ Exp int64 `json:"exp"`
}
-func New(config ...Config) *Storage {
+// New creates a new SurrealDB storage instance using the provided configuration.
+// Returns an error if the connection or authentication fails.
+func New(config ...Config) (*Storage, error) {
cfg := configDefault(config...)
db, err := surrealdb.New(cfg.ConnectionString)
if err != nil {
- panic(err)
+ return nil, err
}
if err = db.Use(cfg.Namespace, cfg.Database); err != nil {
- panic(err)
+ return nil, err
}
authData := &surrealdb.Auth{
@@ -38,80 +47,90 @@ func New(config ...Config) *Storage {
token, err := db.SignIn(authData)
if err != nil {
- panic(err)
+ return nil, err
}
- if err := db.Authenticate(token); err != nil {
- panic(err)
+ if err = db.Authenticate(token); err != nil {
+ return nil, err
}
- //defer func(token string) {
- // if err := db.Invalidate(); err != nil {
- // panic(err)
- // }
- //}(token)
-
return &Storage{
db: db,
table: cfg.DefaultTable,
- }
+ }, nil
}
func (s *Storage) Get(key string) ([]byte, error) {
+ if len(key) == 0 {
+ return nil, errors.New("key is required")
+ }
+
recordID := models.NewRecordID(s.table, key)
m, err := surrealdb.Select[model, models.RecordID](s.db, recordID)
if err != nil {
return nil, err
}
- bytes, err := json.Marshal(m)
- if err != nil {
- return nil, err
+
+ if m.Exp > 0 && time.Now().Unix() > m.Exp {
+ _ = s.Delete(key)
+ return nil, nil
}
- return bytes, nil
+
+ return m.Body, nil
}
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
- create, err := surrealdb.Create[model](s.db, models.Table(key), &model{Key: key, Val: val, Exp: int64(exp)})
- if err != nil {
- return err
+ if len(key) == 0 {
+ return errors.New("key is required")
}
- bytes, err := json.Marshal(create)
- if err != nil {
- return err
+ var expiresAt int64
+ if exp > 0 {
+ expiresAt = time.Now().Add(exp).Unix()
}
- fmt.Println(string(bytes))
- return nil
+
+ _, err := surrealdb.Create[model](s.db, models.NewRecordID(s.table, key), &model{
+ Key: key,
+ Body: val,
+ Exp: expiresAt,
+ })
+ return err
}
func (s *Storage) Delete(key string) error {
- _, err := surrealdb.Delete[model](s.db, models.NewRecordID(s.table, key))
- if err != nil {
- return err
+ if len(key) == 0 {
+ return errors.New("key is required")
}
- return nil
+
+ _, err := surrealdb.Delete[model](s.db, models.NewRecordID(s.table, key))
+ return err
}
func (s *Storage) Reset() error {
_, err := surrealdb.Delete[[]model](s.db, models.Table(s.table))
- if err != nil {
- return err
- }
- return nil
+ return err
}
func (s *Storage) Close() error {
return s.db.Close()
}
-func (s *Storage) List(table string) ([]byte, error) {
- a, err := surrealdb.Select[[]map[string]interface{}, models.Table](s.db, models.Table(table))
+func (s *Storage) List() ([]byte, error) {
+ records, err := surrealdb.Select[[]model, models.Table](s.db, models.Table(s.table))
if err != nil {
return nil, err
}
- bytes, err := json.Marshal(a)
- if err != nil {
- return nil, err
+
+ data := make(map[string][]byte, len(*records))
+ now := time.Now().Unix()
+
+ for _, item := range *records {
+ if item.Exp > 0 && now > item.Exp {
+ _ = s.Delete(item.Key)
+ continue
+ }
+ data[item.Key] = item.Body
}
- return bytes, nil
+
+ return json.Marshal(data)
}
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index 45281b14..f88474dc 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -1,7 +1,6 @@
package surrealdb
import (
- "encoding/json"
"fmt"
"github.com/stretchr/testify/require"
"os"
@@ -12,58 +11,51 @@ var testStore *Storage
var testConfig = ConfigDefault
func TestMain(m *testing.M) {
- testStore = New(testConfig)
+ var err error
+ testStore, err = New(testConfig)
+ if err != nil {
+ panic(err)
+ }
code := m.Run()
- testStore.Close()
+ if err := testStore.Close(); err != nil {
+ fmt.Fprintf(os.Stderr, "failed to close store: %v\n", err)
+ }
os.Exit(code)
}
-type testData struct {
- Name string `json:"name"`
- Age int `json:"age"`
-}
-
-var data = testData{
- Name: "john",
- Age: 35,
-}
-
func Test_Surrealdb_Create(t *testing.T) {
- jsonData, err := json.Marshal(data)
- require.NoError(t, err)
- err = testStore.Set(testConfig.DefaultTable, jsonData, 0)
+ err := testStore.Set("create", []byte("test12345"), 0)
require.NoError(t, err)
}
func Test_Surrealdb_CreateAndGet(t *testing.T) {
- jsonData, err := json.Marshal(data)
- require.NoError(t, err)
- err = testStore.Set(testConfig.DefaultTable, jsonData, 0)
+ err := testStore.Set("createandget", []byte("test1234"), 0)
require.NoError(t, err)
- get, err := testStore.Get("yy2l8qwx55wc7ksxxjiz")
+ get, err := testStore.Get("createandget")
require.NoError(t, err)
require.NotEmpty(t, get)
}
func Test_Surrealdb_ListTable(t *testing.T) {
- bytes, err := testStore.List(testConfig.DefaultTable)
+ bytes, err := testStore.List()
require.NoError(t, err)
require.NotEmpty(t, bytes)
-
- fmt.Println(string(bytes))
}
-func Test_Surrealdb_Get(t *testing.T) {
- get, err := testStore.Get("783njhf8t4gkwlrvapsl")
+func Test_Surrealdb_Get_WithNoErr(t *testing.T) {
+ get, err := testStore.Get("create")
require.NoError(t, err)
require.NotEmpty(t, get)
}
func Test_Surrealdb_Delete(t *testing.T) {
- err := testStore.Delete("qzplvi8yadeymz3az09c")
+ err := testStore.Set("delete", []byte("delete1234"), 0)
+ require.NoError(t, err)
+
+ err = testStore.Delete("delete")
require.NoError(t, err)
}
@@ -71,3 +63,18 @@ func Test_Surrealdb_Flush(t *testing.T) {
err := testStore.Reset()
require.NoError(t, err)
}
+
+func BenchmarkSet(b *testing.B) {
+ store, err := New(ConfigDefault)
+ if err != nil {
+ b.Fatalf("failed to init storage: %v", err)
+ }
+ defer store.Close()
+
+ for i := 0; i < b.N; i++ {
+ err := store.Set(fmt.Sprintf("bench-key-%d", i), []byte("value"), 0)
+ if err != nil {
+ b.Errorf("Set failed: %v", err)
+ }
+ }
+}
From 48d18604d40dbe5d55ae1ae9a4915eb88d9f0699 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 01:41:03 +0300
Subject: [PATCH 04/27] added some tests
---
surrealdb/surrealdb_test.go | 40 +++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index f88474dc..dc13c069 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -1,10 +1,12 @@
package surrealdb
import (
+ "encoding/json"
"fmt"
"github.com/stretchr/testify/require"
"os"
"testing"
+ "time"
)
var testStore *Storage
@@ -64,6 +66,44 @@ func Test_Surrealdb_Flush(t *testing.T) {
require.NoError(t, err)
}
+func Test_Surrealdb_GetExpired(t *testing.T) {
+ err := testStore.Set("temp", []byte("value"), 1*time.Second)
+ require.NoError(t, err)
+
+ time.Sleep(2 * time.Second)
+
+ val, err := testStore.Get("temp")
+ require.NoError(t, err)
+ require.Nil(t, val)
+}
+
+func Test_Surrealdb_GetMissing(t *testing.T) {
+ val, err := testStore.Get("non-existent-key")
+ require.NoError(t, err)
+ require.Nil(t, val)
+}
+
+func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
+ _ = testStore.Reset()
+
+ // Geçerli kayıt
+ _ = testStore.Set("valid", []byte("123"), 0)
+
+ // Süresi geçen kayıt
+ _ = testStore.Set("expired", []byte("456"), 1*time.Second)
+ time.Sleep(2 * time.Second)
+
+ // List çağrısı
+ data, err := testStore.List()
+ require.NoError(t, err)
+
+ var result map[string][]byte
+ err = json.Unmarshal(data, &result)
+ require.NoError(t, err)
+
+ require.Contains(t, result, "valid")
+ require.NotContains(t, result, "expired")
+}
func BenchmarkSet(b *testing.B) {
store, err := New(ConfigDefault)
if err != nil {
From d0f987d2f8c671763caa6bb84ce65fce27e1d1d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 02:16:33 +0300
Subject: [PATCH 05/27] added readme and github actions file
---
.github/workflows/test-surrealdb.yml | 35 +++++++++
surrealdb/README.md | 105 +++++++++++++++++++++++++++
2 files changed, 140 insertions(+)
create mode 100644 .github/workflows/test-surrealdb.yml
create mode 100644 surrealdb/README.md
diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml
new file mode 100644
index 00000000..d85b2249
--- /dev/null
+++ b/.github/workflows/test-surrealdb.yml
@@ -0,0 +1,35 @@
+on:
+ push:
+ branches:
+ - master
+ - main
+ paths:
+ - 'surrealdb/**'
+ pull_request:
+ paths:
+ - 'surrealdb/**'
+name: "Tests SurrealDB"
+jobs:
+ Tests:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ go-version:
+ - 1.22.x
+ - 1.23.x
+ - 1.24.x
+ services:
+ surrealdb:
+ image: 'surrealdb/surrealdb:latest'
+ ports:
+ - '8000:8000'
+ command: ["start", "--user", "root", "--pass", "root"]
+ steps:
+ - name: Fetch Repository
+ uses: actions/checkout@v4
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ go-version: '${{ matrix.go-version }}'
+ - name: Run Test
+ run: cd ./surrealdb && go test ./... -v -race
diff --git a/surrealdb/README.md b/surrealdb/README.md
new file mode 100644
index 00000000..0459d273
--- /dev/null
+++ b/surrealdb/README.md
@@ -0,0 +1,105 @@
+---
+id: surrealdb
+title: SurrealDB
+---
+
+
+[](https://gofiber.io/discord)
+
+
+A SurrealDB storage driver using [surrealdb/surrealdb.go](https://github.com/surrealdb/surrealdb.go).
+
+**Note: Requires Go 1.20 and above**
+
+### Table of Contents
+- [Signatures](#signatures)
+- [Installation](#installation)
+- [Examples](#examples)
+- [Config](#config)
+- [Default Config](#default-config)
+
+### Signatures
+```go
+func New(config ...Config) (*Storage, error)
+func (s *Storage) Get(key string) ([]byte, error)
+func (s *Storage) Set(key string, val []byte, exp time.Duration) error
+func (s *Storage) Delete(key string) error
+func (s *Storage) Reset() error
+func (s *Storage) Close() error
+func (s *Storage) Conn() *gocb.Cluster
+func (s *Storage) List() ([]byte, error) {
+```
+### Installation
+SurrealDB is tested on Go 1.22 and 1.23 with support for modules.
+Make sure to initialize a Go module first if you haven’t already:
+```bash
+go get github.com/gofiber/storage/surrealdb/v2
+```
+
+### Examples
+Import the storage package.
+```go
+import "github.com/gofiber/storage/surrealdb/v2"
+```
+
+You can use the following possibilities to create a storage:
+```go
+// Initialize default config
+store, err := surrealdb.New()
+
+// Initialize SurrealDB storage with custom config
+store, err := surrealdb.New(Config{
+ConnectionString: "ws://localhost:8000",
+Namespace: "fiber_storage",
+Database: "fiber_storage",
+Username: "root",
+Password: "root",
+Access: "full",
+Scope: "all",
+DefaultTable: "fiber_storage",
+})
+```
+
+### Config
+```go
+type Config struct {
+// The connection URL to connect to SurrealDB
+ConnectionString string
+
+// The namespace to be used in SurrealDB
+Namespace string
+
+// The database to be used within the specified namespace
+Database string
+
+// The application username to connect to SurrealDB
+Username string
+
+// The application password to connect to SurrealDB
+Password string
+
+// Optional access token or access type
+Access string
+
+// Optional scope for scoped logins (e.g., user-defined scopes)
+Scope string
+
+// The default table used to store key-value records
+DefaultTable string
+}
+```
+
+### Default Config
+```go
+// ConfigDefault is the default config
+var ConfigDefault = Config{
+ConnectionString: "ws://localhost:8000",
+Namespace: "fiber_storage",
+Database: "fiber_storage",
+Username: "root",
+Password: "root",
+Access: "full",
+Scope: "all",
+DefaultTable: "fiber_storage",
+}
+```
From 0c639e37cae8ad893add12c062109db464f37dee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 02:30:20 +0300
Subject: [PATCH 06/27] waiting for surrealdb
---
.github/workflows/test-surrealdb.yml | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml
index d85b2249..3794c0e1 100644
--- a/.github/workflows/test-surrealdb.yml
+++ b/.github/workflows/test-surrealdb.yml
@@ -23,13 +23,21 @@ jobs:
image: 'surrealdb/surrealdb:latest'
ports:
- '8000:8000'
- command: ["start", "--user", "root", "--pass", "root"]
+ command: [ "start", "--user", "root", "--pass", "root" ]
steps:
- name: Fetch Repository
uses: actions/checkout@v4
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: '${{ matrix.go-version }}'
- - name: Run Test
- run: cd ./surrealdb && go test ./... -v -race
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ go-version: '${{ matrix.go-version }}'
+
+ - name: Wait for SurrealDB
+ run: |
+ for i in {1..15}; do
+ nc -z localhost 8000 && echo "SurrealDB is up!" && break
+ echo "Waiting for SurrealDB..."
+ sleep 2
+ done
+ - name: Run Test
+ run: cd ./surrealdb && go test ./... -v -race
From 7306bb3b4cf79d817b443924d1d52ed6bb2e4696 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 02:42:05 +0300
Subject: [PATCH 07/27] refactored yml files
---
.github/workflows/benchmark.yml | 6 +++++-
.github/workflows/test-surrealdb.yml | 10 ++++------
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index 66da8d39..d656bb96 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -109,7 +109,11 @@ jobs:
run: |
docker run --name scylladb -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9180:9180 -d scylladb/scylla:latest --broadcast-address 127.0.0.1 --listen-address 0.0.0.0 --broadcast-rpc-address 127.0.0.1
sleep 15 # Wait for ScyllaDb to initialize
-
+ - name: Install SurrealDB
+ if: ${{ matrix.package == 'surrealdb' }}
+ run: |
+ docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root
+ sleep 30 # wait for SurrealDb to initialize
- name: Setup Redis
if: ${{ matrix.package == 'redis' || matrix.package == 'rueidis' }}
uses: shogo82148/actions-setup-redis@v1
diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml
index 3794c0e1..ef8ffdd3 100644
--- a/.github/workflows/test-surrealdb.yml
+++ b/.github/workflows/test-surrealdb.yml
@@ -32,12 +32,10 @@ jobs:
with:
go-version: '${{ matrix.go-version }}'
- - name: Wait for SurrealDB
+ - name: Run ScyllaDb
run: |
- for i in {1..15}; do
- nc -z localhost 8000 && echo "SurrealDB is up!" && break
- echo "Waiting for SurrealDB..."
- sleep 2
- done
+ docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root
+ sleep 30 # Wait for SurrealDb to initialize
+
- name: Run Test
run: cd ./surrealdb && go test ./... -v -race
From dfec0c6f76ffda091f2e17e2889349b87800754d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 02:46:05 +0300
Subject: [PATCH 08/27] added reset to the benchmark
---
surrealdb/surrealdb_test.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index dc13c069..5679180e 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -110,6 +110,7 @@ func BenchmarkSet(b *testing.B) {
b.Fatalf("failed to init storage: %v", err)
}
defer store.Close()
+ _ = store.Reset()
for i := 0; i < b.N; i++ {
err := store.Set(fmt.Sprintf("bench-key-%d", i), []byte("value"), 0)
From af43d028309c789f1d889528188c57f4c307f81e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 02:51:31 +0300
Subject: [PATCH 09/27] changed benchmark key
---
surrealdb/surrealdb_test.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index 5679180e..e0b6494d 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -110,10 +110,10 @@ func BenchmarkSet(b *testing.B) {
b.Fatalf("failed to init storage: %v", err)
}
defer store.Close()
- _ = store.Reset()
for i := 0; i < b.N; i++ {
- err := store.Set(fmt.Sprintf("bench-key-%d", i), []byte("value"), 0)
+ key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano())
+ err := store.Set(fmt.Sprintf("bench-key-%d", key), []byte("value"), 0)
if err != nil {
b.Errorf("Set failed: %v", err)
}
From 05c8d3ed0fbb3015f512dbd88165e430f87772bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 02:53:07 +0300
Subject: [PATCH 10/27] format key
---
surrealdb/surrealdb_test.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index e0b6494d..69c385e3 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -113,7 +113,7 @@ func BenchmarkSet(b *testing.B) {
for i := 0; i < b.N; i++ {
key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano())
- err := store.Set(fmt.Sprintf("bench-key-%d", key), []byte("value"), 0)
+ err := store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0)
if err != nil {
b.Errorf("Set failed: %v", err)
}
From 4701e7152992efc5ea6e84a3b470019472dec6cf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 04:43:37 +0300
Subject: [PATCH 11/27] apply review suggestions and minor fixes, except test
containers
---
.github/workflows/test-surrealdb.yml | 3 +--
surrealdb/README.md | 16 +++++-------
surrealdb/go.mod | 4 +--
surrealdb/surrealdb.go | 16 +++++++-----
surrealdb/surrealdb_test.go | 39 ++++++++++++++++------------
5 files changed, 42 insertions(+), 36 deletions(-)
diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml
index ef8ffdd3..6618f73a 100644
--- a/.github/workflows/test-surrealdb.yml
+++ b/.github/workflows/test-surrealdb.yml
@@ -15,7 +15,6 @@ jobs:
strategy:
matrix:
go-version:
- - 1.22.x
- 1.23.x
- 1.24.x
services:
@@ -32,7 +31,7 @@ jobs:
with:
go-version: '${{ matrix.go-version }}'
- - name: Run ScyllaDb
+ - name: Run SurrealDB
run: |
docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root
sleep 30 # Wait for SurrealDb to initialize
diff --git a/surrealdb/README.md b/surrealdb/README.md
index 0459d273..84a252d8 100644
--- a/surrealdb/README.md
+++ b/surrealdb/README.md
@@ -7,10 +7,6 @@ title: SurrealDB
[](https://gofiber.io/discord)

-A SurrealDB storage driver using [surrealdb/surrealdb.go](https://github.com/surrealdb/surrealdb.go).
-
-**Note: Requires Go 1.20 and above**
-
### Table of Contents
- [Signatures](#signatures)
- [Installation](#installation)
@@ -26,29 +22,29 @@ func (s *Storage) Set(key string, val []byte, exp time.Duration) error
func (s *Storage) Delete(key string) error
func (s *Storage) Reset() error
func (s *Storage) Close() error
-func (s *Storage) Conn() *gocb.Cluster
+func (s *Storage) Conn() *surrealdb.DB
func (s *Storage) List() ([]byte, error) {
```
### Installation
-SurrealDB is tested on Go 1.22 and 1.23 with support for modules.
+SurrealDB is tested on latest two version of Golang.
Make sure to initialize a Go module first if you haven’t already:
```bash
-go get github.com/gofiber/storage/surrealdb/v2
+go get github.com/gofiber/storage/surrealdb
```
### Examples
Import the storage package.
```go
-import "github.com/gofiber/storage/surrealdb/v2"
+import "github.com/gofiber/storage/surrealdb"
```
You can use the following possibilities to create a storage:
```go
// Initialize default config
-store, err := surrealdb.New()
+store := surrealdb.New()
// Initialize SurrealDB storage with custom config
-store, err := surrealdb.New(Config{
+store := surrealdb.New(Config{
ConnectionString: "ws://localhost:8000",
Namespace: "fiber_storage",
Database: "fiber_storage",
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
index 8b284a0c..46027166 100644
--- a/surrealdb/go.mod
+++ b/surrealdb/go.mod
@@ -1,6 +1,6 @@
-module github.com/gofiber/storage/surrealdb/v2
+module github.com/gofiber/storage/surrealdb
-go 1.22
+go 1.23
require (
github.com/stretchr/testify v1.10.0
diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go
index c562300e..44addfe2 100644
--- a/surrealdb/surrealdb.go
+++ b/surrealdb/surrealdb.go
@@ -29,15 +29,15 @@ type model struct {
// New creates a new SurrealDB storage instance using the provided configuration.
// Returns an error if the connection or authentication fails.
-func New(config ...Config) (*Storage, error) {
+func New(config ...Config) *Storage {
cfg := configDefault(config...)
db, err := surrealdb.New(cfg.ConnectionString)
if err != nil {
- return nil, err
+ panic(err)
}
if err = db.Use(cfg.Namespace, cfg.Database); err != nil {
- return nil, err
+ panic(err)
}
authData := &surrealdb.Auth{
@@ -47,17 +47,17 @@ func New(config ...Config) (*Storage, error) {
token, err := db.SignIn(authData)
if err != nil {
- return nil, err
+ panic(err)
}
if err = db.Authenticate(token); err != nil {
- return nil, err
+ panic(err)
}
return &Storage{
db: db,
table: cfg.DefaultTable,
- }, nil
+ }
}
func (s *Storage) Get(key string) ([]byte, error) {
@@ -115,6 +115,10 @@ func (s *Storage) Close() error {
return s.db.Close()
}
+func (s *Storage) Conn() *surrealdb.DB {
+ return s.db
+}
+
func (s *Storage) List() ([]byte, error) {
records, err := surrealdb.Select[[]model, models.Table](s.db, models.Table(s.table))
if err != nil {
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index 69c385e3..bc574675 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -13,11 +13,7 @@ var testStore *Storage
var testConfig = ConfigDefault
func TestMain(m *testing.M) {
- var err error
- testStore, err = New(testConfig)
- if err != nil {
- panic(err)
- }
+ testStore = New(testConfig)
code := m.Run()
if err := testStore.Close(); err != nil {
@@ -86,14 +82,11 @@ func Test_Surrealdb_GetMissing(t *testing.T) {
func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
_ = testStore.Reset()
- // Geçerli kayıt
_ = testStore.Set("valid", []byte("123"), 0)
- // Süresi geçen kayıt
_ = testStore.Set("expired", []byte("456"), 1*time.Second)
time.Sleep(2 * time.Second)
- // List çağrısı
data, err := testStore.List()
require.NoError(t, err)
@@ -104,18 +97,32 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
require.Contains(t, result, "valid")
require.NotContains(t, result, "expired")
}
+
func BenchmarkSet(b *testing.B) {
- store, err := New(ConfigDefault)
- if err != nil {
- b.Fatalf("failed to init storage: %v", err)
- }
+ store := New(ConfigDefault)
defer store.Close()
for i := 0; i < b.N; i++ {
key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano())
- err := store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0)
- if err != nil {
- b.Errorf("Set failed: %v", err)
- }
+ store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0)
+ }
+}
+
+func BenchmarkGet(b *testing.B) {
+ store := New(ConfigDefault)
+ defer store.Close()
+ store.Reset()
+
+ key := "bench-get-key"
+ value := []byte("some-value")
+
+ err := store.Set(key, value, 0)
+ if err != nil {
+ b.Fatalf("failed to prepare test value: %v", err)
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ store.Get(key)
}
}
From f13d0882af361c01b0041f09b80f85d2bfd45d0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 05:15:00 +0300
Subject: [PATCH 12/27] added testcontainers for testing
---
surrealdb/go.mod | 50 ++++++++++++-
surrealdb/go.sum | 135 ++++++++++++++++++++++++++++++++++++
surrealdb/surrealdb_test.go | 121 ++++++++++++++++++++++++++------
3 files changed, 283 insertions(+), 23 deletions(-)
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
index 46027166..aa87ddbe 100644
--- a/surrealdb/go.mod
+++ b/surrealdb/go.mod
@@ -1,6 +1,8 @@
module github.com/gofiber/storage/surrealdb
-go 1.23
+go 1.23.0
+
+toolchain go1.23.3
require (
github.com/stretchr/testify v1.10.0
@@ -8,13 +10,59 @@ require (
)
require (
+ dario.cat/mergo v1.0.1 // indirect
+ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
+ github.com/Microsoft/go-winio v0.6.2 // indirect
+ github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/containerd/log v0.1.0 // indirect
+ github.com/containerd/platforms v0.2.1 // indirect
+ github.com/cpuguy83/dockercfg v0.3.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
+ github.com/docker/docker v28.0.1+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
+ github.com/docker/go-units v0.5.0 // indirect
+ github.com/ebitengine/purego v0.8.2 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
+ github.com/go-logr/logr v1.4.2 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-ole/go-ole v1.2.6 // indirect
github.com/gofrs/uuid v4.4.0+incompatible // indirect
+ github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
+ github.com/klauspost/compress v1.17.4 // indirect
github.com/kr/text v0.2.0 // indirect
+ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
+ github.com/magiconair/properties v1.8.9 // indirect
+ github.com/moby/docker-image-spec v1.3.1 // indirect
+ github.com/moby/patternmatcher v0.6.0 // indirect
+ github.com/moby/sys/sequential v0.5.0 // indirect
+ github.com/moby/sys/user v0.1.0 // indirect
+ github.com/moby/sys/userns v0.1.0 // indirect
+ github.com/moby/term v0.5.0 // indirect
+ github.com/morikuni/aec v1.0.0 // indirect
+ github.com/opencontainers/go-digest v1.0.0 // indirect
+ github.com/opencontainers/image-spec v1.1.1 // indirect
+ github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
+ github.com/shirou/gopsutil/v4 v4.25.1 // indirect
+ github.com/sirupsen/logrus v1.9.3 // indirect
+ github.com/testcontainers/testcontainers-go v0.36.0 // indirect
+ github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect
+ github.com/tklauser/go-sysconf v0.3.12 // indirect
+ github.com/tklauser/numcpus v0.6.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opentelemetry.io/auto/sdk v1.1.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.35.0 // indirect
+ go.opentelemetry.io/otel/metric v1.35.0 // indirect
+ go.opentelemetry.io/otel/trace v1.35.0 // indirect
+ golang.org/x/crypto v0.35.0 // indirect
+ golang.org/x/sys v0.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/surrealdb/go.sum b/surrealdb/go.sum
index 83e1e50e..98417ab9 100644
--- a/surrealdb/go.sum
+++ b/surrealdb/go.sum
@@ -1,28 +1,163 @@
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
+github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
+github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
+github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
+github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
+github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
+github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
+github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
+github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
+github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
+github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
+github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
+github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
+github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
+github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
+github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
+github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
+github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
+github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
+github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
+github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
+github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
+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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
+github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
+github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ=
github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q=
+github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00=
+github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0=
+github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI=
+github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ=
+github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
+github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
+github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
+go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
+go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
+go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
+go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
+go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+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.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
+golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
+golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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-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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index bc574675..e611736b 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -1,34 +1,78 @@
package surrealdb
import (
+ "context"
"encoding/json"
"fmt"
"github.com/stretchr/testify/require"
+ "github.com/testcontainers/testcontainers-go"
+ "github.com/testcontainers/testcontainers-go/modules/surrealdb"
"os"
"testing"
"time"
)
-var testStore *Storage
-var testConfig = ConfigDefault
+var (
+ // surrealDb is the default image used for running surrealdb in tests.
+ surrealDb = "surrealdb/surrealdb:latest"
+ surrealDbImageEnvVar string = "TEST_SURREALDB_IMAGE"
+ surrealDbUser string = "root"
+ surrealDbPass string = "root"
+)
-func TestMain(m *testing.M) {
- testStore = New(testConfig)
+func newTestStore(t testing.TB) (*Storage, error) {
+ t.Helper()
- code := m.Run()
- if err := testStore.Close(); err != nil {
- fmt.Fprintf(os.Stderr, "failed to close store: %v\n", err)
+ img := surrealDb
+ if imgFromEnv := os.Getenv(surrealDbImageEnvVar); imgFromEnv != "" {
+ img = imgFromEnv
}
- os.Exit(code)
+ surrealdbContainer, err := surrealdb.Run(context.Background(), img)
+ if err != nil {
+ return nil, err
+ }
+
+ testcontainers.CleanupContainer(t, surrealdbContainer)
+
+ host, err := surrealdbContainer.Host(context.Background())
+ if err != nil {
+ return nil, err
+ }
+
+ port, err := surrealdbContainer.MappedPort(context.Background(), "8000")
+ if err != nil {
+ return nil, err
+ }
+
+ url := fmt.Sprintf("ws://%s:%s", host, port.Port())
+
+ return New(
+ Config{
+ ConnectionString: url,
+ Namespace: "testns",
+ Database: "testdb",
+ Username: surrealDbUser,
+ Password: surrealDbPass,
+ DefaultTable: "fiber_storage",
+ },
+ ), nil
}
func Test_Surrealdb_Create(t *testing.T) {
- err := testStore.Set("create", []byte("test12345"), 0)
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Set("create", []byte("test12345"), 0)
require.NoError(t, err)
}
func Test_Surrealdb_CreateAndGet(t *testing.T) {
- err := testStore.Set("createandget", []byte("test1234"), 0)
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Set("createandget", []byte("test1234"), 0)
require.NoError(t, err)
get, err := testStore.Get("createandget")
@@ -38,19 +82,34 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) {
}
func Test_Surrealdb_ListTable(t *testing.T) {
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
bytes, err := testStore.List()
require.NoError(t, err)
require.NotEmpty(t, bytes)
}
func Test_Surrealdb_Get_WithNoErr(t *testing.T) {
- get, err := testStore.Get("create")
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Set("create2", []byte("test1234"), 0)
+ require.NoError(t, err)
+
+ get, err := testStore.Get("create2")
require.NoError(t, err)
require.NotEmpty(t, get)
}
func Test_Surrealdb_Delete(t *testing.T) {
- err := testStore.Set("delete", []byte("delete1234"), 0)
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Set("delete", []byte("delete1234"), 0)
require.NoError(t, err)
err = testStore.Delete("delete")
@@ -58,12 +117,20 @@ func Test_Surrealdb_Delete(t *testing.T) {
}
func Test_Surrealdb_Flush(t *testing.T) {
- err := testStore.Reset()
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Reset()
require.NoError(t, err)
}
func Test_Surrealdb_GetExpired(t *testing.T) {
- err := testStore.Set("temp", []byte("value"), 1*time.Second)
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Set("temp", []byte("value"), 1*time.Second)
require.NoError(t, err)
time.Sleep(2 * time.Second)
@@ -74,12 +141,20 @@ func Test_Surrealdb_GetExpired(t *testing.T) {
}
func Test_Surrealdb_GetMissing(t *testing.T) {
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
val, err := testStore.Get("non-existent-key")
require.NoError(t, err)
require.Nil(t, val)
}
func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
_ = testStore.Reset()
_ = testStore.Set("valid", []byte("123"), 0)
@@ -99,30 +174,32 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
}
func BenchmarkSet(b *testing.B) {
- store := New(ConfigDefault)
- defer store.Close()
+ testStore, err := newTestStore(b)
+ require.NoError(b, err)
+ defer testStore.Close()
for i := 0; i < b.N; i++ {
key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano())
- store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0)
+ testStore.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0)
}
}
func BenchmarkGet(b *testing.B) {
- store := New(ConfigDefault)
- defer store.Close()
- store.Reset()
+ testStore, err := newTestStore(b)
+ require.NoError(b, err)
+ defer testStore.Close()
+ testStore.Reset()
key := "bench-get-key"
value := []byte("some-value")
- err := store.Set(key, value, 0)
+ err = testStore.Set(key, value, 0)
if err != nil {
b.Fatalf("failed to prepare test value: %v", err)
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
- store.Get(key)
+ testStore.Get(key)
}
}
From 685c6a67579a850c77959ccd567093812d6e9093 Mon Sep 17 00:00:00 2001
From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
Date: Mon, 7 Apr 2025 22:47:13 -0400
Subject: [PATCH 13/27] Update test-surrealdb.yml
---
.github/workflows/test-surrealdb.yml | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml
index 6618f73a..e98e7e9a 100644
--- a/.github/workflows/test-surrealdb.yml
+++ b/.github/workflows/test-surrealdb.yml
@@ -17,12 +17,6 @@ jobs:
go-version:
- 1.23.x
- 1.24.x
- services:
- surrealdb:
- image: 'surrealdb/surrealdb:latest'
- ports:
- - '8000:8000'
- command: [ "start", "--user", "root", "--pass", "root" ]
steps:
- name: Fetch Repository
uses: actions/checkout@v4
@@ -31,10 +25,5 @@ jobs:
with:
go-version: '${{ matrix.go-version }}'
- - name: Run SurrealDB
- run: |
- docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root
- sleep 30 # Wait for SurrealDb to initialize
-
- name: Run Test
run: cd ./surrealdb && go test ./... -v -race
From 496c0b684e8fe475daf9e34f32b9eb9025db9009 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 8 Apr 2025 13:04:21 +0300
Subject: [PATCH 14/27] fix review comments and switch to Upsert in Set
- Replaced Create with Upsert to allow overwriting existing keys
- Removed trailing spaces from line 2 and 3 in README
- Addressed other code review suggestions (naming, consistency, etc.)
---
surrealdb/README.md | 6 +--
surrealdb/surrealdb.go | 3 +-
surrealdb/surrealdb_test.go | 79 ++++++++++++++++++++++---------------
3 files changed, 52 insertions(+), 36 deletions(-)
diff --git a/surrealdb/README.md b/surrealdb/README.md
index 84a252d8..a4b2cad9 100644
--- a/surrealdb/README.md
+++ b/surrealdb/README.md
@@ -1,6 +1,6 @@
---
-id: surrealdb
-title: SurrealDB
+id: surrealdb
+title: SurrealDB
---

@@ -16,7 +16,7 @@ title: SurrealDB
### Signatures
```go
-func New(config ...Config) (*Storage, error)
+func New(config ...Config) (*Storage, error)
func (s *Storage) Get(key string) ([]byte, error)
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
func (s *Storage) Delete(key string) error
diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go
index 44addfe2..5f5382fa 100644
--- a/surrealdb/surrealdb.go
+++ b/surrealdb/surrealdb.go
@@ -89,7 +89,8 @@ func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
expiresAt = time.Now().Add(exp).Unix()
}
- _, err := surrealdb.Create[model](s.db, models.NewRecordID(s.table, key), &model{
+ // Upsert is used instead of Create to allow overriding the same key if it already exists.
+ _, err := surrealdb.Upsert[model](s.db, models.NewRecordID(s.table, key), &model{
Key: key,
Body: val,
Exp: expiresAt,
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index e611736b..204c7301 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -63,7 +63,7 @@ func Test_Surrealdb_Create(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
- err = testStore.Set("create", []byte("test12345"), 0)
+ err = testStore.Set("test", []byte("test12345"), 0)
require.NoError(t, err)
}
@@ -72,10 +72,10 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
- err = testStore.Set("createandget", []byte("test1234"), 0)
+ err = testStore.Set("test", []byte("test12345"), 0)
require.NoError(t, err)
- get, err := testStore.Get("createandget")
+ get, err := testStore.Get("test")
require.NoError(t, err)
require.NotEmpty(t, get)
@@ -96,10 +96,10 @@ func Test_Surrealdb_Get_WithNoErr(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
- err = testStore.Set("create2", []byte("test1234"), 0)
+ err = testStore.Set("test", []byte("test1234"), 0)
require.NoError(t, err)
- get, err := testStore.Get("create2")
+ get, err := testStore.Get("test")
require.NoError(t, err)
require.NotEmpty(t, get)
}
@@ -109,10 +109,10 @@ func Test_Surrealdb_Delete(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
- err = testStore.Set("delete", []byte("delete1234"), 0)
+ err = testStore.Set("test", []byte("delete1234"), 0)
require.NoError(t, err)
- err = testStore.Delete("delete")
+ err = testStore.Delete("test")
require.NoError(t, err)
}
@@ -121,7 +121,6 @@ func Test_Surrealdb_Flush(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
- err = testStore.Reset()
require.NoError(t, err)
}
@@ -155,8 +154,6 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
- _ = testStore.Reset()
-
_ = testStore.Set("valid", []byte("123"), 0)
_ = testStore.Set("expired", []byte("456"), 1*time.Second)
@@ -173,33 +170,51 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
require.NotContains(t, result, "expired")
}
-func BenchmarkSet(b *testing.B) {
+func Benchmark_SurrealDB_Set(b *testing.B) {
testStore, err := newTestStore(b)
require.NoError(b, err)
defer testStore.Close()
- for i := 0; i < b.N; i++ {
- key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano())
- testStore.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0)
- }
-}
-
-func BenchmarkGet(b *testing.B) {
- testStore, err := newTestStore(b)
- require.NoError(b, err)
- defer testStore.Close()
- testStore.Reset()
-
- key := "bench-get-key"
- value := []byte("some-value")
-
- err = testStore.Set(key, value, 0)
- if err != nil {
- b.Fatalf("failed to prepare test value: %v", err)
- }
-
+ b.ReportAllocs()
b.ResetTimer()
+
for i := 0; i < b.N; i++ {
- testStore.Get(key)
+ err = testStore.Set("john", []byte("doe"), 0)
}
+
+ require.NoError(b, err)
+}
+
+func Benchmark_SurrealDB_Get(b *testing.B) {
+ testStore, err := newTestStore(b)
+ require.NoError(b, err)
+ defer testStore.Close()
+
+ err = testStore.Set("john", []byte("doe"), 0)
+ require.NoError(b, err)
+
+ b.ReportAllocs()
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ _, err = testStore.Get("john")
+ }
+
+ require.NoError(b, err)
+}
+
+func Benchmark_SurrealDB_SetAndDelete(b *testing.B) {
+ testStore, err := newTestStore(b)
+ require.NoError(b, err)
+ defer testStore.Close()
+
+ b.ReportAllocs()
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ testStore.Set("john", []byte("doe"), 0)
+ err = testStore.Delete("john")
+ }
+
+ require.NoError(b, err)
}
From c425087442e45ef669d675f5020aec67763aabc8 Mon Sep 17 00:00:00 2001
From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
Date: Tue, 8 Apr 2025 08:12:58 -0400
Subject: [PATCH 15/27] Update README.md
---
surrealdb/README.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/surrealdb/README.md b/surrealdb/README.md
index a4b2cad9..d3294b40 100644
--- a/surrealdb/README.md
+++ b/surrealdb/README.md
@@ -8,6 +8,7 @@ title: SurrealDB

### Table of Contents
+
- [Signatures](#signatures)
- [Installation](#installation)
- [Examples](#examples)
@@ -15,6 +16,7 @@ title: SurrealDB
- [Default Config](#default-config)
### Signatures
+
```go
func New(config ...Config) (*Storage, error)
func (s *Storage) Get(key string) ([]byte, error)
@@ -25,20 +27,26 @@ func (s *Storage) Close() error
func (s *Storage) Conn() *surrealdb.DB
func (s *Storage) List() ([]byte, error) {
```
+
### Installation
+
SurrealDB is tested on latest two version of Golang.
Make sure to initialize a Go module first if you haven’t already:
+
```bash
go get github.com/gofiber/storage/surrealdb
```
### Examples
+
Import the storage package.
+
```go
import "github.com/gofiber/storage/surrealdb"
```
You can use the following possibilities to create a storage:
+
```go
// Initialize default config
store := surrealdb.New()
@@ -57,6 +65,7 @@ DefaultTable: "fiber_storage",
```
### Config
+
```go
type Config struct {
// The connection URL to connect to SurrealDB
@@ -86,6 +95,7 @@ DefaultTable string
```
### Default Config
+
```go
// ConfigDefault is the default config
var ConfigDefault = Config{
From 33ac0242fc89ab3fb2b97f4dcba6d775eb8ae022 Mon Sep 17 00:00:00 2001
From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
Date: Tue, 8 Apr 2025 08:24:24 -0400
Subject: [PATCH 16/27] Update go.mod
---
surrealdb/go.mod | 1 -
1 file changed, 1 deletion(-)
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
index aa87ddbe..8a8efbdd 100644
--- a/surrealdb/go.mod
+++ b/surrealdb/go.mod
@@ -2,7 +2,6 @@ module github.com/gofiber/storage/surrealdb
go 1.23.0
-toolchain go1.23.3
require (
github.com/stretchr/testify v1.10.0
From bc8ed05b291552c37541144390b92674ffe98d20 Mon Sep 17 00:00:00 2001
From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
Date: Thu, 17 Apr 2025 07:25:30 -0400
Subject: [PATCH 17/27] Update benchmark.yml
---
.github/workflows/benchmark.yml | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index ebf60722..3c820220 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -99,18 +99,6 @@ jobs:
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd:latest
- - name: Install ScyllaDb
- if: ${{ matrix.package == 'scylladb' }}
- run: |
- docker run --name scylladb -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9180:9180 -d scylladb/scylla:latest --broadcast-address 127.0.0.1 --listen-address 0.0.0.0 --broadcast-rpc-address 127.0.0.1
- sleep 15
-
- - name: Install SurrealDB
- if: ${{ matrix.package == 'surrealdb' }}
- run: |
- docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root
- sleep 30
-
- name: Setup Redis
if: ${{ matrix.package == 'redis' || matrix.package == 'rueidis' }}
uses: shogo82148/actions-setup-redis@v1
@@ -166,4 +154,4 @@ jobs:
auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
save-data-file: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
-
\ No newline at end of file
+
From d153ddd17b862d75d0128e0b636e98a428fb143b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Wed, 23 Apr 2025 16:54:13 +0300
Subject: [PATCH 18/27] feat(surrealdb): add operational mode configuration and
update tests
---
.github/workflows/benchmark.yml | 1 +
.github/workflows/test-surrealdb.yml | 4 +++-
README.md | 3 ++-
surrealdb/config.go | 8 ++++++++
surrealdb/surrealdb_test.go | 26 +++++++++++---------------
5 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index 3c820220..ad80ae08 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -133,6 +133,7 @@ jobs:
TEST_NATS_IMAGE: "nats:2-alpine"
TEST_POSTGRES_IMAGE: "docker.io/postgres:16-alpine"
TEST_SCYLLADB_IMAGE: "scylladb/scylla:6.2"
+ TEST_SURREALDB_IMAGE: "surrealdb/surrealdb:latest"
- name: Get Previous Benchmark Results
uses: actions/cache@v4
diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml
index e98e7e9a..740385ee 100644
--- a/.github/workflows/test-surrealdb.yml
+++ b/.github/workflows/test-surrealdb.yml
@@ -26,4 +26,6 @@ jobs:
go-version: '${{ matrix.go-version }}'
- name: Run Test
- run: cd ./surrealdb && go test ./... -v -race
+ env:
+ TEST_SURREALDB_IMAGE: surrealdb/surrealdb:latest
+ run: cd ./surrealdb && go test ./... -v -race
\ No newline at end of file
diff --git a/README.md b/README.md
index 699b16e6..71f60c31 100644
--- a/README.md
+++ b/README.md
@@ -77,4 +77,5 @@ type Storage interface {
- [ScyllaDB](./scylladb/README.md)
- [SQLite3](./sqlite3/README.md)
- [ClickHouse](./clickhouse/README.md)
-- [Valkey](./valkey/README.md)
\ No newline at end of file
+- [Valkey](./valkey/README.md)
+- [SurrealDB](./surrealdb/README.md)
\ No newline at end of file
diff --git a/surrealdb/config.go b/surrealdb/config.go
index bae58cbf..301b1e05 100644
--- a/surrealdb/config.go
+++ b/surrealdb/config.go
@@ -36,6 +36,13 @@ type Config struct {
// The default table used to store key-value records
DefaultTable string
+
+ // Mode determines the operational mode of SurrealDB.
+ // Accepted values:
+ // - "default" (requires authentication)
+ // - "memory" (in-memory mode, no authentication required)
+ // - "kv" (file-based key-value store, no authentication required)
+ Mode string
}
var ConfigDefault = Config{
@@ -47,6 +54,7 @@ var ConfigDefault = Config{
Access: "full",
Scope: "all",
DefaultTable: "fiber_storage",
+ Mode: "default", // default, kv, memory
}
func configDefault(config ...Config) Config {
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index 204c7301..ff9a1bd8 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -3,7 +3,6 @@ package surrealdb
import (
"context"
"encoding/json"
- "fmt"
"github.com/stretchr/testify/require"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/modules/surrealdb"
@@ -22,30 +21,28 @@ var (
func newTestStore(t testing.TB) (*Storage, error) {
t.Helper()
+ ctx := context.Background()
img := surrealDb
if imgFromEnv := os.Getenv(surrealDbImageEnvVar); imgFromEnv != "" {
img = imgFromEnv
}
- surrealdbContainer, err := surrealdb.Run(context.Background(), img)
+ surrealdbContainer, err := surrealdb.Run(
+ ctx, img,
+ surrealdb.WithUsername(surrealDbUser),
+ surrealdb.WithPassword(surrealDbPass),
+ )
if err != nil {
return nil, err
}
testcontainers.CleanupContainer(t, surrealdbContainer)
- host, err := surrealdbContainer.Host(context.Background())
+ url, err := surrealdbContainer.URL(ctx)
if err != nil {
return nil, err
}
- port, err := surrealdbContainer.MappedPort(context.Background(), "8000")
- if err != nil {
- return nil, err
- }
-
- url := fmt.Sprintf("ws://%s:%s", host, port.Port())
-
return New(
Config{
ConnectionString: url,
@@ -78,7 +75,6 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) {
get, err := testStore.Get("test")
require.NoError(t, err)
require.NotEmpty(t, get)
-
}
func Test_Surrealdb_ListTable(t *testing.T) {
@@ -132,11 +128,11 @@ func Test_Surrealdb_GetExpired(t *testing.T) {
err = testStore.Set("temp", []byte("value"), 1*time.Second)
require.NoError(t, err)
- time.Sleep(2 * time.Second)
-
- val, err := testStore.Get("temp")
+ require.Eventually(t, func() bool {
+ val, _ := testStore.Get("temp")
+ return val == nil
+ }, 3*time.Second, 100*time.Millisecond)
require.NoError(t, err)
- require.Nil(t, val)
}
func Test_Surrealdb_GetMissing(t *testing.T) {
From caa5078fef1b1b4333472f26a17da1293af0ac15 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Sat, 26 Apr 2025 11:12:59 +0300
Subject: [PATCH 19/27] added coderabbit suggestion
---
surrealdb/README.md | 3 ++-
surrealdb/config.go | 17 ++++++++++-------
surrealdb/surrealdb_test.go | 16 ++++++++++++++++
3 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/surrealdb/README.md b/surrealdb/README.md
index d3294b40..698ddb3f 100644
--- a/surrealdb/README.md
+++ b/surrealdb/README.md
@@ -18,7 +18,8 @@ title: SurrealDB
### Signatures
```go
-func New(config ...Config) (*Storage, error)
+func New(config ...Config) *Storage
+
func (s *Storage) Get(key string) ([]byte, error)
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
func (s *Storage) Delete(key string) error
diff --git a/surrealdb/config.go b/surrealdb/config.go
index 301b1e05..07bd974b 100644
--- a/surrealdb/config.go
+++ b/surrealdb/config.go
@@ -37,12 +37,12 @@ type Config struct {
// The default table used to store key-value records
DefaultTable string
- // Mode determines the operational mode of SurrealDB.
- // Accepted values:
- // - "default" (requires authentication)
- // - "memory" (in-memory mode, no authentication required)
- // - "kv" (file-based key-value store, no authentication required)
- Mode string
+ //// Mode determines the operational mode of SurrealDB.
+ //// Accepted values:
+ //// - "default" (requires authentication)
+ //// - "memory" (in-memory mode, no authentication required) - not supported
+ //// - "kv" (file-based key-value store, no authentication required) - not supported
+ //Mode string
}
var ConfigDefault = Config{
@@ -54,7 +54,6 @@ var ConfigDefault = Config{
Access: "full",
Scope: "all",
DefaultTable: "fiber_storage",
- Mode: "default", // default, kv, memory
}
func configDefault(config ...Config) Config {
@@ -98,5 +97,9 @@ func configDefault(config ...Config) Config {
cfg.DefaultTable = ConfigDefault.DefaultTable
}
+ //if cfg.Mode == "" {
+ // cfg.Mode = ConfigDefault.Mode
+ //}
+
return cfg
}
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index ff9a1bd8..339cb3e5 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -110,6 +110,10 @@ func Test_Surrealdb_Delete(t *testing.T) {
err = testStore.Delete("test")
require.NoError(t, err)
+
+ val, err := testStore.Get("test")
+ require.NoError(t, err)
+ require.Nil(t, val)
}
func Test_Surrealdb_Flush(t *testing.T) {
@@ -117,7 +121,19 @@ func Test_Surrealdb_Flush(t *testing.T) {
require.NoError(t, err)
defer testStore.Close()
+ err = testStore.Set("test_key", []byte("test_value"), 0)
require.NoError(t, err)
+
+ val, err := testStore.Get("test_key")
+ require.NoError(t, err)
+ require.NotNil(t, val)
+
+ err = testStore.Reset()
+ require.NoError(t, err)
+
+ val, err = testStore.Get("test_key")
+ require.NoError(t, err)
+ require.Nil(t, val)
}
func Test_Surrealdb_GetExpired(t *testing.T) {
From 0dea23ff24966e79b5c9424799e1d73d345a9711 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Sat, 26 Apr 2025 11:22:31 +0300
Subject: [PATCH 20/27] removed Config.Mode until supported in official sdk and
added connection url validation
---
surrealdb/config.go | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/surrealdb/config.go b/surrealdb/config.go
index 07bd974b..7fcf1224 100644
--- a/surrealdb/config.go
+++ b/surrealdb/config.go
@@ -1,5 +1,10 @@
package surrealdb
+import (
+ "log"
+ "strings"
+)
+
// Config holds the configuration required to initialize and connect to a SurrealDB instance.
// It includes authentication credentials, namespace/database selection, and default storage settings.
//
@@ -13,7 +18,7 @@ package surrealdb
// - Scope: optional scope name for scoped authentication (e.g., user login scopes).
// - DefaultTable: the default table name where key-value records will be stored.
type Config struct {
- // The connection URL to connect to SurrealDB
+ // WebSocket connections (ws:// or wss://) are recommended over HTTP for better reliability
ConnectionString string
// The namespace to be used in SurrealDB
@@ -36,13 +41,6 @@ type Config struct {
// The default table used to store key-value records
DefaultTable string
-
- //// Mode determines the operational mode of SurrealDB.
- //// Accepted values:
- //// - "default" (requires authentication)
- //// - "memory" (in-memory mode, no authentication required) - not supported
- //// - "kv" (file-based key-value store, no authentication required) - not supported
- //Mode string
}
var ConfigDefault = Config{
@@ -97,9 +95,10 @@ func configDefault(config ...Config) Config {
cfg.DefaultTable = ConfigDefault.DefaultTable
}
- //if cfg.Mode == "" {
- // cfg.Mode = ConfigDefault.Mode
- //}
+ if !strings.HasPrefix(cfg.ConnectionString, "ws://") && !strings.HasPrefix(cfg.ConnectionString, "wss://") &&
+ !strings.HasPrefix(cfg.ConnectionString, "http://") && !strings.HasPrefix(cfg.ConnectionString, "https://") {
+ log.Printf("Warning: ConnectionString %s doesn't start with ws://, wss://, http:// or https://", cfg.ConnectionString)
+ }
return cfg
}
From 7496f5526c16f58c08f02bd1dcd6069ea259eb79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 29 Apr 2025 09:52:30 +0300
Subject: [PATCH 21/27] updated packages
---
surrealdb/go.mod | 17 +++++++++--------
surrealdb/go.sum | 48 +++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 54 insertions(+), 11 deletions(-)
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
index 8a8efbdd..5871f0a3 100644
--- a/surrealdb/go.mod
+++ b/surrealdb/go.mod
@@ -2,10 +2,11 @@ module github.com/gofiber/storage/surrealdb
go 1.23.0
-
require (
github.com/stretchr/testify v1.10.0
github.com/surrealdb/surrealdb.go v0.3.2
+ github.com/testcontainers/testcontainers-go v0.37.0
+ github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0
)
require (
@@ -31,10 +32,10 @@ require (
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
github.com/klauspost/compress v1.17.4 // indirect
- github.com/kr/text v0.2.0 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/magiconair/properties v1.8.9 // indirect
+ github.com/magiconair/properties v1.8.10 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/patternmatcher v0.6.0 // indirect
github.com/moby/sys/sequential v0.5.0 // indirect
@@ -47,11 +48,8 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/shirou/gopsutil/v4 v4.25.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/testcontainers/testcontainers-go v0.36.0 // indirect
- github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
@@ -60,8 +58,11 @@ require (
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
go.opentelemetry.io/otel v1.35.0 // indirect
go.opentelemetry.io/otel/metric v1.35.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.35.0 // indirect
- golang.org/x/crypto v0.35.0 // indirect
- golang.org/x/sys v0.31.0 // indirect
+ golang.org/x/crypto v0.37.0 // indirect
+ golang.org/x/sys v0.32.0 // indirect
+ google.golang.org/grpc v1.70.0 // indirect
+ google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/surrealdb/go.sum b/surrealdb/go.sum
index 98417ab9..0e1e9c89 100644
--- a/surrealdb/go.sum
+++ b/surrealdb/go.sum
@@ -1,5 +1,7 @@
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
+github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
@@ -12,7 +14,8 @@ github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpS
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
+github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -42,10 +45,14 @@ github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
@@ -58,6 +65,8 @@ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
+github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
@@ -89,6 +98,8 @@ github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7n
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
@@ -96,6 +107,8 @@ github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCF
github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q=
github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00=
github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0=
+github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg=
+github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM=
github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI=
github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
@@ -114,23 +127,33 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU=
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
+go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
+go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
+go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
+go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
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.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
+golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
+golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
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-20200226121028-0de0cce0169b/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.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
+golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -145,8 +168,17 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
+golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
+golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
+golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
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.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
+golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -155,9 +187,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
+google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
+google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
+google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
+google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
+google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
From 494ff4e03562e8686082e5b7e3fd6e609121cb11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 29 Apr 2025 09:56:36 +0300
Subject: [PATCH 22/27] updated packages2
---
surrealdb/go.mod | 35 ++++++++++++++--------------
surrealdb/go.sum | 59 +++++++++++++++++++++++++++++++++++-------------
2 files changed, 61 insertions(+), 33 deletions(-)
diff --git a/surrealdb/go.mod b/surrealdb/go.mod
index 5871f0a3..284a8c41 100644
--- a/surrealdb/go.mod
+++ b/surrealdb/go.mod
@@ -6,59 +6,60 @@ require (
github.com/stretchr/testify v1.10.0
github.com/surrealdb/surrealdb.go v0.3.2
github.com/testcontainers/testcontainers-go v0.37.0
- github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0
+ github.com/testcontainers/testcontainers-go/modules/surrealdb v0.37.0
)
require (
dario.cat/mergo v1.0.1 // indirect
- github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
+ github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/platforms v0.2.1 // indirect
github.com/cpuguy83/dockercfg v0.3.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/distribution/reference v0.6.0 // indirect
- github.com/docker/docker v28.0.1+incompatible // indirect
+ github.com/docker/docker v28.1.1+incompatible // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/ebitengine/purego v0.8.2 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/fxamacker/cbor/v2 v2.7.0 // indirect
+ github.com/fxamacker/cbor/v2 v2.8.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-ole/go-ole v1.3.0 // indirect
github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
- github.com/klauspost/compress v1.17.4 // indirect
- github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
+ github.com/klauspost/compress v1.18.0 // indirect
+ github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
github.com/magiconair/properties v1.8.10 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
+ github.com/moby/go-archive v0.1.0 // indirect
github.com/moby/patternmatcher v0.6.0 // indirect
- github.com/moby/sys/sequential v0.5.0 // indirect
- github.com/moby/sys/user v0.1.0 // indirect
+ github.com/moby/sys/sequential v0.6.0 // indirect
+ github.com/moby/sys/user v0.4.0 // indirect
github.com/moby/sys/userns v0.1.0 // indirect
- github.com/moby/term v0.5.0 // indirect
+ github.com/moby/term v0.5.2 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/shirou/gopsutil/v4 v4.25.1 // indirect
+ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
+ github.com/shirou/gopsutil/v4 v4.25.3 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/tklauser/go-sysconf v0.3.12 // indirect
- github.com/tklauser/numcpus v0.6.1 // indirect
+ github.com/tklauser/go-sysconf v0.3.15 // indirect
+ github.com/tklauser/numcpus v0.10.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
go.opentelemetry.io/otel v1.35.0 // indirect
go.opentelemetry.io/otel/metric v1.35.0 // indirect
- go.opentelemetry.io/otel/sdk v1.32.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.35.0 // indirect
go.opentelemetry.io/otel/trace v1.35.0 // indirect
golang.org/x/crypto v0.37.0 // indirect
golang.org/x/sys v0.32.0 // indirect
diff --git a/surrealdb/go.sum b/surrealdb/go.sum
index 0e1e9c89..4664ad09 100644
--- a/surrealdb/go.sum
+++ b/surrealdb/go.sum
@@ -2,12 +2,17 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
+github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
+github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
@@ -23,6 +28,8 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I=
+github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
@@ -33,6 +40,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
+github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU=
+github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -40,6 +49,8 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
+github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -57,28 +68,38 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
+github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
+github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
-github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr325bN2FD2ISlRRztXibcX6e8f5FR5Dc=
+github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
+github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ=
+github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
+github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
+github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
+github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
+github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
+github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
@@ -91,10 +112,14 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
+github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
+github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=
+github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE=
+github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -105,16 +130,18 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ=
github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q=
-github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00=
-github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0=
github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg=
github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM=
-github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI=
-github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ=
+github.com/testcontainers/testcontainers-go/modules/surrealdb v0.37.0 h1:t+q4bKHoRGJ5815GvXqtH8h6HUvpzDGRuuPptdTnTtU=
+github.com/testcontainers/testcontainers-go/modules/surrealdb v0.37.0/go.mod h1:Q6VDM9oKs2FAb1H+sH5EiCaXfLVjhNaoG++rAAMtsFE=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
+github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4=
+github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
+github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso=
+github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -125,6 +152,8 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U=
@@ -135,6 +164,7 @@ go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
+go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
@@ -142,8 +172,6 @@ go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v8
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
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.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
-golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -152,8 +180,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/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.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
-golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
+golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
+golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -164,19 +192,17 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
-golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
-golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
+golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
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.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
-golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
+golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -203,3 +229,4 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
+gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
From e81b66dbf45e5e2b9acc2bc8744d95d8c120aa3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?=
<76746351+aliyasirnac@users.noreply.github.com>
Date: Tue, 29 Apr 2025 10:14:14 +0300
Subject: [PATCH 23/27] added garbage collector
---
surrealdb/README.md | 5 +++++
surrealdb/config.go | 9 ++++++++
surrealdb/surrealdb.go | 45 ++++++++++++++++++++++++++++++++-----
surrealdb/surrealdb_test.go | 21 +++++++++++++++++
4 files changed, 75 insertions(+), 5 deletions(-)
diff --git a/surrealdb/README.md b/surrealdb/README.md
index 698ddb3f..ec32da04 100644
--- a/surrealdb/README.md
+++ b/surrealdb/README.md
@@ -62,6 +62,7 @@ Password: "root",
Access: "full",
Scope: "all",
DefaultTable: "fiber_storage",
+GCInterval: time.Second * 10,
})
```
@@ -92,6 +93,9 @@ Scope string
// The default table used to store key-value records
DefaultTable string
+
+// Optional. Default is 10 * time.Second
+GCInterval time.Duration
}
```
@@ -108,5 +112,6 @@ Password: "root",
Access: "full",
Scope: "all",
DefaultTable: "fiber_storage",
+GCInterval: time.Second * 10,
}
```
diff --git a/surrealdb/config.go b/surrealdb/config.go
index 7fcf1224..7179ccbb 100644
--- a/surrealdb/config.go
+++ b/surrealdb/config.go
@@ -3,6 +3,7 @@ package surrealdb
import (
"log"
"strings"
+ "time"
)
// Config holds the configuration required to initialize and connect to a SurrealDB instance.
@@ -41,6 +42,9 @@ type Config struct {
// The default table used to store key-value records
DefaultTable string
+
+ // Optional. Default is 10 * time.Second
+ GCInterval time.Duration
}
var ConfigDefault = Config{
@@ -52,6 +56,7 @@ var ConfigDefault = Config{
Access: "full",
Scope: "all",
DefaultTable: "fiber_storage",
+ GCInterval: time.Second * 10,
}
func configDefault(config ...Config) Config {
@@ -100,5 +105,9 @@ func configDefault(config ...Config) Config {
log.Printf("Warning: ConnectionString %s doesn't start with ws://, wss://, http:// or https://", cfg.ConnectionString)
}
+ if int(cfg.GCInterval.Seconds()) <= 0 {
+ cfg.GCInterval = ConfigDefault.GCInterval
+ }
+
return cfg
}
diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go
index 5f5382fa..0d5f23a2 100644
--- a/surrealdb/surrealdb.go
+++ b/surrealdb/surrealdb.go
@@ -10,8 +10,10 @@ import (
// Storage interface that is implemented by storage providers
type Storage struct {
- db *surrealdb.DB
- table string
+ db *surrealdb.DB
+ table string
+ stopGC chan struct{}
+ interval time.Duration
}
// model represents a key-value storage record used in SurrealDB.
@@ -54,10 +56,15 @@ func New(config ...Config) *Storage {
panic(err)
}
- return &Storage{
- db: db,
- table: cfg.DefaultTable,
+ storage := &Storage{
+ db: db,
+ table: cfg.DefaultTable,
+ stopGC: make(chan struct{}),
+ interval: cfg.GCInterval,
}
+
+ go storage.gc()
+ return storage
}
func (s *Storage) Get(key string) ([]byte, error) {
@@ -113,6 +120,7 @@ func (s *Storage) Reset() error {
}
func (s *Storage) Close() error {
+ close(s.stopGC)
return s.db.Close()
}
@@ -139,3 +147,30 @@ func (s *Storage) List() ([]byte, error) {
return json.Marshal(data)
}
+
+func (s *Storage) gc() {
+ ticker := time.NewTicker(s.interval)
+ defer ticker.Stop()
+
+ for {
+ select {
+ case <-ticker.C:
+ s.cleanupExpired()
+ case <-s.stopGC:
+ return
+ }
+ }
+}
+
+func (s *Storage) cleanupExpired() {
+ records, err := surrealdb.Select[[]model, models.Table](s.db, models.Table(s.table))
+ if err != nil {
+ return
+ }
+ now := time.Now().Unix()
+ for _, item := range *records {
+ if item.Exp > 0 && now > item.Exp {
+ _ = s.Delete(item.Key)
+ }
+ }
+}
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index 339cb3e5..7bf353b8 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -182,6 +182,27 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
require.NotContains(t, result, "expired")
}
+func Test_Surrealdb_GarbageCollector_RemovesExpiredKeys(t *testing.T) {
+ testStore, err := newTestStore(t)
+ require.NoError(t, err)
+ defer testStore.Close()
+
+ err = testStore.Set("temp_key", []byte("temp_value"), 1*time.Second)
+ require.NoError(t, err)
+
+ val, err := testStore.Get("temp_key")
+ require.NoError(t, err)
+ require.NotNil(t, val)
+
+ time.Sleep(3 * time.Second)
+
+ require.Eventually(t, func() bool {
+ val, err = testStore.Get("temp_key")
+ require.NoError(t, err)
+ return val == nil
+ }, 3*time.Second, 300*time.Millisecond)
+}
+
func Benchmark_SurrealDB_Set(b *testing.B) {
testStore, err := newTestStore(b)
require.NoError(b, err)
From 3a1a37e00fe559a3f151ee508b8a0a364839cdab Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 1 May 2025 07:26:27 +0000
Subject: [PATCH 24/27] chore(deps): bump
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
Bumps [github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue](https://github.com/aws/aws-sdk-go-v2) from 1.18.14 to 1.19.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.19.0/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.14...v1.19.0)
---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
dependency-version: 1.19.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
dynamodb/go.mod | 2 +-
dynamodb/go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dynamodb/go.mod b/dynamodb/go.mod
index bb586dc5..bc92a99b 100644
--- a/dynamodb/go.mod
+++ b/dynamodb/go.mod
@@ -6,7 +6,7 @@ require (
github.com/aws/aws-sdk-go-v2 v1.36.3
github.com/aws/aws-sdk-go-v2/config v1.29.14
github.com/aws/aws-sdk-go-v2/credentials v1.17.67
- github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.18.14
+ github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.1
github.com/stretchr/testify v1.10.0
github.com/testcontainers/testcontainers-go v0.37.0
diff --git a/dynamodb/go.sum b/dynamodb/go.sum
index 9ccdfadd..b612c4ba 100644
--- a/dynamodb/go.sum
+++ b/dynamodb/go.sum
@@ -12,8 +12,8 @@ github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqW
github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g=
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM=
github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ=
-github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.18.14 h1:Qvnm8jtST/nidLDVHASEEVmB8neXuoA8O7u3if+nGYw=
-github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.18.14/go.mod h1:xC/rXqmBJnY3SRUP+qAWg+ryTzDcpiUQiOJGN5in9Dg=
+github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0 h1:F3W0YqWZrpCcelbvXMP9LWSTOI620aAq1+8fZ/71TBg=
+github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0/go.mod h1:34X+UzFJwsQfyk5U1hYiCO/gv9ZVL+Hh8w+bJQ6+HbU=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q=
From e91e04b166cd6f3c448c3e61f491ba28e5ba4bb6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 1 May 2025 07:26:36 +0000
Subject: [PATCH 25/27] chore(deps): bump github.com/redis/go-redis/v9 in
/redis
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.7.3 to 9.8.0.
- [Release notes](https://github.com/redis/go-redis/releases)
- [Changelog](https://github.com/redis/go-redis/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/go-redis/compare/v9.7.3...v9.8.0)
---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
dependency-version: 9.8.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
redis/go.mod | 4 ++--
redis/go.sum | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/redis/go.mod b/redis/go.mod
index 0ab3209e..fa44db03 100644
--- a/redis/go.mod
+++ b/redis/go.mod
@@ -3,7 +3,7 @@ module github.com/gofiber/storage/redis/v3
go 1.23.0
require (
- github.com/redis/go-redis/v9 v9.7.3
+ github.com/redis/go-redis/v9 v9.8.0
github.com/stretchr/testify v1.10.0
github.com/testcontainers/testcontainers-go v0.37.0
github.com/testcontainers/testcontainers-go/modules/redis v0.37.0
@@ -14,7 +14,7 @@ require (
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/platforms v0.2.1 // indirect
github.com/cpuguy83/dockercfg v0.3.2 // indirect
diff --git a/redis/go.sum b/redis/go.sum
index e870d7b3..e2c16f0c 100644
--- a/redis/go.sum
+++ b/redis/go.sum
@@ -12,8 +12,8 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
@@ -93,8 +93,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM=
-github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA=
+github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI=
+github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
From 722e242fdfcb43e6804f215e5eed0dbc21265561 Mon Sep 17 00:00:00 2001
From: aliyasirnac
Date: Thu, 1 May 2025 17:37:09 +0300
Subject: [PATCH 26/27] changed testStore signature
---
surrealdb/surrealdb_test.go | 70 ++++++++++++++-----------------------
1 file changed, 27 insertions(+), 43 deletions(-)
diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go
index 7bf353b8..6b4fd276 100644
--- a/surrealdb/surrealdb_test.go
+++ b/surrealdb/surrealdb_test.go
@@ -19,7 +19,7 @@ var (
surrealDbPass string = "root"
)
-func newTestStore(t testing.TB) (*Storage, error) {
+func newTestStore(t testing.TB) *Storage {
t.Helper()
ctx := context.Background()
@@ -32,16 +32,12 @@ func newTestStore(t testing.TB) (*Storage, error) {
surrealdb.WithUsername(surrealDbUser),
surrealdb.WithPassword(surrealDbPass),
)
- if err != nil {
- return nil, err
- }
+ require.NoError(t, err)
testcontainers.CleanupContainer(t, surrealdbContainer)
url, err := surrealdbContainer.URL(ctx)
- if err != nil {
- return nil, err
- }
+ require.NoError(t, err)
return New(
Config{
@@ -52,24 +48,22 @@ func newTestStore(t testing.TB) (*Storage, error) {
Password: surrealDbPass,
DefaultTable: "fiber_storage",
},
- ), nil
+ )
}
func Test_Surrealdb_Create(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("test", []byte("test12345"), 0)
+ err := testStore.Set("test", []byte("test12345"), 0)
require.NoError(t, err)
}
func Test_Surrealdb_CreateAndGet(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("test", []byte("test12345"), 0)
+ err := testStore.Set("test", []byte("test12345"), 0)
require.NoError(t, err)
get, err := testStore.Get("test")
@@ -78,8 +72,7 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) {
}
func Test_Surrealdb_ListTable(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
bytes, err := testStore.List()
@@ -88,11 +81,10 @@ func Test_Surrealdb_ListTable(t *testing.T) {
}
func Test_Surrealdb_Get_WithNoErr(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("test", []byte("test1234"), 0)
+ err := testStore.Set("test", []byte("test1234"), 0)
require.NoError(t, err)
get, err := testStore.Get("test")
@@ -101,11 +93,10 @@ func Test_Surrealdb_Get_WithNoErr(t *testing.T) {
}
func Test_Surrealdb_Delete(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("test", []byte("delete1234"), 0)
+ err := testStore.Set("test", []byte("delete1234"), 0)
require.NoError(t, err)
err = testStore.Delete("test")
@@ -117,11 +108,10 @@ func Test_Surrealdb_Delete(t *testing.T) {
}
func Test_Surrealdb_Flush(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("test_key", []byte("test_value"), 0)
+ err := testStore.Set("test_key", []byte("test_value"), 0)
require.NoError(t, err)
val, err := testStore.Get("test_key")
@@ -137,11 +127,10 @@ func Test_Surrealdb_Flush(t *testing.T) {
}
func Test_Surrealdb_GetExpired(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("temp", []byte("value"), 1*time.Second)
+ err := testStore.Set("temp", []byte("value"), 1*time.Second)
require.NoError(t, err)
require.Eventually(t, func() bool {
@@ -152,8 +141,7 @@ func Test_Surrealdb_GetExpired(t *testing.T) {
}
func Test_Surrealdb_GetMissing(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
val, err := testStore.Get("non-existent-key")
@@ -162,8 +150,7 @@ func Test_Surrealdb_GetMissing(t *testing.T) {
}
func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
_ = testStore.Set("valid", []byte("123"), 0)
@@ -183,11 +170,10 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) {
}
func Test_Surrealdb_GarbageCollector_RemovesExpiredKeys(t *testing.T) {
- testStore, err := newTestStore(t)
- require.NoError(t, err)
+ testStore := newTestStore(t)
defer testStore.Close()
- err = testStore.Set("temp_key", []byte("temp_value"), 1*time.Second)
+ err := testStore.Set("temp_key", []byte("temp_value"), 1*time.Second)
require.NoError(t, err)
val, err := testStore.Get("temp_key")
@@ -204,13 +190,13 @@ func Test_Surrealdb_GarbageCollector_RemovesExpiredKeys(t *testing.T) {
}
func Benchmark_SurrealDB_Set(b *testing.B) {
- testStore, err := newTestStore(b)
- require.NoError(b, err)
+ testStore := newTestStore(b)
defer testStore.Close()
b.ReportAllocs()
b.ResetTimer()
+ var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
@@ -219,11 +205,10 @@ func Benchmark_SurrealDB_Set(b *testing.B) {
}
func Benchmark_SurrealDB_Get(b *testing.B) {
- testStore, err := newTestStore(b)
- require.NoError(b, err)
+ testStore := newTestStore(b)
defer testStore.Close()
- err = testStore.Set("john", []byte("doe"), 0)
+ err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
@@ -237,13 +222,12 @@ func Benchmark_SurrealDB_Get(b *testing.B) {
}
func Benchmark_SurrealDB_SetAndDelete(b *testing.B) {
- testStore, err := newTestStore(b)
- require.NoError(b, err)
+ testStore := newTestStore(b)
defer testStore.Close()
b.ReportAllocs()
b.ResetTimer()
-
+ var err error
for i := 0; i < b.N; i++ {
testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
From 32f7699d7a472d8342b3adc9a49976bf0c49c58e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 2 May 2025 07:55:34 +0000
Subject: [PATCH 27/27] chore(deps): bump github.com/neo4j/neo4j-go-driver/v5
in /neo4j
Bumps [github.com/neo4j/neo4j-go-driver/v5](https://github.com/neo4j/neo4j-go-driver) from 5.28.0 to 5.28.1.
- [Release notes](https://github.com/neo4j/neo4j-go-driver/releases)
- [Commits](https://github.com/neo4j/neo4j-go-driver/compare/v5.28.0...v5.28.1)
---
updated-dependencies:
- dependency-name: github.com/neo4j/neo4j-go-driver/v5
dependency-version: 5.28.1
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
neo4j/go.mod | 2 +-
neo4j/go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/neo4j/go.mod b/neo4j/go.mod
index 9751acbd..7141a6a7 100644
--- a/neo4j/go.mod
+++ b/neo4j/go.mod
@@ -3,7 +3,7 @@ module github.com/gofiber/storage/neo4j
go 1.23.0
require (
- github.com/neo4j/neo4j-go-driver/v5 v5.28.0
+ github.com/neo4j/neo4j-go-driver/v5 v5.28.1
github.com/stretchr/testify v1.10.0
github.com/testcontainers/testcontainers-go v0.37.0
github.com/testcontainers/testcontainers-go/modules/neo4j v0.37.0
diff --git a/neo4j/go.sum b/neo4j/go.sum
index 2a1e5051..40f9bc0e 100644
--- a/neo4j/go.sum
+++ b/neo4j/go.sum
@@ -73,8 +73,8 @@ github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/neo4j/neo4j-go-driver/v5 v5.28.0 h1:chDT68PHNa8JZRmjSkGzAbk1weLWo4rMtDvccvpobg0=
-github.com/neo4j/neo4j-go-driver/v5 v5.28.0/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k=
+github.com/neo4j/neo4j-go-driver/v5 v5.28.1 h1:RKWQW7wTgYAY2fU9S+9LaJ9OwRPbRc0I17tlT7nDmAY=
+github.com/neo4j/neo4j-go-driver/v5 v5.28.1/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=