diff options
author | Jean-Pierre Ledure <jp@ledure.be> | 2023-11-12 16:33:02 +0100 |
---|---|---|
committer | Jean-Pierre Ledure <jp@ledure.be> | 2023-11-12 17:44:55 +0100 |
commit | 5dac0fe157a5c35824cab2c27e391ff7a0d1d421 (patch) | |
tree | feafbd112ba3fb88d3aadd3b9598b0e408069390 /wizards | |
parent | 544d8947965b682e24fe109654eee181e6c3b0fd (diff) |
ScriptForge (SFDatabases) fix dates processing in GetRows
The
database.GetRows()
dataset.GetRows()
methods return an array of data collected
in a database table or query.
When a column has the type DATE, the transmission
of their values through the Basic-Python bridge
require them to be converted upfront to UNO
DateTime structures.
The later conversion from UNO DateTime to the python
datetime.datetime structure has been added with
this patch.
No impact on Basic scripts.
The documentation does not need to be changed.
Change-Id: I7a6533aff70d2d1402bfc3f057b65a4940148cc4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159348
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
Diffstat (limited to 'wizards')
-rw-r--r-- | wizards/source/scriptforge/python/scriptforge.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py index bcaff12f5cc5..77e0119809da 100644 --- a/wizards/source/scriptforge/python/scriptforge.py +++ b/wizards/source/scriptforge/python/scriptforge.py @@ -348,8 +348,8 @@ class ScriptForge(object, metaclass = _Singleton): # A Basic object to be mapped onto a new Python class instance # A UNO object # A set of property values to be returned as a dict() - # An array, tuple or tuple of tuples - # A scalar or Nothing + # An array, tuple or tuple of tuples - manage dates inside + # A scalar, Nothing, a date returnvalue = returntuple[cstValue] if returntuple[cstVarType] == ScriptForge.V_OBJECT and len(returntuple) > cstClass: # Skip Nothing if returntuple[cstClass] == ScriptForge.objUNO: @@ -372,6 +372,16 @@ class ScriptForge(object, metaclass = _Singleton): # Intercept empty array if isinstance(returnvalue, uno.ByteSequence): return () + if flags & SFServices.flgDateRet == SFServices.flgDateRet: # Bits comparison + # Intercept all UNO dates in the 1D or 2D array + if isinstance(returnvalue[0], tuple): # tuple of tuples + arr = [] + for i in range(len(returnvalue)): + row = tuple(map(SFScriptForge.SF_Basic.CDateFromUnoDateTime, returnvalue[i])) + arr.append(row) + returnvalue = tuple(arr) + else: # 1D tuple + returnvalue = tuple(map(SFScriptForge.SF_Basic.CDateFromUnoDateTime, returnvalue)) elif returntuple[cstVarType] == ScriptForge.V_DATE: dat = SFScriptForge.SF_Basic.CDateFromUnoDateTime(returnvalue) return dat @@ -1806,7 +1816,8 @@ class SFDatabases: return self.ExecMethod(self.vbMethod, 'DSum', expression, tablename, criteria) def GetRows(self, sqlcommand, directsql = False, header = False, maxrows = 0): - return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'GetRows', sqlcommand, directsql, header, maxrows) + return self.ExecMethod(self.vbMethod + self.flgArrayRet + self.flgDateRet, 'GetRows', sqlcommand, + directsql, header, maxrows) def OpenFormDocument(self, formdocument): return self.ExecMethod(self.vbMethod, 'OpenFormDocument', formdocument) @@ -1870,7 +1881,7 @@ class SFDatabases: return self.ExecMethod(self.vbMethod, 'ExportValueToFile', fieldname, filename, overwrite) def GetRows(self, header = False, maxrows = 0): - return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'GetRows', header, maxrows) + return self.ExecMethod(self.vbMethod + self.flgArrayRet + self.flgDateRet, 'GetRows', header, maxrows) def GetValue(self, fieldname): return self.ExecMethod(self.vbMethod, 'GetValue', fieldname) |