Index

NAME

Top

Fuse::DBI - mount your database as filesystem and use it

SYNOPSIS

Top

use Fuse::DBI; Fuse::DBI->mount( ... ); See run below for examples how to set parameters.

DESCRIPTION

Top

This module will use Fuse module, part of FUSE (Filesystem in USErspace) available at http://fuse.sourceforge.net/ to mount your database as file system. That will give you possibility to use normal file-system tools (cat, grep, vi) to manipulate data in database. It's actually opposite of Oracle's intention to put everything into database.

METHODS

Top

mount

Mount your database as filesystem. Let's suppose that your database have table files with following structure: id: int filename: text size: int content: text writable: boolean Following is example how to mount table like that to /mnt : my $mnt = Fuse::DBI->mount({ 'filenames' => 'select id,filename,size,writable from files', 'read' => 'select content from files where id = ?', 'update' => 'update files set content = ? where id = ?', 'dsn' => 'DBI:Pg:dbname=test_db', 'user' => 'database_user', 'password' => 'database_password', 'invalidate' => sub { ... }, }); Options: filenames SQL query which returns id (unique id for that row), filename , size and writable boolean flag. read SQL query which returns only one column with content of file and has placeholder ? for id . update SQL query with two pace-holders, one for new content and one for id . dsn DBI dsn to connect to (contains database driver and name of database). user User with which to connect to database password Password for connecting to database invalidate Optional anonymous code reference which will be executed when data is updated in database. It can be used as hook to delete cache (for example on-disk-cache) which is created from data edited through Fuse::DBI . fork Optional flag which forks after mount so that executing script will continue running. Implementation is experimental. There is also alternative way which can generate read and update queries on the fly: my $mnt = Fuse::DBI->mount({ 'filenames' => 'select id,filename,size,writable from files', 'read' => sub { my ($path,$file) = @_; return( 'select content from files where id = ?', $file->{row}->{id} ); }, 'update' => sub { my ($path,$file) = @_; return( 'update files set content = ? where id = ?', $file->{row}->{id} ); }, 'dsn' => 'DBI:Pg:dbname=test_db', 'user' => 'database_user', 'password' => 'database_password', 'invalidate' => sub { ... }, });

is_mounted

Check if fuse filesystem is mounted if ($mnt->is_mounted) { ... }

umount

Unmount your database as filesystem. $mnt->umount; This will also kill background process which is translating database to filesystem.

fuse_module_loaded

Checks if fuse module is loaded in kernel. die "no fuse module loaded in kernel" unless (Fuse::DBI::fuse_module_loaded); This function in called by mount , but might be useful alone also.

EXPORT

Top

Nothing.

BUGS

Top

Size information ( ls -s ) is wrong. It's a problem in upstream Fuse module (for which I'm to blame lately), so when it gets fixes, Fuse::DBI will automagically pick it up.

SEE ALSO

Top

FUSE (Filesystem in USErspace) website http://fuse.sourceforge.net/ Example for WebGUI which comes with this distribution in directory examples/webgui.pl . It also contains a lot of documentation about design of this module, usage and limitations.

AUTHOR

Top

Dobrica Pavlinusic, <dpavlin@rot13.org>

COPYRIGHT AND LICENSE

Top