/*
 * Modified isql.h file from iodbc. This file should be placed in the
 * include path to be used to create ODBC compliant applications.
 */

#ifndef _INTRINSIC_SQL_H
#define _INTRINSIC_SQL_H

typedef unsigned char UCHAR;
typedef long int SDWORD;
typedef short int SWORD;
typedef unsigned long int UDWORD;
typedef unsigned short int UWORD;

typedef void FAR *PTR;

typedef void FAR *HENV;
typedef void FAR *HDBC;
typedef void FAR *HSTMT;

typedef signed short RETCODE;

#ifdef WIN32
#define SQL_API			 __stdcall
#else
#define SQL_API			 EXPORT CALLBACK
#endif

/*#define ODBCVER		0x0250 */

#define SQL_MAX_MESSAGE_LENGTH			512
#define SQL_MAX_DSN_LENGTH				32

/* return code */
#define SQL_INVALID_HANDLE				(-2)
#define SQL_ERROR						(-1)
#define SQL_SUCCESS						0
#define SQL_SUCCESS_WITH_INFO			1
#define SQL_NO_DATA_FOUND				100

/* standard SQL datatypes (agree with ANSI type numbering) */
#define SQL_CHAR						1
#define SQL_NUMERIC						2
#define SQL_DECIMAL						3
#define SQL_INTEGER						4
#define SQL_SMALLINT					5
#define SQL_FLOAT						6
#define SQL_REAL						7
#define SQL_DOUBLE						8
#define SQL_VARCHAR						12

#define SQL_TYPE_MIN					SQL_CHAR
#define SQL_TYPE_NULL					0
#define SQL_TYPE_MAX					SQL_VARCHAR

/* C to SQL datatype mapping */
#define SQL_C_CHAR						SQL_CHAR
#define SQL_C_LONG						SQL_INTEGER
#define SQL_C_SHORT						SQL_SMALLINT
#define SQL_C_FLOAT						SQL_REAL
#define SQL_C_DOUBLE					SQL_DOUBLE
#define SQL_C_DEFAULT					99

#define SQL_NO_NULLS					0
#define SQL_NULLABLE					1
#define SQL_NULLABLE_UNKNOWN			2

/* some special length values */
#define SQL_NULL_DATA					(-1)
#define SQL_DATA_AT_EXEC				(-2)
#define SQL_NTS							(-3)

/* SQLFreeStmt flag values */
#define SQL_CLOSE						0
#define SQL_DROP						1
#define SQL_UNBIND						2
#define SQL_RESET_PARAMS				3

/* SQLTransact flag values */
#define SQL_COMMIT						0
#define SQL_ROLLBACK					1

/* SQLColAttributes flag values */
#define SQL_COLUMN_COUNT				0
#define SQL_COLUMN_LABEL				18
#define SQL_COLATT_OPT_MAX				SQL_COLUMN_LABEL
#define SQL_COLUMN_DRIVER_START			1000

#define SQL_COLATT_OPT_MIN				SQL_COLUMN_COUNT

/* Null handles */
#define SQL_NULL_HENV					0
#define SQL_NULL_HDBC					0
#define SQL_NULL_HSTMT					0

/* All code below has been added to the original isql.h coming from iodbc */
typedef unsigned char BYTE;

/* More SQLColAttributes flag values */
#define SQL_COLUMN_NAME					1
#define SQL_COLUMN_TYPE					2
#define SQL_COLUMN_LENGTH				3
#define SQL_COLUMN_PRECISION			4
#define SQL_COLUMN_SCALE				5
#define SQL_COLUMN_DISPLAY_SIZE			6
#define SQL_COLUMN_NULLABLE				7
#define SQL_COLUMN_UNSIGNED				8
#define SQL_COLUMN_MONEY				9
#define SQL_COLUMN_UPDATABLE			10
#define SQL_COLUMN_AUTO_INCREMENT		11
#define SQL_COLUMN_CASE_SENSITIVE		12
#define SQL_COLUMN_SEARCHABLE			13
#define SQL_COLUMN_TYPE_NAME			14
#define SQL_COLUMN_TABLE_NAME			15
#define SQL_COLUMN_OWNER_NAME			16
#define SQL_COLUMN_QUALIFIER_NAME		17

