// We always have to query the Sqlite store first, because of our
        // EA nightmare scenario: a file whose permissions or ownership get
        // changed after the EAs have been attached.  Thus attributes in
        // the database always trump those found in EAs.

        public FileAttributes Read(string path)
        {
            FileAttributes attr;

            attr = store_sqlite.Read(path);

            if (attr != null)
            {
                // If we have write access to the path but it has attributes
                // stored in the sqlite file attributes db, we should attach them
                // to the file with EAs and delete the record from the db.

                if (!FileSystem.IsWritable(path))
                {
                    return(attr);
                }

                bool success = store_ea.Write(attr);
                if (success)
                {
                    store_sqlite.Drop(path);
                }
            }
            else
            {
                attr = store_ea.Read(path);
            }
            return(attr);
        }