#ifndef _CEGOIMPINSTREAM_H_INCLUDED_
#define _CEGOIMPINSTREAM_H_INCLUDED_
///////////////////////////////////////////////////////////////////////////////
//                                                         
// CegoImpInStream.h
// -----------------
// Cego import instream description
//
// Design and Implementation by Bjoern Lemke
//
// (C)opyright 2000-2010 Bjoern Lemke
//
// 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; either version 2, or (at your option)
// any later version.
// 
// 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; see the file COPYING.  If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
//
// INTERFACE MODULE
//
// Class: CegoImpInStream
// 
// Description: 
//
// Status: QG-2.6
//
///////////////////////////////////////////////////////////////////////////////

// base includes
#include <lfc/Chain.h>
#include <lfc/Attribute.h>

// xml includes
#include <lfc/XMLInStream.h>

// cego includes
#include "CegoDatabaseManager.h"
#include "CegoTableObject.h"
#include "CegoBTreeObject.h"
#include "CegoKeyObject.h"
#include "CegoCheckObject.h"

class CegoDistManager;

class CegoImpInStream : public XMLInStream {
    
public:
    
    CegoImpInStream(const Chain& tableSet, CegoDistManager *pGTM, bool doLogging = true);
    CegoImpInStream(const Chain& tableSet, const Chain& tableName, CegoDistManager *pGTM, bool doLogging = true);

    ~CegoImpInStream();
    
    void putFirst(Element *pParent, const Chain& name, const ListT<Attribute>& attrList, ListT<char*> dataList);
    void putNext(Element *pParent, const Chain& name, const ListT<Attribute>& attrList, ListT<char*> dataList);
    
private:

    enum ImpMode { IMP_ALL, IMP_TABLE};

    void insertData(const Chain& tabName, const ListT<Attribute>& attrList, ListT<char*> dataList);
    
    CegoDistManager* _pGTM;
    Chain _tableSet;
    Chain _impTable;
    ListT<CegoField> _schema;
    CegoDatabaseManager* _pDBMng;
    bool _isFirst;
    ImpMode _mode;
    CegoTableObject _oe;

    ListT<CegoTableObject> _idxList;
    ListT<CegoBTreeObject> _btreeList;
    ListT<CegoKeyObject> _keyList;
    ListT<CegoCheckObject> _checkList;
    
    CegoBufferPage _bp;
    CegoDataPointer _sysEntry;
    bool _doLogging;

    unsigned long _modId;
};

#endif




