doc/fuse_db.sql
author Tero Marttila <terom@fixme.fi>
Tue, 21 Oct 2008 21:54:20 +0300
changeset 37 c3880f3b4de8
parent 35 4f10421681d2
child 38 1fd4da071575
permissions -rw-r--r--
update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     1
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     2
DROP TABLE IF EXISTS file_tree;
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     3
DROP TABLE IF EXISTS inodes;
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     4
DROP SEQUENCE IF EXISTS ino_seq;
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     5
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     6
CREATE SEQUENCE ino_seq START 64;
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     7
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
     8
CREATE TABLE inodes (
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
     9
    ino int4 primary key DEFAULT nextval('ino_seq'::regclass), 
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    10
    type char(3) NOT NULL, 
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    11
    mode int2 NOT NULL, 
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    12
    data oid,
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    13
    link_path varchar(512)
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    14
);
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    16
CREATE TABLE file_tree (
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    17
    "offset" serial4 primary key, 
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    18
    name varchar(256), 
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    19
    ino int4 references inodes(ino) NOT NULL UNIQUE,
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    20
    parent int4 references file_tree(ino)
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    21
);
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    23
INSERT INTO inodes (ino, type, mode, data) VALUES 
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    24
    (1, 'DIR', 365, NULL),
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    25
    (2, 'REG', 292, lo_create(0));
27
461be4cd34a3 working open/read/close -dir
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    26
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    27
INSERT INTO file_tree (name, parent, ino) VALUES 
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    28
    (NULL,  NULL,   1   ),
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    29
    ('foo', 1,      2   );
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    30
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    31
CREATE OR REPLACE FUNCTION lo_size (oid) RETURNS int4 LANGUAGE SQL STABLE RETURNS NULL ON NULL INPUT AS 'select lo_lseek(lo_open($1, 262144), 0, 2);';
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    32
CREATE OR REPLACE FUNCTION lo_pread (IN fd int4, IN len int4, IN "off" int4) RETURNS bytea LANGUAGE SQL STRICT AS 'select lo_lseek($1, $3, 0); select loread($1, $2);';
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    33
CREATE OR REPLACE FUNCTION lo_pwrite (IN fd int4, IN buf bytea, IN "off" int4) RETURNS int4 LANGUAGE SQL STRICT AS 'select lo_lseek($1, $3, 0); select lowrite($1, $2);';
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    34
CREATE OR REPLACE FUNCTION lo_otruncate (IN oid, IN len int4) RETURNS oid LANGUAGE SQL STRICT AS 'select lo_truncate(lo_open($1, 393216), $2); select $1;';
33
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    35
37
c3880f3b4de8 update fuse_db.sql, just use dbfs_unlink for rmdir (no special handling)
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    36
CREATE OR REPLACE FUNCTION dbfs_size (type char, oid, link varchar) RETURNS int4 LANGUAGE SQL STABLE AS $$
33
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    37
    SELECT CASE $1 
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    38
        WHEN 'LNK' THEN char_length($3) 
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    39
        WHEN 'REG' THEN lo_size($2) 
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    40
        ELSE 0 
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    41
    END;
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 32
diff changeset
    42
$$;