/*
 *  iodbcext.h
 *
 *  $Id$
 *
 *  iODBC extensions and changes to the SAG specifications
 *  for third party drivers
 *
 *  The iODBC driver manager.
 *
 *  Copyright (C) 1996-2023 OpenLink Software <iodbc@openlinksw.com>
 *  All Rights Reserved.
 *
 *  This software is released under the terms of either of the following
 *  licenses:
 *
 *      - GNU Library General Public License (see LICENSE.LGPL)
 *      - The BSD License (see LICENSE.BSD).
 *
 *  Note that the only valid version of the LGPL license as far as this
 *  project is concerned is the original GNU Library General Public License
 *  Version 2, dated June 1991.
 *
 *  While not mandated by the BSD license, any patches you make to the
 *  iODBC source code may be contributed back into the iODBC project
 *  at your discretion. Contributions will benefit the Open Source and
 *  Data Access community as a whole. Submissions may be made at:
 *
 *      http://www.iodbc.org
 *
 *
 *  GNU Library Generic Public License Version 2
 *  ============================================
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; only
 *  Version 2 of the License dated June 1991.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public
 *  License along with this library; if not, write to the Free
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *
 *  The BSD License
 *  ===============
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *  3. Neither the name of OpenLink Software Inc. nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR
 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#ifndef _IODBCEXT_H
#define _IODBCEXT_H


/*
 * OpenLink API Extensions
 */
#define SQL_GETLASTROWID		1048L
#define SQL_GETLASTSERIAL		1049L
#define SQL_CONCUR_VAL_EXTENT		1050L
#define SQL_APPLICATION_NAME		1051L /* connect option */
#define SQL_PARSE_FWD_ONLY_REQ		1052L
#define SQL_DESC_KEY			1053L
#define SQL_APPEND_KEYS			1054L
#define SQL_DESC_EXPR			1055L
#define SQL_ATTR_WCHAR_SIZE		1056L

#define SQL_COLUMN_ROWVER 		SQL_DESC_ROWVER
#define SQL_COLUMN_KEY 			SQL_DESC_KEY
#define SQL_COLUMN_EXPR			SQL_DESC_EXPR
#define SQL_ATTR_PARSE_FWD_ONLY_REQ  	SQL_PARSE_FWD_ONLY_REQ
#define SQL_ATTR_APPEND_KEYS            SQL_APPEND_KEYS


/*
 *  Microsoft extensions for SQLServer
 */

/*
 *  SQLSetConnectOption/SQLSetStmtOption driver specific defines.
 *  Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server 
 *  driver usage.
 */
