You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			273 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (C) 2014 InfiniDB, Inc.
 | 
						|
 | 
						|
   This program is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU General Public License
 | 
						|
   as published by the Free Software Foundation; version 2 of
 | 
						|
   the License.
 | 
						|
 | 
						|
   This program 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 General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU General Public License
 | 
						|
   along with this program; if not, write to the Free Software
 | 
						|
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | 
						|
   MA 02110-1301, USA. */
 | 
						|
 | 
						|
/******************************************************************************
 | 
						|
 * $Id: exceptclasses.h 3857 2013-06-04 18:19:28Z pleblanc $
 | 
						|
 *
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
/** @file */
 | 
						|
 | 
						|
#ifndef LOGGING_EXCEPTCLASSES_H
 | 
						|
#define LOGGING_EXCEPTCLASSES_H
 | 
						|
 | 
						|
#include <iostream>
 | 
						|
#include <sstream>
 | 
						|
#include <stdexcept>
 | 
						|
#include <string>
 | 
						|
 | 
						|
#include "errorcodes.h"
 | 
						|
#include "errorids.h"
 | 
						|
#include "idberrorinfo.h"
 | 
						|
#include "logger.h"
 | 
						|
 | 
						|
namespace logging
 | 
						|
{
 | 
						|
 | 
						|
/** @brief specific error exception class
 | 
						|
*
 | 
						|
*
 | 
						|
*/
 | 
						|
class IDBExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    IDBExcept(uint16_t code) :
 | 
						|
        std::runtime_error(IDBErrorInfo::instance()->errorMsg(code)), fErrCode(code) {}
 | 
						|
    IDBExcept(uint16_t code, const Message::Args& args) :
 | 
						|
        std::runtime_error(IDBErrorInfo::instance()->errorMsg(code, args)), fErrCode(code) {}
 | 
						|
    IDBExcept(const std::string& msg, uint16_t code) :
 | 
						|
        std::runtime_error(msg), fErrCode(code) { }
 | 
						|
    void errorCode(uint16_t code)
 | 
						|
    {
 | 
						|
        fErrCode = code;
 | 
						|
    }
 | 
						|
    uint16_t errorCode() const
 | 
						|
    {
 | 
						|
        return fErrCode;
 | 
						|
    }
 | 
						|
protected:
 | 
						|
    unsigned fErrCode;
 | 
						|
};
 | 
						|
 | 
						|
class DictionaryBufferOverflow : public IDBExcept
 | 
						|
{
 | 
						|
public:
 | 
						|
    DictionaryBufferOverflow() : IDBExcept(ERR_DICTBUFFER_OVERFLOW)
 | 
						|
    { }
 | 
						|
};
 | 
						|
 | 
						|
class LargeDataListExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    explicit LargeDataListExcept(const std::string&  msg) : std::runtime_error(msg) { }
 | 
						|
 | 
						|
    virtual	~LargeDataListExcept() throw() { }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/** @brief specific error exception class for query data
 | 
						|
*   @bug 1155
 | 
						|
*
 | 
						|
*/
 | 
						|
class QueryDataExcept : public IDBExcept
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    QueryDataExcept(const std::string& msg, uint16_t code) :
 | 
						|
        IDBExcept(msg, code)  { }
 | 
						|
 | 
						|
    virtual	~QueryDataExcept() throw() { }
 | 
						|
private:
 | 
						|
    //defaults okay
 | 
						|
    //QueryDataExcept(const QueryDataExcept& rhs);
 | 
						|
    //QueryDataExcept& operator=(const QueryDataExcept& rhs);
 | 
						|
};
 | 
						|
 | 
						|
/** @brief specific error exception class for VBBM Version Buffer overflow
 | 
						|
*   @bug 1949
 | 
						|
*
 | 
						|
*/
 | 
						|
class VBBMBufferOverFlowExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    VBBMBufferOverFlowExcept(const std::string& msg) :
 | 
						|
        std::runtime_error(msg), fErrorCode(8) { }
 | 
						|
    //ERR_VBBM_OVERFLOW = 8 defined in brmtypes.h
 | 
						|
    int8_t errorCode() const
 | 
						|
    {
 | 
						|
        return fErrorCode;
 | 
						|
    }
 | 
						|
 | 
						|
private:
 | 
						|
    int8_t fErrorCode;
 | 
						|
};
 | 
						|
 | 
						|
/** @brief specific error exception class for VBBM Version Buffer overflow
 | 
						|
*   @bug 1949
 | 
						|
*
 | 
						|
*/
 | 
						|
class PrimitiveColumnProjectResultExcept : public QueryDataExcept
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    PrimitiveColumnProjectResultExcept(const std::string& msg) :
 | 
						|
        QueryDataExcept(msg, projectResultErr) { }
 | 
						|
};
 | 
						|
 | 
						|
/** @brief specific error exception class for PrimProc invalid HWM
 | 
						|
*   @bug 2173
 | 
						|
*
 | 
						|
*/
 | 
						|
