changeset 11657:465192f682f0 octave-forge

Pass connection information to converters.
author i7tiol
date Sat, 27 Apr 2013 09:35:39 +0000
parents d38859613a53
children f9f1af45e49a
files main/database/src/command.cc main/database/src/command.h main/database/src/converters.cc main/database/src/converters.h main/database/src/converters_arr_comp.cc
diffstat 5 files changed, 151 insertions(+), 85 deletions(-) [+]
line wrap: on
line diff
--- a/main/database/src/command.cc	Sat Apr 27 08:33:57 2013 +0000
+++ b/main/database/src/command.cc	Sat Apr 27 09:35:39 2013 +0000
@@ -95,7 +95,6 @@
         {
           oct_type_t oct_type;
           oct_pq_conv_t *conv;
-          oct_pq_from_octave_fp_t conv_fcn;
 
           if (ptypes(i).is_empty ())
             {
@@ -136,18 +135,17 @@
           switch (oct_type)
             {
             case simple:
-              conv_fcn = conv->from_octave_bin;
-              if (conv_fcn (params(i), valsvec[i]))
+              if (conv->from_octave_bin (conn, params(i), valsvec[i]))
                 valid = 0;
               break;
 
             case array:
-              if (from_octave_bin_array (params(i), valsvec[i], conv))
+              if (from_octave_bin_array (conn, params(i), valsvec[i], conv))
                 valid = 0;
               break;
 
             case composite:
-              if (from_octave_bin_composite (params(i), valsvec[i], conv))
+              if (from_octave_bin_composite (conn, params(i), valsvec[i], conv))
                 valid = 0;
               break;
 
@@ -425,17 +423,17 @@
               switch (oct_type)
                 {
                 case simple:
-                  if (simple_type_to_octave (v, ov, nb))
+                  if (simple_type_to_octave (conn, v, ov, nb))
                     valid = 0;
                   break;
 
                 case array:
-                  if ((this->*array_to_octave) (v, ov, nb, conv))
+                  if ((this->*array_to_octave) (conn, v, ov, nb, conv))
                     valid = 0;
                   break;
 
                 case composite:
-                  if ((this->*composite_to_octave) (v, ov, nb, conv))
+                  if ((this->*composite_to_octave) (conn, v, ov, nb, conv))
                     valid = 0;
                   break;
 
@@ -766,17 +764,18 @@
                       switch (oct_types[j])
                         {
                         case simple:
-                          if (convs[j]->from_octave_bin (data(i, j), val))
+                          if (convs[j]->from_octave_bin (conn, data(i, j), val))
                             conversion_failed = true;
                           break;
 
                         case array:
-                          if (from_octave_bin_array (data(i, j), val, convs[j]))
+                          if (from_octave_bin_array (conn, data(i, j), val,
+                                                     convs[j]))
                             conversion_failed = true;
                           break;
 
                         case composite:
-                          if (from_octave_bin_composite (data(i, j), val,
+                          if (from_octave_bin_composite (conn, data(i, j), val,
                                                          convs[j]))
                             conversion_failed = true;
                           break;
--- a/main/database/src/command.h	Sat Apr 27 08:33:57 2013 +0000
+++ b/main/database/src/command.h	Sat Apr 27 09:35:39 2013 +0000
@@ -58,10 +58,12 @@
   count_state;
 
   typedef int (command::*to_octave_array_fp_t)
-    (char *, octave_value &, int, oct_pq_conv_t *);
+    (const octave_pq_connection &, char *, octave_value &,
+     int, oct_pq_conv_t *);
 
   typedef int (command::*to_octave_composite_fp_t)
-    (char *, octave_value &, int, oct_pq_conv_t *);
+    (const octave_pq_connection &, char *, octave_value &,
+     int, oct_pq_conv_t *);
 
   int all_results_fetched (void)
   {
@@ -126,25 +128,33 @@
 
   oct_pq_conv_t *pgtype_from_spec (Oid, oct_pq_conv_t *&, oct_type_t &);
 
-  int from_octave_bin_array (const octave_value &oct_arr, oct_pq_dynvec_t &val,
+  int from_octave_bin_array (const octave_pq_connection &conn,
+                             const octave_value &oct_arr, oct_pq_dynvec_t &val,
                              oct_pq_conv_t *);
 
-  int from_octave_bin_composite (const octave_value &oct_comp,
+  int from_octave_bin_composite (const octave_pq_connection &conn,
+                                 const octave_value &oct_comp,
                                  oct_pq_dynvec_t &val, oct_pq_conv_t *);
 
-  int from_octave_str_array (const octave_value &oct_arr, oct_pq_dynvec_t &val,
+  int from_octave_str_array (const octave_pq_connection &conn,
+                             const octave_value &oct_arr, oct_pq_dynvec_t &val,
                              octave_value &type);
 
-  int from_octave_str_composite (const octave_value &oct_comp,
+  int from_octave_str_composite (const octave_pq_connection &conn,
+                                 const octave_value &oct_comp,
                                  oct_pq_dynvec_t &val, octave_value &type);
 
-  int to_octave_bin_array (char *, octave_value &, int, oct_pq_conv_t *);
+  int to_octave_bin_array (const octave_pq_connection &conn,
+                           char *, octave_value &, int, oct_pq_conv_t *);
 
-  int to_octave_bin_composite (char *, octave_value &, int, oct_pq_conv_t *);
+  int to_octave_bin_composite (const octave_pq_connection &conn,
+                               char *, octave_value &, int, oct_pq_conv_t *);
 
-  int to_octave_str_array (char *, octave_value &, int, oct_pq_conv_t *);
+  int to_octave_str_array (const octave_pq_connection &conn,
+                           char *, octave_value &, int, oct_pq_conv_t *);
 
-  int to_octave_str_composite (char *, octave_value &, int, oct_pq_conv_t *);
+  int to_octave_str_composite (const octave_pq_connection &conn,
+                               char *, octave_value &, int, oct_pq_conv_t *);
 
   octave_idx_type count_row_major_order (dim_vector &, count_state &, bool);
 
--- a/main/database/src/converters.cc	Sat Apr 27 08:33:57 2013 +0000
+++ b/main/database/src/converters.cc	Sat Apr 27 09:35:39 2013 +0000
@@ -42,7 +42,8 @@
 
 /* type bool */
 
-int to_octave_str_bool (const char *c, octave_value &ov, int nb)
+int to_octave_str_bool (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   bool tp = (*c == 't' ? true : false);
 
@@ -51,14 +52,16 @@
   return 0;
 }
 
-int to_octave_bin_bool (const char *c, octave_value &ov, int nb)
+int to_octave_bin_bool (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   ov = octave_value (bool (*c));
 
   return 0;
 }
 
-int from_octave_str_bool (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_bool (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   bool b = ov.bool_value ();
 
@@ -74,7 +77,8 @@
   return 0;
 }
 
-int from_octave_bin_bool (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_bool (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   bool b = ov.bool_value ();
 
@@ -106,24 +110,28 @@
 
 /* type oid */
 
-int to_octave_str_oid (const char *c, octave_value &ov, int nb)
+int to_octave_str_oid (const octave_pq_connection &conn,
+                       const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_oid (const char *c, octave_value &ov, int nb)
+int to_octave_bin_oid (const octave_pq_connection &conn,
+                       const char *c, octave_value &ov, int nb)
 {
   ov = octave_value (octave_uint32 (be32toh (*((uint32_t *) c))));
 
   return 0;
 }
 
-int from_octave_str_oid (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_oid (const octave_pq_connection &conn,
+                         const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_oid (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_oid (const octave_pq_connection &conn,
+                         const octave_value &ov, oct_pq_dynvec_t &val)
 {
   uint32_t oid = ov.uint_value ();
 
@@ -155,14 +163,16 @@
 
 /* type float8 */
 
-int to_octave_str_float8 (const char *c, octave_value &ov, int nb)
+int to_octave_str_float8 (const octave_pq_connection &conn,
+                          const char *c, octave_value &ov, int nb)
 {
   // not implemented
 
   return 1;
 }
 
-int to_octave_bin_float8 (const char *c, octave_value &ov, int nb)
+int to_octave_bin_float8 (const octave_pq_connection &conn,
+                          const char *c, octave_value &ov, int nb)
 {
   union
   {
@@ -178,14 +188,16 @@
   return 0;
 }
 
-int from_octave_str_float8 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_float8 (const octave_pq_connection &conn,
+                            const octave_value &ov, oct_pq_dynvec_t &val)
 {
   // not implemented
 
   return 1;
 }
 
-int from_octave_bin_float8 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_float8 (const octave_pq_connection &conn,
+                            const octave_value &ov, oct_pq_dynvec_t &val)
 {
   union
   {
@@ -224,14 +236,16 @@
 
 /* type float4 */
 
-int to_octave_str_float4 (const char *c, octave_value &ov, int nb)
+int to_octave_str_float4 (const octave_pq_connection &conn,
+                          const char *c, octave_value &ov, int nb)
 {
   // not implemented
 
   return 1;
 }
 
-int to_octave_bin_float4 (const char *c, octave_value &ov, int nb)
+int to_octave_bin_float4 (const octave_pq_connection &conn,
+                          const char *c, octave_value &ov, int nb)
 {
   union
   {
@@ -247,14 +261,16 @@
   return 0;
 }
 
-int from_octave_str_float4 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_float4 (const octave_pq_connection &conn,
+                            const octave_value &ov, oct_pq_dynvec_t &val)
 {
   // not implemented
 
   return 1;
 }
 
-int from_octave_bin_float4 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_float4 (const octave_pq_connection &conn,
+                            const octave_value &ov, oct_pq_dynvec_t &val)
 {
   union
   {
@@ -293,12 +309,14 @@
 
 /* type bytea */
 
-int to_octave_str_bytea (const char *c, octave_value &ov, int nb)
+int to_octave_str_bytea (const octave_pq_connection &conn,
+                         const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_bytea (const char *c, octave_value &ov, int nb)
+int to_octave_bin_bytea (const octave_pq_connection &conn,
+                         const char *c, octave_value &ov, int nb)
 {
   uint8NDArray m (dim_vector (nb, 1));
 
@@ -311,12 +329,14 @@
   return 0;
 }
 
-int from_octave_str_bytea (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_bytea (const octave_pq_connection &conn,
+                           const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_bytea (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_bytea (const octave_pq_connection &conn,
+                           const octave_value &ov, oct_pq_dynvec_t &val)
 {
   uint8NDArray b = ov.uint8_array_value ();
 
@@ -358,12 +378,14 @@
 
 /* type text */
 
-int to_octave_str_text (const char *c, octave_value &ov, int nb)
+int to_octave_str_text (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_text (const char *c, octave_value &ov, int nb)
+int to_octave_bin_text (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   std::string s (c, nb);
 
@@ -372,12 +394,14 @@
   return 0;
 }
 
-int from_octave_str_text (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_text (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_text (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_text (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   std::string s = ov.string_value ();
 
@@ -446,12 +470,14 @@
 
 /* type name */
 
-int to_octave_str_name (const char *c, octave_value &ov, int nb)
+int to_octave_str_name (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_name (const char *c, octave_value &ov, int nb)
+int to_octave_bin_name (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   // FIXME: should we check the string in c?
 
@@ -462,12 +488,14 @@
   return 0;
 }
 
-int from_octave_str_name (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_name (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_name (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_name (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   std::string s = ov.string_value ();
 
@@ -502,24 +530,28 @@
 
 /* type int2 */
 
-int to_octave_str_int2 (const char *c, octave_value &ov, int nb)
+int to_octave_str_int2 (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_int2 (const char *c, octave_value &ov, int nb)
+int to_octave_bin_int2 (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   ov = octave_value (octave_int16 (int16_t (be16toh (*((int16_t *) c)))));
 
   return 0;
 }
 
-int from_octave_str_int2 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_int2 (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_int2 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_int2 (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   int16_t i2 = ov.int_value ();
 
@@ -552,24 +584,28 @@
 
 /* type int4 */
 
-int to_octave_str_int4 (const char *c, octave_value &ov, int nb)
+int to_octave_str_int4 (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_int4 (const char *c, octave_value &ov, int nb)
+int to_octave_bin_int4 (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   ov = octave_value (octave_int32 (int32_t (be32toh (*((int32_t *) c)))));
 
   return 0;
 }
 
-int from_octave_str_int4 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_int4 (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_int4 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_int4 (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   int32_t i4 = ov.int_value ();
 
@@ -602,24 +638,28 @@
 
 /* type int8 */
 
-int to_octave_str_int8 (const char *c, octave_value &ov, int nb)
+int to_octave_str_int8 (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   return 1;
 }
 
-int to_octave_bin_int8 (const char *c, octave_value &ov, int nb)
+int to_octave_bin_int8 (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb)
 {
   ov = octave_value (octave_int64 (int64_t (be64toh (*((int64_t *) c)))));
 
   return 0;
 }
 
-int from_octave_str_int8 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_str_int8 (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   return 1;
 }
 
-int from_octave_bin_int8 (const octave_value &ov, oct_pq_dynvec_t &val)
+int from_octave_bin_int8 (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val)
 {
   int64_t i8 = ov.int64_scalar_value ();
 
--- a/main/database/src/converters.h	Sat Apr 27 08:33:57 2013 +0000
+++ b/main/database/src/converters.h	Sat Apr 27 09:35:39 2013 +0000
@@ -36,9 +36,14 @@
 
 typedef std::vector<char> oct_pq_dynvec_t;
 
-typedef int (*oct_pq_to_octave_fp_t) (const char *, octave_value &, int);
+class octave_pq_connection;
 
-typedef int (*oct_pq_from_octave_fp_t) (const octave_value &, oct_pq_dynvec_t &);
+typedef int (*oct_pq_to_octave_fp_t) (const octave_pq_connection &,
+                                      const char *, octave_value &, int);
+
+typedef int (*oct_pq_from_octave_fp_t) (const octave_pq_connection &,
+                                        const octave_value &,
+                                        oct_pq_dynvec_t &);
 
 typedef std::vector<Oid> oct_pq_el_oids_t;
 
@@ -119,10 +124,14 @@
 
 // these prototypes are needed because pointers to these functions are
 // stored in the converter structures of each found enum type
-int to_octave_str_text (const char *c, octave_value &ov, int nb);
-int to_octave_bin_text (const char *c, octave_value &ov, int nb);
-int from_octave_str_text (const octave_value &ov, oct_pq_dynvec_t &val);
-int from_octave_bin_text (const octave_value &ov, oct_pq_dynvec_t &val);
+int to_octave_str_text (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb);
+int to_octave_bin_text (const octave_pq_connection &conn,
+                        const char *c, octave_value &ov, int nb);
+int from_octave_str_text (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val);
+int from_octave_bin_text (const octave_pq_connection &conn,
+                          const octave_value &ov, oct_pq_dynvec_t &val);
 
 // append bytes of value 'val' of type 'type' to dynamic char vector 'dv'
 #define OCT_PQ_PUT(dv, type, val)                       \
--- a/main/database/src/converters_arr_comp.cc	Sat Apr 27 08:33:57 2013 +0000
+++ b/main/database/src/converters_arr_comp.cc	Sat Apr 27 09:35:39 2013 +0000
@@ -85,7 +85,8 @@
     }
 }
 
-int command::from_octave_bin_array (const octave_value &oct_arr,
+int command::from_octave_bin_array (const octave_pq_connection &conn,
+                                    const octave_value &oct_arr,
                                     oct_pq_dynvec_t &val, oct_pq_conv_t *conv)
 {
   octave_scalar_map m = oct_arr.scalar_map_value ();
@@ -177,12 +178,12 @@
 
             if (conv->is_composite)
               {
-                if (from_octave_bin_composite (arr(i), val, conv))
+                if (from_octave_bin_composite (conn, arr(i), val, conv))
                   return 1;
               }
             else
               {
-                if (conv->from_octave_bin (arr(i), val))
+                if (conv->from_octave_bin (conn, arr(i), val))
                   return 1;
               }
 
@@ -193,7 +194,8 @@
   return 0;
 }
 
-int command::from_octave_bin_composite (const octave_value &oct_comp,
+int command::from_octave_bin_composite (const octave_pq_connection &conn,
+                                        const octave_value &oct_comp,
                                         oct_pq_dynvec_t &val,
                                         oct_pq_conv_t *conv)
 {
@@ -240,17 +242,17 @@
           switch (oct_type)
             {
             case simple:
-              if (el_conv->from_octave_bin (rec(i), val))
+              if (el_conv->from_octave_bin (conn, rec(i), val))
                 return 1;
               break;
 
             case array:
-              if (from_octave_bin_array (rec(i), val, el_conv))
+              if (from_octave_bin_array (conn, rec(i), val, el_conv))
                 return 1;
               break;
 
             case composite:
-              if (from_octave_bin_composite (rec(i), val, el_conv))
+              if (from_octave_bin_composite (conn, rec(i), val, el_conv))
                 return 1;
               break;
 
@@ -268,7 +270,8 @@
   return 0;
 }
 
-int command::from_octave_str_array (const octave_value &oct_arr,
+int command::from_octave_str_array (const octave_pq_connection &conn,
+                                    const octave_value &oct_arr,
                                     oct_pq_dynvec_t &val, octave_value &type)
 {
   // not implemented
@@ -278,7 +281,8 @@
   return 0;
 }
 
-int command::from_octave_str_composite (const octave_value &oct_comp,
+int command::from_octave_str_composite (const octave_pq_connection &conn,
+                                        const octave_value &oct_comp,
                                         oct_pq_dynvec_t &val,
                                         octave_value &type)
 {
@@ -289,7 +293,8 @@
   return 0;
 }
 
-int command::to_octave_bin_array (char *v, octave_value &ov, int nb,
+int command::to_octave_bin_array (const octave_pq_connection &conn,
+                                  char *v, octave_value &ov, int nb,
                                   oct_pq_conv_t *conv)
 {
   char *p = v;
@@ -348,12 +353,12 @@
 
           if (conv->is_composite)
             {
-              if (to_octave_bin_composite (p, ov_el, nb_el, conv))
+              if (to_octave_bin_composite (conn, p, ov_el, nb_el, conv))
                 return 1;
             }
           else
             {
-              if (conv->to_octave_bin (p, ov_el, nb_el))
+              if (conv->to_octave_bin (conn, p, ov_el, nb_el))
                 return 1;
             }
 
@@ -373,7 +378,8 @@
   return 0;
 }
 
-int command::to_octave_bin_composite (char *v, octave_value &ov, int nb,
+int command::to_octave_bin_composite (const octave_pq_connection &conn,
+                                      char *v, octave_value &ov, int nb,
                                       oct_pq_conv_t *conv)
 {
   char *p = v;
@@ -408,17 +414,17 @@
           switch (oct_type)
             {
             case simple:
-              if (el_conv->to_octave_bin (p, el, nb_el))
+              if (el_conv->to_octave_bin (conn, p, el, nb_el))
                 return 1;
               break;
 
             case array:
-              if (to_octave_bin_array (p, el, nb_el, el_conv))
+              if (to_octave_bin_array (conn, p, el, nb_el, el_conv))
                 return 1;
               break;
 
             case composite:
-              if (to_octave_bin_composite (p, el, nb_el, el_conv))
+              if (to_octave_bin_composite (conn, p, el, nb_el, el_conv))
                 return 1;
               break;
 
@@ -441,7 +447,8 @@
 }
 
 
-int command::to_octave_str_array (char *v, octave_value &ov, int nb,
+int command::to_octave_str_array (const octave_pq_connection &conn,
+                                  char *v, octave_value &ov, int nb,
                                   oct_pq_conv_t *conv)
 {
   // not implemented
@@ -451,7 +458,8 @@
   return 0;
 }
 
-int command::to_octave_str_composite (char *v, octave_value &ov, int nb,
+int command::to_octave_str_composite (const octave_pq_connection &conn,
+                                      char *v, octave_value &ov, int nb,
                                       oct_pq_conv_t *conv)
 {
   // not implemented