# HG changeset patch # User Tero Marttila # Date 1227913920 -7200 # Node ID 8b019d19135329a8e35c3f215bd0781a4102937e # Parent 8c6c459eacb71aa17acf978ac66191c0fa0d0b78 update dbfs code to work with new evsql diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/attr.c --- a/src/dbfs/attr.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/attr.c Sat Nov 29 01:12:00 2008 +0200 @@ -9,7 +9,7 @@ // for building the setattr UPDATE #define FIELD(to_set, flag, field, value) ((to_set) & (flag)) ? (field " = " value ", ") : "" -void _dbfs_attr_res (const struct evsql_result_info *res, void *arg) { +void _dbfs_attr_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; struct stat st; ZINIT(st); int err = 0; diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/common.c --- a/src/dbfs/common.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/common.c Sat Nov 29 01:12:00 2008 +0200 @@ -20,11 +20,11 @@ } } -int _dbfs_check_res (const struct evsql_result_info *res, size_t rows, size_t cols) { +int _dbfs_check_res (struct evsql_result *res, size_t rows, size_t cols) { int err = 0; // check if it failed - if (res->error) + if (evsql_result_check(res)) NERROR(evsql_result_error(res)); // not found? @@ -49,14 +49,14 @@ return err; } -err_t dbfs_check_result (const struct evsql_result_info *res, size_t rows, size_t cols) { +err_t dbfs_check_result (struct evsql_result *res, size_t rows, size_t cols) { err_t err; // number of rows returned/affected size_t nrows = evsql_result_rows(res) ? : evsql_result_affected(res); // did the query fail outright? - if (res->error) + if (evsql_result_check(res)) // dump error message NXERROR(err = EIO, evsql_result_error(res)); @@ -79,7 +79,7 @@ return err; } -int _dbfs_stat_info (struct stat *st, const struct evsql_result_info *res, size_t row, size_t col_offset) { +int _dbfs_stat_info (struct stat *st, struct evsql_result *res, size_t row, size_t col_offset) { int err = 0; uint16_t mode; diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/dbfs.h --- a/src/dbfs/dbfs.h Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/dbfs.h Sat Nov 29 01:12:00 2008 +0200 @@ -48,12 +48,12 @@ * 0 the results match * 1 there were no results (zero rows) */ -int _dbfs_check_res (const struct evsql_result_info *res, size_t rows, size_t cols); +int _dbfs_check_res (struct evsql_result *res, size_t rows, size_t cols); /* * Same as _dbfs_check_res, but returns ENOENT/EIO directly */ -err_t dbfs_check_result (const struct evsql_result_info *res, size_t rows, size_t cols); +err_t dbfs_check_result (struct evsql_result *res, size_t rows, size_t cols); /* * Fill a `struct state` with info retrieved from a SQL query. @@ -63,7 +63,7 @@ * * Note that this does not fill the st_ino field */ -int _dbfs_stat_info (struct stat *st, const struct evsql_result_info *res, size_t row, size_t col_offset); +int _dbfs_stat_info (struct stat *st, struct evsql_result *res, size_t row, size_t col_offset); /** interrupt.c * diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/dirop.c --- a/src/dbfs/dirop.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/dirop.c Sat Nov 29 01:12:00 2008 +0200 @@ -33,7 +33,7 @@ /* * Handle the results for the initial attribute lookup for the dir itself during opendir ops. */ -static void dbfs_opendir_res (const struct evsql_result_info *res, void *arg) { +static void dbfs_opendir_res (struct evsql_result *res, void *arg) { struct dbfs_dirop *dirop = arg; int err; @@ -160,7 +160,7 @@ * Fill up the dirbuf, and then send the reply. * */ -static void dbfs_readdir_res (const struct evsql_result_info *res, void *arg) { +static void dbfs_readdir_res (struct evsql_result *res, void *arg) { struct dbfs_dirop *dirop = arg; int err; size_t row; diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/fileop.c --- a/src/dbfs/fileop.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/fileop.c Sat Nov 29 01:12:00 2008 +0200 @@ -27,7 +27,7 @@ (void) fop; } -static void dbfs_open_res (const struct evsql_result_info *res, void *arg) { +static void dbfs_open_res (struct evsql_result *res, void *arg) { struct dbfs_fileop *fop = arg; int err; @@ -133,7 +133,7 @@ } } -void dbfs_read_res (const struct evsql_result_info *res, void *arg) { +void dbfs_read_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err; const char *buf; @@ -206,7 +206,7 @@ fuse_reply_err(req, err); } -void dbfs_write_res (const struct evsql_result_info *res, void *arg) { +void dbfs_write_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err; uint32_t size; diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/interrupt.c --- a/src/dbfs/interrupt.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/interrupt.c Sat Nov 29 01:12:00 2008 +0200 @@ -55,4 +55,7 @@ // just pass over to fuse_req_interrupt_func fuse_req_interrupt_func(req, _dbfs_interrupt_ctx, ctx); + + // XXX: not implemented fully + return -1; } diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/link.c --- a/src/dbfs/link.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/link.c Sat Nov 29 01:12:00 2008 +0200 @@ -10,7 +10,7 @@ /* * Used for lookup and link */ -void dbfs_entry_res (const struct evsql_result_info *res, void *arg) { +void dbfs_entry_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; struct fuse_entry_param e; ZINIT(e); int err = 0; @@ -93,7 +93,7 @@ EWARNING(err, "fuse_reply_err"); } -void _dbfs_readlink_res (const struct evsql_result_info *res, void *arg) { +void _dbfs_readlink_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err = 0; @@ -173,7 +173,7 @@ #define SETERR(err_var, err_val, bool_val) ((err_var) = bool_val ? (err_val) : 0) -void dbfs_unlink_res (const struct evsql_result_info *res, void *arg) { +void dbfs_unlink_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err = 0; diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/mk.c --- a/src/dbfs/mk.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/mk.c Sat Nov 29 01:12:00 2008 +0200 @@ -58,7 +58,7 @@ dbfs_trans_fail(ctx_base, err); } -void dbfs_mk_filetree (const struct evsql_result_info *res, void *arg) { +void dbfs_mk_filetree (struct evsql_result *res, void *arg) { struct dbfs_mk_ctx *ctx = arg; int err = EIO; @@ -79,7 +79,7 @@ evsql_result_free(res); } -void dbfs_mk_inode (const struct evsql_result_info *res, void *arg) { +void dbfs_mk_inode (struct evsql_result *res, void *arg) { struct dbfs_mk_ctx *ctx = arg; struct dbfs *dbfs_ctx = fuse_req_userdata(ctx->base.req); int err = EIO; diff -r 8c6c459eacb7 -r 8b019d191353 src/dbfs/tree.c --- a/src/dbfs/tree.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/dbfs/tree.c Sat Nov 29 01:12:00 2008 +0200 @@ -3,7 +3,7 @@ #include "dbfs.h" -void dbfs_rename_res (const struct evsql_result_info *res, void *arg) { +void dbfs_rename_res (struct evsql_result *res, void *arg) { struct fuse_req *req = arg; int err; diff -r 8c6c459eacb7 -r 8b019d191353 src/evsql.h --- a/src/evsql.h Sat Nov 29 00:43:35 2008 +0200 +++ b/src/evsql.h Sat Nov 29 01:12:00 2008 +0200 @@ -110,7 +110,7 @@ // (internal) flags struct { - char has_value : 1; + uint8_t has_value : 1; } flags; }; @@ -152,6 +152,15 @@ }; /* + * 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 }} \ + } // <<< + + +/* * Callback for handling query results. * * The query has completed, either succesfully or unsuccesfully. diff -r 8c6c459eacb7 -r 8b019d191353 src/evsql/query.c --- a/src/evsql/query.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/evsql/query.c Sat Nov 29 01:12:00 2008 +0200 @@ -84,8 +84,8 @@ // transform for (param = params->list, idx = 0; param->info.type; param++, idx++) { - // `set for NULLs, otherwise not - query->params.types[idx] = param->bytes ? 0 : EVSQL_PQ_ARBITRARY_TYPE_OID; + // set for NULLs, otherwise not + query->params.types[idx] = (param->bytes || param->flags.has_value) ? 0 : EVSQL_PQ_ARBITRARY_TYPE_OID; // scalar values query->params.item_vals[idx] = param->value; @@ -96,9 +96,9 @@ // lengths query->params.lengths[idx] = param->length; - - // formats, binary if length is nonzero, but text for NULLs - query->params.formats[idx] = param->length && param->bytes ? 1 : 0; + + // XXX: this assumes that format is FMT_BINARY... + query->params.formats[idx] = param->info.format; } // execute it diff -r 8c6c459eacb7 -r 8b019d191353 src/evsql/util.c --- a/src/evsql/util.c Sat Nov 29 00:43:35 2008 +0200 +++ b/src/evsql/util.c Sat Nov 29 01:12:00 2008 +0200 @@ -75,6 +75,9 @@ struct evsql_item *p = ¶ms->list[param]; assert(p->info.type == EVSQL_TYPE_STRING); + + // XXX: hmm... + p->info.format = EVSQL_FMT_TEXT; p->bytes = ptr; p->length = 0;