Technically a continuation of the fix of fdo#48345; the latter removed
the m_xRow.set(m_xDriverRow,UNO_QUERY_THROW); from OKeySet::next,
this one removes it from OKeySet::absolute().

It finishes the fix of fdo#47520, which was already partially fixed by
the fix for fdo#48345.

fdo#47520 is: with (sqlite)odbc, when primary key is/contains a
(var)char column (string), that column is displayed blank and fails to
update.

After fdo#48345 is fixed, only the *first* line had this problem,
because it was gotten at by absolute(1); the others were gotten by
next(), which was fixed.

-- 
Lionel
>From c08067d6da94743d53217cbc26cffae00a22dc3a Mon Sep 17 00:00:00 2001
From: Lionel Elie Mamane <[email protected]>
Date: Fri, 1 Jun 2012 16:40:41 +0200
Subject: [PATCH] fdo#47520 use the already retrieved row instead of driver
 row

This avoids asking the driver for the same data twice.
This is particularly important for ODBC data sources, because when asking for (VAR)CHAR data the second time, one gets no data (and status SQL_NO_DATA) because of the "retrieve in parts" semantics of these datatypes.

Change-Id: I96f2df9927fda72ccf19f78ec5c561f5626c003f
---
 dbaccess/source/core/api/KeySet.cxx |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/dbaccess/source/core/api/KeySet.cxx b/dbaccess/source/core/api/KeySet.cxx
index bc2a5f3..715ca6b 100644
--- a/dbaccess/source/core/api/KeySet.cxx
+++ b/dbaccess/source/core/api/KeySet.cxx
@@ -1241,8 +1241,7 @@ sal_Bool OKeySet::absolute_checked( sal_Int32 row,sal_Bool i_bFetchRow )
                     bNext = fetchRow();
                 if ( bNext )
                 {
-                    m_xRow.set(m_xDriverRow,UNO_QUERY_THROW);
-                    return m_aKeyIter != m_aKeyMap.end() && m_aKeyIter != m_aKeyMap.begin();
+                    i_bFetchRow = true;
                 }
             }
             else
-- 
1.7.7.3

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to