sqlarfs

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2023 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package sqlarfs provides an implementation of io/fs.FS for SQLite Archive Files via database/sql.

Example
// Open DB in readonly mode for maximum speed
db, err := sql.Open(sqliteDriver, "file:testdata/simple.sqlar?mode=ro&immutable=1")
if err != nil {
	log.Fatal(err)
}
defer db.Close()

// List files in the archive, recusively
ar := sqlarfs.New(db, sqlarfs.PermOwner)
fs.WalkDir(ar, ".", func(path string, d fs.DirEntry, err error) error {
	if err != nil {
		return err
	}
	info, _ := d.Info()
	fmt.Printf("%s %4d %s  %s\n", info.Mode(), info.Size(), info.ModTime().UTC().Format("_2 Jan 2006 15:04"), info.Name())
	return nil
})

// Dump one file
f, err := ar.Open("foo.txt")
if err != nil {
	log.Fatal(err)
}
defer f.Close()
fmt.Println("foo.txt:")
io.Copy(os.Stdout, f)
Output:

dr-xr-xr-x    0  1 Jan 1970 00:00  .
-rw-r--r--    4 30 Sep 2023 14:51  bar.txt
-rw-r--r--    4 30 Sep 2023 16:14  foo.txt
foo.txt:
Foo

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FS

type FS interface {
	fs.FS
	fs.StatFS
	fs.ReadDirFS
}

FS documents the io/fs interfaces provided by this implementation of io/fs.FS.

func New

func New(db *sql.DB, opts ...Option) FS

New returns an instance of io/fs.FS that allows to access the files in an SQLite Archive File opened with database/sql.

db is a database/sql handle to the SQLite Archive file. Two drivers are known to work: github.com/mattn/sqlite3 and modernc.org/sqlite. sqlarfs uses caching for the directory structure, and so it assumes that the sqlar table is not modified while browsing the filesystem. So if the sqlar table is modified, create a new instance.

For maximum performance, open the SQLite database in read-only, immutable mode:

file:<path>?mode=ro&immutable=1

The default permission mask used to enforce file permissions ('mode' column in the 'sqlar' table) is PermAny.

type Option

type Option interface {
	// contains filtered or unexported methods
}

Option is an option for New.

Available options: PermOwner, PermGroup, PermOthers, PermAny.

type PermMask

type PermMask uint32

PermMask is a permission mask for enforcing fs.FileMode permissions (disallow to read files, disallow traversing or listing directories) in an SQLite Archive File.

PermMask is an Option for New.

const (
	PermOwner  PermMask = 0700
	PermGroup  PermMask = 0070
	PermOthers PermMask = 0007
	PermAny    PermMask = 0777 // Allow to read (traverse for directories) any file that have at least one permission bit for either owner/group/others
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL