/* Table class
The table class crudely models the result set from an SQL query, ie a
relational database table. It contains the data members:
Schema - The table schema, eg column number, name, datatype etc
tData - The data (if any) returned by the SQL command
*/
#ifndef TABLE_H
#define TABLE_H
#include <windows.h>
#include <iostream>
#include <sql.h>
#include <sqlext.h>
#include <string>
#include <algorithm>
#include <vector>
#define max(a,b) (a > b ? a : b)
/* Table Schema for a given column */
typedef struct
{ SQLUINTEGER colNum; //column number
string colName; //column name
SQLSMALLINT colNameLen; //length of name
SQLSMALLINT colType; //column data type
string colTypeName; //user friendly datatype name
SQLUINTEGER colLength; //length of column
SQLSMALLINT colScale; //column numeric precision
SQLSMALLINT colNullable; //indicates if column can hold null values
char *binding; //data structure to which column is bound
SQLINTEGER bytesReturned; //bytes returned by a get data operation on
} COLATTRIBUTES; //a column
//Table result data
typedef struct
{ char * text;
} tableData;
struct RESULTATTR
{ SDWORD cRows;
SWORD cColumns;
};
class Table
{ public:
Table();
~Table();
void initTable(COLATTRIBUTES);
static int tableInstances;
SQLRETURN buildSchema(HSTMT &, int);
char * getSchema(int);
RESULTATTR getAttribs();
void setAttribs(int, int);
void setSchema(COLATTRIBUTES);
SQLRETURN bindColumns(HSTMT &);
SQLRETURN transferData(HSTMT &);
char * getField(int, int, int); //row, col number of colums
private:
COLATTRIBUTES tab;
vector <tableData> tData;
vector <COLATTRIBUTES> Schema;
RESULTATTR attribs;
};
#endif