src/dbfs/tree.c
changeset 56 9dfc861273e5
parent 42 40a3b13ffc9d
child 57 527d23bf6441
equal deleted inserted replaced
42:40a3b13ffc9d 56:9dfc861273e5
     1 
       
     2 #include "../lib/log.h"
       
     3 
       
     4 #include "dbfs.h"
       
     5 
       
     6 void dbfs_rename_res (const struct evsql_result_info *res, void *arg) {
       
     7     struct fuse_req *req = arg;
       
     8     int err;
       
     9 
       
    10     // check the results
       
    11     if ((err = _dbfs_check_res(res, 0, 0)))
       
    12         SERROR(err = (err ==  1 ? ENOENT : EIO));
       
    13     
       
    14     // just reply
       
    15     if ((err = -fuse_reply_err(req, 0)))
       
    16         EERROR(err, "fuse_reply_err");
       
    17     
       
    18     // log
       
    19     INFO("[dbfs.rename %p] -> OK", req);
       
    20 
       
    21     // fallthrough for result_free
       
    22     err = 0;
       
    23 
       
    24 error:
       
    25     if (err && (err = -fuse_reply_err(req, err)))
       
    26         EWARNING(err, "fuse_reply_err");
       
    27     
       
    28     evsql_result_free(res);
       
    29 }
       
    30 
       
    31 void dbfs_rename (struct fuse_req *req, fuse_ino_t parent, const char *name, fuse_ino_t newparent, const char *newname) {
       
    32     struct dbfs *dbfs_ctx = fuse_req_userdata(req);
       
    33     int err;
       
    34     
       
    35     INFO("[dbfs.rename %p] parent=%lu, name=%s, newparent=%lu, newname=%s", req, parent, name, newparent, newname);
       
    36 
       
    37     // just one UPDATE
       
    38     const char *sql = 
       
    39         "UPDATE"
       
    40         " file_tree"
       
    41         " SET parent = $1::int4, name = $2::varchar"
       
    42         " WHERE parent = $3::int4 AND name = $4::varchar";
       
    43 
       
    44     static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
       
    45         EVSQL_PARAM ( UINT32 ),
       
    46         EVSQL_PARAM ( STRING ),
       
    47         EVSQL_PARAM ( UINT32 ),
       
    48         EVSQL_PARAM ( STRING ),
       
    49 
       
    50         EVSQL_PARAMS_END
       
    51     };
       
    52 
       
    53     if (0
       
    54         ||  evsql_param_uint32(&params, 0, newparent)
       
    55         ||  evsql_param_string(&params, 1, newname)
       
    56         ||  evsql_param_uint32(&params, 2, parent)
       
    57         ||  evsql_param_string(&params, 3, name)
       
    58     )
       
    59         SERROR(err = EIO);
       
    60 
       
    61     // query
       
    62     if (evsql_query_params(dbfs_ctx->db, NULL, sql, &params, dbfs_rename_res, req) == NULL)
       
    63         SERROR(err = EIO);
       
    64     
       
    65     // good, wait
       
    66     return;
       
    67 
       
    68 error:
       
    69     if ((err = fuse_reply_err(req, err)))
       
    70         EWARNING(err, "fuse_reply_err");
       
    71 }