/***************************************************************************
    copyright     : (C) 1999 by Edwin Glaser
    email         : edwin@pannenleiter.de
    version       : $Id: dbtable.h,v 1.1.1.1 2000/02/07 21:42:12 ege Exp $
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   * 
 *                                                                         *
 ***************************************************************************/


#ifndef DBTABLE_H
#define DBTABLE_H

#include <qdatetime.h> 

/**
  *@author Edwin Glaser
  */

class DBTableDescription
{
public:
	DBTableDescription *next;
	char *table;
	int numPrimaries;
	int *primaryPos;
	char **primaries;
	int numColumns;
	int *columnPos;
	char **columns;

	DBTableDescription(const char *t, const char *p, const char *c = 0);
	~DBTableDescription();
  static int DBTableDescription::splitStr(const char *str, char ***rs, int **rp);
  void setColumns(const char *c) { numColumns = splitStr(c, &columns, &columnPos); };
};

class DBMasterDescription
{
public:
	int numJoin;
	int *joinMasterPos;
	int *joinDetailPos;
	int numInit;
	int *initMasterPos;
	int *initDetailPos;

	DBMasterDescription(const char *join, const char *init);
	~DBMasterDescription();
  static int DBMasterDescription::splitStr(const char *str, int **rm, int **rd);
};

class DBColumnDescription
{
public:
  char columnName[100];
  char columnQualifierName[100];
  int columnType;
  char columnTypeName[100];
  long columnLength;
  int columnPrecision;
  int columnScale;
  long columnDisplaySize;
  int columnNullable;
  int columnUnsigned;
  int columnMoney;
  int columnUpdatable;
  int columnAutoIncrement;
};

class DBField
{
public:
  int sqlType;
  int sqlScale;
  int cType;
  int cSize;
  bool isValid;
  bool isNull;
  void *buffer;
  //SQLINTEGER tmp;
  long tmp;

  DBField();
  DBField( const DBField &s );
  ~DBField();

  static int cTypeOfSQL(int sql, int scale = 0);

  void init(int sql, int size, int scale = 0);
  DBField& operator= ( const DBField & s );
  bool operator== ( const DBField & s ) const;
  bool operator!= ( const DBField & s ) const { return !(*this == s); };

  bool setQString(const QString &str);
  QString getQString(const char *format = 0) const;
  bool setQDate(const QDate &val);
  QDate getQDate() const;
  bool setQTime(const QTime &val);
  QTime getQTime() const;
  bool setQDateTime(const QDateTime &val);
  QDateTime getQDateTime() const;
  bool setDouble(double num);
  double getDouble() const;
  bool setLong(long num);
  long getLong() const;

protected:
	static char date_format[100];
	static char time_format[100];
	static char timestamp_format[100]; 
	static char *initFormat(char *buffer, const char *format);
	static bool scanDate(const char *str, const char *f, struct tm *res);
};

#endif























Documentation generated by eg@wonko on Sam Feb 19 00:09:53 MET 2000