[Libreoffice-commits] .: 4 commits - connectivity/source dbaccess/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Aug 21 10:34:59 PDT 2012


 connectivity/source/inc/parse/sqlbison_exports.hxx |   23 +++++++++++++
 connectivity/source/parse/sqlbison.y               |   35 +++++++++++++++------
 connectivity/source/parse/sqlnode.cxx              |    6 +--
 dbaccess/source/core/api/RowSetCache.cxx           |    2 -
 dbaccess/source/ui/dlg/queryfilter.cxx             |    2 -
 5 files changed, 53 insertions(+), 15 deletions(-)

New commits:
commit e8409cbd7227849fe446661011c8bc73acdca319
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Tue Aug 21 19:27:30 2012 +0200

    fdo#53887 ConvertLikeToken(): make escape character properly escape itself
    
    Change-Id: Ic2b79e78f95e298a08794fa11f227d76152244f5

diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y
index a93b799..ce2d0e7 100644
--- a/connectivity/source/parse/sqlbison.y
+++ b/connectivity/source/parse/sqlbison.y
@@ -4511,7 +4511,7 @@ const double fMilliSecondsPerDay = 86400000.0;
 //------------------------------------------------------------------
 ::rtl::OUString ConvertLikeToken(const OSQLParseNode* pTokenNode, const OSQLParseNode* pEscapeNode, sal_Bool bInternational)
 {
-	::rtl::OUStringBuffer aMatchStr;
+	::rtl::OUStringBuffer aMatchStr(0);
 	if (pTokenNode->isToken())
 	{
 		sal_Unicode cEscape = 0;
@@ -4533,18 +4533,34 @@ const double fMilliSecondsPerDay = 86400000.0;
 		    sReplace.appendAscii("%_",2);
 		}
 
+		bool wasEscape = false;
 		for (sal_Int32 i = 0; i < nLen; i++)
 		{
 			const sal_Unicode c = aMatchStr[i];
-			if (c == sSearch[0] || c == sSearch[1])
+			// SQL standard requires the escape to be followed
+			// by a meta-character ('%', '_' or itself), else error
+			// We are more lenient here and let it escape anything.
+			// Especially since some databases (e.g. Microsoft SQL Server)
+			// have more meta-characters than the standard, such as e.g. '[' and ']'
+			if (wasEscape)
 			{
-				if (i > 0 && aMatchStr[i - 1] == cEscape)
-					continue;
-				else
-				{
-				        const sal_Unicode cCharacter = sReplace[(c == sSearch[0] ? 0 : 1)];
-					aMatchStr[i] = cCharacter;
-				}
+				wasEscape=false;
+				continue;
+			}
+			if (c == cEscape)
+			{
+				wasEscape=true;
+				continue;
+			}
+			int match = -1;
+			if (c == sSearch[0])
+				match=0;
+			else if (c == sSearch[1])
+				match=1;
+
+			if (match != -1)
+			{
+				aMatchStr[i] = sReplace[match];
 			}
 		}
 	}
commit cc430308c38d106618189357364454230ff574d6
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Tue Aug 21 18:28:03 2012 +0200

    Put functions exported by sqlbison.hxx into a .hxx file
    
    Change-Id: Ibf4fed39e4d36cb03d079cf55a12d4ec37a70f2b

diff --git a/connectivity/source/inc/parse/sqlbison_exports.hxx b/connectivity/source/inc/parse/sqlbison_exports.hxx
new file mode 100644
index 0000000..abb47a3
--- /dev/null
+++ b/connectivity/source/inc/parse/sqlbison_exports.hxx
@@ -0,0 +1,23 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef _CONNECTIVITY_PARSE_SQLBISON_HXX_
+#define _CONNECTIVITY_PARSE_SQLBISON_HXX_
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <connectivity/sqlnode.hxx>
+
+::rtl::OUString ConvertLikeToken(const ::connectivity::OSQLParseNode* pTokenNode, const ::connectivity::OSQLParseNode* pEscapeNode, sal_Bool bInternational);
+int SQLyyparse (void);
+void setParser( ::connectivity::OSQLParser* );
+
+#endif //_CONNECTIVITY_PARSE_SQLBISON_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y
index d033778..a93b799 100644
--- a/connectivity/source/parse/sqlbison.y
+++ b/connectivity/source/parse/sqlbison.y
@@ -20,6 +20,7 @@
 
 #include <vector>
 #include <string.h>
