summaryrefslogtreecommitdiff
path: root/internal/db/bundb/util.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2021-09-09 16:15:25 +0200
committerLibravatar GitHub <noreply@github.com>2021-09-09 16:15:25 +0200
commit555ea8edfb2c30d149b3ca6cb0fbe53f2798c7bc (patch)
tree24567c4c365a007fcd2d6603e696b363129abb77 /internal/db/bundb/util.go
parentMerge pull request #198 from NyaaaWhatsUpDoc/update/sqlite-library (diff)
downloadgotosocial-555ea8edfb2c30d149b3ca6cb0fbe53f2798c7bc.tar.xz
Import export (#194)
* start with export/import code * messing about with decoding/encoding * some more fiddling * stuff is WORKING * working pretty alright! * go fmt * fix up tests, add docs * start backup/restore doc * tweaks * credits * update advancedVisibility settings * update bun library -> v1.0.4 Signed-off-by: kim (grufwub) <grufwub@gmail.com> * update oauth library -> v4.3.1-SSB Signed-off-by: kim (grufwub) <grufwub@gmail.com> * handle oauth token scope, fix user.SigninCount + token.UserID Signed-off-by: kim (grufwub) <grufwub@gmail.com> * update oauth library --> v4.3.2-SSB Signed-off-by: kim (grufwub) <grufwub@gmail.com> * update sqlite library -> v1.13.0 Signed-off-by: kim (grufwub) <grufwub@gmail.com> * review changes * start with export/import code * messing about with decoding/encoding * some more fiddling * stuff is WORKING * working pretty alright! * go fmt * fix up tests, add docs * start backup/restore doc * tweaks * credits * update advancedVisibility settings * review changes Co-authored-by: kim (grufwub) <grufwub@gmail.com> Co-authored-by: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>
Diffstat (limited to 'internal/db/bundb/util.go')
-rw-r--r--internal/db/bundb/util.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/internal/db/bundb/util.go b/internal/db/bundb/util.go
index 9e1afb87e..459f65d8c 100644
--- a/internal/db/bundb/util.go
+++ b/internal/db/bundb/util.go
@@ -19,6 +19,7 @@
package bundb
import (
+ "github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/uptrace/bun"
)
@@ -35,3 +36,65 @@ func whereEmptyOrNull(column string) func(*bun.SelectQuery) *bun.SelectQuery {
WhereOr("? = ''", bun.Ident(column))
}
}
+
+// updateWhere parses []db.Where and adds it to the given update query.
+func updateWhere(q *bun.UpdateQuery, where []db.Where) {
+ for _, w := range where {
+ query, args := parseWhere(w)
+ q = q.Where(query, args...)
+ }
+}
+
+// selectWhere parses []db.Where and adds it to the given select query.
+func selectWhere(q *bun.SelectQuery, where []db.Where) {
+ for _, w := range where {
+ query, args := parseWhere(w)
+ q = q.Where(query, args...)
+ }
+}
+
+// deleteWhere parses []db.Where and adds it to the given where query.
+func deleteWhere(q *bun.DeleteQuery, where []db.Where) {
+ for _, w := range where {
+ query, args := parseWhere(w)
+ q = q.Where(query, args...)
+ }
+}
+
+// parseWhere looks through the options on a single db.Where entry, and
+// returns the appropriate query string and arguments.
+func parseWhere(w db.Where) (query string, args []interface{}) {
+ if w.Not {
+ if w.Value == nil {
+ query = "? IS NOT NULL"
+ args = []interface{}{bun.Ident(w.Key)}
+ return
+ }
+
+ if w.CaseInsensitive {
+ query = "LOWER(?) != LOWER(?)"
+ args = []interface{}{bun.Safe(w.Key), w.Value}
+ return
+ }
+
+ query = "? != ?"
+ args = []interface{}{bun.Safe(w.Key), w.Value}
+ return
+ }
+
+ if w.Value == nil {
+ query = "? IS NULL"
+ args = []interface{}{bun.Ident(w.Key)}
+ return
+ }
+
+ if w.CaseInsensitive {
+ query = "LOWER(?) = LOWER(?)"
+ args = []interface{}{bun.Safe(w.Key), w.Value}
+ return
+ }
+
+ query = "? = ?"
+ args = []interface{}{bun.Safe(w.Key), w.Value}
+ return
+}