#define SQL_ATTR_ENLIST_IN_DTC		1207
#define SQL_ATTR_ENLIST_IN_XA		1208
#define SQL_ATTR_CONNECTION_DEAD	1209	/* GetConnectAttr only */
#define SQL_COPT_SS_BASE		1200
#define SQL_COPT_SS_REMOTE_PWD		(SQL_COPT_SS_BASE+1) /* dbrpwset SQLSetConnectOption only */
#define SQL_COPT_SS_USE_PROC_FOR_PREP	(SQL_COPT_SS_BASE+2) /* Use create proc for SQLPrepare */
#define SQL_COPT_SS_INTEGRATED_SECURITY	(SQL_COPT_SS_BASE+3) /* Force integrated security on login */
#define SQL_COPT_SS_PRESERVE_CURSORS	(SQL_COPT_SS_BASE+4) /* Preserve server cursors after SQLTransact */
#define SQL_COPT_SS_USER_DATA		(SQL_COPT_SS_BASE+5) /* dbgetuserdata/dbsetuserdata */
#define SQL_COPT_SS_ANSI_OEM		(SQL_COPT_SS_BASE+6) /* dbsetopt/DBANSItoOEM/DBOEMtoANSI */
#define SQL_COPT_SS_ENLIST_IN_DTC	SQL_ATTR_ENLIST_IN_DTC /* Enlist in a DTC transaction */
#define SQL_COPT_SS_ENLIST_IN_XA	SQL_ATTR_ENLIST_IN_XA /* Enlist in a XA transaction */
#define SQL_COPT_SS_CONNECTION_DEAD	SQL_ATTR_CONNECTION_DEAD /* dbdead SQLGetConnectOption only */
#define SQL_COPT_SS_FALLBACK_CONNECT	(SQL_COPT_SS_BASE+10) /* Enables FallBack connections */
#define SQL_COPT_SS_PERF_DATA		(SQL_COPT_SS_BASE+11) /* Used to access SQL Server ODBC driver performance data */
#define SQL_COPT_SS_PERF_DATA_LOG	(SQL_COPT_SS_BASE+12) /* Used to set the logfile name for the Performance data */
#define SQL_COPT_SS_PERF_QUERY_INTERVAL (SQL_COPT_SS_BASE+13) /* Used to set the query logging threshold in milliseconds. */
#define SQL_COPT_SS_PERF_QUERY_LOG	(SQL_COPT_SS_BASE+14) /* Used to set the logfile name for saving queries. */
#define SQL_COPT_SS_PERF_QUERY		(SQL_COPT_SS_BASE+15) /* Used to start and stop query logging. */
#define SQL_COPT_SS_PERF_DATA_LOG_NOW	(SQL_COPT_SS_BASE+16) /* Used to make a statistics log entry to disk. */
#define SQL_COPT_SS_QUOTED_IDENT	(SQL_COPT_SS_BASE+17) /* Enable/Disable Quoted Identifiers */
#define SQL_COPT_SS_ANSI_NPW		(SQL_COPT_SS_BASE+18) /* Enable/Disable ANSI NULL, Padding and Warnings */
#define SQL_COPT_SS_BCP			(SQL_COPT_SS_BASE+19) /* Allow BCP usage on connection */

#define SQL_COPT_SS_MAX_USED		SQL_COPT_SS_BCP

#define SQL_SOPT_SS_BASE		1225
#define SQL_SOPT_SS_TEXTPTR_LOGGING	(SQL_SOPT_SS_BASE+0) /* Text pointer logging */
#define SQL_SOPT_SS_CURRENT_COMMAND	(SQL_SOPT_SS_BASE+1) /* dbcurcmd SQLGetStmtOption only */
#define SQL_SOPT_SS_HIDDEN_COLUMNS	(SQL_SOPT_SS_BASE+2) /* Expose FOR BROWSE hidden columns */
#define SQL_SOPT_SS_NOBROWSETABLE	(SQL_SOPT_SS_BASE+3) /* Set NOBROWSETABLE option */
#define SQL_SOPT_SS_REGIONALIZE		(SQL_SOPT_SS_BASE+4) /* Regionalize output character conversions */
#define SQL_SOPT_SS_MAX_USED		SQL_SOPT_SS_REGIONALIZE


/* Defines for use with SQL_COPT_SS_USE_PROC_FOR_PREP */
#define SQL_UP_OFF		0L	/*Procedures won't be used for prepare*/
#define SQL_UP_ON		1L	/*Procedures will be used for prepare*/
#define SQL_UP_ON_DROP	2L		/*Temp procedures will be explicitly dropped*/
#define SQL_UP_DEFAULT	SQL_UP_ON

/* Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only */
#define SQL_IS_OFF		0L	/* Integrated security isn't used */
#define SQL_IS_ON		1L	/* Integrated security is used */
#define SQL_IS_DEFAULT	SQL_IS_OFF

/*	Defines for use with SQL_COPT_SS_PRESERVE_CURSORS */
#define SQL_PC_OFF		0L	/* Cursors are closed on SQLTransact */
#define SQL_PC_ON		1L	/* Cursors remain open on SQLTransact */
#define SQL_PC_DEFAULT	SQL_PC_OFF

/* Defines for use with SQL_COPT_SS_USER_DATA */
#define SQL_UD_NOTSET	NULL		/* No user data pointer set */

/* Defines for use with SQL_COPT_SS_ANSI_OEM */
#define SQL_AO_OFF		0L	/* ANSI/OEM translation is not performed */
#define SQL_AO_ON		1L	/* ANSI/OEM translation is performed */
#define SQL_AO_DEFAULT	SQL_AO_OFF	/* Default unless DSN OEM/ANSI checkbox is checked */

