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