/* SQLColAttributes Searchable flags */
#define SQL_UNSEARCHABLE				0
#define SQL_LIKE_ONLY					1
#define SQL_ALL_EXCEPT_LIKE				2
#define SQL_SEARCHABLE					3
#define SQL_PRED_SEARCHABLE				SQL_SEARCHABLE

/* SQLColAttributes Updateable flags */
#define SQL_ATTR_READONLY				0
#define SQL_ATTR_WRITE					1
#define SQL_ATTR_READWRITE_UNKNOWN		2

/*
 *	function prototypes previously not contained in isql.h
 */
#ifdef __cplusplus
extern		"C"
{
#endif

	RETCODE SQL_API SQLAllocConnect(HENV henv,
												HDBC FAR *phdbc);
	RETCODE SQL_API SQLAllocEnv(HENV FAR *phenv);
	RETCODE SQL_API SQLAllocStmt(HDBC hdbc,
											 HSTMT FAR *phstmt);
	RETCODE SQL_API SQLBindCol(HSTMT hstmt,
										   UWORD icol,
										   SWORD fCType,
										   PTR rgbValue,
										   SDWORD cbValueMax,
										   SDWORD FAR *pcbValue);

	RETCODE SQL_API SQLCancel(HSTMT hstmt);

	RETCODE SQL_API SQLColAttributes(HSTMT hstmt,
												 UWORD icol,
												 UWORD fDescType,
												 PTR rgbDesc,
												 SWORD cbDescMax,
												 SWORD FAR *pcbDesc,
												 SDWORD FAR *pfDesc);

	RETCODE SQL_API SQLConnect(HDBC hdbc,
										   UCHAR FAR *szDSN,
										   SWORD cbDSN,
										   UCHAR FAR *szUID,
										   SWORD cbUID,
										   UCHAR FAR *szAuthStr,
										   SWORD cbAuthStr);

	RETCODE SQL_API SQLDescribeCol(HSTMT hstmt,
											   UWORD icol,
											   UCHAR FAR *szColName,
											   SWORD cbColNameMax,
											   SWORD FAR *pcbColName,
											   SWORD FAR *pfSqlType,
											   UDWORD FAR *pcbColDef,
											   SWORD FAR *pibScale,
											   SWORD FAR *pfNullable);

	RETCODE SQL_API SQLDisconnect(HDBC hdbc);

	RETCODE SQL_API SQLError(HENV henv,
										 HDBC hdbc,
										 HSTMT hstmt,
										 UCHAR FAR *szSqlState,
										 SDWORD FAR *pfNativeError,
										 UCHAR FAR *szErrorMsg,
										 SWORD cbErrorMsgMax,
										 SWORD FAR *pcbErrorMsg);

	RETCODE SQL_API SQLExecDirect(HSTMT hstmt,
											  UCHAR FAR *szSqlStr,
											  SDWORD cbSqlStr);

	RETCODE SQL_API SQLExecute(HSTMT hstmt);

	RETCODE SQL_API SQLFetch(HSTMT hstmt);

	RETCODE SQL_API SQLFreeConnect(HDBC hdbc);

	RETCODE SQL_API SQLFreeEnv(HENV henv);

	RETCODE SQL_API SQLFreeStmt(HSTMT hstmt,
											UWORD fOption);

	RETCODE SQL_API SQLGetCursorName(HSTMT hstmt,
												 UCHAR FAR *szCursor,
												 SWORD cbCursorMax,
												 SWORD FAR *pcbCursor);

	RETCODE SQL_API SQLNumResultCols(HSTMT hstmt,
												 SWORD FAR *pccol);

	RETCODE SQL_API SQLPrepare(HSTMT hstmt,
										   UCHAR FAR *szSqlStr,
										   SDWORD cbSqlStr);

	RETCODE SQL_API SQLRowCount(HSTMT hstmt,
											SDWORD FAR *pcrow);

	RETCODE SQL_API SQLSetCursorName(HSTMT hstmt,
												 UCHAR FAR *szCursor,
												 SWORD cbCursor);

	RETCODE SQL_API SQLTransact(HENV henv,
											HDBC hdbc,
											UWORD fType);

	RETCODE SQL_API SQLSetParam(HSTMT hstmt,
											UWORD ipar,
											SWORD fCType,
											SWORD fSqlType,
											UDWORD cbColDef,
											SWORD ibScale,
											PTR rgbValue,
											SDWORD FAR *pcbValue);

#ifdef __cplusplus
}

#endif
#endif
