From 5eb4145797feb76d5d4907ed2f5166076035b37a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 16 Sep 2021 09:58:13 +0200 Subject: [PATCH] make owncloudsql leverage existing filecache index MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- .../owncloudsql-leverage-existing-filecache-index.md | 5 +++++ pkg/storage/fs/owncloudsql/filecache/filecache.go | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 changelog/unreleased/owncloudsql-leverage-existing-filecache-index.md diff --git a/changelog/unreleased/owncloudsql-leverage-existing-filecache-index.md b/changelog/unreleased/owncloudsql-leverage-existing-filecache-index.md new file mode 100644 index 0000000000..e8b1385897 --- /dev/null +++ b/changelog/unreleased/owncloudsql-leverage-existing-filecache-index.md @@ -0,0 +1,5 @@ +Enhancement: make owncloudsql leverage existing filecache index + +When listing folders the SQL query now uses an existing index on the filecache table. + +https://github.com/cs3org/reva/pull/2075 diff --git a/pkg/storage/fs/owncloudsql/filecache/filecache.go b/pkg/storage/fs/owncloudsql/filecache/filecache.go index 6c431e950a..7e0c58a1d8 100644 --- a/pkg/storage/fs/owncloudsql/filecache/filecache.go +++ b/pkg/storage/fs/owncloudsql/filecache/filecache.go @@ -260,15 +260,17 @@ func (c *Cache) List(storage interface{}, p string) ([]*File, error) { return nil, err } - rows, err := c.db.Query(` + var rows *sql.Rows + phash := fmt.Sprintf("%x", md5.Sum([]byte(strings.Trim(p, "/")))) + rows, err = c.db.Query(` SELECT fc.fileid, fc.storage, fc.path, fc.parent, fc.permissions, fc.mimetype, fc.mimepart, mt.mimetype, fc.size, fc.mtime, fc.storage_mtime, fc.encrypted, fc.unencrypted_size, fc.name, fc.etag, fc.checksum FROM oc_filecache fc LEFT JOIN oc_mimetypes mt ON fc.mimetype = mt.id - WHERE path != '' AND path LIKE ? AND PATH NOT LIKE ? AND storage = ? - `, p+"%", p+"%/%", storageID) + WHERE storage = ? AND parent = (SELECT fileid FROM oc_filecache WHERE storage = ? AND path_hash=?) AND name IS NOT NULL + `, storageID, storageID, phash) if err != nil { return nil, err }