--- 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;
--- 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;
--- 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
*
--- 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;
--- 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;
--- 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;
}
--- 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;
--- 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;
--- 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;
--- 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.
--- 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
--- 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;