如何对同一个内存数据库进行两个 GORM 会话?
How to have two GORM sessions to the same in-memory database?
我正在尝试测试 GORM 代码。代码路径打开一个新的 GORM 会话。第一个会话将数据添加到 GORM,第二个会话使用它。测试时,似乎 GORM 在使用内存参数 :memory:
时会忘记第一个会话的数据。我什至尝试了 cache=shared
选项但没有成功。
这是一个示例测试:
type testRecord struct{
ID string
Data string
}
func TestOpenGormTwice(t *testing.T){
cxn:=":memory:?cache=shared"
database, err := gorm.Open("sqlite3", cxn)
assert.NoError(t, err)
err=database.CreateTable(&testRecord{}).Error
assert.NoError(t, err)
err=database.Create(testRecord{
ID: "1",
Data: "abc",
}).Error
assert.NoError(t, err)
tr:=testRecord{}
err=database.First(&tr).Error
assert.NoError(t, err)
assert.True(t, database.HasTable(&testRecord{}))
//Open :memory: again, hopefully it won't forget what was saved last time
database2, err := gorm.Open("sqlite3", cxn)
assert.NoError(t, err)
assert.True(t, database2.HasTable(&testRecord{}))
}
测试在最后 assert.True 失败。这段代码怎么修改才能通过最后的测试?
我也试过cxn:="memdb1?mode=memory&cache=shared"
,它似乎有效,但实际上它并没有进入内存模式as described in the Sqlite docs。
这有效:cxn:="file:memdb1?mode=memory&cache=shared"
感谢@karmakaze 的评论。
我正在尝试测试 GORM 代码。代码路径打开一个新的 GORM 会话。第一个会话将数据添加到 GORM,第二个会话使用它。测试时,似乎 GORM 在使用内存参数 :memory:
时会忘记第一个会话的数据。我什至尝试了 cache=shared
选项但没有成功。
这是一个示例测试:
type testRecord struct{
ID string
Data string
}
func TestOpenGormTwice(t *testing.T){
cxn:=":memory:?cache=shared"
database, err := gorm.Open("sqlite3", cxn)
assert.NoError(t, err)
err=database.CreateTable(&testRecord{}).Error
assert.NoError(t, err)
err=database.Create(testRecord{
ID: "1",
Data: "abc",
}).Error
assert.NoError(t, err)
tr:=testRecord{}
err=database.First(&tr).Error
assert.NoError(t, err)
assert.True(t, database.HasTable(&testRecord{}))
//Open :memory: again, hopefully it won't forget what was saved last time
database2, err := gorm.Open("sqlite3", cxn)
assert.NoError(t, err)
assert.True(t, database2.HasTable(&testRecord{}))
}
测试在最后 assert.True 失败。这段代码怎么修改才能通过最后的测试?
我也试过cxn:="memdb1?mode=memory&cache=shared"
,它似乎有效,但实际上它并没有进入内存模式as described in the Sqlite docs。
这有效:cxn:="file:memdb1?mode=memory&cache=shared"
感谢@karmakaze 的评论。