/* Defines for use with SQL_COPT_SS_FALLBACK_CONNECT */
#define SQL_FB_OFF		0L	/* FallBack connections are disabled */
#define SQL_FB_ON		1L	/* FallBack connections are enabled */
#define SQL_FB_DEFAULT	SQL_FB_OFF

/* Defines for use with SQL_COPT_SS_BCP */
#define SQL_BCP_OFF		0L	/* BCP is not allowed on connection */
#define SQL_BCP_ON		1L	/* BCP is allowed on connection */
#define SQL_BCP_DEFAULT	SQL_BCP_OFF

/* Defines for use with SQL_COPT_SS_QUOTED_IDENT - Pre-Connect Option only */
#define SQL_QI_OFF		0L	/* Quoted identifiers are not supported */
#define SQL_QI_ON		1L	/* Quoted identifiers are supported */
#define SQL_QI_DEFAULT	SQL_QI_ON

/* Defines for use with SQL_COPT_SS_ANSI_NPW - Pre-Connect Option only */
#define SQL_AD_OFF		0L	/* ANSI NULLs, Padding and Warnings are not supported */
#define SQL_AD_ON		1L	/* ANSI NULLs, Padding and Warnings are supported */
#define SQL_AD_DEFAULT	SQL_AD_ON


/* Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING */
#define SQL_TL_OFF		0L	/* No logging on text pointer ops */
#define SQL_TL_ON		1L	/* Logging occurs on text pointer ops */
#define SQL_TL_DEFAULT	SQL_TL_ON

/* Defines for use with SQL_SOPT_SS_HIDDEN_COLUMNS */
#define SQL_HC_OFF		0L	/* FOR BROWSE columns are hidden */
#define SQL_HC_ON		1L	/* FOR BROWSE columns are exposed */
#define SQL_HC_DEFAULT	SQL_HC_OFF

/* Defines for use with SQL_SOPT_SS_NOBROWSETABLE */
#define SQL_NB_OFF		0L	/* NO_BROWSETABLE is off */
#define SQL_NB_ON		1L	/* NO_BROWSETABLE is on */
#define SQL_NB_DEFAULT	SQL_NB_OFF

/* Defines for use with SQL_SOPT_SS_REGIONALIZE */
#define SQL_RE_OFF		0L	/* No regionalization occurs on output character conversions */
#define SQL_RE_ON		1L	/* Regionalization occurs on output character conversions */
#define SQL_RE_DEFAULT	SQL_RE_OFF


#define SQL_ATTR_APP_WCHAR_TYPE		      1061

#define SQL_ATTR_APP_UNICODE_TYPE             1064
#define SQL_ATTR_DRIVER_UNICODE_TYPE          1065

#define SQL_DM_CP_UTF16			1
#define SQL_DM_CP_UTF8			2
#define SQL_DM_CP_UCS4			3

#if defined(SIZEOF_WCHAR)
# if (SIZEOF_WCHAR == 2)
#  define SQL_DM_CP_DEF  SQL_DM_CP_UTF16
# else
#  define SQL_DM_CP_DEF  SQL_DM_CP_UCS4
# endif
#else
# define SQL_DM_CP_DEF  SQL_DM_CP_UCS4
#endif

/* DataDirect options for Connection/Env Attributes. */
#define SQL_DD_CP_ANSI				0 
#define SQL_DD_CP_UCS2				SQL_DM_CP_UTF16
#define SQL_DD_CP_UTF8				SQL_DM_CP_UTF8
#define SQL_DD_CP_UTF16				SQL_DD_CP_UCS2


/*
 * IBM extensions for DB2
 */

/* Options for SQLGetStmtOption/SQLSetStmtOption extensions */
#define  SQL_CURSOR_HOLD              1250
#define  SQL_ATTR_CURSOR_HOLD         1250
#define  SQL_NODESCRIBE_OUTPUT        1251
#define  SQL_ATTR_NODESCRIBE_OUTPUT   1251
#define  SQL_NODESCRIBE_INPUT         1264
#define  SQL_ATTR_NODESCRIBE_INPUT    1264
#define  SQL_NODESCRIBE               SQL_NODESCRIBE_OUTPUT
#define  SQL_ATTR_NODESCRIBE          SQL_NODESCRIBE_OUTPUT
#define  SQL_CLOSE_BEHAVIOR           1257
#define  SQL_ATTR_CLOSE_BEHAVIOR      1257
#define  SQL_ATTR_CLOSEOPEN           1265
#define  SQL_ATTR_CURRENT_PACKAGE_SET 1276
#define  SQL_ATTR_DEFERRED_PREPARE    1277
#define  SQL_ATTR_EARLYCLOSE          1268
#define  SQL_ATTR_PROCESSCTL          1278

