From 8da043f01215ff705086c747a17433af6d7dc9ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Thu, 10 Nov 2022 14:42:31 +0800 Subject: [PATCH] feat: add foreign key constraints --- db/sqlite3/sqlite3.go | 37 +++++++++++++++++++++++++++---------- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/db/sqlite3/sqlite3.go b/db/sqlite3/sqlite3.go index c80c82a..bcba4ed 100644 --- a/db/sqlite3/sqlite3.go +++ b/db/sqlite3/sqlite3.go @@ -53,15 +53,27 @@ func (s *database) Open() error { if err != nil { return errors.Wrap(err, "open sqlite3 error") } - err = s.db.Create(Sqlite3GroupMessageTableName, &StoredGroupMessage{}) + _, err = s.db.DB.Exec("PRAGMA foreign_keys = ON;") + if err != nil { + return errors.Wrap(err, "enable foreign_keys error") + } + err = s.db.Create(Sqlite3UinInfoTableName, &UinInfo{}) if err != nil { return errors.Wrap(err, "create sqlite3 table error") } - err = s.db.Create(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{}) + err = s.db.Create(Sqlite3TinyInfoTableName, &TinyInfo{}) if err != nil { return errors.Wrap(err, "create sqlite3 table error") } - err = s.db.Create(Sqlite3GuildMessageAttributeTableName, &StoredGuildMessageAttribute{}) + err = s.db.Create(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{}, + "FOREIGN KEY(SenderUin) REFERENCES "+Sqlite3UinInfoTableName+"(Uin)", + ) + if err != nil { + return errors.Wrap(err, "create sqlite3 table error") + } + err = s.db.Create(Sqlite3GuildMessageAttributeTableName, &StoredGuildMessageAttribute{}, + "FOREIGN KEY(SenderTinyID) REFERENCES "+Sqlite3TinyInfoTableName+"(ID)", + ) if err != nil { return errors.Wrap(err, "create sqlite3 table error") } @@ -69,19 +81,24 @@ func (s *database) Open() error { if err != nil { return errors.Wrap(err, "create sqlite3 table error") } - err = s.db.Create(Sqlite3PrivateMessageTableName, &StoredPrivateMessage{}) + err = s.db.Create(Sqlite3GroupMessageTableName, &StoredGroupMessage{}, + "FOREIGN KEY(AttributeID) REFERENCES "+Sqlite3MessageAttributeTableName+"(ID)", + "FOREIGN KEY(QuotedInfoID) REFERENCES "+Sqlite3QuotedInfoTableName+"(ID)", + ) if err != nil { return errors.Wrap(err, "create sqlite3 table error") } - err = s.db.Create(Sqlite3GuildChannelMessageTableName, &StoredGuildChannelMessage{}) + err = s.db.Create(Sqlite3PrivateMessageTableName, &StoredPrivateMessage{}, + "FOREIGN KEY(AttributeID) REFERENCES "+Sqlite3MessageAttributeTableName+"(ID)", + "FOREIGN KEY(QuotedInfoID) REFERENCES "+Sqlite3QuotedInfoTableName+"(ID)", + ) if err != nil { return errors.Wrap(err, "create sqlite3 table error") } - err = s.db.Create(Sqlite3UinInfoTableName, &UinInfo{}) - if err != nil { - return errors.Wrap(err, "create sqlite3 table error") - } - err = s.db.Create(Sqlite3TinyInfoTableName, &TinyInfo{}) + err = s.db.Create(Sqlite3GuildChannelMessageTableName, &StoredGuildChannelMessage{}, + "FOREIGN KEY(AttributeID) REFERENCES "+Sqlite3MessageAttributeTableName+"(ID)", + "FOREIGN KEY(QuotedInfoID) REFERENCES "+Sqlite3QuotedInfoTableName+"(ID)", + ) if err != nil { return errors.Wrap(err, "create sqlite3 table error") } diff --git a/go.mod b/go.mod index 8bc52ad..01f64af 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp go 1.19 require ( - github.com/FloatTech/sqlite v0.5.0 + github.com/FloatTech/sqlite v0.5.1 github.com/Microsoft/go-winio v0.5.1 github.com/Mrs4s/MiraiGo v0.0.0-20220828090150-a3c348100dfe github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c diff --git a/go.sum b/go.sum index c4a4423..7745439 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/FloatTech/sqlite v0.5.0 h1:U7J5Omc534PqmH6csfu+ypCo3DS8L91l5lTsxUu3b/U= -github.com/FloatTech/sqlite v0.5.0/go.mod h1:i33d92OtR8jcp5fBUvQtospf27+MkfUxnGwnZ95E/dA= +github.com/FloatTech/sqlite v0.5.1 h1:IjTdnqMVIVIoIEFXhvh/KKBfYxFvG0tk7Rghz65/DAU= +github.com/FloatTech/sqlite v0.5.1/go.mod h1:i33d92OtR8jcp5fBUvQtospf27+MkfUxnGwnZ95E/dA= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJGLDNIdRX3BI546D3O7k7vrVueZw= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=