/*=================================================================
   Copyright (C) 2013 BizStation Corp All rights reserved.

   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
   of the License, 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; if not, write to the Free Software 
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  
   02111-1307, USA.
=================================================================*/
/* ===============================================
      Settings specific to each languages.
=============================================== */
#if defined(SWIGRUBY)
  %include "ruby/ruby.swg"
#elif defined(SWIGPHP)
  %include "php/php.swg"
#endif

%module transactd

%include typemaps.i
%include std_string.i
%include wchar.i
%include exception.i

// Suppress warnings
#pragma SWIG nowarn=SWIGWARN_PARSE_USING_UNDEF
%warnfilter(SWIGWARN_LANG_OVERLOAD_SHADOW) btrstoa;
%warnfilter(SWIGWARN_PARSE_UNNAMED_NESTED_CLASS) nstable;


/* ===============================================
      type defines
=============================================== */
%apply unsigned long long { unsigned __int64 }
%apply long long { __int64 }


/* ===============================================
  validatable pointer
=============================================== */
%{
#include <build/swig/validatablepointer.h>
validatablePointerList g_vPtrList;
%}


/* ===============================================
      HEADERS (for cpp compilation)
=============================================== */
%{
#include <bzs/env/crosscompile.h>
#include <bzs/env/compiler.h>
#include <bzs/db/protocol/tdap/client/export.h>
#include <bzs/db/protocol/tdap/btrDate.h>
#include <bzs/db/blobStructs.h>
#include <bzs/db/protocol/tdap/mysql/characterset.h>
#include <bzs/db/transactd/connectionRecord.h>
%}
#ifndef SWIGWIN
%{
#include <linux/linuxTypes.h>
#include <linux/charsetConvert.h>
#include <bzs/env/mbcswchrLinux.h>
%}
#endif
%{
#include <bzs/env/tstring.h>
#include <bzs/rtl/benchmark.h>
#include <bzs/rtl/datetime.h>
#include <bzs/rtl/stringBuffers.h>
#include <bzs/rtl/strtrim.h>
#include <bzs/db/protocol/tdap/btrDate.h>
#include <bzs/db/protocol/tdap/myDateTime.cpp>
#include <bzs/db/protocol/tdap/client/sharedData.h>
#include <bzs/db/protocol/tdap/tdapcapi.h>
#include <bzs/db/protocol/tdap/tdapSchema.h>
#include <bzs/db/protocol/tdap/client/nsTable.h>
#include <bzs/db/protocol/tdap/client/connMgr.h>
#include <bzs/db/protocol/tdap/client/bulkInsert.h>
#include <bzs/db/protocol/tdap/client/dbDef.h>
#include <bzs/db/protocol/tdap/client/table.h>
#include <bzs/db/protocol/tdap/client/nsDatabase.h>
#include <bzs/db/protocol/tdap/client/database.h>
#include <bzs/db/protocol/tdap/mysql/characterset.h>
#include <bzs/db/protocol/tdap/client/field.h>
#include <bzs/db/protocol/tdap/client/fields.h>
#include <bzs/db/protocol/tdap/client/memRecord.h>
#include <bzs/db/protocol/tdap/client/recordset.h>
#include <bzs/db/protocol/tdap/client/activeTable.h>
#include <bzs/db/protocol/tdap/client/groupQuery.h>
#include <bzs/db/protocol/tdap/client/pooledDatabaseManager.h>

using namespace bzs::db::protocol::tdap;
using namespace bzs::db::protocol::tdap::client;
%}


/* ===============================================
      Ruby call_without_gvl support
=============================================== */
#if defined(SWIGRUBY)
  %include "ruby/without_gvl.swg"
#endif


/* ===============================================
      ignore, rename, new/delobject, extend
=============================================== */
// ignore definitions
%ignore LIB_EXTENTION;
%ignore LIB_PREFIX;
%ignore LINUX;
%ignore MBC_CHARSETNAME;
%ignore MB_PRECOMPOSED;
%ignore SHARED_LIB_EXTENTION;
%ignore UTF8_CHARSETNAME;
%ignore WC_COMPOSITECHECK;

// common %newobject and %delobject
%newobject *::clone;
%newobject *::create;
%newobject *::createObject;
%newobject *::openTable;
%delobject *::release;

