blob: ab344dfd0f784f65581f018d3c23572e195f9134 [file] [log] [blame]
/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
********************************************************************/
/**************************************************************************
**************************************************************************/
#ifndef _SRVRCOMMON_DEFINED
#define _SRVRCOMMON_DEFINED
#include <platform_ndcs.h>
#include "Global.h"
#include "sqlcli.h"
#include "DrvrSrvr.h"
#include "odbcCommon.h"
#include "odbcsrvrcommon.h"
#include "odbc_sv.h"
#include "odbcMxSecurity.h"
#include "odbcas_cl.h"
#include "srvrfunctions.h"
#include "CSrvrStmt.h"
struct SRVR_STMT_HDL_LIST {
SRVR_STMT_HDL *pSrvrStmt;
struct SRVR_STMT_HDL_LIST *next;
struct SRVR_STMT_HDL_LIST *pre;
};
struct SRVR_SESSION_HDL {
SRVR_STMT_HDL_LIST *pSrvrStmtListHead;
SRVR_STMT_HDL *pCurrentSrvrStmt;
Int32 count;
};
// Following are the global variables
#define NO_OF_DESC_ITEMS 15
#define TIMEBUFSIZE 22 //" [2008-04-21 11:23:59]"
// Note that space for '\0' is not considered here. This buffer will be strcat'ed with another null terminated
// buffer, and hence the space for '\0' will be available from that buffer.
extern SRVR_SESSION_HDL *pSrvrSession; // Allocation at the time of ImplInit if it is not allocated
// already
extern SRVR_GLOBAL_Def *srvrGlobal;
extern Int32 *TestPointArray;
extern SQLMODULE_ID nullModule;
extern SQLDESC_ITEM gDescItems[];
extern char CatalogName[MAX_ANSI_NAME_LEN+1];
extern char SchemaName[MAX_ANSI_NAME_LEN+1];
extern char TableName[MAX_ANSI_NAME_LEN+1];
extern char DescName[MAX_ANSI_NAME_LEN+1];
extern char ColumnHeading[MAX_ANSI_NAME_LEN+1];
// Added for exit on SQL un-recoverable errors - Tharak
extern Int32 sqlErrorExit[];
extern short errorIndex;
extern char primaryNodeName[10];
#define NUMERIC_NULL -32767
#define NUMEIRC_NULL_IN_CHAR "-32767"
#define SQL_ACCESSMODE_AND_ISOLATION 191 //Arvind
// Function Prototypes
namespace SRVR {
void allocSrvrSessionHdl();
SRVR_STMT_HDL_LIST *allocSrvrStmtHdlList();
SRVR_STMT_HDL *allocSrvrStmtHdl( const IDL_char *stmtLabel
, const char *moduleName
, Int32 moduleVersion
, int64 moduleTimestamp
, const char *inputDescName
, const char *outputDescName
, short sqlStmtType
, short sqlQueryType
, Int32 resultSetIndex = 0
, SQLSTMT_ID *callStmtId = NULL
, Int32 *sqlReturn = NULL
);
void addSrvrStmt(SRVR_STMT_HDL *pSrvrStmt);
extern void allocSrvrSessionHdl();
extern void initSqlCore();
extern void formatQueryStateMsg( char *queryStateMsg
, Int32 retcode
, const char *queryId
, const char *sqlText = NULL
);
extern SRVR_STMT_HDL *getSrvrStmt( const IDL_char *stmtLabel
, BOOL canAddStmt
, const char *moduleName = NULL
, Int32 moduleVersion = SQLCLI_ODBC_MODULE_VERSION
, int64 moduleTimestamp = 0
, const char *inputDescName = NULL
, const char *outputDescName = NULL
, short sqlStmtType = TYPE_UNKNOWN
, short sqlQueryType = SQL_UNKNOWN
, Int32 resultSetIndex = 0
, SQLSTMT_ID *callStmtId = NULL
, Int32 *sqlReturn = NULL
);
extern SRVR_STMT_HDL *getSrvrStmtByCursorName(const IDL_char *stmtLabel,
BOOL canAddStmt);
extern void removeSrvrStmt(SRVR_STMT_HDL *pSrvrStmt);
extern Int32 getAllocLength(Int32 DataType, Int32 Length);
extern void releaseCachedObject(BOOL internalStmt, NDCS_SUBSTATE mx_sub = NDCS_INIT);
extern void convertWildcard(UInt32 metadataId, BOOL isPV, const IDL_char *inName, IDL_char *outName, BOOL isCatalog=FALSE);
extern void convertWildcardNoEsc(UInt32 metadataId, BOOL isPV, const IDL_char *inName, IDL_char *outName, BOOL isCatalog=FALSE);
extern BOOL checkIfWildCard(const IDL_char *inName, IDL_char *outName);
extern short SetAutoCommitOff();
extern short execDirectSQLQuery(SRVR_STMT_HDL *pSrvrStmt, char *pSqlStr,
odbc_SQLSvc_ExecuteN_exc_ *executeException);
// The following two function protoypes are placed here, though it is not implemented in SrvrCommon.cpp
// Each of the DLL which links with this static LIB, should implement these functions
// in one of their module.
// This is done to minimize the compilcations in project settings and also it is felt that
// each DLL may have different implementation for these functions
extern short executeAndFetchSMDQuery(CEE_tag_def objtag_
, const CEE_handle_def *call_id_
, DIALOGUE_ID_def dialogueId
, const IDL_char *stmtLabel
, IDL_long maxRowCnt
, IDL_short sqlStmtType
, char *tableParam[]
, char *inputParam[]
, SQLItemDescList_def *outputDesc
, odbc_SQLSvc_ExecuteN_exc_ *executeException
, odbc_SQLSvc_FetchN_exc_ *fetchException
, ERROR_DESC_LIST_def *sqlWarning
, IDL_long *rowsAffected
, SQLValueList_def *outputValueList);
extern short completeTransaction( CEE_tag_def objtag_
, const CEE_handle_def *call_id_
, DIALOGUE_ID_def dialogueId
, IDL_unsigned_short transactionOpt
, odbc_SQLSvc_EndTransaction_exc_ *transactionException
, ERROR_DESC_LIST_def *sqlWarning);
extern BOOL writeServerException( short retCode
, odbc_SQLSvc_GetSQLCatalogs_exc_ *exception_
, odbc_SQLSvc_Prepare_exc_ *prepareException
, odbc_SQLSvc_ExecuteN_exc_ *executeException
, odbc_SQLSvc_FetchN_exc_ *fetchException);
extern void getSessionId(char*);
extern void getJulianTime(char*);
extern void getCurrentTime(char*);
extern short do_ExecSMD(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* Out */ odbc_SQLSvc_ExecuteN_exc_ *executeException
, /* Out */ ERROR_DESC_LIST_def *sqlWarning
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ const IDL_char *stmtLabel
, /* In */ IDL_short sqlStmtType
, /* In */ char *tableParam[]
, /* In */ char *inputParam[]
, /* Out */ SQLItemDescList_def *outputDesc);
extern short do_ExecFetchSMD(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* Out */ odbc_SQLSvc_ExecuteN_exc_ *executeException
, /* Out */ ERROR_DESC_LIST_def *sqlWarning
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ const IDL_char *previousstmtLabel
, /* In */ const IDL_char *stmtLabel
, /* In */ IDL_short sqlStmtType
, /* In */ char *tableParam[]
, /* In */ char *inputParam[]
, /* In */ bool resetValues
, /* Out */ IDL_long *rowsAffected
, /* Out */ SQLItemDescList_def *outputDesc);
extern "C" void
odbc_SQLSvc_Prepare2_sme_(
/* In */ IDL_long inputRowCnt
, /* In */ IDL_long sqlStmtType
, /* In */ const IDL_char *stmtLabel
, /* In */ IDL_string sqlString
, /* In */ IDL_long holdableCursor
, /* Out */ IDL_long *returnCode
, /* Out */ IDL_long *sqlWarningOrErrorLength
, /* Out */ BYTE *&sqlWarningOrError
, /* Out */ IDL_long *sqlQueryType
, /* Out */ Long *stmtHandle
, /* Out */ IDL_long *estimatedCost
, /* Out */ IDL_long *inputDescLength
, /* Out */ BYTE *&inputDesc
, /* Out */ IDL_long *outputDescLength
, /* Out */ BYTE *&outputDesc
, /* In */ bool isFromExecDirect = false);
extern "C" void
odbc_SQLSvc_Execute2_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ IDL_long sqlAsyncEnable
, /* In */ IDL_long queryTimeout
, /* In */ IDL_long inputRowCnt
, /* In */ IDL_long sqlStmtType
, /* In */ Long stmtHandle
, /* In */ IDL_long cursorLength
, /* In */ IDL_string cursorName
, /* In */ IDL_long cursorCharset
, /* In */ IDL_long holdableCursor
, /* In */ IDL_long inValuesLength
, /* In */ BYTE *inValues
, /* Out */ IDL_long *returnCodex
, /* Out */ IDL_long *sqlWarningOrErrorLength
, /* Out */ BYTE *&sqlWarningOrError
, /* Out */ IDL_long *rowsAffected
, /* Out */ IDL_long *outValuesLength
, /* Out */ BYTE *&outValues);
extern "C" void
odbc_SQLSvc_Fetch2_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ IDL_long sqlAsyncEnable
, /* In */ IDL_long queryTimeout
, /* In */ Long stmtHandle
, /* In */ IDL_long maxRowCnt
, /* In */ IDL_long cursorLength
, /* In */ IDL_string cursorName
, /* In */ IDL_long cursorCharset
, /* Out */ IDL_long *returnCode
, /* Out */ IDL_long *sqlWarningOrErrorLength
, /* Out */ BYTE *&sqlWarningOrError
, /* Out */ IDL_long *rowsAffected
, /* Out */ IDL_long *outValuesFormat
, /* Out */ IDL_long *outValuesLength
, /* Out */ BYTE *&outValues);
extern "C" void
odbc_SQLSvc_Prepare2withRowsets_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ IDL_long sqlAsyncEnable
, /* In */ IDL_long queryTimeout
, /* In */ IDL_long inputRowCnt
, /* In */ IDL_long sqlStmtType
, /* In */ IDL_long stmtLength
, /* In */ const IDL_char *stmtLabel
, /* In */ IDL_long stmtLabelCharset
, /* In */ IDL_long cursorLength
, /* In */ IDL_string cursorName
, /* In */ IDL_long cursorCharset
, /* In */ IDL_long moduleNameLength
, /* In */ const IDL_char *moduleName
, /* In */ IDL_long moduleCharset
, /* In */ IDL_long_long moduleTimestamp
, /* In */ IDL_long sqlStringLength
, /* In */ IDL_string sqlString
, /* In */ IDL_long sqlStringCharset
, /* In */ IDL_long setStmtOptionsLength
, /* In */ IDL_string setStmtOptions
, /* In */ IDL_long holdableCursor
, /* Out */ IDL_long *returnCode
, /* Out */ IDL_long *sqlWarningOrErrorLength
, /* Out */ BYTE *&sqlWarningOrError
, /* Out */ IDL_long *sqlQueryType
, /* Out */ Long *stmtHandle
, /* Out */ IDL_long *estimatedCost
, /* Out */ IDL_long *inputDescLength
, /* Out */ BYTE *&inputDesc
, /* Out */ IDL_long *outputDescLength
, /* Out */ BYTE *&outputDesc);
extern "C" void
odbc_SQLSvc_Execute2withRowsets_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ IDL_long sqlAsyncEnable
, /* In */ IDL_long queryTimeout
, /* In */ IDL_long inputRowCnt
, /* In */ IDL_long sqlStmtType
, /* In */ Long stmtHandle
, /* In */ IDL_long cursorLength
, /* In */ IDL_string cursorName
, /* In */ IDL_long cursorCharset
, /* In */ IDL_long holdableCursor
, /* In */ IDL_long inValuesLength
, /* In */ BYTE *inValues
, /* Out */ IDL_long *returnCode
, /* Out */ IDL_long *sqlWarningOrErrorLength
, /* Out */ BYTE *&sqlWarningOrError
, /* Out */ IDL_long *rowsAffected
, /* Out */ IDL_long *outValuesLength
, /* Out */ BYTE *&outValues);
extern "C" void
odbc_SQLSrvr_FetchPerf_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* Out */ IDL_long *returnCode
, /* In */ DIALOGUE_ID_def dialogueId
, /* In */ const IDL_char *stmtLabel
, /* In */ IDL_long maxRowCnt
, /* In */ IDL_long maxRowLen
, /* In */ IDL_short sqlAsyncEnable
, /* In */ IDL_long queryTimeout
, /* Out */ IDL_long *rowsAffected
, /* Out */ IDL_long *outValuesFormat
, /* Out */ SQL_DataValue_def *outputDataValue
, /* Out */ IDL_long *sqlWarningOrErrorLength
, /* Out */ BYTE *&sqlWarningOrError);
extern "C" void
odbc_SQLSrvr_ExtractLob_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def *call_id_
, /* In */ odbc_SQLsrvr_ExtractLob_exc_ *exception_
, /* In */ IDL_long extractLobAPI
, /* In */ IDL_string lobHandle
, /* In */ IDL_long_long &lobLength
, /* Out */ IDL_long_long &extractLen
, /* Out */ BYTE *& extractData);
extern "C" void
odbc_SQLSrvr_UpdateLob_sme_(
/* In */ CEE_tag_def objtag_
, /* In */ const CEE_handle_def * call_id_
, /* In */ odbc_SQLSvc_UpdateLob_exc_ * exception_
, /* In */ IDL_short lobUpdateType
, /* In */ IDL_string lobHandle
, /* In */ IDL_long_long totalLength
, /* In */ IDL_long_long offset
, /* In */ IDL_long_long length
, /* In */ BYTE * data);
extern "C" void
GETMXCSWARNINGORERROR(
/* In */ Int32 sqlcode
, /* In */ char *sqlState
, /* In */ char *msg_buf
, /* Out */ Int32 *MXCSWarningOrErrorLength
, /* Out */ BYTE *&MXCSWarningOrError);
void SETSRVRERROR(Int32 srvrErrorCodeType, Int32 srvrErrorCode, char *srvrSqlState, char* srvrErrorTxt, ERROR_DESC_LIST_def *srvrError);
void SETSECURITYERROR(short securityErrorCode, ERROR_DESC_LIST_def *outError);
SQLRETURN doInfoStats(SRVR_STMT_HDL *pSrvrStmt);
// charset support
extern char *getCharsetStr(Int32 charset);
extern void translateToUTF8(Int32 inCharset, char* inStr, Int32 inStrLen, char* outStr, Int32 outStrMax);
extern "C" void
rePrepare2( SRVR_STMT_HDL *pSrvrStmt
, Int32 sqlStmtType
, Int32 inputRowCnt
, Int32 holdableCursor
, SQLRETURN *rc
, Int32 *returnCode
, Int32 *sqlWarningOrErrorLength
, BYTE *&sqlWarningOrError );
}
#define INFOSTATS_COLUMN_COUNT 7
#endif