/* SQL_CLOSE_BEHAVIOR values.                  */
#define SQL_CC_NO_RELEASE             0
#define SQL_CC_RELEASE                1
#define SQL_CC_DEFAULT                SQL_CC_NO_RELEASE

/* SQL_ATTR_DEFERRED_PREPARE values  */
#define SQL_DEFERRED_PREPARE_ON       1
#define SQL_DEFERRED_PREPARE_OFF      0
#define SQL_DEFERRED_PREPARE_DEFAULT  SQL_DEFERRED_PREPARE_ON

/* SQL_ATTR_EARLYCLOSE values  */
#define SQL_EARLYCLOSE_ON             1
#define SQL_EARLYCLOSE_OFF            0
#define SQL_EARLYCLOSE_DEFAULT        SQL_EARLYCLOSE_ON

/* SQL_ATTR_PROCESSCTL masks  */
#define SQL_PROCESSCTL_NOTHREAD       0x00000001L
#define SQL_PROCESSCTL_NOFORK         0x00000002L

/* Options for SQL_CURSOR_HOLD */
#define SQL_CURSOR_HOLD_ON        1
#define SQL_CURSOR_HOLD_OFF       0
#define SQL_CURSOR_HOLD_DEFAULT   SQL_CURSOR_HOLD_ON

/* Options for SQL_NODESCRIBE_INPUT/SQL_NODESCRIBE_OUTPUT */
#define SQL_NODESCRIBE_ON          1
#define SQL_NODESCRIBE_OFF         0
#define SQL_NODESCRIBE_DEFAULT     SQL_NODESCRIBE_OFF

/* Options for SQLGetConnectOption/SQLSetConnectOption extensions */
#define SQL_WCHARTYPE                1252
#define SQL_LONGDATA_COMPAT          1253
#define SQL_CURRENT_SCHEMA           1254
#define SQL_DB2EXPLAIN               1258
#define SQL_DB2ESTIMATE              1259
#define SQL_PARAMOPT_ATOMIC          1260
#define SQL_STMTTXN_ISOLATION        1261
#define SQL_MAXCONN                  1262
#define SQL_ATTR_WCHARTYPE          SQL_WCHARTYPE
#define SQL_ATTR_LONGDATA_COMPAT    SQL_LONGDATA_COMPAT
#define SQL_ATTR_CURRENT_SCHEMA     SQL_CURRENT_SCHEMA
#define SQL_ATTR_DB2EXPLAIN         SQL_DB2EXPLAIN
#define SQL_ATTR_DB2ESTIMATE        SQL_DB2ESTIMATE
#define SQL_ATTR_PARAMOPT_ATOMIC    SQL_PARAMOPT_ATOMIC
#define SQL_ATTR_STMTTXN_ISOLATION  SQL_STMTTXN_ISOLATION
#define SQL_ATTR_MAXCONN            SQL_MAXCONN

/* Options for SQLSetConnectOption, SQLSetEnvAttr */
#define SQL_CONNECTTYPE              1255
#define SQL_SYNC_POINT               1256
#define SQL_MINMEMORY_USAGE          1263
#define SQL_CONN_CONTEXT             1269
#define SQL_ATTR_INHERIT_NULL_CONNECT    1270
#define SQL_ATTR_FORCE_CONVERSION_ON_CLIENT 1275
#define SQL_ATTR_CONNECTTYPE         SQL_CONNECTTYPE
#define SQL_ATTR_SYNC_POINT          SQL_SYNC_POINT
#define SQL_ATTR_MINMEMORY_USAGE     SQL_MINMEMORY_USAGE
#define SQL_ATTR_CONN_CONTEXT        SQL_CONN_CONTEXT

