changeset 11667:2c21253d3341 octave-forge

Add converter for timestamptz. Formal corrections for passing integer_datetime information.
author i7tiol
date Sun, 28 Apr 2013 09:40:08 +0000
parents a63a0ead64e3
children abd563353849
files main/database/DESCRIPTION main/database/doc/dev-postgresql/conversions.tex main/database/src/converters.cc main/database/src/converters.h main/database/src/pq_connection.h main/database/src/pq_conninfo.cc
diffstat 6 files changed, 32 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/main/database/DESCRIPTION	Sun Apr 28 05:38:56 2013 +0000
+++ b/main/database/DESCRIPTION	Sun Apr 28 09:40:08 2013 +0000
@@ -1,6 +1,6 @@
 Name: database
 Version: 2.1.1
-Date: 2013-04-27
+Date: 2013-04-28
 Author: Olaf Till <i7tiol@t-online.de>
 Maintainer: Olaf Till <i7tiol@t-online.de>
 Title: Database.
--- a/main/database/doc/dev-postgresql/conversions.tex	Sun Apr 28 05:38:56 2013 +0000
+++ b/main/database/doc/dev-postgresql/conversions.tex	Sun Apr 28 09:40:08 2013 +0000
@@ -119,8 +119,7 @@
 1115 &
 string &
 yes &
-consider encoding (integer or float), NBO, \ldots{} (put off
-implementation) \\
+see file timeformats.txt \\
 
 timestamptz &
 1184 &
--- a/main/database/src/converters.cc	Sun Apr 28 05:38:56 2013 +0000
+++ b/main/database/src/converters.cc	Sun Apr 28 09:40:08 2013 +0000
@@ -667,7 +667,8 @@
 
 // helpers for time types
 
-static inline octave_value time_8byte_to_octave (const char *c, bool int_dt)
+static inline octave_value time_8byte_to_octave (const char *c,
+                                                 const bool &int_dt)
 {
   if (int_dt)
     {
@@ -690,7 +691,7 @@
 
 static inline int time_8byte_from_octave (const octave_value &ov,
                                           oct_pq_dynvec_t &val,
-                                          bool int_dt)
+                                          const bool &int_dt)
 {
   if (int_dt)
     {
@@ -756,7 +757,7 @@
 int to_octave_bin_timestamp (const octave_pq_connection &conn,
                              const char *c, octave_value &ov, int nb)
 {
-  ov = time_8byte_to_octave (c, conn.integer_datetimes);
+  ov = time_8byte_to_octave (c, conn.get_integer_datetimes ());
 
   return 0;
 }
@@ -770,7 +771,7 @@
 int from_octave_bin_timestamp (const octave_pq_connection &conn,
                                const octave_value &ov, oct_pq_dynvec_t &val)
 {
-  return (time_8byte_from_octave (ov, val, conn.integer_datetimes));
+  return (time_8byte_from_octave (ov, val, conn.get_integer_datetimes ()));
 }
 
 oct_pq_conv_t conv_timestamp = {0,
@@ -788,6 +789,23 @@
 
 /* end type timestamp */
 
+/* type timestamptz */
+
+oct_pq_conv_t conv_timestamptz = {0,
+                                  0,
+                                  oct_pq_el_oids_t (),
+                                  oct_pq_conv_cache_t (),
+                                  false,
+                                  false,
+                                  false,
+                                  "timestamptz",
+                                  &to_octave_str_timestamp,
+                                  &to_octave_bin_timestamp,
+                                  &from_octave_str_timestamp,
+                                  &from_octave_bin_timestamp};
+
+/* end type timestamptz */
+
 oct_pq_conv_t *t_conv_ptrs[OCT_PQ_NUM_CONVERTERS] = {&conv_bool,
                                                      &conv_oid,
                                                      &conv_float8,
@@ -801,6 +819,7 @@
                                                      &conv_int4,
                                                      &conv_int8,
                                                      &conv_money,
-                                                     &conv_timestamp};
+                                                     &conv_timestamp,
+                                                     &conv_timestamptz};
 
 oct_pq_conv_ptrs_t conv_ptrs (OCT_PQ_NUM_CONVERTERS, t_conv_ptrs);
--- a/main/database/src/converters.h	Sun Apr 28 05:38:56 2013 +0000
+++ b/main/database/src/converters.h	Sun Apr 28 09:40:08 2013 +0000
@@ -32,7 +32,7 @@
 
 #include "wrap_endian.h"
 
-#define OCT_PQ_NUM_CONVERTERS 14
+#define OCT_PQ_NUM_CONVERTERS 15
 
 typedef std::vector<char> oct_pq_dynvec_t;
 
--- a/main/database/src/pq_connection.h	Sun Apr 28 05:38:56 2013 +0000
+++ b/main/database/src/pq_connection.h	Sun Apr 28 09:40:08 2013 +0000
@@ -51,7 +51,7 @@
 
   oct_pq_name_conv_map_t name_conv_map;
 
-  bool integer_datetimes;
+  const bool &get_integer_datetimes (void) const { return integer_datetimes; }
 
 
   // Octave internal stuff
@@ -101,6 +101,9 @@
   // returns zero on success
   int octave_pq_get_enum_types (void);
 
+  // server configuration
+  bool integer_datetimes;
+
   DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
 };
 
--- a/main/database/src/pq_conninfo.cc	Sun Apr 28 05:38:56 2013 +0000
+++ b/main/database/src/pq_conninfo.cc	Sun Apr 28 09:40:08 2013 +0000
@@ -71,5 +71,5 @@
       return retval;
     }
 
-  return octave_value (oct_pq_conn.integer_datetimes);
+  return octave_value (oct_pq_conn.get_integer_datetimes ());
 }