+#include "parse/sqlbison_exports.hxx"
 
 #ifndef _CONNECTIVITY_SQLNODE_HXX
 #include <connectivity/sqlnode.hxx>
diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx
index 6996638..9cc9101 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -17,6 +17,8 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include "parse/sqlbison_exports.hxx"
+
 #include <sal/macros.h>
 #include <connectivity/sqlnode.hxx>
 #include <connectivity/sqlerror.hxx>
@@ -73,10 +75,6 @@ using namespace ::dbtools;
 using namespace ::comphelper;
 
 
-extern int SQLyyparse (void);
-extern ::rtl::OUString ConvertLikeToken(const ::connectivity::OSQLParseNode* pTokenNode, const ::connectivity::OSQLParseNode* pEscapeNode, sal_Bool bInternational);
-extern void setParser( ::connectivity::OSQLParser* );
-
 namespace
 {
     // -----------------------------------------------------------------------------
commit a598600a494b9fe9548a6cd909b453376ead0b04
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Tue Aug 21 17:23:34 2012 +0200

    fdo#46480 do not double-escape (e.g. date) literals as strings
    
    Change-Id: I50d3f1002468d41d5b5882de170699d44fe5223c

diff --git a/dbaccess/source/ui/dlg/queryfilter.cxx b/dbaccess/source/ui/dlg/queryfilter.cxx
index cbcee0e..ed22f5a 100644
--- a/dbaccess/source/ui/dlg/queryfilter.cxx
+++ b/dbaccess/source/ui/dlg/queryfilter.cxx
@@ -357,7 +357,7 @@ sal_Bool DlgFilterCrit::getCondition(const ListBox& _rField,const ListBox& _rCom
     _rFilter.Handle = GetOSQLPredicateType( _rComp.GetSelectEntry() );
     if ( SQLFilterOperator::SQLNULL != _rFilter.Handle && _rFilter.Handle != SQLFilterOperator::NOT_SQLNULL )
     {
-        String sPredicateValue = m_aPredicateInput.getPredicateValue( _rValue.GetText(), getMatchingColumn( _rValue ), sal_True );
+        String sPredicateValue = m_aPredicateInput.getPredicateValue( _rValue.GetText(), getMatchingColumn( _rValue ), sal_False );
         ::Replace_OS_PlaceHolder( sPredicateValue );
         _rFilter.Value <<= ::rtl::OUString(sPredicateValue);
     }
commit 7f424c407687da063994155fcf390a1a8afed979
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Tue Aug 21 14:43:52 2012 +0200

    m_nEndPos==m_nStartPos is OK: empty window (for example, empty table)
    
    Change-Id: I5525eb750dfbed282fea272de4a736e6c70e51a9

diff --git a/dbaccess/source/core/api/RowSetCache.cxx b/dbaccess/source/core/api/RowSetCache.cxx
index f72f4ff..c178713 100644
--- a/dbaccess/source/core/api/RowSetCache.cxx
+++ b/dbaccess/source/core/api/RowSetCache.cxx
@@ -848,7 +848,7 @@ sal_Bool ORowSetCache::fillMatrix(sal_Int32& _nNewStartPos, sal_Int32 &_nNewEndP
 sal_Bool ORowSetCache::moveWindow()
 {
     OSL_ENSURE(m_nStartPos >= 0,"ORowSetCache::moveWindow: m_nStartPos is less than 0!");
-    OSL_ENSURE(m_nEndPos > m_nStartPos,"ORowSetCache::moveWindow: m_nStartPos not smaller than m_nEndPos");
+    OSL_ENSURE(m_nEndPos >= m_nStartPos,"ORowSetCache::moveWindow: m_nStartPos not smaller than m_nEndPos");
     OSL_ENSURE(m_nEndPos-m_nStartPos <= m_nFetchSize,"ORowSetCache::moveWindow: m_nStartPos and m_nEndPos too far apart");
 
     if ( m_nStartPos < m_nPosition && m_nPosition <= m_nEndPos )


More information about the Libreoffice-commits mailing list