#At https://bazaar.launchpad.net/~ndb-bindings/ndb-bindings/trunk
402 Monty Taylor 2008-06-10
Added .value property that calls the appropriate get* switching on column type.
modified:
python/ndbapi.i
python/swig/module_pythoncode.i
python/swig/recattr_getvalue.i
python/tests/ndbapi/TestDecimal.py
=== modified file 'python/ndbapi.i'
--- a/python/ndbapi.i 2008-04-22 06:21:51 +0000
+++ b/python/ndbapi.i 2008-06-10 15:17:19 +0000
@@ -24,6 +24,7 @@
%pythoncode %{
import decimal
+value_lookup=dict()
%}
%include "ndbapi/ndbglobals.i"
=== modified file 'python/swig/module_pythoncode.i'
--- a/python/swig/module_pythoncode.i 2008-05-22 17:05:11 +0000
+++ b/python/swig/module_pythoncode.i 2008-06-10 15:17:19 +0000
@@ -52,4 +52,37 @@
connection.wait_until_ready(timeout_for_first_alive,timeout_after_first_alive)
return connection
+
+ value_lookup[NDB_TYPE_UNDEFINED]=NdbRecAttr.undefinedValue
+ value_lookup[NDB_TYPE_TINYINT]=NdbRecAttr.getInt32
+ value_lookup[NDB_TYPE_TINYUNSIGNED]=NdbRecAttr.getUint32
+ value_lookup[NDB_TYPE_SMALLINT]=NdbRecAttr.getInt32
+ value_lookup[NDB_TYPE_SMALLUNSIGNED]=NdbRecAttr.getUint32
+ value_lookup[NDB_TYPE_MEDIUMINT]=NdbRecAttr.getInt32
+ value_lookup[NDB_TYPE_MEDIUMUNSIGNED]=NdbRecAttr.getUint32
+ value_lookup[NDB_TYPE_INT]=NdbRecAttr.getInt32
+ value_lookup[NDB_TYPE_UNSIGNED]=NdbRecAttr.getUint32
+ value_lookup[NDB_TYPE_BIGINT]=NdbRecAttr.getInt64
+ value_lookup[NDB_TYPE_BIGUNSIGNED]=NdbRecAttr.getUint64
+ value_lookup[NDB_TYPE_FLOAT]=NdbRecAttr.getFloat
+ value_lookup[NDB_TYPE_DOUBLE]=NdbRecAttr.getDouble
+ value_lookup[NDB_TYPE_OLDDECIMAL]=NdbRecAttr.getDouble
+ value_lookup[NDB_TYPE_CHAR]=NdbRecAttr.getString
+ value_lookup[NDB_TYPE_VARCHAR]=NdbRecAttr.getString
+ value_lookup[NDB_TYPE_BINARY]=NdbRecAttr.getBytes
+ value_lookup[NDB_TYPE_VARBINARY]=NdbRecAttr.getBytes
+ value_lookup[NDB_TYPE_DATETIME]=NdbRecAttr.getDatetime
+ value_lookup[NDB_TYPE_DATE]=NdbRecAttr.getDate
+ value_lookup[NDB_TYPE_BLOB]=NdbRecAttr.undefinedValue
+ value_lookup[NDB_TYPE_TEXT]=NdbRecAttr.undefinedValue
+ value_lookup[NDB_TYPE_BIT]=NdbRecAttr.undefinedValue
+ value_lookup[NDB_TYPE_LONGVARCHAR]=NdbRecAttr.getString
+ value_lookup[NDB_TYPE_LONGVARBINARY]=NdbRecAttr.getBytes
+ value_lookup[NDB_TYPE_TIME]=NdbRecAttr.getTime
+ value_lookup[NDB_TYPE_YEAR]=NdbRecAttr.undefinedValue
+ value_lookup[NDB_TYPE_TIMESTAMP]=NdbRecAttr.getTimestamp
+ value_lookup[NDB_TYPE_OLDDECIMALUNSIGNED]=NdbRecAttr.getDouble
+ value_lookup[NDB_TYPE_DECIMAL]=NdbRecAttr.getDecimal
+ value_lookup[NDB_TYPE_DECIMALUNSIGNED]=NdbRecAttr.getDecimal
+
%}
=== modified file 'python/swig/recattr_getvalue.i'
--- a/python/swig/recattr_getvalue.i 2008-05-08 16:09:17 +0000
+++ b/python/swig/recattr_getvalue.i 2008-06-10 15:17:19 +0000
@@ -22,32 +22,15 @@
%extend NdbRecAttr {
%pythoncode %{
-def getValue(self):
- t=self.getColType()
- if t >= NDB_TYPE_TINYINT and t <= NDB_TYPE_BIGINT and (t%2==0.0):
- ret = self.getInt32()
- elif t >= NDB_TYPE_TINYUNSIGNED and t <= NDB_TYPE_BIGUNSIGNED and (t%2==1):
- ret = self.getUint32()
- elif t == NDB_TYPE_FLOAT:
- ret = self.getFloat()
- elif t == NDB_TYPE_DOUBLE or t == NDB_TYPE_OLDDECIMAL:
- ret = self.getDouble()
- elif t >= NDB_TYPE_CHAR and t <= NDB_TYPE_VARBINARY:
- ret = self.aRef()
- elif t == NDB_TYPE_DECIMAL:
- ret = self.getDecimal()
- elif t == NDB_TYPE_DATE:
- ret = self.getUint32()
- year = ret/10000 % 10000
- month = ret/100 % 100
- day = ret % 100
- ret = "%s-%s-%s" % (year,month,day)
- else:
- # TODO add newer datatypes here
- raise NdbApiException, "unknown type"
- return ret
+def undefinedValue(self):
+ return self.getBytes()
+def _getValue(self):
+ col_type=self.getColType()
+ return value_lookup[col_type](self)
+
+value=property(_getValue, None, None, "The value stored in the NdbRecAttr")
%}
};
=== modified file 'python/tests/ndbapi/TestDecimal.py'
--- a/python/tests/ndbapi/TestDecimal.py 2008-05-21 20:38:02 +0000
+++ b/python/tests/ndbapi/TestDecimal.py 2008-06-10 15:17:19 +0000
@@ -51,7 +51,7 @@ class TestDecimal(ClusterTestCase.Cluste
trans = self.ndb.startTransaction()
- d = rec.getDecimal()
+ d = rec.value
self.assertEquals(d,decimal.Decimal(self.val1))
trans.close()
@@ -65,7 +65,7 @@ class TestDecimal(ClusterTestCase.Cluste
rec = op.getValue("val")
trans.executeCommit()
- d = rec.getDecimal()
+ d = rec.value
self.assertEquals(d,decimal.Decimal(self.val2))
trans.close()
| Thread |
|---|
| • bzr commit into NDB/Bindings:trunk branch (monty:402) | Monty Taylor | 10 Jun |