update dbfs code to work with new evsql new-evsql
authorTero Marttila <terom@fixme.fi>
Sat, 29 Nov 2008 01:12:00 +0200
branchnew-evsql
changeset 48 8b019d191353
parent 47 8c6c459eacb7
child 49 bb2ff0d2d343
update dbfs code to work with new evsql
src/dbfs/attr.c
src/dbfs/common.c
src/dbfs/dbfs.h
src/dbfs/dirop.c
src/dbfs/fileop.c
src/dbfs/interrupt.c
src/dbfs/link.c
src/dbfs/mk.c
src/dbfs/tree.c
src/evsql.h
src/evsql/query.c
src/evsql/util.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;
--- 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 = &params->list[param];
     
     assert(p->info.type == EVSQL_TYPE_STRING);
+    
+    // XXX: hmm...
+    p->info.format = EVSQL_FMT_TEXT;
 
     p->bytes = ptr;
     p->length = 0;