Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
ca98367a
Unverified
Commit
ca98367a
authored
Sep 27, 2023
by
Athurg Gooth
Committed by
GitHub
Sep 27, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: store vacuum and clean (#2293)
* Move all vacuum code into driver * Remove db from Store
parent
9abf294e
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
239 additions
and
238 deletions
+239
-238
memos.go
cmd/memos.go
+1
-2
mvrss.go
cmd/mvrss.go
+1
-2
setup.go
cmd/setup.go
+1
-2
server.go
server/server.go
+1
-1
driver.go
store/driver.go
+4
-0
memo.go
store/memo.go
+1
-28
memo_organizer.go
store/memo_organizer.go
+0
-26
memo_relation.go
store/memo_relation.go
+0
-11
resource.go
store/resource.go
+1
-30
memo.go
store/sqlite/memo.go
+23
-0
memo_organizer.go
store/sqlite/memo_organizer.go
+26
-0
memo_relation.go
store/sqlite/memo_relation.go
+11
-0
resource.go
store/sqlite/resource.go
+24
-0
sqlite.go
store/sqlite/sqlite.go
+92
-0
tag.go
store/sqlite/tag.go
+20
-0
user.go
store/sqlite/user.go
+6
-0
user_setting.go
store/sqlite/user_setting.go
+20
-0
store.go
store/store.go
+5
-88
tag.go
store/tag.go
+0
-20
user.go
store/user.go
+0
-4
user_setting.go
store/user_setting.go
+0
-20
server.go
test/server/server.go
+1
-2
store.go
test/store/store.go
+1
-2
No files found.
cmd/memos.go
View file @
ca98367a
...
...
@@ -56,8 +56,7 @@ var (
}
driver
:=
sqlite
.
NewDriver
(
db
.
DBInstance
)
store
:=
store
.
New
(
db
.
DBInstance
,
driver
,
profile
)
store
:=
store
.
New
(
driver
,
profile
)
s
,
err
:=
server
.
NewServer
(
ctx
,
profile
,
store
)
if
err
!=
nil
{
cancel
()
...
...
cmd/mvrss.go
View file @
ca98367a
...
...
@@ -51,8 +51,7 @@ var (
}
driver
:=
sqlite
.
NewDriver
(
db
.
DBInstance
)
s
:=
store
.
New
(
db
.
DBInstance
,
driver
,
profile
)
s
:=
store
.
New
(
driver
,
profile
)
resources
,
err
:=
s
.
ListResources
(
ctx
,
&
store
.
FindResource
{})
if
err
!=
nil
{
fmt
.
Printf
(
"failed to list resources, error: %+v
\n
"
,
err
)
...
...
cmd/setup.go
View file @
ca98367a
...
...
@@ -48,8 +48,7 @@ var (
}
driver
:=
sqlite
.
NewDriver
(
db
.
DBInstance
)
store
:=
store
.
New
(
db
.
DBInstance
,
driver
,
profile
)
store
:=
store
.
New
(
driver
,
profile
)
if
err
:=
ExecuteSetup
(
ctx
,
store
,
hostUsername
,
hostPassword
);
err
!=
nil
{
fmt
.
Printf
(
"failed to setup, error: %+v
\n
"
,
err
)
return
...
...
server/server.go
View file @
ca98367a
...
...
@@ -162,7 +162,7 @@ func (s *Server) Shutdown(ctx context.Context) {
}
// Close database connection
if
err
:=
s
.
Store
.
GetDB
()
.
Close
();
err
!=
nil
{
if
err
:=
s
.
Store
.
Close
();
err
!=
nil
{
fmt
.
Printf
(
"failed to close database, error: %v
\n
"
,
err
)
}
...
...
store/driver.go
View file @
ca98367a
...
...
@@ -7,6 +7,10 @@ import (
)
type
Driver
interface
{
Vacuum
(
ctx
context
.
Context
)
error
BackupTo
(
ctx
context
.
Context
,
filename
string
)
error
Close
()
error
CreateActivity
(
ctx
context
.
Context
,
create
*
Activity
)
(
*
Activity
,
error
)
CreateResource
(
ctx
context
.
Context
,
create
*
Resource
)
(
*
Resource
,
error
)
...
...
store/memo.go
View file @
ca98367a
...
...
@@ -2,7 +2,6 @@ package store
import
(
"context"
"database/sql"
)
// Visibility is the type of a visibility.
...
...
@@ -107,35 +106,9 @@ func (s *Store) UpdateMemo(ctx context.Context, update *UpdateMemo) error {
}
func
(
s
*
Store
)
DeleteMemo
(
ctx
context
.
Context
,
delete
*
DeleteMemo
)
error
{
if
err
:=
s
.
driver
.
DeleteMemo
(
ctx
,
delete
);
err
!=
nil
{
return
err
}
if
err
:=
s
.
Vacuum
(
ctx
);
err
!=
nil
{
// Prevent linter warning.
return
err
}
return
nil
return
s
.
driver
.
DeleteMemo
(
ctx
,
delete
)
}
func
(
s
*
Store
)
FindMemosVisibilityList
(
ctx
context
.
Context
,
memoIDs
[]
int32
)
([]
Visibility
,
error
)
{
return
s
.
driver
.
FindMemosVisibilityList
(
ctx
,
memoIDs
)
}
func
vacuumMemo
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
memo
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/memo_organizer.go
View file @
ca98367a
...
...
@@ -2,7 +2,6 @@ package store
import
(
"context"
"database/sql"
)
type
MemoOrganizer
struct
{
...
...
@@ -32,28 +31,3 @@ func (s *Store) GetMemoOrganizer(ctx context.Context, find *FindMemoOrganizer) (
func
(
s
*
Store
)
DeleteMemoOrganizer
(
ctx
context
.
Context
,
delete
*
DeleteMemoOrganizer
)
error
{
return
s
.
driver
.
DeleteMemoOrganizer
(
ctx
,
delete
)
}
func
vacuumMemoOrganizer
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
memo_organizer
WHERE
memo_id NOT IN (
SELECT
id
FROM
memo
)
OR user_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/memo_relation.go
View file @
ca98367a
...
...
@@ -2,7 +2,6 @@ package store
import
(
"context"
"database/sql"
)
type
MemoRelationType
string
...
...
@@ -54,13 +53,3 @@ func (s *Store) GetMemoRelation(ctx context.Context, find *FindMemoRelation) (*M
func
(
s
*
Store
)
DeleteMemoRelation
(
ctx
context
.
Context
,
delete
*
DeleteMemoRelation
)
error
{
return
s
.
driver
.
DeleteMemoRelation
(
ctx
,
delete
)
}
func
vacuumMemoRelations
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
if
_
,
err
:=
tx
.
ExecContext
(
ctx
,
`
DELETE FROM memo_relation
WHERE memo_id NOT IN (SELECT id FROM memo) OR related_memo_id NOT IN (SELECT id FROM memo)
`
);
err
!=
nil
{
return
err
}
return
nil
}
store/resource.go
View file @
ca98367a
...
...
@@ -2,7 +2,6 @@ package store
import
(
"context"
"database/sql"
)
type
Resource
struct
{
...
...
@@ -75,33 +74,5 @@ func (s *Store) UpdateResource(ctx context.Context, update *UpdateResource) (*Re
}
func
(
s
*
Store
)
DeleteResource
(
ctx
context
.
Context
,
delete
*
DeleteResource
)
error
{
err
:=
s
.
driver
.
DeleteResource
(
ctx
,
delete
)
if
err
!=
nil
{
return
err
}
if
err
:=
s
.
Vacuum
(
ctx
);
err
!=
nil
{
// Prevent linter warning.
return
err
}
return
nil
}
func
vacuumResource
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
resource
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
return
s
.
driver
.
DeleteResource
(
ctx
,
delete
)
}
store/sqlite/memo.go
View file @
ca98367a
...
...
@@ -234,6 +234,10 @@ func (d *Driver) DeleteMemo(ctx context.Context, delete *store.DeleteMemo) error
return
err
}
if
err
:=
d
.
Vacuum
(
ctx
);
err
!=
nil
{
// Prevent linter warning.
return
err
}
return
nil
}
...
...
@@ -268,3 +272,22 @@ func (d *Driver) FindMemosVisibilityList(ctx context.Context, memoIDs []int32) (
return
visibilityList
,
nil
}
func
vacuumMemo
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
memo
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/sqlite/memo_organizer.go
View file @
ca98367a
...
...
@@ -2,6 +2,7 @@ package sqlite
import
(
"context"
"database/sql"
"fmt"
"strings"
...
...
@@ -80,3 +81,28 @@ func (d *Driver) DeleteMemoOrganizer(ctx context.Context, delete *store.DeleteMe
}
return
nil
}
func
vacuumMemoOrganizer
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
memo_organizer
WHERE
memo_id NOT IN (
SELECT
id
FROM
memo
)
OR user_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/sqlite/memo_relation.go
View file @
ca98367a
...
...
@@ -2,6 +2,7 @@ package sqlite
import
(
"context"
"database/sql"
"strings"
"github.com/usememos/memos/store"
...
...
@@ -104,3 +105,13 @@ func (d *Driver) DeleteMemoRelation(ctx context.Context, delete *store.DeleteMem
}
return
nil
}
func
vacuumMemoRelations
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
if
_
,
err
:=
tx
.
ExecContext
(
ctx
,
`
DELETE FROM memo_relation
WHERE memo_id NOT IN (SELECT id FROM memo) OR related_memo_id NOT IN (SELECT id FROM memo)
`
);
err
!=
nil
{
return
err
}
return
nil
}
store/sqlite/resource.go
View file @
ca98367a
...
...
@@ -181,5 +181,29 @@ func (d *Driver) DeleteResource(ctx context.Context, delete *store.DeleteResourc
return
err
}
if
err
:=
d
.
Vacuum
(
ctx
);
err
!=
nil
{
// Prevent linter warning.
return
err
}
return
nil
}
func
vacuumResource
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
resource
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/sqlite/sqlite.go
View file @
ca98367a
package
sqlite
import
(
"context"
"database/sql"
"github.com/pkg/errors"
"modernc.org/sqlite"
"github.com/usememos/memos/store"
)
...
...
@@ -15,3 +19,91 @@ func NewDriver(db *sql.DB) store.Driver {
db
:
db
,
}
}
func
(
d
*
Driver
)
Vacuum
(
ctx
context
.
Context
)
error
{
tx
,
err
:=
d
.
db
.
BeginTx
(
ctx
,
nil
)
if
err
!=
nil
{
return
err
}
defer
tx
.
Rollback
()
if
err
:=
vacuumImpl
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
tx
.
Commit
();
err
!=
nil
{
return
err
}
// Vacuum sqlite database file size after deleting resource.
if
_
,
err
:=
d
.
db
.
Exec
(
"VACUUM"
);
err
!=
nil
{
return
err
}
return
nil
}
func
vacuumImpl
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
if
err
:=
vacuumMemo
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumResource
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumUserSetting
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumMemoOrganizer
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumMemoRelations
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumTag
(
ctx
,
tx
);
err
!=
nil
{
// Prevent revive warning.
return
err
}
return
nil
}
func
(
d
*
Driver
)
BackupTo
(
ctx
context
.
Context
,
filename
string
)
error
{
conn
,
err
:=
d
.
db
.
Conn
(
ctx
)
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to get conn %s"
,
err
)
}
defer
conn
.
Close
()
err
=
conn
.
Raw
(
func
(
driverConn
any
)
error
{
type
backuper
interface
{
NewBackup
(
string
)
(
*
sqlite
.
Backup
,
error
)
}
backupConn
,
ok
:=
driverConn
.
(
backuper
)
if
!
ok
{
return
errors
.
Errorf
(
"db connection is not a sqlite backuper"
)
}
bck
,
err
:=
backupConn
.
NewBackup
(
filename
)
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to create sqlite backup %s"
,
err
)
}
for
more
:=
true
;
more
;
{
more
,
err
=
bck
.
Step
(
-
1
)
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to execute sqlite backup %s"
,
err
)
}
}
return
bck
.
Finish
()
})
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to backup %s"
,
err
)
}
return
nil
}
func
(
d
*
Driver
)
Close
()
error
{
return
d
.
db
.
Close
()
}
store/sqlite/tag.go
View file @
ca98367a
...
...
@@ -2,6 +2,7 @@ package sqlite
import
(
"context"
"database/sql"
"strings"
"github.com/usememos/memos/store"
...
...
@@ -73,3 +74,22 @@ func (d *Driver) DeleteTag(ctx context.Context, delete *store.DeleteTag) error {
}
return
nil
}
func
vacuumTag
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
tag
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/sqlite/user.go
View file @
ca98367a
...
...
@@ -168,5 +168,11 @@ func (d *Driver) DeleteUser(ctx context.Context, delete *store.DeleteUser) error
if
_
,
err
:=
result
.
RowsAffected
();
err
!=
nil
{
return
err
}
if
err
:=
d
.
Vacuum
(
ctx
);
err
!=
nil
{
// Prevent linter warning.
return
err
}
return
nil
}
store/sqlite/user_setting.go
View file @
ca98367a
...
...
@@ -2,6 +2,7 @@ package sqlite
import
(
"context"
"database/sql"
"errors"
"strings"
...
...
@@ -153,3 +154,22 @@ func (d *Driver) ListUserSettingsV1(ctx context.Context, find *store.FindUserSet
return
userSettingList
,
nil
}
func
vacuumUserSetting
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
user_setting
WHERE
user_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/store.go
View file @
ca98367a
...
...
@@ -2,20 +2,14 @@ package store
import
(
"context"
"database/sql"
"sync"
"modernc.org/sqlite"
"github.com/pkg/errors"
"github.com/usememos/memos/server/profile"
)
// Store provides database access to all raw objects.
type
Store
struct
{
Profile
*
profile
.
Profile
db
*
sql
.
DB
driver
Driver
systemSettingCache
sync
.
Map
// map[string]*SystemSetting
userCache
sync
.
Map
// map[int]*User
...
...
@@ -24,98 +18,21 @@ type Store struct {
}
// New creates a new instance of Store.
func
New
(
d
b
*
sql
.
DB
,
d
river
Driver
,
profile
*
profile
.
Profile
)
*
Store
{
func
New
(
driver
Driver
,
profile
*
profile
.
Profile
)
*
Store
{
return
&
Store
{
Profile
:
profile
,
db
:
db
,
driver
:
driver
,
}
}
func
(
s
*
Store
)
GetDB
()
*
sql
.
DB
{
return
s
.
db
}
func
(
s
*
Store
)
BackupTo
(
ctx
context
.
Context
,
filename
string
)
error
{
conn
,
err
:=
s
.
db
.
Conn
(
ctx
)
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to get conn %s"
,
err
)
}
defer
conn
.
Close
()
err
=
conn
.
Raw
(
func
(
driverConn
any
)
error
{
type
backuper
interface
{
NewBackup
(
string
)
(
*
sqlite
.
Backup
,
error
)
}
backupConn
,
ok
:=
driverConn
.
(
backuper
)
if
!
ok
{
return
errors
.
Errorf
(
"db connection is not a sqlite backuper"
)
}
bck
,
err
:=
backupConn
.
NewBackup
(
filename
)
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to create sqlite backup %s"
,
err
)
}
for
more
:=
true
;
more
;
{
more
,
err
=
bck
.
Step
(
-
1
)
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to execute sqlite backup %s"
,
err
)
}
}
return
bck
.
Finish
()
})
if
err
!=
nil
{
return
errors
.
Errorf
(
"fail to backup %s"
,
err
)
}
return
nil
return
s
.
driver
.
BackupTo
(
ctx
,
filename
)
}
func
(
s
*
Store
)
Vacuum
(
ctx
context
.
Context
)
error
{
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
if
err
!=
nil
{
return
err
}
defer
tx
.
Rollback
()
if
err
:=
s
.
vacuumImpl
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
tx
.
Commit
();
err
!=
nil
{
return
err
}
// Vacuum sqlite database file size after deleting resource.
if
_
,
err
:=
s
.
db
.
Exec
(
"VACUUM"
);
err
!=
nil
{
return
err
}
return
nil
return
s
.
driver
.
Vacuum
(
ctx
)
}
func
(
*
Store
)
vacuumImpl
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
if
err
:=
vacuumMemo
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumResource
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumUserSetting
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumMemoOrganizer
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumMemoRelations
(
ctx
,
tx
);
err
!=
nil
{
return
err
}
if
err
:=
vacuumTag
(
ctx
,
tx
);
err
!=
nil
{
// Prevent revive warning.
return
err
}
return
nil
func
(
s
*
Store
)
Close
()
error
{
return
s
.
driver
.
Close
()
}
store/tag.go
View file @
ca98367a
...
...
@@ -2,7 +2,6 @@ package store
import
(
"context"
"database/sql"
)
type
Tag
struct
{
...
...
@@ -30,22 +29,3 @@ func (s *Store) ListTags(ctx context.Context, find *FindTag) ([]*Tag, error) {
func
(
s
*
Store
)
DeleteTag
(
ctx
context
.
Context
,
delete
*
DeleteTag
)
error
{
return
s
.
driver
.
DeleteTag
(
ctx
,
delete
)
}
func
vacuumTag
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
tag
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
store/user.go
View file @
ca98367a
...
...
@@ -130,10 +130,6 @@ func (s *Store) DeleteUser(ctx context.Context, delete *DeleteUser) error {
return
err
}
if
err
:=
s
.
Vacuum
(
ctx
);
err
!=
nil
{
// Prevent linter warning.
return
err
}
s
.
userCache
.
Delete
(
delete
.
ID
)
return
nil
}
store/user_setting.go
View file @
ca98367a
...
...
@@ -2,7 +2,6 @@ package store
import
(
"context"
"database/sql"
storepb
"github.com/usememos/memos/proto/gen/store"
)
...
...
@@ -125,22 +124,3 @@ func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*store
accessTokensUserSetting
:=
userSetting
.
GetAccessTokens
()
return
accessTokensUserSetting
.
AccessTokens
,
nil
}
func
vacuumUserSetting
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
)
error
{
stmt
:=
`
DELETE FROM
user_setting
WHERE
user_id NOT IN (
SELECT
id
FROM
user
)`
_
,
err
:=
tx
.
ExecContext
(
ctx
,
stmt
)
if
err
!=
nil
{
return
err
}
return
nil
}
test/server/server.go
View file @
ca98367a
...
...
@@ -41,8 +41,7 @@ func NewTestingServer(ctx context.Context, t *testing.T) (*TestingServer, error)
}
driver
:=
sqlite
.
NewDriver
(
db
.
DBInstance
)
store
:=
store
.
New
(
db
.
DBInstance
,
driver
,
profile
)
store
:=
store
.
New
(
driver
,
profile
)
server
,
err
:=
server
.
NewServer
(
ctx
,
profile
,
store
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"failed to create server"
)
...
...
test/store/store.go
View file @
ca98367a
...
...
@@ -25,7 +25,6 @@ func NewTestingStore(ctx context.Context, t *testing.T) *store.Store {
}
driver
:=
sqlite
.
NewDriver
(
db
.
DBInstance
)
store
:=
store
.
New
(
db
.
DBInstance
,
driver
,
profile
)
store
:=
store
.
New
(
driver
,
profile
)
return
store
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment