From Giona
/*
* This class represents a Result set obtained by making a query on a Sqlite Database
* Author: Rosario Marino
*/
#include "SqliteDBResultSet.h"
using namespace std;
/*
* Constructor
*/
SqliteDBResultSet::SqliteDBResultSet()
{
Debug::debug("SqliteDBResultSet::SqliteDBResultSet()");
this->columns=new GenericList();
this->data=new GenericList();
this->lastError=NO_ERROR;
}
/*
* Destructor
*/
SqliteDBResultSet::~SqliteDBResultSet()
{
Debug::debug("SqliteDBResultSet::~SqliteDBResultSet()");
delete (this->data);
delete (this->columns);
}
/*
* Returns last error code
*/
int SqliteDBResultSet::getLastError()
{
Debug::debug("int SqliteDBResultSet::getLastError()");
return this->lastError;
}
/*
* Returns the number of columns of the table
*/
int SqliteDBResultSet::getNColumns()
{
Debug::debug("int SqliteDBResultSet::getNColumns()");
return this->columns->getLength();
}
/*
* Returns the number of rows of the table
*/
int SqliteDBResultSet::getNRows()
{
Debug::debug("int SqliteDBResultSet::getNRows()");
if(this->columns->getLength()==0)
return 0;
int nRows=this->data->getLength()/this->columns->getLength();
return nRows;
}
/*
* Returns the name of a column in the specified position
* Returns NULL in case of error
*/
char* SqliteDBResultSet::getColumnName(int columnNumber)
{
Debug::debug("char* SqliteDBResultSet::getColumnName(int columnNumber)");
if((columnNumber<0)||(columnNumber>=this->columns->getLength()))
{
Debug::debug("ERROR: ERROR_INDEX_OUT_OF_RANGE");
this->lastError = ERROR_INDEX_OUT_OF_RANGE;
return NULL;
}
GenericListNode * columnNode= this->columns->getHead();
for(int i=0; i<columnNumber;i++)
columnNode=columnNode->getNext();
return (char*)(columnNode->getElem());
}
/*
* Returns the value of the field in the specified rows and cols
* Returns NULL in case of error
*/
char* SqliteDBResultSet::getFieldValue(int rowNumber, int columnNumber)
{
Debug::debug("char* SqliteDBResultSet::getFieldValue(int rowNumber, int columnNumber)");
if((columnNumber<0)||(columnNumber>=this->columns->getLength()))
{
Debug::debug("ERROR: ERROR_INDEX_OUT_OF_RANGE - int columnNumber");
this->lastError = ERROR_INDEX_OUT_OF_RANGE;
return NULL;
}
if((rowNumber<0)||(rowNumber>=this->getNRows()))
{
Debug::debug("ERROR: ERROR_INDEX_OUT_OF_RANGE - int rowNumber");
this->lastError = ERROR_INDEX_OUT_OF_RANGE;
return NULL;
}
int position=(rowNumber*this->getNColumns())+columnNumber;
GenericListNode * fieldNode= this->data->getHead();
for(int i=0; i<position;i++)
fieldNode=fieldNode->getNext();
return (char*)(fieldNode->getElem());
}
/*
* Adds a column to the table
* WARNING: This method should NEVER BE CALLED
*/
bool SqliteDBResultSet::addColumn(char* columnName)
{
Debug::debug("bool SqliteDBResultSet::addColumn(char* columnName)");
GenericListNode* node=new GenericListNode();
node->setElem((genericListElemT)columnName);
node->setNotAnObject();
return this->columns->addNode(node);
}
/*
* Adds a field in the specified row of the table.
* WARNING: This method should NEVER BE CALLED
*/
bool SqliteDBResultSet::addField(char* field)
{
Debug::debug("bool SqliteDBResultSet::addField(char* field)");
GenericListNode* node=new GenericListNode();
node->setElem((genericListElemT)field);
node->setNotAnObject();
return this->data->addNode(node);
}
BACK