//-----------------------------------------------------------------------------
// File:            DPIext.h
//
// Copyright:       Copyright (c) DM Corporation          
//
// Contents:        This is the include for applications using the DM SQL Extensions
//
// Comments:
//
//-----------------------------------------------------------------------------
#ifndef _DPIEXT_H
#define _DPIEXT_H

#ifndef _DPI_H
#include "DPI.h"
#endif

#ifdef __cplusplus
extern "C" {                         /* Assume C declarations for C++ */
#endif  /* __cplusplus */

/* env attribute and con attribute*/
#define DSQL_ATTR_LOCAL_CODE                12345
#define DSQL_ATTR_LANG_ID                   12346
#define DSQL_ATTR_CONNECTION_POOLING        12347
#define DSQL_ATTR_TIME_ZONE                 12348
#define DSQL_ATTR_CON_CACHE_SZ              12349
#define DSQL_ATTR_DEC2DOUB_CNVT             12350
#define DSQL_ATTR_CHAR_CHECK                12351
#define DSQL_ATTR_CHAR_TRUNC                12352
#define DSQL_ATTR_FNUM2CHAR_MODE            12353

/*DSQL_ATTR_FNUM2CHAR_MODE options*/
#define DSQL_FNUM2CHAR_MODE_0               0
#define DSQL_FNUM2CHAR_MODE_1               1

/* values for DSQL_ATTR_LOCAL_CODE */
#define  PG_UTF8                            1
#define  PG_GBK                             2
#define  PG_BIG5                            3
#define  PG_ISO_8859_9                      4
#define  PG_EUC_JP                          5
#define  PG_EUC_KR                          6
#define  PG_KOI8R                           7
#define  PG_ISO_8859_1                      8
#define  PG_SQL_ASCII                       9
#define  PG_GB18030                         10
#define  PG_ISO_8859_11                     11
    
/* values for DSQL_ATTR_LANG_ID */
#define LANGUAGE_CN                         0
#define LANGUAGE_EN                         1
#define LANGUAGE_CNT_HK                     2

/* default value*/
#define DSQL_DEAFAULT_TCPIP_PORT            5236

/* connection attributes */
#define DSQL_ATTR_ACCESS_MODE               101
#define DSQL_ATTR_AUTOCOMMIT                102
#define DSQL_ATTR_CONNECTION_TIMEOUT        113
#define DSQL_ATTR_LOGIN_TIMEOUT             103
#define DSQL_ATTR_PACKET_SIZE               112
#define DSQL_ATTR_TRACE                     104
#define DSQL_ATTR_TRACEFILE                 105
#define DSQL_ATTR_TXN_ISOLATION             108
#define DSQL_ATTR_CURRENT_CATALOG           109
#define DSQL_ATTR_CONNECTION_DEAD           1209
#define DSQL_ATTR_LOGIN_PORT                12350
#define DSQL_ATTR_STR_CASE_SENSITIVE        12351
#define DSQL_ATTR_LOGIN_USER                12352
#define DSQL_ATTR_MAX_ROW_SIZE              12353
#define DSQL_ATTR_CURRENT_SCHEMA            12354
#define DSQL_ATTR_INSTANCE_NAME             12355
#define DSQL_ATTR_LOGIN_SERVER              12356
#define DSQL_ATTR_SERVER_CODE               12349
#define DSQL_ATTR_APP_NAME                  12357
#define DSQL_ATTR_COMPRESS_MSG              12358
#define DSQL_ATTR_USE_STMT_POOL             12359
#define DSQL_ATTR_SERVER_MODE               12360
#define DSQL_ATTR_SERVER_VERSION            12400
#define DSQL_ATTR_SSL_PATH                  12401
#define DSQL_ATTR_SSL_PWD                   12402
#define DSQL_ATTR_MPP_LOGIN                 12403
#define DSQL_ATTR_TRX_STATE                 12404
//ukey-begin
#define DSQL_ATTR_UKEY_NAME                 12405
#define DSQL_ATTR_UKEY_PIN                  12406
//ukey-end
#define DSQL_ATTR_CLIENT_VERSION            12407
#define DSQL_ATTR_RWSEPARATE                12408
#define DSQL_ATTR_RWSEPARATE_PERCENT        12409
#define DSQL_ATTR_CURSOR_ROLLBACK_BEHAVIOR  12410
#define DSQL_ATTR_UDP_FLAG                  12411
#define DSQL_ATTR_OSAUTH_TYPE               12412
#define DSQL_ATTR_INET_TYPE                 12413
#define DSQL_ATTR_DDL_AUTOCOMMIT            12414
#define DSQL_ATTR_LOGIN_CERTIFICATE         12415
#define DSQL_ATTR_LAST_LOGIN_IP             12416
#define DSQL_ATTR_LAST_LOGIN_DT             12417
#define DSQL_ATTR_FAILED_LOGIN_ATTEMPT      12418
#define DSQL_ATTR_PASSWORD_GRACE_TIME       12419
#define DSQL_ATTR_PASSWORD_LIFE_REMAINING   12420
#define DSQL_ATTR_LICENSE_SERIAL            12421
#define DSQL_ATTR_SPACE_TRUNC               12422
#define DSQL_ATTR_ORA_DATE_FMT              12423       //oracle_date_fmt info
#define DSQL_ATTR_COMPATIBLE_MODE           12424
#define DSQL_ATTR_TCNAME_LOWER              12425
#define DSQL_ATTR_SHAKE_CRYPTO              12426
#define DSQL_ATTR_QUOTE_REPLACE             12427
#define DSQL_ATTR_FE_MODE                   12428

/* DSQL_ATTR_COMPATIBLE_MODE options*/
#define DSQL_COMPATIBLE_MODE_DM             0UL
#define DSQL_COMPATIBLE_MODE_ORA            1UL

/* DSQL_ACCESS_MODE options */
#define DSQL_MODE_READ_WRITE                (0UL)
#define DSQL_MODE_READ_ONLY                 (1UL)
#define DSQL_MODE_DEFAULT                   DSQL_MODE_READ_WRITE

/* DSQL_AUTOCOMMIT options */
#define DSQL_AUTOCOMMIT_OFF                 0UL
#define DSQL_AUTOCOMMIT_ON                  1UL
#define DSQL_AUTOCOMMIT_DEFAULT             DSQL_AUTOCOMMIT_ON

#define DSQL_UDP_SINGLE                     1UL
#define DSQL_UDP_MULTI                      2UL
#define DSQL_UDP_DEFAULT                    DSQL_UDP_MULTI

#define DSQL_INET_TCP                       0UL
#define DSQL_INET_UDP                       1UL
#define DSQL_INET_IPC                       2UL
#define DSQL_INET_RDMA                      3UL
#define DSQL_INET_UNIXSOCKET                4UL    //UNIXSOCKET
#define DSQL_INET_DEFAULT                   DSQL_INET_TCP

#define DSQL_RWSEPARATE_OFF                 0UL
#define DSQL_RWSEPARATE_ON                  1UL
#define DSQL_RWSEPARATE_ON2                 4UL
#define DSQL_RWSEPARAT_DEFAULT              DSQL_RWSEPARATE_OFF

/* DSQL_OPT_TRACE options */
#define DSQL_OPT_TRACE_OFF                  0UL
#define DSQL_OPT_TRACE_ON                   1UL
#define DSQL_OPT_TRACE_DEFAULT              DSQL_OPT_TRACE_OFF
#define DSQL_OPT_TRACE_FILE_DEFAULT         "\\DPI.LOG"

/*DSQL_MPP_LOGIN options*/
#define DSQL_MPP_LOGIN_GLOBAL               0
#define DSQL_MPP_LOGIN_LOCAL                1
#define DSQL_MPP_LOGIN_DEFAULT              DSQL_MPP_LOGIN_GLOBAL

/*DSQL_TRX_STATE options*/
#define DSQL_TRX_COMPLETE                   0
#define DSQL_TRX_ACTIVE                     1

/*DSQL_ATTR_CURSOR_ROLLBACK_BEHAVIOR option*/
#define DSQL_CB_CLOSE                       1
#define DSQL_CB_PRESERVE                    2
#define DSQL_CB_DEFALUT                     DSQL_CB_PRESERVE

/* values for DSQL_ATTR_CONNECTION_DEAD */
#define DSQL_CD_TRUE                        1L      /* Connection is closed/dead */
#define DSQL_CD_FALSE                       0L      /* Connection is open/available */

/*DSQL_ATTR_OSAUTH_TYPE option*/
#define DSQL_OSAUTH_OFF                     0
#define DSQL_OSAUTH_DBA                     1
#define DSQL_OSAUTH_SSO                     2
#define DSQL_OSAUTH_AUDITOR                 3
#define DSQL_OSAUTH_AUTOMATCH               4
#define DSQL_OSAUTH_USERS                   5
#define DSQL_OSAUTH_DEFAULT                 DSQL_OSAUTH_OFF

/* values for DSQL_ATTR_LICENSE_SERIAL */
#define DSQL_PERSONAL_SERIES                1
#define DSQL_STANDARD_SERIES                2
#define DSQL_ENTERPRISE_SERIES              3
#define DSQL_CLOUD_SERIES                   4
#define DSQL_SECURITY_SERIES                5
#define DSQL_TRUSTED_SERIES                 6
#define DSQL_DEVELOP_SERIES                 7

/* statement attributes */
#define DSQL_ATTR_ASYNC_ENABLE              4
#define DSQL_ATTR_CONCURRENCY               7
#define DSQL_ATTR_CURSOR_TYPE               6
#define	DSQL_ATTR_ENABLE_AUTO_IPD           15
#define DSQL_ATTR_FETCH_BOOKMARK_PTR        16
#define DSQL_ATTR_KEYSET_SIZE               8
#define DSQL_ATTR_MAX_LENGTH                3
#define DSQL_ATTR_MAX_ROWS                  1
#define DSQL_ATTR_NOSCAN                    2
#define DSQL_ATTR_PARAM_BIND_OFFSET_PTR     17
#define	DSQL_ATTR_PARAM_BIND_TYPE           18
#define DSQL_ATTR_PARAM_OPERATION_PTR       19
#define DSQL_ATTR_PARAM_STATUS_PTR          20
#define	DSQL_ATTR_PARAMS_PROCESSED_PTR      21
#define	DSQL_ATTR_PARAMSET_SIZE             22
#define DSQL_ATTR_QUERY_TIMEOUT             0
#define DSQL_ATTR_RETRIEVE_DATA             11
#define DSQL_ATTR_ROW_BIND_OFFSET_PTR       23
#define	DSQL_ATTR_ROW_BIND_TYPE             5
#define DSQL_ATTR_ROW_NUMBER                14      /*GetStmtAttr*/
#define DSQL_ATTR_ROW_OPERATION_PTR         24
#define	DSQL_ATTR_ROW_STATUS_PTR            25
#define	DSQL_ATTR_ROWS_FETCHED_PTR          26
#define DSQL_ATTR_ROW_ARRAY_SIZE            27
#define DSQL_ATTR_SIMULATE_CURSOR           10
#define DSQL_ATTR_USE_BOOKMARKS             12
#define DSQL_ATTR_ROWSET_SIZE               9

/* COMPLEX TYPE ATTRIBUTE*/
#define DSQL_ATTR_OBJ_TYPE                  1
#define DSQL_ATTR_OBJ_PREC                  2
#define DSQL_ATTR_OBJ_SCALE                 3
#define DSQL_ATTR_OBJ_DESC                  4
#define DSQL_ATTR_OBJ_FIELD_COUNT           5
#define DSQL_ATTR_OBJ_NAME                  6
#define DSQL_ATTR_OBJ_SCHAME                7
#define DSQL_ATTR_OBJ_KEY_TYPE              8    // get index table key_type

/* COMPLEX OBJ ATTRIBUTE*/
#define DSQL_ATTR_OBJ_VAL_COUNT             1

/* the value of DSQL_ATTR_PARAM_BIND_TYPE */
#define DSQL_PARAM_BIND_BY_COLUMN           0UL
#define DSQL_PARAM_BIND_TYPE_DEFAULT        DSQL_PARAM_BIND_BY_COLUMN

/* DSQL_BIND_TYPE options */
#define DSQL_BIND_BY_COLUMN             0UL
#define DSQL_BIND_TYPE_DEFAULT          SQL_BIND_BY_COLUMN  /* Default value */

/* DSQL_CONCURRENCY options */
#define DSQL_CONCUR_READ_ONLY            1
#define DSQL_CONCUR_LOCK                 2
#define DSQL_CONCUR_ROWVER               3
#define DSQL_CONCUR_VALUES               4
#define DSQL_CONCUR_DEFAULT              DSQL_CONCUR_READ_ONLY /* Default value */

/* DSQL_CURSOR_TYPE options */
#define DSQL_CURSOR_FORWARD_ONLY         0UL
#define DSQL_CURSOR_KEYSET_DRIVEN        1UL
#define DSQL_CURSOR_DYNAMIC              2UL
#define DSQL_CURSOR_STATIC               3UL
#define DSQL_CURSOR_TYPE_DEFAULT         DSQL_CURSOR_FORWARD_ONLY /* Default value */

/* DSQL_RETRIEVE_DATA options */
#define DSQL_RD_OFF                      0UL
#define DSQL_RD_ON                       1UL
#define DSQL_RD_DEFAULT                  DSQL_RD_ON

#define DSQL_NOSCAN_OFF                  0UL
#define DSQL_NOSCAN_ON                   1UL
#define DSQL_NOSCAN_DEFAULT              DSQL_NOSCAN_OFF

/* DSQL_USE_BOOKMARKS options */
#define DSQL_UB_OFF                     0UL
#define DSQL_UB_ON                      01UL
#define DSQL_UB_VARIABLE                2UL
#define DSQL_UB_DEFAULT                 DSQL_UB_OFF

/* extended descriptor field */
#define DSQL_DESC_ARRAY_SIZE                    20
#define DSQL_DESC_ARRAY_STATUS_PTR              21
#define DSQL_DESC_AUTO_UNIQUE_VALUE             DSQL_COLUMN_AUTO_INCREMENT
#define DSQL_DESC_BASE_COLUMN_NAME              22
#define DSQL_DESC_BASE_TABLE_NAME               23
#define DSQL_DESC_BIND_OFFSET_PTR               24
#define DSQL_DESC_BIND_TYPE                     25
#define DSQL_DESC_CASE_SENSITIVE                DSQL_COLUMN_CASE_SENSITIVE
#define DSQL_DESC_CATALOG_NAME                  DSQL_COLUMN_QUALIFIER_NAME
#define DSQL_DESC_CONCISE_TYPE                  DSQL_COLUMN_TYPE
#define DSQL_DESC_DATETIME_INTERVAL_PRECISION   26
#define DSQL_DESC_DISPLAY_SIZE                  DSQL_COLUMN_DISPLAY_SIZE
#define DSQL_DESC_FIXED_PREC_SCALE              DSQL_COLUMN_MONEY
#define DSQL_DESC_LABEL                         DSQL_COLUMN_LABEL
#define DSQL_DESC_LITERAL_PREFIX                27
#define DSQL_DESC_LITERAL_SUFFIX                28
#define DSQL_DESC_LOCAL_TYPE_NAME               29
#define	DSQL_DESC_MAXIMUM_SCALE                 30
#define DSQL_DESC_MINIMUM_SCALE                 31
#define DSQL_DESC_NUM_PREC_RADIX                32
#define DSQL_DESC_PARAMETER_TYPE                33          //the server in out type
#define DSQL_DESC_ROWS_PROCESSED_PTR            34
#define DSQL_DESC_ROWVER                        35
#define DSQL_DESC_SCHEMA_NAME                   DSQL_COLUMN_OWNER_NAME
#define DSQL_DESC_SEARCHABLE                    DSQL_COLUMN_SEARCHABLE
#define DSQL_DESC_TYPE_NAME                     DSQL_COLUMN_TYPE_NAME
#define DSQL_DESC_TABLE_NAME                    DSQL_COLUMN_TABLE_NAME
#define DSQL_DESC_UNSIGNED                      DSQL_COLUMN_UNSIGNED
#define DSQL_DESC_UPDATABLE                     DSQL_COLUMN_UPDATABLE
#define DSQL_DESC_DATETIME_FORMAT               1000
#define DSQL_DESC_OBJ_DESCRIPTOR                10001
#define DSQL_DESC_CHARSET                       10002
#define DSQL_DESC_BIND_PARAMETER_TYPE           10003       //the bind in out type,in default
#define DSQL_DESC_IND_BIND_TYPE                 10004
#define DSQL_DESC_OBJ_CLASSID                   10005
#define DSQL_DESC_FENC                          10006
#define DSQL_DESC_PARAM_AFFECT_ROWS_PTR         10007
#define DSQL_DESC_CHAR_FLAG                     10008
#define DSQL_DESC_CHAR_SIZE                     10009
#define DSQL_DESC_DATETIME_TZ_FORMAT            10010

#define DSQL_DESC_OBJ_DESCRIPTOR2               30001

#define DSQL_DT                         50
#define DSQL_INTERVAL                   51
/* DSQL date/time type subcodes */
#define DSQL_CODE_DATE                  1
#define DSQL_CODE_TIME                  2
#define DSQL_CODE_TIMESTAMP             3
/* DSQL interval type subcodes */
#define DSQL_CODE_YEAR                  1
#define DSQL_CODE_MONTH                 2
#define DSQL_CODE_DAY                   3
#define DSQL_CODE_HOUR                  4
#define DSQL_CODE_MINUTE                5
#define DSQL_CODE_SECOND                6
#define DSQL_CODE_YEAR_TO_MONTH         7
#define DSQL_CODE_DAY_TO_HOUR           8
#define DSQL_CODE_DAY_TO_MINUTE         9
#define DSQL_CODE_DAY_TO_SECOND         10
#define DSQL_CODE_HOUR_TO_MINUTE        11
#define DSQL_CODE_HOUR_TO_SECOND        12
#define DSQL_CODE_MINUTE_TO_SECOND      13

/* define for SQL_DIAG_ROW_NUMBER and SQL_DIAG_COLUMN_NUMBER */
#define DSQL_NO_ROW_NUMBER                      (-1)
#define DSQL_NO_COLUMN_NUMBER                   (-1)
#define DSQL_ROW_NUMBER_UNKNOWN                 (-2)
#define DSQL_COLUMN_NUMBER_UNKNOWN              (-2)

#define DSQL_LEN_DATA_AT_EXEC_OFFSET  (-100)
#define DSQL_LEN_DATA_AT_EXEC(length) (-(length)+DSQL_LEN_DATA_AT_EXEC_OFFSET)

/* dpi_col_attr defines */
#define DSQL_COLUMN_COUNT                0
#define DSQL_COLUMN_NAME                 1
#define DSQL_COLUMN_TYPE                 2
#define DSQL_COLUMN_LENGTH               3
#define DSQL_COLUMN_PRECISION            4
#define DSQL_COLUMN_SCALE                5
#define DSQL_COLUMN_DISPLAY_SIZE         6
#define DSQL_COLUMN_NULLABLE             7
#define DSQL_COLUMN_UNSIGNED             8
#define DSQL_COLUMN_MONEY                9
#define DSQL_COLUMN_UPDATABLE            10
#define DSQL_COLUMN_AUTO_INCREMENT       11
#define DSQL_COLUMN_CASE_SENSITIVE       12
#define DSQL_COLUMN_SEARCHABLE           13
#define DSQL_COLUMN_TYPE_NAME            14
#define DSQL_COLUMN_TABLE_NAME           15
#define DSQL_COLUMN_OWNER_NAME           16
#define DSQL_COLUMN_QUALIFIER_NAME       17
#define DSQL_COLUMN_LABEL                18
#define DSQL_COLATT_OPT_MAX              DSQL_COLUMN_LABEL

/* dpi_col_attr subdefines for DSQL_COLUMN_UPDATABLE */
#define DSQL_ATTR_READONLY               0
#define DSQL_ATTR_WRITE                  1
#define DSQL_ATTR_READWRITE_UNKNOWN      2

/* Operations in dpi_set_pos */
#define DSQL_POSITION                   0
#define DSQL_REFRESH                    1
#define DSQL_UPDATE                     2
#define DSQL_DELETE                     3

/* Operations in dpi_bulk_operation */
#define DSQL_ADD                        4
#define DSQL_SETPOS_MAX_OPTION_VALUE    DSQL_ADD

#define DSQL_UPDATE_BY_BOOKMARK         5
#define DSQL_DELETE_BY_BOOKMARK         6
#define DSQL_FETCH_BY_BOOKMARK          7

/* Lock options in dpi_set_pos */
#define DSQL_LOCK_NO_CHANGE             0
#define DSQL_LOCK_EXCLUSIVE             1
#define DSQL_LOCK_UNLOCK                2

#define DSQL_SETPOS_MAX_LOCK_VALUE      DSQL_LOCK_UNLOCK

#define DSQL_ROW_SUCCESS                0
#define DSQL_ROW_DELETED                1
#define DSQL_ROW_UPDATED                2
#define DSQL_ROW_NOROW                  3
#define DSQL_ROW_ADDED                  4
#define DSQL_ROW_ERROR                  5
#define DSQL_ROW_SUCCESS_WITH_INFO      6

/*Row operation values*/
#define DSQL_ROW_PROCEED                0
#define DSQL_ROW_IGNORE                 1

/* value for DSQL_DESC_ARRAY_STATUS_PTR */
#define DSQL_PARAM_SUCCESS              0
#define DSQL_PARAM_SUCCESS_WITH_INFO    6
#define DSQL_PARAM_ERROR                5
#define DSQL_PARAM_UNUSED               7
#define DSQL_PARAM_DIAG_UNAVAILABLE     1

#define DSQL_PARAM_PROCEED              0
#define DSQL_PARAM_IGNORE               1

/* Defines for dpi_bind_param */
#define DSQL_PARAM_TYPE_UNKNOWN             0
#define DSQL_PARAM_INPUT                    1
#define DSQL_PARAM_INPUT_OUTPUT             2
#define DSQL_PARAM_OUTPUT                   4
#define DSQL_PARAM_INPUT_OUTPUT_STREAM      8
#define DSQL_PARAM_OUTPUT_STREAM            16

#ifdef __cplusplus
}                                     /* End of extern "C" { */
#endif  /* __cplusplus */

#endif /* _DPIEXT_H */