/**********************************************************************
// @@@ 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 @@@
**********************************************************************/
/* -*-C++-*-
 *****************************************************************************
 *
 * File:         RtsStubs.cpp
 * Description:  Stubs for RTS
 *               
 *               
 * Created:      2006
 * Language:     C++
 *
 *****************************************************************************
 */
#include "BaseTypes.h"
#include "ex_ex.h"

// Turn off code coverage collection for these stubs.
// LCOV_EXCL_START
extern "C" {
 void unpackObj__13UdrMessageObjFlT1iUlPCc() {
    ex_assert(0, "Entering stub unpackObj__13UdrMessageObjFlT1iUlPCc");
 }

 void decodeAndFormatKeys__18ex_function_encodeSFP7ex_exprPclN22T3Pl() {
    ex_assert(0, "Entering stub decodeAndFormatKeys__18ex_function_encodeSFP7ex_exprPclN22T3Pl");;
 }
 
 void __dt__6ex_tcbFv() {
    ex_assert(0, "Entering stub __dt__6ex_tcbFv");
 }

 void __ct__15tupp_descriptorFv() {
    ex_assert(0, "Entering stub __ct__15tupp_descriptorFv");
 }

 void __vtbl__7ex_expr() {
    ex_assert(0, "Entering stub __vtbl__7ex_expr");
 }

 void __dt__13ExSsmpManagerFv() {
    ex_assert(0, "Entering stub __dt__13ExSsmpManagerFv");
 }

 void __T_10ExpDP2Expr() {
     ex_assert(0, "Entering stub __T_10ExpDP2Expr");
 }

 void __ct__8ex_queueFQ2_8ex_queue10queue_typeUlP11ex_cri_descP8NAMemoryQ2_8ex_queue14queueAllocType() {
    ex_assert(0, "Entering stub __ct__8ex_queueFQ2_8ex_queue10queue_typeUlP11ex_cri_descP8NAMemoryQ2_8ex_queue14queueAllocType");
 }

 void convDoIt__FPclsN22T1T2T3N22T1T2P8NAMemoryPP12ComDiagsArea15conv_case_indexPlUl() {
    ex_assert(0, "Entering stub convDoIt__FPclsN22T1T2T3N22T1T2P8NAMemoryPP12ComDiagsArea15conv_case_indexPlUl");
 }

 void pCodeGenerate__18ex_function_clauseFP8ComSpaceUl() {
    ex_assert(0, "Entering stub pCodeGenerate__18ex_function_clauseFP8ComSpaceUl");
 }

 void getExpressionMode__6ex_tcbCFv() {
    ex_assert(0, "Entering stub getExpressionMode__6ex_tcbCFv");
 }

 void generateUniqueValue__Fv() {
    ex_assert(0, "Entering stub generateUniqueValue__Fv");
 }

 void SQL_EXEC_DeallocDesc() {
    ex_assert(0, "Entering stub SQL_EXEC_DeallocDesc");
 }

 void rollbackSavepoint__6ex_tcbFv() {
    ex_assert(0, "Entering stub rollbackSavepoint__6ex_tcbFv");
 }

 void displayContents__18ex_function_clauseFP8ComSpacePciT2() {
    ex_assert(0, "Entering stub displayContents__18ex_function_clauseFP8ComSpacePciT2");
 }

 void packedLength__13UdrMessageObjFv() {
    ex_assert(0, "Entering stub packedLength__13UdrMessageObjFv");
 }

 void __vtbl__18ArkFsIndexMapEntry() {
    ex_assert(0, "Entering stub __vtbl__18ArkFsIndexMapEntry");
 }

 void __vtbl__13UdrMessageObj() {
    ex_assert(0, "Entering stub __vtbl__13UdrMessageObj");
 }

 void __vtbl__19ArkFsPartitionEntry() {
    ex_assert(0, "Entering stub __vtbl__19ArkFsPartitionEntry");
 }

 void __ct__20ex_tcb_private_stateFv() {
    ex_assert(0, "Entering stub __ct__20ex_tcb_private_stateFv");
 }

 void __dt__9ex_clauseFv() {
    ex_assert(0, "Entering stub __dt__9ex_clauseFv");
 }

 void __vtbl__15InputOutputExpr() {
    ex_assert(0, "Entering stub __vtbl__15InputOutputExpr");
 }

 void ExMeasStmtCntrsBump__15ExMeasStmtCntrsFiPcT1() {
    ex_assert(0, "Entering stub ExMeasStmtCntrsBump__15ExMeasStmtCntrsFiPcT1");
 }

 void MathCeil() {
    ex_assert(0, "Entering stub MathCeil");
 }

 Lng32 SQL_EXEC_IsExecutor_Internal() {
   Lng32 retcode;
   retcode = TRUE;
   return retcode;
 }

 void decrRefCount__13UdrMessageObjFv() {
    ex_assert(0, "Entering stub decrRefCount__13UdrMessageObjFv");
 }

 void isComparable__6NATypeCFRC6NATypeP8ItemExpri() {
    ex_assert(0, "Entering stub isComparable__6NATypeCFRC6NATypeP8ItemExpri");
 }

 void allocatePstate__8ex_queueFP20ex_tcb_private_stateP6ex_tcb() {
    ex_assert(0, "Entering stub allocatePstate__8ex_queueFP20ex_tcb_private_stateP6ex_tcb");
 }

 void getCorrNameAsString__8CorrNameCFv() {
    ex_assert(0, "Entering stub getCorrNameAsString__8CorrNameCFv");
 }

 void closeTables__6ex_tcbFv() {
    ex_assert(0, "Entering stub closeTables__6ex_tcbFv");
 }

 void unpack__10ExpDP2ExprFPvT1() {
    ex_assert(0, "Entering stub unpack__10ExpDP2ExprFPvT1");
 }

 void __dt__12ExpTupleDescFv() {
    ex_assert(0, "Entering stub __dt__12ExpTupleDescFv");
 }

 void injectErrorOrCancel__8ex_queueFv() {
    ex_assert(0, "Entering stub injectErrorOrCancel__8ex_queueFv");
 }

 void reset__10ContextCliFPv() {
    ex_assert(0, "Entering stub reset__10ContextCliFPv");
 }
 void ExMeasGetStatus__FRiN21() {
    ex_assert(0, "Entering stub ExMeasGetStatus__FRiN21");
 }

 void __T_18ex_function_clause() {
    ex_assert(0, "Entering stub __T_18ex_function_clause");
 }

 void allocateAtp__FP11ex_cri_descP8NAMemory() {
    ex_assert(0, "Entering stub allocateAtp__FP11ex_cri_descP8NAMemory");
 }

 void removeHead__8ex_queueFv() {
    ex_assert(0, "Entering stub removeHead__8ex_queueFv");
 }

 void __ct__12RelatedLabelFv() {
    ex_assert(0, "Entering stub __ct__12RelatedLabelFv");
 }

 void computeNeededPoolInfo__6ex_tcbFRlRUlT2() {
    ex_assert(0, "Entering stub computeNeededPoolInfo__6ex_tcbFRlRUlT2");
 }

 void SQL_EXEC_Xact() {
    ex_assert(0, "Entering stub SQL_EXEC_Xact");
 }

 void workCancel__6ex_tcbFv() {
    ex_assert(0, "Entering stub workCancel__6ex_tcbFv");
 }

 void __vtbl__17ArkFsTriggerEntry() {
    ex_assert(0, "Entering stub __vtbl__17ArkFsTriggerEntry");
 }

 void __vtbl__26ArkFsVPHorizontalPartEntry() {
    ex_assert(0, "Entering stub __vtbl__26ArkFsVPHorizontalPartEntry");
 }

 void checkObj__13UdrMessageObjCFlT1iUlPCc() {
    ex_assert(0, "Entering stub checkObj__13UdrMessageObjCFlT1iUlPCc");
 }

 void sqlarkExplodedOffsets__12ExpTupleDescSFUlT1siPUlT5() {
    ex_assert(0, "Entering stub sqlarkExplodedOffsets__12ExpTupleDescSFUlT1siPUlT5");
 }

 void workResize__6ex_tcbFv() {
    ex_assert(0, "Entering stub workResize__6ex_tcbFv");
 }

 void __vtbl__26ArkFsVPHorizontalPartArray() {
    ex_assert(0, "Entering stub __vtbl__26ArkFsVPHorizontalPartArray");
 }

 void fixup__9ex_clauseFP8ComSpaceP8NAMemoryPcN23si() {
    ex_assert(0, "Entering stub fixup__9ex_clauseFP8ComSpaceP8NAMemoryPcN23si");
 }

 void __vtbl__10ExpDP2Expr() {
    ex_assert(0, "Entering stub __vtbl__10ExpDP2Expr");
 }

 void __dt__10ExpDP2ExprFv() {
    ex_assert(0, "Entering stub __dt__10ExpDP2ExprFv");
 }

 void init_SQLCLI_OBJ_ID__FP13SQLCLI_OBJ_IDl19SQLOBJ_ID_NAME_MODEPC14SQLMODULE_ID_tPCcT2T5N22() {
    ex_assert(0, "Entering stub init_SQLCLI_OBJ_ID__FP13SQLCLI_OBJ_IDl19SQLOBJ_ID_NAME_MODEPC14SQLMODULE_ID_tPCcT2T5N22");
 }

 void __dt__10ArkFsFdBckFv() {
    ex_assert(0, "Entering stub __dt__10ArkFsFdBckFv");
 }

 void unpack__9ex_clauseFPvT1() {
    ex_assert(0, "Entering stub unpack__9ex_clauseFPvT1");
 }

 void ExMeasProcCntrsBump__15ExMeasProcCntrsFv() {
    ex_assert(0, "Entering stub ExMeasProcCntrsBump__15ExMeasProcCntrsFv");
 }

 void registerSubtasks__6ex_tcbFv() {
    ex_assert(0, "Entering stub registerSubtasks__6ex_tcbFv");
 }

 void __as__16VerticalPartInfoFRC16VerticalPartInfo() {
    ex_assert(0, "Entering stub __as__16VerticalPartInfoFRC16VerticalPartInfo");
 }

 void __as__19ArkFsIndexPartEntryFRC19ArkFsIndexPartEntry() {
    ex_assert(0, "Entering stub __as__19ArkFsIndexPartEntryFRC19ArkFsIndexPartEntry");
 }

 void __as__26ArkFsVPHorizontalPartEntryFRC26ArkFsVPHorizontalPartEntry() {
    ex_assert(0, "Entering stub __as__26ArkFsVPHorizontalPartEntryFRC26ArkFsVPHorizontalPartEntry");
 }

 void __as__19ArkFsPartitionEntryFRC19ArkFsPartitionEntry() {
    ex_assert(0, "Entering stub __as__19ArkFsPartitionEntryFRC19ArkFsPartitionEntry");
 }

 void __as__18ArkFsIndexMapEntryFRC18ArkFsIndexMapEntry() {
    ex_assert(0, "Entering stub __as__18ArkFsIndexMapEntryFRC18ArkFsIndexMapEntry");
 }

 void ArkFsIncrPfsSbbCount__Fv() {
    ex_assert(0, "Entering stub ArkFsIncrPfsSbbCount__Fv");
 }

 void __T_6ex_tcb() {
    ex_assert(0, "Entering stub __T_6ex_tcb");
 }

 void evalPCode__7ex_exprFPlP10atp_structT2PUl() {
    ex_assert(0, "Entering stub evalPCode__7ex_exprFPlP10atp_structT2PUl");
 }

 void evalPCodeFast__7ex_exprFPlP10atp_structT2() {
    ex_assert(0, "Entering stub evalPCodeFast__7ex_exprFPlP10atp_structT2");
 }

 void evalFast4__7ex_exprSFPlP10atp_structT2l() {
    ex_assert(0, "Entering stub evalFast4__7ex_exprSFPlP10atp_structT2l");
 }

 void __vtbl__11ex_cri_desc() {
    ex_assert(0, "Entering stub __vtbl__11ex_cri_desc");
 }

 void __ct__10ContextCliFP10CliGlobals() {
    ex_assert(0, "Entering stub __ct__10ContextCliFP10CliGlobals");
 }

 void __ct__15sql_buffer_poolFlT1P8NAMemoryQ2_15SqlBufferHeader10BufferType() {
    ex_assert(0, "Entering stub __ct__15sql_buffer_poolFlT1P8NAMemoryQ2_15SqlBufferHeader10BufferType");
 }

 void __ct__8PartNameFv() {
    ex_assert(0, "Entering stub __ct__8PartNameFv");
 }

 void isComparable__8CharTypeCFRC6NATypeP8ItemExpri() {
    ex_assert(0, "Entering stub isComparable__8CharTypeCFRC6NATypeP8ItemExpri");
 }

 void getStatsArea__9StatementFv() {
    ex_assert(0, "Entering stub getStatsArea__9StatementFv");
 }

 void __eq__16ExtendedQualNameCFRC16ExtendedQualName() {
    ex_assert(0, "Entering stub __eq__16ExtendedQualNameCFRC16ExtendedQualName");
 }

 void __vtbl__19ArkFsPartitionArray() {
    ex_assert(0, "Entering stub __vtbl__19ArkFsPartitionArray");
 }
 
 void init_SQLMODULE_ID__FP14SQLMODULE_ID_tlPCcT2T3T2() {
    ex_assert(0, "Entering stub init_SQLMODULE_ID__FP14SQLMODULE_ID_tlPCcT2T3T2");
 }

 void SQL_EXEC_AllocDesc__FP13SQLCLI_OBJ_IDl() {
    ex_assert(0, "Entering stub SQL_EXEC_AllocDesc__FP13SQLCLI_OBJ_IDl");
 }

 void __vtbl__18ex_function_clause() {
    ex_assert(0, "Entering stub __vtbl__18ex_function_clause");
 }

 void __ct__6ex_tcbFRC6ComTdbsP10ex_globals() {
    ex_assert(0, "Entering stub __ct__6ex_tcbFRC6ComTdbsP10ex_globals");
 }

 void updateMeasStmtCntrs__9StatementFL() {
    ex_assert(0, "Entering stub updateMeasStmtCntrs__9StatementFL");
 }

 void __eq__8CorrNameCFRC8CorrName() {
    ex_assert(0, "Entering stub __eq__8CorrNameCFRC8CorrName");
 }

 void packObjIntoMessage__13UdrMessageObjFPc() {
    ex_assert(0, "Entering stub packObjIntoMessage__13UdrMessageObjFPc");
 }

 void fixup__6ex_tcbFv() {
    ex_assert(0, "Entering stub fixup__6ex_tcbFv");
 }

 void __vtbl__12ExpTupleDesc() {
    ex_assert(0, "Entering stub __vtbl__12ExpTupleDesc");
 }

 void findVTblPtr__7ex_exprFs() {
    ex_assert(0, "Entering stub findVTblPtr__7ex_exprFs");
 }

 void needStatsEntry__6ex_tcbFv() {
    ex_assert(0, "Entering stub needStatsEntry__6ex_tcbFv");
 }

 void findVTblPtr__9ex_clauseFs() {
    ex_assert(0, "Entering stub findVTblPtr__9ex_clauseFs");
 }

 void get_free_tuple__15sql_buffer_poolFR4tuppl() {
    ex_assert(0, "Entering stub get_free_tuple__15sql_buffer_poolFR4tuppl");
 }

 void __ct__4tuppFv() {
    ex_assert(0, "Entering stub __ct__4tuppFv");
 }

 void __as__12RelatedLabelFRC12RelatedLabel() {
    ex_assert(0, "Entering stub __as__12RelatedLabelFRC12RelatedLabel");
 }

 void __dl__13UdrMessageObjSFPv() {
    ex_assert(0, "Entering stub __dl__13UdrMessageObjSFPv");
 }

 void updateInProgress__9StatementFv() {
    ex_assert(0, "Entering stub updateInProgress__9StatementFv");
 }

 void setNamePosition__11CatalogNameFUii() {
    ex_assert(0, "Entering stub setNamePosition__11CatalogNameFUii");
 }

 void allocatePstates__6ex_tcbFRlT1() {
    ex_assert(0, "Entering stub allocatePstates__6ex_tcbFRlT1");
 }

 void processNulls__9ex_clauseFPPcP8NAMemoryPP12ComDiagsArea() {
    ex_assert(0, "Entering stub processNulls__9ex_clauseFPPcP8NAMemoryPP12ComDiagsArea");
 }

 void __T_13UdrMessageObj() {
    ex_assert(0, "Entering stub __T_13UdrMessageObj");
 }

 void doAllocateStatsEntry__6ex_tcbFP8NAMemoryP6ComTdb() {
    ex_assert(0, "Entering stub doAllocateStatsEntry__6ex_tcbFP8NAMemoryP6ComTdb");
 }

 void SQL_EXEC_GetRemoteSystemVolume_Internal__FPcPCcPl() {
    ex_assert(0, "Entering stub SQL_EXEC_GetRemoteSystemVolume_Internal__FPcPCcPl");
 }

 void __dt__20ex_tcb_private_stateFv() {
    ex_assert(0, "Entering stub __dt__20ex_tcb_private_stateFv");
 }

 void __vtbl__14ExDp2InsertTdb() {
    ex_assert(0, "Entering stub __vtbl__14ExDp2InsertTdb");
 }

 void evalClauses__7ex_exprFP9ex_clauseP10atp_structT2lPUlPsPc() {
    ex_assert(0, "Entering stub evalClauses__7ex_exprFP9ex_clauseP10atp_structT2lPUlPsPc");
 }

 void __eq__13QualifiedNameCFRC8NAString() {
    ex_assert(0, "Entering stub __eq__13QualifiedNameCFRC8NAString");
 }

 void reOpenTables__6ex_tcbFv() {
    ex_assert(0, "Entering stub reOpenTables__6ex_tcbFv");
 }

 void closeAllCursors__10ContextCliFQ2_10ContextCli15CloseCursorType() {
    ex_assert(0, "Entering stub closeAllCursors__10ContextCliFQ2_10ContextCli15CloseCursorType");
 }

 void pack__10ExpDP2ExprFPv() {
    ex_assert(0, "Entering stub pack__10ExpDP2ExprFPv");
 }

 void __T_20ex_tcb_private_state() {
    ex_assert(0, "Entering stub __T_20ex_tcb_private_state");
 }
 
 void __ct__15ExMeasStmtCntrsFv() {
    ex_assert(0, "Entering stub __ct__15ExMeasStmtCntrsFv");
 }

 void __dt__4tuppFv() {
    ex_assert(0, "Entering stub __dt__4tuppFv");
 }

 void __vtbl__13ArkFsKeyClass() {
    ex_assert(0, "Entering stub __vtbl__13ArkFsKeyClass");
 }

 void SQL_EXEC_SetDescItem() {
    ex_assert(0, "Entering stub SQL_EXEC_SetDescItem");
 }

#ifdef __SSCP
 void getSsmpServer__13ExSsmpManagerFPcsRP12ComDiagsArea() {
    ex_assert(0, "Entering stub getSsmpServer__13ExSsmpManagerFPcsRP12ComDiagsArea");
 }

 void removeSsmpServer__13ExSsmpManagerFPcs() {
    ex_assert(0, "Entering stub removeSsmpServer__13ExSsmpManagerFPcs");
 }

 void  __vtbl__19SsmpClientMsgStream() {
   ex_assert(0, "Entering stub __vtbl__19SsmpClientMsgStream");
 }
#endif

 void __vtbl__19ArkFsIndexPartEntry() {
    ex_assert(0, "Entering stub __vtbl__19ArkFsIndexPartEntry");
 }

 void ExHandleErrors__FR13ex_queue_pairP14ex_queue_entrylP10ex_globalsP12ComDiagsArea12ExeErrorCodePlPcT7T8() {
    ex_assert(0, "Entering stub ExHandleErrors__FR13ex_queue_pairP14ex_queue_entrylP10ex_globalsP12ComDiagsArea12ExeErrorCodePlPcT7T8");
 }

 void replace__8NAStringFUiT1PCcT1() {
    ex_assert(0, "Entering stub replace__8NAStringFUiT1PCcT1");
 }

 void handleEmptyQueue__8ex_queueFv() {
    ex_assert(0, "Entering stub handleEmptyQueue__8ex_queueFv");
 }

 void handleFullQueue__8ex_queueFv() {
    ex_assert(0, "Entering stub handleFullQueue__8ex_queueFv");
 }

#ifndef _DEBUG
 void __nw__FUi() {
    ex_assert(0, "Entering stub __nw__FUi");
 }

 void __dl__FPv() {
    ex_assert(0, "Entering stub __dl__FPv");
 }
#endif

 void replace__9NAWStringFUiT1PCwT1() {
    ex_assert(0, "Entering stub replace__9NAWStringFUiT1PCwT1");
 }

 void __vc__8NAStringFUi() {
    ex_assert(0, "Entering stub __vc__8NAStringFUi");
 }

 void __ct__9NAWStringFwP8NAMemory() {
    ex_assert(0, "Entering stub __ct__9NAWStringFwP8NAMemory");
 }

 void __dt__9NAWStringFv() {
    ex_assert(0, "Entering stub __dt__9NAWStringFv");
 }
 
 void closeAllCursors__10ContextCliFQ2_10ContextCli15CloseCursorTypeL() {
    ex_assert(0, "Entering stub closeAllCursors__10ContextCliFQ2_10ContextCli15CloseCursorTypeL");
 }

 void ExHandleErrors__FR13ex_queue_pairP14ex_queue_entrylP10ex_globalsP12ComDiagsArea12ExeErrorCodePlPc() {
    ex_assert(0, "Entering stub ExHandleErrors__FR13ex_queue_pairP14ex_queue_entrylP10ex_globalsP12ComDiagsArea12ExeErrorCodePlPc");
 }

 void  ExHandleErrors__FR13ex_queue_pairP14ex_queue_entrylP10ex_globalsP12ComDiagsArea12ExeErrorCodePlPcT7() {
    ex_assert(0, "Entering stub ExHandleErrors__FR13ex_queue_pairP14ex_queue_entrylP10ex_globalsP12ComDiagsArea12ExeErrorCodePlPcT7");
 }


 void unpackObj__15UdrRSMessageObjFlT1iUlPCc() {
    ex_assert(0, "Entering stub unpackObj__15UdrRSMessageObjFlT1iUlPCc");
 }

 void __T_15UdrRSMessageObj() {
    ex_assert(0, "Entering stub __T_15UdrRSMessageObj");
 } 
 
 void unpackUdrBaseClass__15UdrRSMessageObjFRPCc() {
    ex_assert(0, "Entering stub unpackUdrBaseClass__15UdrRSMessageObjFRPCc");
 }
 
 void checkObj__15UdrRSMessageObjCFlT1iUlPCc() {
    ex_assert(0, "Entering stub checkObj__15UdrRSMessageObjCFlT1iUlPCc");
 }

 void __vtbl__15UdrRSMessageObj() {
    ex_assert(0, "Entering stub __vtbl__15UdrRSMessageObj");
 }

 void udrBaseClassPackedLength__13UdrMessageObjFv() {
    ex_assert(0, "Entering stub udrBaseClassPackedLength__13UdrMessageObjFv");
 }
  
 void checkUdrBaseClass__13UdrMessageObjCFlT1iUlRPCc() {
    ex_assert(0, "Entering stub checkUdrBaseClass__13UdrMessageObjCFlT1iUlRPCc");
 }

 void packUdrBaseClass__13UdrMessageObjFRPc() {
    ex_assert(0, "Entering stub packUdrBaseClass__13UdrMessageObjFRPc");
 }
 
 void udrBaseClassPackedLength__15UdrRSMessageObjFv() {
    ex_assert(0, "Entering stub udrBaseClassPackedLength__15UdrRSMessageObjFv");
 }
 
 void packUdrBaseClass__15UdrRSMessageObjFRPc() {
    ex_assert(0, "Entering stub packUdrBaseClass__15UdrRSMessageObjFRPc");
 }
 
 void packObjIntoMessage__15UdrRSMessageObjFPc() {
    ex_assert(0, "Entering stub packObjIntoMessage__15UdrRSMessageObjFPc");
 }

 void packedLength__15UdrRSMessageObjFv() {
    ex_assert(0, "Entering stub packedLength__15UdrRSMessageObjFv");
 }
 
 void containsUdrInteractions__9StatementCFv() {
    ex_assert(0, "Entering stub containsUdrInteractions__9StatementCFv");
 }
 
 void unpackUdrBaseClass__13UdrMessageObjFRPCc() {
    ex_assert(0, "Entering stub unpackUdrBaseClass__13UdrMessageObjFRPCc");
 }

 void checkUdrBaseClass__15UdrRSMessageObjCFlT1iUlRPCc() {
    ex_assert(0, "Entering stub checkUdrBaseClass__15UdrRSMessageObjCFlT1iUlRPCc");
 }

 void  evalPCodeAligned__7ex_exprFPlP10atp_structT2PUl() {
    ex_assert(0, "Entering stub evalPCodeAligned__7ex_exprFPlP10atp_structT2PUl");
 }

 void sqlarkExplodedOffsets__12ExpTupleDescSFUlT1siPUlT5T1() {
    ex_assert(0, "Entering stub sqlarkExplodedOffsets__12ExpTupleDescSFUlT1siPUlT5T1");
 }

 void findVTblPtr__6ComTdbFs() {
    ex_assert(0, "Entering stub findVTblPtr__6ComTdbFs");
 }

 void __dt__15CliMxArLibCacheFv() {
    ex_assert(0, "Entering stub __dt__15CliMxArLibCacheFv");
 }

 void status__9ExSqlCompFL() {
    ex_assert(0, "Entering stub status__9ExSqlCompFL");
 }

 void sendRequest__9ExSqlCompFQ2_13CmpMessageObj15MessageTypeEnumPCcUliPLlT4() {
    ex_assert(0, "Entering stub sendRequest__9ExSqlCompFQ2_13CmpMessageObj15MessageTypeEnumPCcUliPLlT4");
 }
 void sendRequest__9ExSqlCompFQ2_13CmpMessageObj15MessageTypeEnumPCcUliPLlT4T2T6() {
    ex_assert(0, "Entering stub sendRequest__9ExSqlCompFQ2_13CmpMessageObj15MessageTypeEnumPCcUliPLlT4T2T6");
 }
 void closeAllCursors__10ContextCliFQ2_10ContextCli15CloseCursorTypeQ2_10ContextCli20closeTransactionTypeLi() {
    ex_assert(0, "Entering stub closeAllCursors__10ContextCliFQ2_10ContextCli15CloseCursorTypeQ2_10ContextCli20closeTransactionTypeLi");
 }

#ifdef _DEBUG
 void generateFunnyName__F15FunnyNameFormatPc() {
    ex_assert(0, "Entering stub generateFunnyName__F15FunnyNameFormatPc");
 }
#endif
 
 void __eq__13SessionEnvvarCFRC13SessionEnvvar() {
   ex_assert(0, "Entering stub __eq__13SessionEnvvarCFRC13SessionEnvvar");
 }

 void __ct__13SessionEnvvarFP8NAMemoryPcT2() {
   ex_assert(0, "Entering stub __ct__13SessionEnvvarFP8NAMemoryPcT2");
 }

 void __ct__13SessionEnvvarFv() {
   ex_assert(0, "Entering stub __ct__13SessionEnvvarFv");
 }

 void __as__13SessionEnvvarFRC13SessionEnvvar() {
   ex_assert(0, "Entering stub __as__13SessionEnvvarFRC13SessionEnvvar");
 }

 void __dt__13SessionEnvvarFv() {
   ex_assert(0, "Entering stub __dt__13SessionEnvvarFv");
 }

 void cpuLimitExceeded__6ex_tcbFv() {
   ex_assert(0, "Entering stub cpuLimitExceeded__6ex_tcbFv");
 }

 void __ct__18ExUdrServerManagerFP14IpcEnvironmentUl() {
    ex_assert(0, "Entering stub __ct__18ExUdrServerManagerFP14IpcEnvironmentUl");
 }

 void setStatsArea__10ContextCliFP16ExStatisticsAreaiN22() {
    ex_assert(0, "Entering stub setStatsArea__10ContextCliFP16ExStatisticsAreaiN22");
  }
 
void __ct__12ExpTupleDescFv() {
   ex_assert(0, "Entering stub __ct__12ExpTupleDescFv");
  }

}

void CmpAssertInternal(const char*, const char*, Int32) {
   ex_assert(0, "Entering stub CmpAssertInternal(const char*, const char*, int)");
  }

// LCOV_EXCL_STOP

void NA_MM_FreeMemory_(char *startAddr, Int32 byteCount) {
  // do nothing and do not assert here.  
  }
