filed

Job queue using FUSE

git clone git://mccd.space/filed

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 }