/*
* This file is part of rasdaman community.
*
* Rasdaman community 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 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community 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 rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
*/
#include "mymalloc/mymalloc.h"
// This is -*- C++ -*-
/*************************************************************
*
*
* PURPOSE:
*
*
* COMMENTS:
* uses embedded SQL
*
* PURPOSE
* has common code for all database interface implementations
*/
#include
#include
#include
#include
#include
#include "blobtile.hh"
#include "raslib/error.hh"
#include "reladminif/externs.h"
#include "raslib/rmdebug.hh"
#include "reladminif/sqlerror.hh"
#include "tileid.hh"
#include "inlinetile.hh"
#include "reladminif/objectbroker.hh"
#include "reladminif/dbref.hh"
// defined in rasserver.cc
extern char globalConnectId[256];
BLOBTile::BLOBTile(r_Data_Format dataformat)
: DBTile(dataformat)
{
RMDBGONCE(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << dataformat << ")");
objecttype = OId::BLOBOID;
}
/*************************************************************
* Method name...: BLOBTile(r_Bytes newSize, char c)
*
* Arguments.....:
* newSize: size in number of chars
* c: value for all cells
* Return value..: none
* Description...: creates a new BLOBTile containing with all
* cells set to c.
************************************************************/
BLOBTile::BLOBTile(r_Bytes newSize, char c, r_Data_Format dataformat)
: DBTile(newSize, c, dataformat)
{
RMDBGONCE(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << newSize << ", data, " << dataformat << ")");
objecttype = OId::BLOBOID;
}
/*************************************************************
* Method name...: BLOBTile(r_Bytes newSize,
* int patSize, char* pat);
*
* Arguments.....:
* newSize: size in number of chars
* patSize: number of chars in pattern
* pat: char array with the pattern
* Return value..: none
* Description...: creates a new BLOBTile containing the
* repeated pattern pat. newSize shoud be
* a multiply of patSize, otherwise the
* cells are filled up with 0.
************************************************************/
BLOBTile::BLOBTile(r_Bytes newSize, r_Bytes patSize, const char* pat, r_Data_Format dataformat)
: DBTile(newSize, patSize, pat, dataformat)
{
RMDBGONCE(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << newSize << ", " << patSize << ", pattern, " << dataformat << ")");
objecttype = OId::BLOBOID;
}
/*************************************************************
* Method name...: BLOBTile(r_Bytes newSize,
* char* newCells)
*
* Arguments.....:
* newSize: size in number of chars
* newCells: char array with the new cells (must
* have at least newSize elements)
* Return value..: none
* Description...: creates a new BLOBTile. The elements of
* the char array are copied!
************************************************************/
BLOBTile::BLOBTile(r_Bytes newSize, const char* newCells, r_Data_Format dataformat)
: DBTile(newSize, newCells, dataformat)
{
RMDBGONCE(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << size << ", data, " << dataformat << ")");
objecttype = OId::BLOBOID;
}
BLOBTile::BLOBTile(r_Bytes newSize, const char* newCells, r_Data_Format dataformat, const OId& id)
: DBTile(newSize, newCells, dataformat)
{
RMDBGONCE(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << size << ", data, " << dataformat << ", " << id << ")");
objecttype = OId::BLOBOID;
myOId = id;
// copied from DBObject::setPersistent()
// if we don't do this the blob will get a new oid
_isPersistent = true;
_isModified = true;
ObjectBroker::registerDBObject(this);
}
BLOBTile::BLOBTile(const OId& id) throw (r_Error)
: DBTile(id)
{
RMDBGENTER(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << id <<")");
readFromDb();
RMDBGEXIT(3, RMDebug::module_blobif, "BLOBTile", "BLOBTile(" << id << ")");
}
BLOBTile::BLOBTile(const OId& id, r_Bytes newSize, r_Data_Format newFmt)
: DBTile(id)
{
_isInDatabase = false;
_isPersistent = true;
_isModified = false;
_isCached = false;
dataFormat = newFmt;
currentFormat = r_Array;
size = newSize;
cells = (char*)mymalloc(size * sizeof(char));
memset(cells, 0, size);
ObjectBroker::registerDBObject(this);
}
BLOBTile::~BLOBTile()
{
RMDBGENTER(3, RMDebug::module_blobif, "BLOBTile", "~BLOBTile() " << myOId);
validate();
RMDBGEXIT(3, RMDebug::module_blobif, "BLOBTile", "~BLOBTile() " << myOId << ")");
}
char* BLOBTile::BLOBBuffer = NULL;
r_Bytes BLOBTile::BLOBBufferLength = 131072;