class InvalidRangeHWMExcept : public QueryDataExcept
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    InvalidRangeHWMExcept(const std::string& msg) :
 | 
						|
        QueryDataExcept(msg, hwmRangeSizeErr) { }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/** @brief Exception for F&E framework to throw
 | 
						|
 *  Invalid Operation Exception
 | 
						|
 */
 | 
						|
class InvalidOperationExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    InvalidOperationExcept(const std::string& msg) :
 | 
						|
        std::runtime_error(msg) { }
 | 
						|
};
 | 
						|
 | 
						|
/** @brief Exception for F&E framework to throw
 | 
						|
 *  Invalid Conversion Exception
 | 
						|
 */
 | 
						|
class InvalidConversionExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    InvalidConversionExcept(const std::string& msg) :
 | 
						|
        std::runtime_error(msg) { }
 | 
						|
};
 | 
						|
 | 
						|
/** @brief Exception for F&E framework -- function evaluation to throw
 | 
						|
 *  Invalid Argument Exception
 | 
						|
 */
 | 
						|
class InvalidArgumentExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    InvalidArgumentExcept(const std::string& msg) :
 | 
						|
        std::runtime_error(msg) { }
 | 
						|
};
 | 
						|
 | 
						|
/** @brief Exception for F&E framework -- function evaluation to throw
 | 
						|
 *  Invalid Argument Exception
 | 
						|
 */
 | 
						|
class NotImplementedExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    NotImplementedExcept(const std::string& msg) :
 | 
						|
        std::runtime_error(msg) { }
 | 
						|
};
 | 
						|
 | 
						|
/** @brief specific error exception class for getSysData in Calpontsystemcatalog.
 | 
						|
*   @bug 2574
 | 
						|
*
 | 
						|
*/
 | 
						|
class NoTableExcept : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    /** Takes a character string describing the error.  */
 | 
						|
    NoTableExcept(const std::string& msg) :
 | 
						|
        std::runtime_error(msg) { }
 | 
						|
};
 | 
						|
 | 
						|
class MoreThan1RowExcept : public IDBExcept
 | 
						|
{
 | 
						|
public:
 | 
						|
    MoreThan1RowExcept() :
 | 
						|
        IDBExcept(ERR_MORE_THAN_1_ROW)
 | 
						|
    { }
 | 
						|
};
 | 
						|
 | 
						|
class CorrelateFailExcept : public IDBExcept
 | 
						|
{
 | 
						|
public:
 | 
						|
    CorrelateFailExcept() :
 | 
						|
        IDBExcept(ERR_CORRELATE_FAIL)
 | 
						|
    { }
 | 
						|
};
 | 
						|
 | 
						|
class DBRMException : public std::runtime_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    DBRMException(const std::string& emsg) :
 | 
						|
        std::runtime_error(emsg) {}
 | 
						|
};
 | 
						|
 | 
						|
class ProtocolError : public std::logic_error
 | 
						|
{
 | 
						|
public:
 | 
						|
    ProtocolError(const std::string& emsg) : std::logic_error(emsg) { }
 | 
						|
};
 | 
						|
 | 
						|
#ifndef __STRING
 | 
						|
#define __STRING(x) #x
 | 
						|
#endif
 | 
						|
#define idbassert(x) do { \
 | 
						|
	if (!(x)) { \
 | 
						|
		std::ostringstream os; \
 | 
						|
\
 | 
						|
		os << __FILE__ << "@" << __LINE__ << ": assertion \'" << __STRING(x) << "\' failed"; \
 | 
						|
		std::cerr << os.str() << std::endl; \
 | 
						|
		logging::MessageLog logger((logging::LoggingID())); \
 | 
						|
		logging::Message message; \
 | 
						|
		logging::Message::Args args; \
 | 
						|
\
 | 
						|
		args.add(os.str()); \
 | 
						|
		message.format(args); \
 | 
						|
		logger.logErrorMessage(message); \
 | 
						|
		throw logging::IDBExcept(logging::ERR_ASSERTION_FAILURE); \
 | 
						|
	} \
 | 
						|
} while (0)
 | 
						|
 | 
						|
#define idbassert_s(x, s) do { \
 | 
						|
	if (!(x)) { \
 | 
						|
		std::ostringstream os; \
 | 
						|
\
 | 
						|
		os << __FILE__ << "@" << __LINE__ << ": assertion \'" << __STRING(x) << "\' failed.  Error msg \'" << s << "\'"; \
 | 
						|
		std::cerr << os.str() << std::endl; \
 | 
						|
		logging::MessageLog logger((logging::LoggingID())); \
 | 
						|
		logging::Message message; \
 | 
						|
		logging::Message::Args args; \
 | 
						|
\
 | 
						|
		args.add(os.str()); \
 | 
						|
		message.format(args); \
 | 
						|
		logger.logErrorMessage(message); \
 | 
						|
		throw logging::IDBExcept(logging::ERR_ASSERTION_FAILURE); \
 | 
						|
	} \
 | 
						|
} while (0)
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#endif
 | 
						|
// vim:ts=4 sw=4:
 |