ErrorSource.cpp

Go to the documentation of this file.
00001 /*
00002 // $Id: //open/dev/fennel/exec/ErrorSource.cpp#5 $
00003 // Fennel is a library of data storage and processing components.
00004 // Copyright (C) 2005-2009 The Eigenbase Project
00005 // Copyright (C) 2005-2009 SQLstream, Inc.
00006 // Copyright (C) 2005-2009 LucidEra, Inc.
00007 // Portions Copyright (C) 1999-2009 John V. Sichi
00008 //
00009 // This program is free software; you can redistribute it and/or modify it
00010 // under the terms of the GNU General Public License as published by the Free
00011 // Software Foundation; either version 2 of the License, or (at your option)
00012 // any later version approved by The Eigenbase Project.
00013 //
00014 // This program is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with this program; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 */
00023 
00024 #include "fennel/common/CommonPreamble.h"
00025 #include "fennel/exec/ErrorSource.h"
00026 
00027 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/exec/ErrorSource.cpp#5 $");
00028 
00029 ErrorSource::ErrorSource()
00030 {
00031     pErrorTarget.reset();
00032 }
00033 
00034 ErrorSource::ErrorSource(
00035     SharedErrorTarget pErrorTargetInit,
00036     const std::string &nameInit)
00037 {
00038     pErrorTarget.reset();
00039     initErrorSource(pErrorTargetInit, nameInit);
00040 }
00041 
00042 ErrorSource::~ErrorSource()
00043 {
00044     pErrorTarget.reset();
00045 }
00046 
00047 void ErrorSource::initErrorSource(
00048     SharedErrorTarget pErrorTargetInit,
00049     const std::string &nameInit)
00050 {
00051     pErrorTarget = pErrorTargetInit;
00052     name = nameInit;
00053 }
00054 
00055 void ErrorSource::postError(
00056     ErrorLevel level, const std::string &message,
00057     void *address, long capacity, int index)
00058 {
00059     if (hasTarget()) {
00060         getErrorTarget().notifyError(
00061             name, level, message, address, capacity, index);
00062     }
00063 }
00064 
00065 void ErrorSource::postError(
00066     ErrorLevel level, const std::string &message,
00067     const TupleDescriptor &errorDesc, const TupleData &errorTuple, int index)
00068 {
00069     if (!hasTarget()) {
00070         return;
00071     }
00072 
00073     if (!pErrorBuf) {
00074         errorAccessor.compute(errorDesc);
00075         uint cbMax = errorAccessor.getMaxByteCount();
00076         pErrorBuf.reset(new FixedBuffer[cbMax]);
00077     }
00078 
00079     uint cbTuple = errorAccessor.getByteCount(errorTuple);
00080     errorAccessor.marshal(errorTuple, pErrorBuf.get());
00081     postError(level, message, pErrorBuf.get(), cbTuple, index);
00082 }
00083 
00084 void ErrorSource::disableTarget()
00085 {
00086     pErrorTarget.reset();
00087 }
00088 
00089 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/exec/ErrorSource.cpp#5 $");
00090 
00091 // End ErrorSource.cpp

Generated on Mon Jun 22 04:00:18 2009 for Fennel by  doxygen 1.5.1