src/dbfs/tree.c
author Tero Marttila <terom@fixme.fi>
Sat, 13 Dec 2008 18:55:01 +0200
branchnew-evsql
changeset 52 f5037572c326
parent 48 8b019d191353
permissions -rw-r--r--
improved evsql docs and added a doxygen config file
34
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "../lib/log.h"
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include "dbfs.h"
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
48
8b019d191353 update dbfs code to work with new evsql
Tero Marttila <terom@fixme.fi>
parents: 34
diff changeset
     6
void dbfs_rename_res (struct evsql_result *res, void *arg) {
34
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
    struct fuse_req *req = arg;
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    int err;
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    // check the results
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    if ((err = _dbfs_check_res(res, 0, 0)))
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
        SERROR(err = (err ==  1 ? ENOENT : EIO));
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    // just reply
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    if ((err = -fuse_reply_err(req, 0)))
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        EERROR(err, "fuse_reply_err");
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    // log
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    INFO("[dbfs.rename %p] -> OK", req);
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    // fallthrough for result_free
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    err = 0;
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
error:
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    if (err && (err = -fuse_reply_err(req, err)))
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        EWARNING(err, "fuse_reply_err");
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    evsql_result_free(res);
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
}
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
void dbfs_rename (struct fuse_req *req, fuse_ino_t parent, const char *name, fuse_ino_t newparent, const char *newname) {
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    struct dbfs *dbfs_ctx = fuse_req_userdata(req);
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    int err;
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    INFO("[dbfs.rename %p] parent=%lu, name=%s, newparent=%lu, newname=%s", req, parent, name, newparent, newname);
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    // just one UPDATE
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    const char *sql = 
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        "UPDATE"
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        " file_tree"
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        " SET parent = $1::int4, name = $2::varchar"
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        " WHERE parent = $3::int4 AND name = $4::varchar";
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        EVSQL_PARAM ( UINT32 ),
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        EVSQL_PARAM ( STRING ),
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        EVSQL_PARAM ( UINT32 ),
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        EVSQL_PARAM ( STRING ),
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        EVSQL_PARAMS_END
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    };
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    if (0
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
        ||  evsql_param_uint32(&params, 0, newparent)
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        ||  evsql_param_string(&params, 1, newname)
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        ||  evsql_param_uint32(&params, 2, parent)
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        ||  evsql_param_string(&params, 3, name)
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    )
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        SERROR(err = EIO);
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    // query
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    if (evsql_query_params(dbfs_ctx->db, NULL, sql, &params, dbfs_rename_res, req) == NULL)
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        SERROR(err = EIO);
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    // good, wait
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    return;
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
error:
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    if ((err = fuse_reply_err(req, err)))
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
        EWARNING(err, "fuse_reply_err");
460f995d3769 fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
}