/*
**      $VER: Msql.h 5.0 (16.09.98)
**
**      definition of Msql
**
**      (C) Copyright 1998 Christophe Sollet
**      All Rights Reserved.
*/

#ifndef MSQL_MSQL_H
#define MSQL_MSQL_H

#ifndef  EXEC_LIBRARIES
#include <exec/libraries.h>
#endif /* EXEC_LIBRARIES_H */

extern struct MsqlConnection;

struct HookMessage
{
	UBYTE id;	/* witch function was called */
	UBYTE type; /* Enter the function or exit it?*/
	struct Task *task;  /* The calling task */

	APTR a0;	/* Register Contents at the function call or return */
	APTR a1;
	APTR a2;

	ULONG d0;
	ULONG d1;
	ULONG d2;
};

#define FCH_ENTER 0
#define FCH_EXIT  1

/* Hook Function id */
#define MFT_AllocConnection			1
#define MFT_FreeConnection			2
#define MFT_GetErrMsg				3
#define MFT_Connect					4
#define MFT_SelectDB				5
#define MFT_Query					6
#define MFT_CreateDB				7
#define MFT_DropDB					8
#define MFT_Shutdown				9
#define MFT_GetProtoInfo			10
#define MFT_ReloadAcls				11
#define MFT_GetServerInfo			12
#define MFT_GetHostInfo				13
#define MFT_Close					14
#define MFT_DataSeek				15
#define MFT_FieldSeek				16
#define MFT_FreeResult				17
#define MFT_FetchRow				18
#define MFT_FetchField				19
#define MFT_ListDBs					20
#define MFT_ListTables				21
#define MFT_ListFields				22
#define MFT_ListIndex				23
#define MFT_StoreResult				24
#define MFT_LoadConfigFile			25
#define MFT_GetIntConfOld			26
#define MFT_GetCharConfOld			27
#define MFT_GetIntConf				28
#define MFT_GetCharConf				29
#define MFT_GetServerStats			30
#define MFT_CopyDB					31
#define MFT_MoveDB					32
#define MFT_UnixTimeToDate			33
#define MFT_UnixTimeToTime			34
#define MFT_GetSequenceInfo			35
#define MFT_DateToUnixTime			36
#define MFT_TimeToUnixTime			37
#define MFT_SumTimes				38
#define MFT_DateOffset				39
#define MFT_DiffTimes				40
#define MFT_DiffDates				41

/* The end of this files comes from the original "msql.h" which is ©1998 David J. Hughes. */

typedef	char	** m_row;

typedef struct field_s {
	char	*name,
		*table;
	int	type,
		length,
		flags;
} m_field;

typedef struct 	m_seq_s {
	int	step,
		value;
} m_seq;


typedef	struct	m_data_s {
	int	width;
	m_row	data;
	struct	m_data_s *next;
} m_data;

typedef struct m_fdata_s {
	m_field	field;
	struct m_fdata_s *next;
} m_fdata;



typedef struct result_s {
        m_data 	*queryData,
                *cursor;
	m_fdata	*fieldData,
		*fieldCursor;
	int	numRows,
		numFields;
} m_result;


#define	MsqlNumRows(res) res->numRows
#define	MsqlNumFields(res) res->numFields

#define INT_TYPE	1
#define CHAR_TYPE	2
#define REAL_TYPE	3
#define IDENT_TYPE	4
#define NULL_TYPE	5
#define TEXT_TYPE	6
#define DATE_TYPE	7
#define UINT_TYPE	8
#define MONEY_TYPE	9
#define TIME_TYPE	10
#define LAST_REAL_TYPE	10
#define IDX_TYPE	253
#define SYSVAR_TYPE	254
#define	ANY_TYPE	255

#define NOT_NULL_FLAG   1
#define UNIQUE_FLAG	2

#define IS_UNIQUE(n)	(n & UNIQUE_FLAG)
#define IS_NOT_NULL(n)	(n & NOT_NULL_FLAG)

static char msqlTypeNames[][12] = 
	{"???", "int", "char","real","ident","null","text","date","uint",
	"money","time","???"};

#endif /* MSQL_MSQL_H */