/* Options for SQL_LONGDATA_COMPAT */
#define SQL_LD_COMPAT_YES            1
#define SQL_LD_COMPAT_NO             0
#define SQL_LD_COMPAT_DEFAULT        SQL_LD_COMPAT_NO

/*  Options for SQL_PARAMOPT_ATOMIC */
#define SQL_ATOMIC_YES               1
#define SQL_ATOMIC_NO                0
#define SQL_ATOMIC_DEFAULT           SQL_ATOMIC_YES

/* Options for SQL_CONNECT_TYPE */
#define SQL_CONCURRENT_TRANS         1
#define SQL_COORDINATED_TRANS        2
#define SQL_CONNECTTYPE_DEFAULT      SQL_CONCURRENT_TRANS

/* Options for SQL_SYNCPOINT */
#define SQL_ONEPHASE                 1
#define SQL_TWOPHASE                 2
#define SQL_SYNCPOINT_DEFAULT        SQL_ONEPHASE

/* Options for SQL_DB2ESTIMATE */
#define SQL_DB2ESTIMATE_ON           1
#define SQL_DB2ESTIMATE_OFF          0
#define SQL_DB2ESTIMATE_DEFAULT      SQL_DB2ESTIMATE_OFF

/* Options for SQL_DB2EXPLAIN */
#define SQL_DB2EXPLAIN_OFF              0x00000000L
#define SQL_DB2EXPLAIN_SNAPSHOT_ON      0x00000001L
#define SQL_DB2EXPLAIN_MODE_ON          0x00000002L
#define SQL_DB2EXPLAIN_SNAPSHOT_MODE_ON SQL_DB2EXPLAIN_SNAPSHOT_ON+SQL_DB2EXPLAIN_MODE_ON
#define SQL_DB2EXPLAIN_ON               SQL_DB2EXPLAIN_SNAPSHOT_ON
#define SQL_DB2EXPLAIN_DEFAULT          SQL_DB2EXPLAIN_OFF

/* Options for SQL_WCHARTYPE
 * Note that you can only specify SQL_WCHARTYPE_CONVERT if you have an
 * external compile flag SQL_WCHART_CONVERT defined
 */
#ifdef SQL_WCHART_CONVERT
#define SQL_WCHARTYPE_CONVERT        1
#endif
#define SQL_WCHARTYPE_NOCONVERT      0
#define SQL_WCHARTYPE_DEFAULT        SQL_WCHARTYPE_NOCONVERT


/******************* Virtuoso ODBC Extensions *******************/

/*
 *  ODBC extensions for SQLGetDescField
 */
#define SQL_DESC_COL_DV_TYPE		1057L
#define SQL_DESC_COL_DT_DT_TYPE		1058L
#define SQL_DESC_COL_LITERAL_ATTR	1059L
#define SQL_DESC_COL_BOX_FLAGS		1060L
#define SQL_DESC_COL_LITERAL_LANG	1061L
#define SQL_DESC_COL_LITERAL_TYPE	1062L


/*
 *  Virtuoso - ODBC SQL_DESC_COL_DV_TYPE
 */
#define VIRTUOSO_DV_DATE		129
#define VIRTUOSO_DV_DATETIME		211
#define VIRTUOSO_DV_DOUBLE_FLOAT	191
#define VIRTUOSO_DV_IRI_ID		243
#define VIRTUOSO_DV_LONG_INT		189
#define VIRTUOSO_DV_NUMERIC		219
#define VIRTUOSO_DV_RDF			246
#define VIRTUOSO_DV_SINGLE_FLOAT	190
#define VIRTUOSO_DV_STRING		182
#define VIRTUOSO_DV_TIME		210
#define VIRTUOSO_DV_TIMESTAMP		128
#define VIRTUOSO_DV_TIMESTAMP_OBJ	208


/*
 *  Virtuoso - ODBC SQL_DESC_COL_DT_DT_TYPE
 */
#define VIRTUOSO_DT_TYPE_DATETIME	1
#define VIRTUOSO_DT_TYPE_DATE		2
#define VIRTUOSO_DT_TYPE_TIME		3

#endif /* _IODBCEXT_H */
