# HG changeset patch # User Tero Marttila # Date 1227916232 -7200 # Node ID 881de320e4833a9e4ed33688ab90fcca4c1e8535 # Parent bb2ff0d2d343edad0ba5ce2882d532b5a0a67c70 convert dbfs/link.c diff -r bb2ff0d2d343 -r 881de320e483 src/dbfs/common.c --- a/src/dbfs/common.c Sat Nov 29 01:30:43 2008 +0200 +++ b/src/dbfs/common.c Sat Nov 29 01:50:32 2008 +0200 @@ -80,8 +80,6 @@ } int _dbfs_stat_info (struct stat *st, struct dbfs_stat_values *values) { - int err = 0; - INFO("\tst_mode=S_IF%s | %ho, st_nlink=%llu, st_size=%llu", values->type, values->mode, (long long unsigned int) values->nlink, (long long unsigned int) values->size); // convert and store @@ -91,9 +89,6 @@ // good return 0; - -error: - return err; } diff -r bb2ff0d2d343 -r 881de320e483 src/dbfs/link.c --- a/src/dbfs/link.c Sat Nov 29 01:30:43 2008 +0200 +++ b/src/dbfs/link.c Sat Nov 29 01:50:32 2008 +0200 @@ -64,30 +64,27 @@ int err; INFO("[dbfs.lookup] parent=%lu name=%s", parent, name); - - // query and params - const char *sql = - "SELECT" - " inodes.ino, " DBFS_STAT_COLS - " FROM file_tree INNER JOIN inodes ON (file_tree.ino = inodes.ino)" - " WHERE file_tree.parent = $1::int4 AND file_tree.name = $2::varchar"; - - static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) { - EVSQL_PARAM ( UINT32 ), - EVSQL_PARAM ( STRING ), - EVSQL_PARAMS_END + // query info + static struct evsql_query_info query_info = { + .sql = "SELECT" + " inodes.ino, " DBFS_STAT_COLS + " FROM file_tree INNER JOIN inodes ON (file_tree.ino = inodes.ino)" + " WHERE file_tree.parent = $1::int4 AND file_tree.name = $2::varchar", + + .params = { + EVSQL_TYPE ( UINT32 ), + EVSQL_TYPE ( STRING ), + + EVSQL_TYPE_END + } }; - - // build params - if (0 - || evsql_param_uint32(¶ms, 0, parent) - || evsql_param_string(¶ms, 1, name) - ) - EERROR(err = EIO, "evsql_param_*"); // query - if ((query = evsql_query_params(ctx->db, NULL, sql, ¶ms, dbfs_entry_res, req)) == NULL) + if ((query = evsql_query_exec(ctx->db, NULL, &query_info, dbfs_entry_res, req, + (uint32_t) parent, + (const char *) name + )) == NULL) EERROR(err = EIO, "evsql_query_params"); // handle interrupts @@ -101,24 +98,33 @@ EWARNING(err, "fuse_reply_err"); } -void _dbfs_readlink_res (struct evsql_result *res, void *arg) { +void dbfs_readlink_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err = 0; uint32_t ino; const char *type, *link; - // check the results - if ((err = _dbfs_check_res(res, 1, 3))) - SERROR(err = (err == 1 ? ENOENT : EIO)); - - // get our data - if (0 - || evsql_result_uint32(res, 0, 0, &ino, 0 ) // inodes.ino - || evsql_result_string(res, 0, 1, &type, 0 ) // inodes.type - || evsql_result_string(res, 0, 2, &link, 1 ) // inodes.link_path - ) - EERROR(err = EIO, "invalid db data"); + // result info + static struct evsql_result_info result_info = { + 0, { + EVSQL_TYPE ( UINT32 ), + EVSQL_TYPE ( STRING ), + EVSQL_TYPE ( STRING ), + + EVSQL_TYPE_END + } + }; + + // begin + if ((err = evsql_result_begin(&result_info, res))) + EERROR(err, "evsql_result_begin"); + + // get the row of data + if ((err = evsql_result_next(res, + &ino, &type, &link + )) <= 0) + SERROR(err = err || ENOENT); // is it a symlink? if (_dbfs_mode(type) != S_IFLNK) @@ -144,27 +150,25 @@ int err; INFO("[dbfs.readlink %p] ino=%lu", req, ino); + + // query info + static struct evsql_query_info query_info = { + .sql = "SELECT" + " inodes.ino, inodes.type, inodes.link_path" + " FROM inodes" + " WHERE inodes.ino = $1::int4", - const char *sql = - "SELECT" - " inodes.ino, inodes.type, inodes.link_path" - " FROM inodes" - " WHERE inodes.ino = $1::int4"; + .params = { + EVSQL_TYPE ( UINT32 ), - static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) { - EVSQL_PARAM ( UINT32 ), - - EVSQL_PARAMS_END + EVSQL_TYPE_END + } }; - // build params - if (0 - || evsql_param_uint32(¶ms, 0, ino) - ) - SERROR(err = EIO); - // query - if ((query = evsql_query_params(ctx->db, NULL, sql, ¶ms, _dbfs_readlink_res, req)) == NULL) + if ((query = evsql_query_exec(ctx->db, NULL, &query_info, dbfs_readlink_res, req, + (uint32_t) ino + )) == NULL) SERROR(err = EIO); // handle interrupts @@ -179,17 +183,14 @@ } -#define SETERR(err_var, err_val, bool_val) ((err_var) = bool_val ? (err_val) : 0) - void dbfs_unlink_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err = 0; + + // check + if ((err = evsql_result_check(res))) + ERROR("evsql_result_check: %s", evsql_result_error(res)); - // check the results - // XXX: reply with ENOTEMPTY if it fails due to this inode being a dir - if ((err = dbfs_check_result(res, 1, 0))) - goto error; - INFO("\t[dbfs.unlink %p] -> OK", req); // reply @@ -210,28 +211,26 @@ int err; INFO("[dbfs.unlink %p] parent=%lu, name=%s", req, parent, name); + + // query info + static struct evsql_query_info query_info = { + .sql = "DELETE" + " FROM file_tree" + " WHERE parent = $1::int4 AND name = $2::varchar", + + .params = { + EVSQL_TYPE ( UINT32 ), + EVSQL_TYPE ( STRING ), - const char *sql = - "DELETE" - " FROM file_tree" - " WHERE parent = $1::int4 AND name = $2::varchar"; - - static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) { - EVSQL_PARAM ( UINT32 ), - EVSQL_PARAM ( STRING ), - - EVSQL_PARAMS_END + EVSQL_TYPE_END + } }; - // build params - if (0 - || evsql_param_uint32(¶ms, 0, parent) - || evsql_param_string(¶ms, 1, name) - ) - SERROR(err = EIO); - // query - if ((query = evsql_query_params(ctx->db, NULL, sql, ¶ms, dbfs_unlink_res, req)) == NULL) + if ((query = evsql_query_exec(ctx->db, NULL, &query_info, dbfs_unlink_res, req, + (uint32_t) parent, + (const char *) name + )) == NULL) SERROR(err = EIO); // handle interrupts @@ -252,27 +251,25 @@ INFO("[dbfs.link %p] ino=%lu, newparent=%lu, newname=%s", req, ino, newparent, newname); - const char *sql = - "SELECT ino, type, mode, size, nlink FROM dbfs_link($1::int4, $2::int4, $3::varchar)"; + // query info + static struct evsql_query_info query_info = { + .sql = "SELECT ino, type, mode, size, nlink FROM dbfs_link($1::int4, $2::int4, $3::varchar)", - static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) { - EVSQL_PARAM ( UINT32 ), - EVSQL_PARAM ( UINT32 ), - EVSQL_PARAM ( STRING ), + .params = { + EVSQL_TYPE ( UINT32 ), + EVSQL_TYPE ( UINT32 ), + EVSQL_TYPE ( STRING ), - EVSQL_PARAMS_END + EVSQL_TYPE_END + } }; - // build params - if (0 - || evsql_param_uint32(¶ms, 0, ino) - || evsql_param_uint32(¶ms, 1, newparent) - || evsql_param_string(¶ms, 2, newname) - ) - SERROR(err = EIO); - // query - if ((query = evsql_query_params(ctx->db, NULL, sql, ¶ms, dbfs_entry_res, req)) == NULL) + if ((query = evsql_query_exec(ctx->db, NULL, &query_info, dbfs_entry_res, req, + (uint32_t) ino, + (uint32_t) newparent, + (const char *) newname + )) == NULL) SERROR(err = EIO); // handle interrupts @@ -285,3 +282,4 @@ if ((err = -fuse_reply_err(req, err))) EWARNING(err, "fuse_reply_err"); } + diff -r bb2ff0d2d343 -r 881de320e483 src/evsql.h --- a/src/evsql.h Sat Nov 29 01:30:43 2008 +0200 +++ b/src/evsql.h Sat Nov 29 01:50:32 2008 +0200 @@ -155,10 +155,13 @@ * Macros for defining param/result infos/lists */ #define EVSQL_PARAMS(result_fmt) { result_fmt, -#define EVSQL_PARAM(typenam) {{ EVSQL_FMT_BINARY, EVSQL_TYPE_ ## typenam }} -#define EVSQL_PARAMS_END {{ EVSQL_FMT_BINARY, EVSQL_TYPE_INVALID }} \ +#define EVSQL_PARAM(typenam) { EVSQL_TYPE(typenam) } +#define EVSQL_PARAMS_END { EVSQL_TYPE_END } \ } // <<< +#define EVSQL_TYPE(typenam) { EVSQL_FMT_BINARY, EVSQL_TYPE_ ## typenam } +#define EVSQL_TYPE_END { EVSQL_FMT_BINARY, EVSQL_TYPE_INVALID } + /* * Callback for handling query results.