// * bzs/env/mbcswchrLinux.h *
%ignore bzs::env::u8mbcvt;
%ignore bzs::env::mbu8cvt;
%ignore bzs::env::mbcscvt;
%ignore bzs::env::wchrcvt;
%ignore bzs::env::u8wccvt;
%ignore bzs::env::wcu8cvt;
%ignore bzs::env::WideCharToMultiByte;
%ignore bzs::env::MultiByteToWideChar;
%ignore bzs::env::u8tombc;
%ignore bzs::env::mbctou8;

// * bzs/db/protocol/tdap/client/activeTable.h *
%ignore bzs::db::protocol::tdap::client::activeTable::create;
%ignore bzs::db::protocol::tdap::client::activeTable::releaseTable;
  // activeTable::read returns new object
%newobject bzs::db::protocol::tdap::client::activeTable::read;
%extend bzs::db::protocol::tdap::client::activeTable {
  recordset* read(queryBase& q) {
    recordset* rs = recordset::create();
    self->read(*rs, q);
    return rs;
  }
};
  // create and release methods for activeTable class
%extend bzs::db::protocol::tdap::client::activeTable {
  activeTable(idatabaseManager* mgr, const _TCHAR* tableName) {
    bzs::db::protocol::tdap::client::activeTable* p =
      bzs::db::protocol::tdap::client::activeTable::create(mgr, tableName);
    g_vPtrList.add(p->table().get());
    return p;
  }
  activeTable(database* db, const _TCHAR* tableName) {
    bzs::db::protocol::tdap::client::activeTable* p =
      bzs::db::protocol::tdap::client::activeTable::create(db, tableName);
    g_vPtrList.add(p->table().get());
    return p;
  }
  ~activeTable() {
    if (g_vPtrList.remove(self->table().get()))
    {
      if (nsdatabase::testTablePtr(self->table().get()))
        self->table()->nsdb()->setTestPtrIgnore(true);
    }
    self->release();
  }
  void release() {
    self->releaseTable();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::activeTable::activeTable;
%ignore bzs::db::protocol::tdap::client::activeTable::~activeTable;


// * bzs/db/protocol/tdap/btrDate.h *
%ignore bzs::db::protocol::tdap::bdate;
%ignore bzs::db::protocol::tdap::c_str;

// * bzs/db/protocol/tdap/client/client.h *
%ignore bzs::db::protocol::tdap::client::create;

// * bzs/db/protocol/tdap/client/connectionPool.h *
%ignore bzs::db::protocol::tdap::client::busyWaitArguments;
%ignore bzs::db::protocol::tdap::client::busyWait;
%ignore bzs::db::protocol::tdap::client::scopedLock;
%ignore bzs::db::protocol::tdap::client::connectionPool;
%ignore bzs::db::protocol::tdap::client::stdDbCconnectionPool;
%ignore bzs::db::protocol::tdap::client::stdDbmCconnectionPool;
%ignore bzs::db::protocol::tdap::client::stdCconnectionPool;
%ignore bzs::db::protocol::tdap::client::dllUnloadCallbackFunc;
%ignore bzs::db::protocol::tdap::client::releaseConnection;
%ignore bzs::db::protocol::tdap::client::cpool;

// * bzs/db/protocol/tdap/client/database.h *
%ignore bzs::db::protocol::tdap::client::database::operator=;
%ignore bzs::db::protocol::tdap::client::database::defaultAutoIncSpace;
  // NOTE: ignore * STATIC * create only
%ignore bzs::db::protocol::tdap::client::database::create();
  // create and release methods for database class
%extend bzs::db::protocol::tdap::client::database {
  database() {
    bzs::db::protocol::tdap::client::nsdatabase::setExecCodePage(CP_UTF8);
    return bzs::db::protocol::tdap::client::database::create();
  }
  ~database() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::database::database;
%ignore bzs::db::protocol::tdap::client::database::~database;
  // overwrite openTable
%extend bzs::db::protocol::tdap::client::database {
  bzs::db::protocol::tdap::client::table* openTable(const _TCHAR* tableName,
    short mode = 0, bool autoCreate = true, const _TCHAR* ownerName = NULL, const _TCHAR* uri = NULL)
  {
    bzs::db::protocol::tdap::client::table* tb =
      self->openTable(tableName, mode, autoCreate, ownerName, uri);
    g_vPtrList.add(tb);
    return tb;
  }
  bzs::db::protocol::tdap::client::table* openTable(short fileNum,
    short mode = TD_OPEN_NORMAL, bool autoCreate = true, const _TCHAR* ownerName = NULL, const _TCHAR* uri = NULL)
  {
    bzs::db::protocol::tdap::client::table* tb =
      self->openTable(fileNum, mode, autoCreate, ownerName, uri);
    g_vPtrList.add(tb);
    return tb;
  }
};
  // ignore original method
%ignore bzs::db::protocol::tdap::client::database::openTable;

// * bzs/db/protocol/tdap/client/dbDef.h *
%ignore bzs::db::protocol::tdap::client::dbdef::allocRelateData;
%ignore bzs::db::protocol::tdap::client::dbdef::cacheFieldPos;
%ignore bzs::db::protocol::tdap::client::dbdef::compAsBackup;
%ignore bzs::db::protocol::tdap::client::dbdef::fieldNumByViewNum;
%ignore bzs::db::protocol::tdap::client::dbdef::getFieldPosition;
%ignore bzs::db::protocol::tdap::client::dbdef::getFileSpec;
%ignore bzs::db::protocol::tdap::client::dbdef::popBackup;
%ignore bzs::db::protocol::tdap::client::dbdef::pushBackup;
%ignore bzs::db::protocol::tdap::client::dbdef::setStat;

// * bzs/db/protocol/tdap/client/field.h *
%ignore bzs::db::protocol::tdap::client::compBlob;
%ignore bzs::db::protocol::tdap::client::dummyFd;
%ignore bzs::db::protocol::tdap::client::fieldValue;
%ignore bzs::db::protocol::tdap::client::fieldShare;
%ignore bzs::db::protocol::tdap::client::field::operator=(const field&);
%ignore bzs::db::protocol::tdap::client::field::operator!=;
%ignore bzs::db::protocol::tdap::client::field::operator==;
%ignore bzs::db::protocol::tdap::client::field::operator=(const std::_tstring&);
%ignore bzs::db::protocol::tdap::client::field::initialize;
%ignore bzs::db::protocol::tdap::client::field::isCompPartAndMakeValue;
%ignore bzs::db::protocol::tdap::client::field::ptr;
%ignore bzs::db::protocol::tdap::client::fielddefs::operator[] (const std::_tstring&) const;
%ignore bzs::db::protocol::tdap::client::fielddefs::create;
%rename(getFielddef) bzs::db::protocol::tdap::client::fielddefs::operator[] (int index) const;
  // create and release methods for fielddefs class
%extend bzs::db::protocol::tdap::client::fielddefs {
  fielddefs() {
    return bzs::db::protocol::tdap::client::fielddefs::create();
  }
  ~fielddefs() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::fielddefs::fielddefs;
%ignore bzs::db::protocol::tdap::client::fielddefs::~fielddefs;

// * bzs/db/protocol/tdap/client/fields.h *
%ignore bzs::db::protocol::tdap::client::fields;
%ignore bzs::db::protocol::tdap::client::fieldsBase::operator[](const std::_tstring&) const;
%ignore bzs::db::protocol::tdap::client::fieldsBase::fd;
%ignore bzs::db::protocol::tdap::client::fieldsBase::setInvalidRecord;
  // add methods
%extend bzs::db::protocol::tdap::client::fieldsBase {
  void getFieldByIndexRef(short index, field& return_field) const {
    return_field = self->operator[](index);
  }
  void getFieldByNameRef(const _TCHAR* name, field& return_field) const {
    return_field = self->operator[](name);
  }
};
%rename(Record) bzs::db::protocol::tdap::client::fieldsBase;

// * bzs/db/protocol/tdap/client/groupQuery.h *
%ignore bzs::db::protocol::tdap::client::avg::create;
%ignore bzs::db::protocol::tdap::client::count::create;
%ignore bzs::db::protocol::tdap::client::fieldNames::operator=;
%ignore bzs::db::protocol::tdap::client::fieldNames::create;
%ignore bzs::db::protocol::tdap::client::groupFuncBase::operator=;
%ignore bzs::db::protocol::tdap::client::groupQuery::operator=;
%ignore bzs::db::protocol::tdap::client::groupQuery::create;
%ignore bzs::db::protocol::tdap::client::max::create;
%ignore bzs::db::protocol::tdap::client::min::create;
%ignore bzs::db::protocol::tdap::client::recordsetQuery::operator=;
%ignore bzs::db::protocol::tdap::client::recordsetQuery::create;
%ignore bzs::db::protocol::tdap::client::sortField;
%ignore bzs::db::protocol::tdap::client::sortFields;
%ignore bzs::db::protocol::tdap::client::sortFields::operator[];
%ignore bzs::db::protocol::tdap::client::sum::create;
  // create and release methods for fieldNames class
%extend bzs::db::protocol::tdap::client::fieldNames {
  fieldNames() {
    return bzs::db::protocol::tdap::client::fieldNames::create();
  }
  ~fieldNames() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::fieldNames::fieldNames;
%ignore bzs::db::protocol::tdap::client::fieldNames::~fieldNames;
  // create and release methods for groupQuery class
%extend bzs::db::protocol::tdap::client::groupQuery {
  groupQuery() {
    return bzs::db::protocol::tdap::client::groupQuery::create();
  }
  ~groupQuery() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::groupQuery::groupQuery;
%ignore bzs::db::protocol::tdap::client::groupQuery::~groupQuery;
  // create and release methods for recordsetQuery class
%extend bzs::db::protocol::tdap::client::recordsetQuery {
  recordsetQuery() {
    return bzs::db::protocol::tdap::client::recordsetQuery::create();
  }
  ~recordsetQuery() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::recordsetQuery::recordsetQuery;
%ignore bzs::db::protocol::tdap::client::recordsetQuery::~recordsetQuery;
  // create and release methods for avg class
%extend bzs::db::protocol::tdap::client::avg {
  avg(const fieldNames& targetNames, const _TCHAR* resultName = NULL) {
    return bzs::db::protocol::tdap::client::avg::create(targetNames, resultName);
  }
  ~avg() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::avg::avg;
%ignore bzs::db::protocol::tdap::client::avg::~avg;
  // create and release methods for count class
%extend bzs::db::protocol::tdap::client::count {
  count(const _TCHAR* resultName) {
    return bzs::db::protocol::tdap::client::count::create(resultName);
  }
  ~count() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::count::count;
%ignore bzs::db::protocol::tdap::client::count::~count;
  // create and release methods for max class
%extend bzs::db::protocol::tdap::client::max {
  max(const fieldNames& targetNames, const _TCHAR* resultName = NULL) {
    return bzs::db::protocol::tdap::client::max::create(targetNames, resultName);
  }
  ~max() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::max::max;
%ignore bzs::db::protocol::tdap::client::max::~max;
  // create and release methods for min class
%extend bzs::db::protocol::tdap::client::min {
  min(const fieldNames& targetNames, const _TCHAR* resultName = NULL) {
    return bzs::db::protocol::tdap::client::min::create(targetNames, resultName);
  }
  ~min() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::min::min;
%ignore bzs::db::protocol::tdap::client::min::~min;
  // create and release methods for sum class
%extend bzs::db::protocol::tdap::client::sum {
  sum(const fieldNames& targetNames, const _TCHAR* resultName = NULL) {
    return bzs::db::protocol::tdap::client::sum::create(targetNames, resultName);
  }
  ~sum() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::sum::sum;
%ignore bzs::db::protocol::tdap::client::sum::~sum;

// * bzs/db/protocol/tdap/client/memRecord.h *
%ignore bzs::db::protocol::tdap::client::autoMemory;
%ignore bzs::db::protocol::tdap::client::autoMemory::operator=;
%ignore bzs::db::protocol::tdap::client::memoryRecord::clear;
%ignore bzs::db::protocol::tdap::client::memoryRecord::create;
%ignore bzs::db::protocol::tdap::client::memoryRecord::setRecordData;
%rename(createRecord) bzs::db::protocol::tdap::client::memoryRecord::create(fielddefs&);
  // create and release methods for memoryRecord class
%extend bzs::db::protocol::tdap::client::memoryRecord {
  memoryRecord(fielddefs& fds) {
    return bzs::db::protocol::tdap::client::memoryRecord::create(fds);
  }
  ~memoryRecord() {
    bzs::db::protocol::tdap::client::memoryRecord::release(self);
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::memoryRecord::memoryRecord;
%ignore bzs::db::protocol::tdap::client::memoryRecord::~memoryRecord;

// * bzs/db/protocol/tdap/client/nsDatabase.h *
%ignore bzs::db::protocol::tdap::client::nsdatabase::btrvFunc;
%ignore bzs::db::protocol::tdap::client::nsdatabase::operator=;
%ignore bzs::db::protocol::tdap::client::nsdatabase::createTable;
%ignore bzs::db::protocol::tdap::client::nsdatabase::getBtrVersion(btrVersions*, uchar_td*);
%ignore bzs::db::protocol::tdap::client::nsdatabase::getDllUnloadCallbackFunc;
%ignore bzs::db::protocol::tdap::client::nsdatabase::isTestPtrIgnore;
%ignore bzs::db::protocol::tdap::client::nsdatabase::localSharing;
%ignore bzs::db::protocol::tdap::client::nsdatabase::setTestPtrIgnore;
%ignore bzs::db::protocol::tdap::client::nsdatabase::testTablePtr;

// * bzs/db/protocol/tdap/client/nsTable.h *
%ignore bzs::db::protocol::tdap::client::nstable::data;
%ignore bzs::db::protocol::tdap::client::nstable::setBuflen;
%ignore bzs::db::protocol::tdap::client::nstable::setData;
%ignore bzs::db::protocol::tdap::client::nstable::setStat;
%ignore bzs::db::protocol::tdap::client::nstable::test;
%ignore bzs::db::protocol::tdap::client::nstable::throwError;
%rename(tdapLastErr) bzs::db::protocol::tdap::client::nstable::tdapErr(HWND, _TCHAR*);

// * bzs/db/protocol/tdap/client/recordset.h *
%ignore bzs::db::protocol::tdap::client::recordset::operator=;
%ignore bzs::db::protocol::tdap::client::recordset::create;
%rename(Recordset) bzs::db::protocol::tdap::client::recordset;
%rename(unionRecordset) bzs::db::protocol::tdap::client::recordset::operator+=;
  // add method
%extend bzs::db::protocol::tdap::client::recordset {
  void getRow(size_t index, bzs::db::protocol::tdap::client::fieldsBase** return_record){
    *return_record = &(self->operator[](index));
  }
};
  // create and release methods for recordset class
%extend bzs::db::protocol::tdap::client::recordset {
  recordset() {
    return bzs::db::protocol::tdap::client::recordset::create();
  }
  ~recordset() {
    self->release();
  }
};
%ignore bzs::db::protocol::tdap::client::recordset::recordset;
%ignore bzs::db::protocol::tdap::client::recordset::~recordset;

// * bzs/db/protocol/tdap/client/table.h *
%ignore bzs::db::protocol::tdap::client::keyValuePtr;
%ignore bzs::db::protocol::tdap::client::mra_nojoin;
%ignore bzs::db::protocol::tdap::client::mra_first;
%ignore bzs::db::protocol::tdap::client::mra_nextrows;
%ignore bzs::db::protocol::tdap::client::mra_innerjoin;
%ignore bzs::db::protocol::tdap::client::mra_outerjoin;
%ignore bzs::db::protocol::tdap::client::mra_current_block;
%ignore bzs::db::protocol::tdap::client::multiRecordAlocator;
%ignore bzs::db::protocol::tdap::client::query::create;
%ignore bzs::db::protocol::tdap::client::queryBase::operator=;
%ignore bzs::db::protocol::tdap::client::queryBase::addField;
%ignore bzs::db::protocol::tdap::client::queryBase::addLogic;
%ignore bzs::db::protocol::tdap::client::queryBase::addSeekKeyValuePtr;
%ignore bzs::db::protocol::tdap::client::queryBase::reserveSeekKeyValuePtrSize;
%ignore bzs::db::protocol::tdap::client::queryBase::queryBase;
%ignore bzs::db::protocol::tdap::client::queryBase::~queryBase;
%ignore bzs::db::protocol::tdap::client::queryBase::create;
%ignore bzs::db::protocol::tdap::client::table::fieldPtr;
%ignore bzs::db::protocol::tdap::client::table::getCurProcFieldCount;
%ignore bzs::db::protocol::tdap::client::table::getCurProcFieldIndex;
  // create and release methods for query class
%extend bzs::db::protocol::tdap::client::query {
  query() {
    return bzs::db::protocol::tdap::client::query::create();
  }
  ~query() {
    self->release();
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::query::query;
%ignore bzs::db::protocol::tdap::client::query::~query;
  // ignore keyValueDescription and re-define with expand.
%ignore bzs::db::protocol::tdap::client::table::keyValueDescription(_TCHAR* buf, int bufsize);
%typemap(in,numinputs=0) (_TCHAR* keyValueDescription_buf) (_TCHAR tmpbuf[1024 * 8]) {
  $1 = tmpbuf;
}
%extend bzs::db::protocol::tdap::client::table {
  const _TCHAR* keyValueDescription(_TCHAR* keyValueDescription_buf) {
    self->keyValueDescription(keyValueDescription_buf, 1024 * 8);
    return keyValueDescription_buf;
  }
};
  // create and release methods for table class
%extend bzs::db::protocol::tdap::client::table {
  void release() {
    if (bzs::db::protocol::tdap::client::nsdatabase::testTablePtr(self))
      self->release();
  }
  ~table() {
    if (!g_vPtrList.remove(self))
    {
      if (bzs::db::protocol::tdap::client::nsdatabase::testTablePtr(self))
        self->release();
    }
  }
};
  // ignore original methods
%ignore bzs::db::protocol::tdap::client::table::table;
%ignore bzs::db::protocol::tdap::client::table::~table;

// * bzs/db/protocol/tdap/client/trdboostapi.h *
%ignore bzs::db::protocol::tdap::client::autoBulkinsert;
%ignore bzs::db::protocol::tdap::client::createDatabaseObject;
%ignore bzs::db::protocol::tdap::client::eFindCurrntType;
%ignore bzs::db::protocol::tdap::client::eIndexOpType;
%ignore bzs::db::protocol::tdap::client::eStepOpType;
%ignore bzs::db::protocol::tdap::client::filterdIterator;
%ignore bzs::db::protocol::tdap::client::qlogic;
%ignore bzs::db::protocol::tdap::client::snapshot;
%ignore bzs::db::protocol::tdap::client::tableIterator;
%ignore bzs::db::protocol::tdap::client::transaction;
%ignore bzs::db::protocol::tdap::client::connect;
%ignore bzs::db::protocol::tdap::client::connectOpen;
%ignore bzs::db::protocol::tdap::client::convertTable;
%ignore bzs::db::protocol::tdap::client::createDatabase;
%ignore bzs::db::protocol::tdap::client::createDatabaseForConnectionPool;
%ignore bzs::db::protocol::tdap::client::createDatadaseObject;
%ignore bzs::db::protocol::tdap::client::deleteRecord;
%ignore bzs::db::protocol::tdap::client::disconnect;
%ignore bzs::db::protocol::tdap::client::dropDatabase;
%ignore bzs::db::protocol::tdap::client::filterdIterator;
%ignore bzs::db::protocol::tdap::client::filterdIterator::operator++;
%ignore bzs::db::protocol::tdap::client::filterdIterator::operator==;
%ignore bzs::db::protocol::tdap::client::filterdIterator::operator!=;
%ignore bzs::db::protocol::tdap::client::filterdIterator::operator*;
%ignore bzs::db::protocol::tdap::client::filterdIterator::operator->;
%ignore bzs::db::protocol::tdap::client::find;
%ignore bzs::db::protocol::tdap::client::findRv;
%ignore bzs::db::protocol::tdap::client::for_each;
%ignore bzs::db::protocol::tdap::client::getFindIterator;
%ignore bzs::db::protocol::tdap::client::getTable;
%ignore bzs::db::protocol::tdap::client::insertField;
%ignore bzs::db::protocol::tdap::client::insertKey;
%ignore bzs::db::protocol::tdap::client::insertRecord;
%ignore bzs::db::protocol::tdap::client::insertTable;
%ignore bzs::db::protocol::tdap::client::isSameUri;
%ignore bzs::db::protocol::tdap::client::lexical_cast;
%ignore bzs::db::protocol::tdap::client::openDatabase;
%ignore bzs::db::protocol::tdap::client::openTable;
%ignore bzs::db::protocol::tdap::client::readIndex;
%ignore bzs::db::protocol::tdap::client::readIndex_v;
%ignore bzs::db::protocol::tdap::client::readIndexRv;
%ignore bzs::db::protocol::tdap::client::readIndexRv_v;
%ignore bzs::db::protocol::tdap::client::readStep;
%ignore bzs::db::protocol::tdap::client::readStepRv;
%ignore bzs::db::protocol::tdap::client::releaseDatabase;
%ignore bzs::db::protocol::tdap::client::releaseTable;
%ignore bzs::db::protocol::tdap::client::snapshot;
%ignore bzs::db::protocol::tdap::client::tableIterator;
%ignore bzs::db::protocol::tdap::client::tableIterator::operator++;
%ignore bzs::db::protocol::tdap::client::tableIterator::operator--;
%ignore bzs::db::protocol::tdap::client::tableIterator::operator==;
%ignore bzs::db::protocol::tdap::client::tableIterator::operator!=;
%ignore bzs::db::protocol::tdap::client::tableIterator::operator*;
%ignore bzs::db::protocol::tdap::client::tableIterator::operator->;
%ignore bzs::db::protocol::tdap::client::transaction;
%ignore bzs::db::protocol::tdap::client::updateRecord;
%ignore bzs::db::protocol::tdap::client::updateTableDef;
%ignore bzs::db::protocol::tdap::client::filter_validate_value;
%ignore bzs::db::protocol::tdap::client::filter_validate_block;
%ignore bzs::db::protocol::tdap::client::filter_invalidate_value;

// * bzs/db/protocol/tdap/client/trdormapi.h *
%ignore bzs::db::protocol::tdap::client::setValue;
%ignore bzs::db::protocol::tdap::client::begin;
%ignore bzs::db::protocol::tdap::client::end;
%ignore bzs::db::protocol::tdap::client::push_back;
%ignore bzs::db::protocol::tdap::client::readBefore;
%ignore bzs::db::protocol::tdap::client::mdlsHandler;
%ignore bzs::db::protocol::tdap::client::compFunc;
%ignore bzs::db::protocol::tdap::client::sortFunc;
%ignore bzs::db::protocol::tdap::client::sortFuncBase;
%ignore bzs::db::protocol::tdap::client::sortFunctor;
%ignore bzs::db::protocol::tdap::client::sort;
%ignore bzs::db::protocol::tdap::client::mraResetter;

// * bzs/db/protocol/tdap/tdapSchema.h *
%ignore DLLUNLOADCALLBACK_PTR;
%ignore dllUnloadCallback;
%ignore bzs::db::protocol::tdap::keySpec;
%ignore bzs::db::protocol::tdap::fileSpec;
%ignore bzs::db::protocol::tdap::fielddef::blobDataPtr;
%ignore bzs::db::protocol::tdap::fielddef::blobDataLen;
%ignore bzs::db::protocol::tdap::fielddef::chainChar;
%ignore bzs::db::protocol::tdap::fielddef::dataLen;
%ignore bzs::db::protocol::tdap::fielddef::getKeyValueFromKeybuf;
%ignore bzs::db::protocol::tdap::fielddef::keyCopy;
%ignore bzs::db::protocol::tdap::fielddef::keyData;
%ignore bzs::db::protocol::tdap::fielddef::keyDataLen;
%ignore bzs::db::protocol::tdap::fielddef::maxVarDatalen;
%ignore bzs::db::protocol::tdap::fielddef::nameA;
%ignore bzs::db::protocol::tdap::fielddef::setChainChar;
%ignore bzs::db::protocol::tdap::fielddef::setNameA;
%ignore bzs::db::protocol::tdap::fielddef::unPackCopy;
%ignore bzs::db::protocol::tdap::fielddef_t::defValue;
%ignore bzs::db::protocol::tdap::fielddef_t::defViewWidth;
%ignore bzs::db::protocol::tdap::fielddef_t::enableFlags;
%ignore bzs::db::protocol::tdap::fielddef_t::filterId;
%ignore bzs::db::protocol::tdap::fielddef_t::filterKeynum;
%ignore bzs::db::protocol::tdap::fielddef_t::lookDBNum;
%ignore bzs::db::protocol::tdap::fielddef_t::lookField;
%ignore bzs::db::protocol::tdap::fielddef_t::lookFields;
%ignore bzs::db::protocol::tdap::fielddef_t::lookTable;
%ignore bzs::db::protocol::tdap::fielddef_t::userOption;
%ignore bzs::db::protocol::tdap::fielddef_t::viewNum;
%ignore bzs::db::protocol::tdap::fielddef_t::viewWidth;
%ignore bzs::db::protocol::tdap::tabledef::autoIncExSpace;
%ignore bzs::db::protocol::tdap::tabledef::convertFileNum;
%ignore bzs::db::protocol::tdap::tabledef::fileNameA;
%ignore bzs::db::protocol::tdap::tabledef::filler0;
%ignore bzs::db::protocol::tdap::tabledef::iconIndex;
%ignore bzs::db::protocol::tdap::tabledef::iconIndex2;
%ignore bzs::db::protocol::tdap::tabledef::iconIndex3;
%ignore bzs::db::protocol::tdap::tabledef::optionFlags;
%ignore bzs::db::protocol::tdap::tabledef::parentKeyNum;
%ignore bzs::db::protocol::tdap::tabledef::replicaKeyNum;
%ignore bzs::db::protocol::tdap::tabledef::reserved;
%ignore bzs::db::protocol::tdap::tabledef::tableNameA;
%ignore bzs::db::protocol::tdap::tabledef::treeIndex;
%ignore bzs::db::protocol::tdap::tabledef::setFileNameA;
%ignore bzs::db::protocol::tdap::tabledef::setTableNameA;

  // add methods
%extend bzs::db::protocol::tdap::keydef {
  keySegment* segment(const int index)
  {
    return &(self->segments[index]);
  }
};
%extend bzs::db::protocol::tdap::tabledef {
  fielddef* fieldDef(const int index)
  {
    return &(self->fieldDefs[index]);
  }
  keydef* keyDef(const int index)
  {
    return &(self->keyDefs[index]);
  }
};
%extend bzs::db::protocol::tdap::btrVersions {
  btrVersion* version(const int index) {
    return &(self->versions[index]);
  }
};

// * bzs/rtl/benchmark.h *
%ignore bzs::rtl::benchmark::report;
%ignore bzs::rtl::benchmark::report2;
%ignore bzs::rtl::benchmarkMt;

// common %ignore
%ignore *::addref;
%ignore *::destroy;
%ignore *::refCount;
%ignore *::release;

/* ===============================================
      external symbols
=============================================== */
#define DLLLIB
%include bzs/env/compiler.h
#ifdef SWIGWIN
#define CP_ACP  0
#define CP_UTF8 65001
#else
%include bzs/env/mbcswchrLinux.h
#endif
#undef pragma_pack1
#define pragma_pack1
#undef pragma_pop
#define pragma_pop
%include bzs/db/protocol/tdap/tdapcapi.h
%include bzs/db/protocol/tdap/tdapSchema.h
%include bzs/db/protocol/tdap/client/nsTable.h
%include bzs/db/protocol/tdap/client/dbDef.h
%include bzs/db/protocol/tdap/client/table.h
%include bzs/db/protocol/tdap/client/nsDatabase.h
%include bzs/db/protocol/tdap/client/database.h
%include bzs/rtl/benchmark.h
%include bzs/db/protocol/tdap/mysql/characterset.h
// typemap for btrTimeStamp::toString/btrdtoa/btrttoa/btrstoa --
%typemap(in,numinputs=0) (char * retbuf) (char tmpbuf[255]) { $1=tmpbuf; }
%include bzs/db/protocol/tdap/btrDate.h
%clear char * retbuf;
// clear typemap for typemap for btrTimeStamp::toString/btrdtoa/btrttoa/btrstoa --
%include bzs/db/protocol/tdap/client/field.h
%include bzs/db/protocol/tdap/client/fields.h
%include bzs/db/protocol/tdap/client/memRecord.h
%include bzs/db/protocol/tdap/client/trdboostapi.h
%include bzs/db/protocol/tdap/client/groupQuery.h
%include bzs/db/protocol/tdap/client/recordset.h
%include bzs/db/protocol/tdap/client/activeTable.h
%include bzs/db/protocol/tdap/client/pooledDatabaseManager.h


/* ===============================================
      template
=============================================== */
// * bzs/db/protocol/tdap/client/activeTable.h *
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64, __int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64, __int64, __int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64, __int64, __int64, __int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64, __int64, __int64, __int64, __int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<__int64, __int64, __int64, __int64, __int64, __int64, __int64, __int64>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double, double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double, double, double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double, double, double, double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double, double, double, double, double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double, double, double, double, double, double>;
%template(keyValue) bzs::db::protocol::tdap::client::activeTable::keyValue<double, double, double, double, double, double, double, double>;

// * bzs/db/protocol/tdap/client/groupQuery.h *
%template(when) bzs::db::protocol::tdap::client::recordsetQuery::when<_TCHAR*>;
%template(and_) bzs::db::protocol::tdap::client::recordsetQuery::and_<_TCHAR*>;
%template(or_)  bzs::db::protocol::tdap::client::recordsetQuery::or_<_TCHAR*>;

// * bzs/db/protocol/tdap/client/table.h *
%template(where) bzs::db::protocol::tdap::client::query::where<_TCHAR*>;
%template(and_) bzs::db::protocol::tdap::client::query::and_<_TCHAR*>;
%template(or_)  bzs::db::protocol::tdap::client::query::or_<_TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<_TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*, _TCHAR*>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64, __int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64, __int64, __int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64, __int64, __int64, __int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64, __int64, __int64, __int64, __int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<__int64, __int64, __int64, __int64, __int64, __int64, __int64, __int64>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double, double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double, double, double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double, double, double, double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double, double, double, double, double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double, double, double, double, double, double>;
%template(in)   bzs::db::protocol::tdap::client::query::in<double, double, double, double, double, double, double, double>;

/* ===============================================
      cpointer
=============================================== */
#if defined(SWIGPHP)
%include "cpointer.i"
%pointer_functions(bzs::db::protocol::tdap::client::fieldsBase*, fieldsBase_p_p)
#endif