diff options
Diffstat (limited to 'connectivity/inc/connectivity/sqlparse.hxx')
-rw-r--r-- | connectivity/inc/connectivity/sqlparse.hxx | 263 |
1 files changed, 0 insertions, 263 deletions
diff --git a/connectivity/inc/connectivity/sqlparse.hxx b/connectivity/inc/connectivity/sqlparse.hxx deleted file mode 100644 index 5d75c3ffea..0000000000 --- a/connectivity/inc/connectivity/sqlparse.hxx +++ /dev/null @@ -1,263 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _CONNECTIVITY_SQLPARSE_HXX -#define _CONNECTIVITY_SQLPARSE_HXX - -#include <com/sun/star/uno/Reference.h> -#include <osl/mutex.hxx> -#include <connectivity/sqlnode.hxx> -#ifndef YYBISON -#ifndef FLEX_SCANNER -#ifndef BISON_INCLUDED -#define BISON_INCLUDED -#include "sqlbison.hxx" -#endif -#endif -#endif -#include <com/sun/star/i18n/XCharacterClassification.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/i18n/XLocaleData.hpp> -#include "connectivity/IParseContext.hxx" -#include "connectivity/dbtoolsdllapi.hxx" -#include <salhelper/singletonref.hxx> -#include <osl/mutex.hxx> - -#include <map> - -// forward declarations -namespace com -{ - namespace sun - { - namespace star - { - namespace beans - { - class XPropertySet; - } - namespace util - { - class XNumberFormatter; - } - namespace lang - { - struct Locale; - } - } - } -} -namespace connectivity -{ - class OSQLScanner; - class SQLError; - - //========================================================================== - //= OParseContext - //========================================================================== - class OOO_DLLPUBLIC_DBTOOLS OParseContext : public IParseContext - { - public: - OParseContext(); - - virtual ~OParseContext(); - // retrieves language specific error messages - virtual ::rtl::OUString getErrorMessage(ErrorCode _eCodes) const; - - // retrieves language specific keyword strings (only ASCII allowed) - virtual ::rtl::OString getIntlKeywordAscii(InternationalKeyCode _eKey) const; - - // finds out, if we have an international keyword (only ASCII allowed) - virtual InternationalKeyCode getIntlKeyCode(const ::rtl::OString& rToken) const; - - // determines the default international setting - static const ::com::sun::star::lang::Locale& getDefaultLocale(); - - /** set's the default locale which should be used when analyzing strings - <p>If no locale is set, and any method which needs a locale is called, a default - (en-US) is used.</p> - <p>If, while parsing, the locale can be obtained from other sources (such as the number format - set for a table column), the preferred locale is ignored.</p> - */ - static void setDefaultLocale( const ::com::sun::star::lang::Locale& _rLocale ); - - /** get's a locale instance which should be used when parsing in the context specified by this instance - <p>if this is not overridden by derived classes, it returns the static default locale.</p> - */ - virtual ::com::sun::star::lang::Locale getPreferredLocale( ) const; - }; - - //========================================================================== - // OSQLParseNodesContainer - // grabage collection of nodes - //========================================================================== - class OSQLParseNodesContainer - { - ::osl::Mutex m_aMutex; - ::std::vector< OSQLParseNode* > m_aNodes; - public: - OSQLParseNodesContainer(); - ~OSQLParseNodesContainer(); - - void push_back(OSQLParseNode* _pNode); - void erase(OSQLParseNode* _pNode); - bool empty() const; - void clear(); - void clearAndDelete(); - }; - - typedef salhelper::SingletonRef<OSQLParseNodesContainer> OSQLParseNodesGarbageCollector; - - //========================================================================== - //= OSQLParser - //========================================================================== - struct OSQLParser_Data; - /** Parser for SQL92 - */ - class OOO_DLLPUBLIC_DBTOOLS OSQLParser - { - friend class OSQLParseNode; - friend class OSQLInternalNode; - friend struct SQLParseNodeParameter; - - private: - typedef ::std::map< sal_uInt32, OSQLParseNode::Rule > RuleIDMap; - // static parts for parsers - static sal_uInt32 s_nRuleIDs[OSQLParseNode::rule_count + 1]; - static RuleIDMap s_aReverseRuleIDLookup; - static OParseContext s_aDefaultContext; - - static OSQLScanner* s_pScanner; - static OSQLParseNodesGarbageCollector* s_pGarbageCollector; - static sal_Int32 s_nRefCount; - - // informations on the current parse action - const IParseContext* m_pContext; - OSQLParseNode* m_pParseTree; // result from parsing - ::std::auto_ptr< OSQLParser_Data > - m_pData; - ::rtl::OUString m_sFieldName; // current field name for a predicate - ::rtl::OUString m_sErrorMessage;// current error msg - - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - m_xField; // current field - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter > - m_xFormatter; // current number formatter - sal_Int32 m_nFormatKey; // numberformat, which should be used - sal_Int32 m_nDateFormatKey; - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceFactory; - ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification> m_xCharClass; - static ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XLocaleData> s_xLocaleData; - ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XLocaleData> xDummy; // can be deleted after 627 - - // convert a string into double trim it to scale of _nscale and than transform it back to string - ::rtl::OUString stringToDouble(const ::rtl::OUString& _rValue,sal_Int16 _nScale); - OSQLParseNode* buildDate(sal_Int32 _nType,OSQLParseNode*& pLiteral); - bool extractDate(OSQLParseNode* pLiteral,double& _rfValue); - void killThousandSeparator(OSQLParseNode* pLiteral); - OSQLParseNode* convertNode(sal_Int32 nType,OSQLParseNode*& pLiteral); - // makes a string out of a number, pLiteral will be deleted - OSQLParseNode* buildNode_STR_NUM(OSQLParseNode*& pLiteral); - OSQLParseNode* buildNode_Date(const double& fValue, sal_Int32 nType); - - static ::osl::Mutex& getMutex(); - - public: - // if NULL, a default context will be used - // the context must live as long as the parser - OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xServiceFactory,const IParseContext* _pContext = NULL); - ~OSQLParser(); - - // Parsing an SQLStatement - OSQLParseNode* parseTree(::rtl::OUString& rErrorMessage, - const ::rtl::OUString& rStatement, - sal_Bool bInternational = sal_False); - - // Check a Predicate - OSQLParseNode* predicateTree(::rtl::OUString& rErrorMessage, const ::rtl::OUString& rStatement, - const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter > & xFormatter, - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & xField); - - // Access to the context - const IParseContext& getContext() const {return *m_pContext;} - - /// access to the SQLError instance owned by this parser - const SQLError& getErrorHelper() const; - - // TokenIDToStr: token name belonging to a token number. - static ::rtl::OString TokenIDToStr(sal_uInt32 nTokenID, const IParseContext* pContext = NULL); - - // StrToTokenID: token number belonging to a token name. - // static sal_uInt32 StrToTokenID(const ::rtl::OString & rName); - - // (empty string if not found) - static ::rtl::OUString RuleIDToStr(sal_uInt32 nRuleID); - - // StrToRuleID calculates the RuleID for a ::rtl::OUString (that is, ::com::sun::star::sdbcx::Index in yytname) - // (0 if not found). The search for an ID based on a String is - // extremely inefficient (sequential search for ::rtl::OUString)! - static sal_uInt32 StrToRuleID(const ::rtl::OString & rValue); - - static OSQLParseNode::Rule RuleIDToRule( sal_uInt32 _nRule ); - - // RuleId with enum, far more efficient - static sal_uInt32 RuleID(OSQLParseNode::Rule eRule); - // compares the _sFunctionName with all known function names and return the DataType of the return value - static sal_Int32 getFunctionReturnType(const ::rtl::OUString& _sFunctionName, const IParseContext* pContext = NULL); - - // returns the type for a parameter in a given function name - static sal_Int32 getFunctionParameterType(sal_uInt32 _nTokenId,sal_uInt32 _nPos); - - void error(const sal_Char *fmt); - int SQLlex(); -#ifdef YYBISON - void setParseTree(OSQLParseNode * pNewParseTree); - - // Is the parse in a special mode? - // Predicate chack is used to check a condition for a field - sal_Bool inPredicateCheck() const {return m_xField.is();} - const ::rtl::OUString& getFieldName() const {return m_sFieldName;} - - void reduceLiteral(OSQLParseNode*& pLiteral, sal_Bool bAppendBlank); - // does not change the pLiteral argument - sal_Int16 buildNode(OSQLParseNode*& pAppend,OSQLParseNode* pCompare,OSQLParseNode* pLiteral,OSQLParseNode* pLiteral2); - - sal_Int16 buildComparsionRule(OSQLParseNode*& pAppend,OSQLParseNode* pLiteral); - // pCompre will be deleted if it is not used - sal_Int16 buildPredicateRule(OSQLParseNode*& pAppend,OSQLParseNode* pLiteral,OSQLParseNode*& pCompare,OSQLParseNode* pLiteral2 = NULL); - - sal_Int16 buildLikeRule(OSQLParseNode*& pAppend,OSQLParseNode*& pLiteral,const OSQLParseNode* pEscape); - sal_Int16 buildStringNodes(OSQLParseNode*& pLiteral); -#else -#endif - }; -} - - -#endif //_CONNECTIVITY_SQLPARSE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |