[glom] Handle gdouble results from python functions.



commit 4b71b2c366972c33ca6c5d472b6aa59b2e9a7e17
Author: Murray Cumming <murrayc murrayc com>
Date:   Fri Nov 4 11:14:11 2011 +0100

    Handle gdouble results from python functions.
    
    	* glom/libglom/data_structure/field.cc: Add a mapping
    	instead of ignoring doubles.
    	This avoids a stderr warning and probably makes calculations
    	work.

 glom/libglom/data_structure/field.cc               |    7 ++++++-
 .../libglom/python_embed/pygdavalue_conversions.cc |    6 ++++--
 glom/python_embed/glom_python.cc                   |   10 ++++++++++
 3 files changed, 20 insertions(+), 3 deletions(-)
---
diff --git a/glom/libglom/data_structure/field.cc b/glom/libglom/data_structure/field.cc
index 6d4ccb3..9458e99 100644
--- a/glom/libglom/data_structure/field.cc
+++ b/glom/libglom/data_structure/field.cc
@@ -587,7 +587,7 @@ Field::glom_field_type Field::get_glom_type_for_gda_type(GType gda_type)
       result = iterFind->second;
     else
     {
-      // g_warning("FieldType::FieldType(GType gda_type): Invalid gda type: %d",  gda_type);
+      std::cerr << G_STRFUNC << ": Unhandled GType: " << g_type_name(gda_type) << std::endl;
     }
   }
 
@@ -630,6 +630,11 @@ void Field::init_map()
     m_map_gda_type_to_glom_type[G_TYPE_BOOLEAN] = TYPE_BOOLEAN;
     m_map_gda_type_to_glom_type[GDA_TYPE_BINARY] = TYPE_IMAGE;
 
+    //Extra conversions for GTypes that can be returned by glom_pygda_value_from_pyobject():
+    m_map_gda_type_to_glom_type[G_TYPE_DOUBLE] = TYPE_NUMERIC;
+    //TODO? m_map_gda_type_to_glom_type[GDA_TYPE_TIME] = ;
+    //TODO? m_map_gda_type_to_glom_type[GDA_TYPE_TIMESTAMP] = ;
+
     m_map_glom_type_to_gda_type[TYPE_NUMERIC] = GDA_TYPE_NUMERIC;
     m_map_glom_type_to_gda_type[TYPE_TEXT] = G_TYPE_STRING;
     m_map_glom_type_to_gda_type[TYPE_TIME] = GDA_TYPE_TIME;
diff --git a/glom/libglom/python_embed/pygdavalue_conversions.cc b/glom/libglom/python_embed/pygdavalue_conversions.cc
index 80ffc1b..d377b33 100644
--- a/glom/libglom/python_embed/pygdavalue_conversions.cc
+++ b/glom/libglom/python_embed/pygdavalue_conversions.cc
@@ -24,8 +24,10 @@
 bool
 glom_pygda_value_from_pyobject(GValue* boxed, const boost::python::object& input)
 {
+std::cout << G_STRFUNC << std::endl;
+        
     /* Use an appropriate gda_value_set_*() function.
-       We can not know what GValue type is actually wanted, so
+       We cannot know what GValue type is actually wanted, so
        we must still have the get_*() functions in the python API.
      */
 
@@ -146,7 +148,7 @@ glom_pygda_value_from_pyobject(GValue* boxed, const boost::python::object& input
   //std::cout << "DEBUG Dates not supported." << std::endl;
 #endif
 
-    //g_warning("Unhandled python type.");
+    std::cerr << G_STRFUNC << ": Unhandled python type." << std::endl;
     return false; /* failed. */
 }
 
diff --git a/glom/python_embed/glom_python.cc b/glom/python_embed/glom_python.cc
index 0cae289..5c58351 100644
--- a/glom/python_embed/glom_python.cc
+++ b/glom/python_embed/glom_python.cc
@@ -473,9 +473,19 @@ Gnome::Gda::Value glom_evaluate_python_function_implementation(Field::glom_field
   if(object_is_gda_value && G_IS_VALUE(&value))
   {
     valueResult = Gnome::Gda::Value(&value);
+    if(valueResult.get_value_type() == 0)
+    {
+      std::cerr << G_STRFUNC << ": valueResult (before convert_value()) has a GType of 0 before convert_value()." << std::endl;
+    }
+
     //Make sure that the value is of the expected Gda type:
     //TODO_Performance:
     valueResult = Glom::Conversions::convert_value(valueResult, result_type);
+    if(valueResult.get_value_type() == 0)
+    {
+      std::cerr << G_STRFUNC << ": valueResult has a GType of 0 after convert_value()." << std::endl;
+    }
+
     //std::cout << "debug: " << G_STRFUNC << ": valueResult Gda type=" << g_type_name(valueResult.get_value_type()) << std::endl;
     g_value_unset(&value);
   }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]