Tag: cws_src680_dba24c User: fs Date: 2007-09-18 20:05:28+0000 Modified: dba/connectivity/source/parse/sqlbison.y dba/connectivity/source/parse/sqliterator.cxx dba/connectivity/source/parse/sqlnode.cxx
Log: during #i81095#: outsourced the CYCLIC_SUB_QUERIES error to the new css.sdb.ErrorCondition File Changes: Directory: /dba/connectivity/source/parse/ ========================================== File [changed]: sqlbison.y Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqlbison.y?r1=1.57&r2=1.57.18.1 Delta lines: +2 -4 ------------------- --- sqlbison.y 2007-07-31 13:38:53+0000 1.57 +++ sqlbison.y 2007-09-18 20:05:25+0000 1.57.18.1 @@ -1,7 +1,7 @@ %{ //-------------------------------------------------------------------------- // -// $Header: /cvs/dba/connectivity/source/parse/sqlbison.y,v 1.57 2007/07/31 13:38:53 hr Exp $ +// $Header: /cvs/dba/connectivity/source/parse/sqlbison.y,v 1.57.18.1 2007/09/18 20:05:25 fs Exp $ // // Copyright 2000 Sun Microsystems, Inc. All Rights Reserved. // @@ -9,7 +9,7 @@ // OJ // // Last change: -// $Author: hr $ $Date: 2007/07/31 13:38:53 $ $Revision: 1.57 $ +// $Author: fs $ $Date: 2007/09/18 20:05:25 $ $Revision: 1.57.18.1 $ // // Description: // @@ -3136,7 +3136,6 @@ IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_COLUMN, "The column \"#1\" is unknown in the table \"#2\"."); IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_TABLE_EXIST, "The database already contains a table or view with name \"#\"."); IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_QUERY_EXIST, "The database already contains a query with name \"#\"."); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_CYCLIC_SUB_QUERIES, "The statement contains a cyclic reference to one or more sub queries."); IMPLEMENT_CONSTASCII_STRING(KEY_STR_LIKE, "LIKE"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_NOT, "NOT"); @@ -3188,7 +3187,6 @@ case ERROR_INVALID_COLUMN: aMsg = ERROR_STR_INVALID_COLUMN; break; case ERROR_INVALID_TABLE_EXIST: aMsg = ERROR_STR_INVALID_TABLE_EXIST; break; case ERROR_INVALID_QUERY_EXIST: aMsg = ERROR_STR_INVALID_QUERY_EXIST; break; - case ERROR_CYCLIC_SUB_QUERIES: aMsg = ERROR_STR_CYCLIC_SUB_QUERIES; break; default: OSL_ENSURE( false, "OParseContext::getErrorMessage: unknown error code!" ); break; File [changed]: sqliterator.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqliterator.cxx?r1=1.54&r2=1.54.20.1 Delta lines: +11 -10 --------------------- --- sqliterator.cxx 2007-07-31 13:39:08+0000 1.54 +++ sqliterator.cxx 2007-09-18 20:05:25+0000 1.54.20.1 @@ -4,9 +4,9 @@ * * $RCSfile: sqliterator.cxx,v $ * - * $Revision: 1.54 $ + * $Revision: 1.54.20.1 $ * - * last change: $Author: hr $ $Date: 2007/07/31 13:39:08 $ + * last change: $Author: fs $ $Date: 2007/09/18 20:05:25 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -49,6 +49,9 @@ #ifndef _CONNECTIVITY_DBTOOLS_HXX_ #include <connectivity/dbtools.hxx> #endif +#ifndef CONNECTIVITY_SQLERROR_HXX +#include <connectivity/sqlerror.hxx> +#endif #ifndef _COM_SUN_STAR_SDBC_COLUMNVALUE_HPP_ #include <com/sun/star/sdbc/ColumnValue.hpp> #endif @@ -61,6 +64,9 @@ #ifndef _COM_SUN_STAR_SDB_XQUERIESSUPPLIER_HPP_ #include <com/sun/star/sdb/XQueriesSupplier.hpp> #endif +#ifndef _COM_SUN_STAR_SDB_ERRORCONDITION_HPP_ +#include <com/sun/star/sdb/ErrorCondition.hpp> +#endif #ifdef SQL_TEST_PARSETREEITERATOR #include <iostream> #endif @@ -94,6 +100,7 @@ using namespace ::connectivity::sdbcx; using namespace ::dbtools; using namespace ::connectivity::parse; +using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::container; using namespace ::com::sun::star::sdbcx; @@ -443,13 +450,7 @@ { if ( !m_pImpl->isQueryAllowed( sComposedName ) ) { - impl_appendError( SQLException( - m_rParser.getContext().getErrorMessage( IParseContext::ERROR_CYCLIC_SUB_QUERIES ), - NULL, - getStandardSQLState( SQL_CYCLIC_SUB_QUERIES ), - 0, - Any() - ) ); + impl_appendError( m_rParser.getErrorHelper().getSQLException( sdb::ErrorCondition::PARSER_CYCLIC_SUB_QUERIES, NULL ) ); return NULL; } File [changed]: sqlnode.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqlnode.cxx?r1=1.47&r2=1.47.34.1 Delta lines: +63 -27 --------------------- --- sqlnode.cxx 2007-07-06 06:48:59+0000 1.47 +++ sqlnode.cxx 2007-09-18 20:05:25+0000 1.47.34.1 @@ -4,9 +4,9 @@ * * $RCSfile: sqlnode.cxx,v $ * - * $Revision: 1.47 $ + * $Revision: 1.47.34.1 $ * - * last change: $Author: rt $ $Date: 2007/07/06 06:48:59 $ + * last change: $Author: fs $ $Date: 2007/09/18 20:05:25 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -40,6 +40,9 @@ #ifndef _CONNECTIVITY_SQLNODE_HXX #include <connectivity/sqlnode.hxx> #endif +#ifndef CONNECTIVITY_SQLERROR_HXX +#include <connectivity/sqlerror.hxx> +#endif #ifndef _CONNECTIVITY_SQLINTERNALNODE_HXX #include <internalnode.hxx> #endif @@ -76,6 +79,9 @@ #ifndef _COM_SUN_STAR_SDB_XQUERIESSUPPLIER_HPP_ #include <com/sun/star/sdb/XQueriesSupplier.hpp> #endif +#ifndef _COM_SUN_STAR_SDB_ERRORCONDITION_HPP_ +#include <com/sun/star/sdb/ErrorCondition.hpp> +#endif #ifndef _COM_SUN_STAR_UTIL_XNUMBERFORMATTER_HPP_ #include <com/sun/star/util/XNumberFormatter.hpp> #endif @@ -122,6 +128,9 @@ #ifndef _COMPHELPER_NUMBERS_HXX_ #include <comphelper/numbers.hxx> #endif +#ifndef _COMPHELPER_PROCESSFACTORY_HXX_ +#include <comphelper/processfactory.hxx> +#endif #ifndef _COMPHELPER_STLTYPES_HXX_ #include <comphelper/stl_types.hxx> #endif @@ -131,6 +140,9 @@ #ifndef CONNECTIVITY_INC_CONNECTIVITY_DBMETADATA_HXX #include "connectivity/dbmetadata.hxx" #endif +#ifndef CONNECTIVITY_SQLERROR_HXX +#include "connectivity/sqlerror.hxx" +#endif #ifndef TOOLS_DIAGNOSE_EX_H #include <tools/diagnose_ex.h> #endif @@ -143,6 +155,7 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::i18n; +using namespace ::com::sun::star; using namespace ::osl; using namespace ::dbtools; using namespace ::comphelper; @@ -212,6 +225,18 @@ { //============================================================================= +struct OSQLParser_Data +{ + ::com::sun::star::lang::Locale aLocale; + ::connectivity::SQLError aErrors; + + OSQLParser_Data( const Reference< XMultiServiceFactory >& _xServiceFactory ) + :aErrors( _xServiceFactory ) + { + } +}; + +//============================================================================= //= SQLParseNodeParameter //============================================================================= //----------------------------------------------------------------------------- @@ -668,9 +693,17 @@ if ( rParam.pSubQueryHistory->find( sTableOrQueryName ) != rParam.pSubQueryHistory->end() ) { ::rtl::OUString sMessage( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cyclic sub queries" ) ) ); + OSL_ENSURE( rParam.pParser, "OSQLParseNode::impl_parseTableNameNodeToString_throw: no parser?" ); if ( rParam.pParser ) - sMessage = rParam.pParser->getContext().getErrorMessage( IParseContext::ERROR_CYCLIC_SUB_QUERIES ); - ::dbtools::throwSQLException( sMessage, SQL_CYCLIC_SUB_QUERIES, NULL ); + { + const SQLError& rErrors( rParam.pParser->getErrorHelper() ); + rErrors.raiseException( sdb::ErrorCondition::PARSER_CYCLIC_SUB_QUERIES ); + } + else + { + SQLError aErrors( ::comphelper::getProcessServiceFactory() ); + aErrors.raiseException( sdb::ErrorCondition::PARSER_CYCLIC_SUB_QUERIES ); + } } rParam.pSubQueryHistory->insert( sTableOrQueryName ); @@ -859,7 +892,7 @@ { if ( pLiteral ) { - if ( s_xLocaleData->getLocaleItem(*m_pLocale).decimalSeparator.toChar() == ',' ) + if ( s_xLocaleData->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' ) { pLiteral->m_aNodeValue = pLiteral->m_aNodeValue.replace('.', sal_Unicode()); // and replace decimal @@ -1174,14 +1207,14 @@ { try { - ParseResult aResult = m_xCharClass->parsePredefinedToken(KParseType::ANY_NUMBER,_rValue,0,*m_pLocale,0,::rtl::OUString(),KParseType::ANY_NUMBER,::rtl::OUString()); + ParseResult aResult = m_xCharClass->parsePredefinedToken(KParseType::ANY_NUMBER,_rValue,0,m_pData->aLocale,0,::rtl::OUString(),KParseType::ANY_NUMBER,::rtl::OUString()); if((aResult.TokenType & KParseType::IDENTNAME) && aResult.EndPos == _rValue.getLength()) { aValue = ::rtl::OUString::valueOf(aResult.Value); sal_Int32 nPos = aValue.lastIndexOf(::rtl::OUString::createFromAscii(".")); if((nPos+_nScale) < aValue.getLength()) aValue = aValue.replaceAt(nPos+_nScale,aValue.getLength()-nPos-_nScale,::rtl::OUString()); - aValue = aValue.replaceAt(aValue.lastIndexOf(::rtl::OUString::createFromAscii(".")),1,s_xLocaleData->getLocaleItem(*m_pLocale).decimalSeparator); + aValue = aValue.replaceAt(aValue.lastIndexOf(::rtl::OUString::createFromAscii(".")),1,s_xLocaleData->getLocaleItem(m_pData->aLocale).decimalSeparator); return aValue; } } @@ -1216,13 +1249,6 @@ // reset the parser - if (!m_pLocale) - { - Locale aPreferredLocale( m_pContext->getPreferredLocale( ) ); - // this temporary is due to an MSVC compiler bug - m_pLocale = new Locale( aPreferredLocale ); - } - m_xField = xField; m_xFormatter = xFormatter; @@ -1265,10 +1291,10 @@ OSL_ENSURE(aValue.getValueType() == ::getCppuType((const ::com::sun::star::lang::Locale*)0), "OSQLParser::PredicateTree : invalid language property !"); if (aValue.getValueType() == ::getCppuType((const ::com::sun::star::lang::Locale*)0)) - aValue >>= *m_pLocale; + aValue >>= m_pData->aLocale; } else - *m_pLocale = m_pContext->getPreferredLocale(); + m_pData->aLocale = m_pContext->getPreferredLocale(); if ( m_xFormatter.is() ) { @@ -1309,7 +1335,7 @@ s_pScanner->SetRule(s_pScanner->GetSTRINGRule()); break; default: - if (m_pLocale && s_xLocaleData->getLocaleItem(*m_pLocale).decimalSeparator.toChar() == ',') + if ( s_xLocaleData->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' ) s_pScanner->SetRule(s_pScanner->GetGERRule()); else s_pScanner->SetRule(s_pScanner->GetENGRule()); @@ -1370,12 +1396,13 @@ return m_pParseTree; } } + //============================================================================= //----------------------------------------------------------------------------- OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xServiceFactory,const IParseContext* _pContext) :m_pContext(_pContext) ,m_pParseTree(NULL) - ,m_pLocale(NULL) + ,m_pData( new OSQLParser_Data( _xServiceFactory ) ) ,m_nFormatKey(0) ,m_nDateFormatKey(0) ,m_xServiceFactory(_xServiceFactory) @@ -1517,6 +1544,8 @@ if (m_pContext == NULL) // take the default context m_pContext = &s_aDefaultContext; + + m_pData->aLocale = m_pContext->getPreferredLocale(); } // ----------------------------------------------------------------------------- @@ -1551,7 +1580,7 @@ try { if ( !m_nFormatKey && xFormatTypes.is() ) - m_nFormatKey = ::dbtools::getDefaultNumberFormat( m_xField, xFormatTypes, *m_pLocale ); + m_nFormatKey = ::dbtools::getDefaultNumberFormat( m_xField, xFormatTypes, m_pData->aLocale ); } catch( Exception& ) { } ::rtl::OUString sValue = pLiteral->getTokenValue(); @@ -1563,7 +1592,7 @@ { try { - nTryFormat = xFormatTypes->getStandardFormat( NumberFormat::DATE, *m_pLocale ); + nTryFormat = xFormatTypes->getStandardFormat( NumberFormat::DATE, m_pData->aLocale ); } catch( Exception& ) { } bSuccess = lcl_saveConvertToNumber( m_xFormatter, nTryFormat, sValue, _rfValue ); @@ -1574,7 +1603,7 @@ { try { - nTryFormat = xFormatTypes->getFormatIndex( NumberFormatIndex::DATE_DIN_YYYYMMDD, *m_pLocale ); + nTryFormat = xFormatTypes->getFormatIndex( NumberFormatIndex::DATE_DIN_YYYYMMDD, m_pData->aLocale ); } catch( Exception& ) { } bSuccess = lcl_saveConvertToNumber( m_xFormatter, nTryFormat, sValue, _rfValue ); @@ -2579,6 +2608,13 @@ return nType; } + +// ----------------------------------------------------------------------------- +const SQLError& OSQLParser::getErrorHelper() const +{ + return m_pData->aErrors; +} + // ----------------------------------------------------------------------------- OSQLParseNode::Rule OSQLParseNode::getKnownRuleID() const { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
