filed
Job queue using FUSE
git clone git://mccd.space/filed
| Log | Files | Refs | README | LICENSE |
filemeta.go (886B)
1 package store
2
3 import (
4 "database/sql"
5 )
6
7 // FileMeta holds standard POSIX file attributes
8 type FileMeta struct {
9 Inode uint64
10 Mode uint32
11 UID uint32
12 GID uint32
13 }
14
15 func (st *Store) GetFileMeta(inode uint64) (*FileMeta, error) {
16 query := `
17 SELECT inode, mode, uid, gid
18 FROM file_meta
19 WHERE inode = ?
20 `
21 m := &FileMeta{}
22 err := st.db.QueryRow(query, inode).Scan(&m.Inode, &m.Mode, &m.UID, &m.GID)
23 if err == sql.ErrNoRows {
24 // No metadata exists, that's ok
25 return nil, nil
26 }
27 if err != nil {
28 return nil, err
29 }
30 return m, nil
31 }
32
33 func (st *Store) UpsertFileMeta(meta FileMeta) error {
34 query := `
35 INSERT INTO file_meta (inode, mode, uid, gid)
36 VALUES (?, ?, ?, ?)
37 ON CONFLICT(inode) DO UPDATE SET
38 mode = excluded.mode,
39 uid = excluded.uid,
40 gid = excluded.gid
41 `
42 _, err := st.db.Exec(query, meta.Inode, meta.Mode, meta.UID, meta.GID)
43 return err
44 }