https://bugs.documentfoundation.org/show_bug.cgi?id=88601

Lionel Elie Mamane <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                URL|https://mariadb.atlassian.n |
                   |et/browse/CONJ-133          |
           See Also|                            |https://mariadb.atlassian.n
                   |                            |et/browse/CONJ-133
         Whiteboard|                            |summaryInComment9 EasyHack
                   |                            |DifficultyInteresting
                   |                            |SkillJava SkillSQL SkillCpp

--- Comment #9 from Lionel Elie Mamane <[email protected]> ---
Now that I look again at it, it requires some reworking of LibreOffice
internals. Definitely not an introductory EasyHack, but can be done with time
and good way to discover LibreOffice internals. I take patches.

The callchain is:

#0  dbtools::setObjectWithInfo (_xParams=uno::Reference to
(dbaccess::OPreparedStatement *) 0x3a1ab20, 
    parameterIndex=parameterIndex@entry=1, _rValue=...,
sqlType=sqlType@entry=-6, scale=scale@entry=0)
    at connectivity/source/commontools/dbtools.cxx:1900
#1  0x00007f41123b4e71 in dbaccess::OCacheSet::setParameter (nPos=nPos@entry=1, 
    _xParameter=uno::Reference to (dbaccess::OPreparedStatement *) 0x3a1ab20,
_rValue=..., _nType=_nType@entry=-6, 
    _nScale=_nScale@entry=0)
    at dbaccess/source/core/api/CacheSet.cxx:382
#2  0x00007f41123f41cf in dbaccess::OKeySet::executeUpdate
(this=this@entry=0x3616220, 
    _rInsertRow=rtl::Reference to 0x3a170c0, _rOriginalRow=rtl::Reference to
0x3a5a910, 
    i_sSQL="UPDATE `fdo85190`.`action_type` SET `action_type_id` = ? WHERE
`action_type_id` = ?", i_sTableName="", 
    _aIndexColumnPositions=std::__debug::vector of length 0, capacity 0)
    at dbaccess/source/core/api/KeySet.cxx:682
#3  0x00007f41123f3a29 in dbaccess::OKeySet::updateRow (this=0x3616220,
_rInsertRow=rtl::Reference to 0x3a170c0, 
    _rOriginalRow=rtl::Reference to 0x3a5a910, _xTable=uno::Reference to
(dbaccess::ODBTableDecorator *) 0x321d760)
    at dbaccess/source/core/api/KeySet.cxx:653
#4  0x00007f411249688f in dbaccess::ORowSetCache::updateRow (this=0x3971ce0,
_rUpdateRow=rtl::Reference to 0x3a170c0, 
    o_aBookmarks=std::__debug::vector of length 0, capacity 0)
    at dbaccess/source/core/api/RowSetCache.cxx:1358
#5  0x00007f411245b0fa in dbaccess::ORowSet::updateRow (this=0x3ae3210)
    at dbaccess/source/core/api/RowSet.cxx:952


Taking it bottom-up, here's what needs to happen:

1) dbtools::setObjectWithInfo needs an extra boolean parameter "isSigned".
   (file connectivity/source/commontools/dbtools.cxx)

   it uses that parameter (and not only _rValue.isSigned()) to decide what to
call on _xParams

2) the same for dbaccess::OCacheSet::setParameter
   (file dbaccess/source/core/api/CacheSet.cxx)

3) the class/struct dbaccess::SelectColumnDescription needs an extra field
"bSigned",
   which needs to be populated in dbaccess::getColumnPositions
   (file dbaccess/source/core/api/KeySet.cxx)
   and possibly other places

   This may need to add a new property "isSigned" to table and query columns,
   and actually change the service com::sun::star::sdbcx::Column to include
that new property.
   This part makes this work *completely* not introductory. Contact me if you
are interested
   in doing it.

4) dbaccess::OKeySet::executeUpdate
   (and possibly other places)

   use that new field to provide the isSigned parameter of
dbaccess::OCacheSet::setParameter

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
Libreoffice-bugs mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-bugs

Reply via email to