| // @@@ 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 EX_EXE_UTIL_CLI_H |
| #define EX_EXE_UTIL_CLI_H |
| |
| class ContextCli; |
| |
| class OutputInfo |
| { |
| public: |
| enum {MAX_OUTPUT_ENTRIES = 100}; |
| |
| OutputInfo(Lng32 numEntries); |
| void dealloc(CollHeap * heap); |
| void insert(Lng32 index, char * data); |
| void insert(Lng32 index, char * data, Lng32 len); |
| char * get(Lng32 index); |
| short get(Lng32 index, char* &data, Lng32 &len); |
| |
| private: |
| Lng32 numEntries_; |
| char * data_[MAX_OUTPUT_ENTRIES]; |
| Lng32 len_[MAX_OUTPUT_ENTRIES]; |
| }; |
| |
| class ExeCliInterface : public NABasicObject |
| { |
| private: |
| enum { |
| NOT_EXEUTIL_INTERNAL_QUERY = 0x0001 |
| }; |
| |
| public: |
| ExeCliInterface(CollHeap * heap = NULL, Int32 isoMapping = 0, |
| ContextCli * currContext = NULL, |
| const char *parentQid = NULL); |
| |
| virtual ~ExeCliInterface(); |
| |
| Lng32 allocStuff(SQLMODULE_ID * &module, |
| SQLSTMT_ID * &stmt, |
| SQLDESC_ID * &sql_src, |
| SQLDESC_ID * &input_desc, |
| SQLDESC_ID * &output_desc, |
| const char * stmtName = NULL |
| ); |
| |
| Lng32 deallocStuff(SQLMODULE_ID * &module, |
| SQLSTMT_ID * &stmt, |
| SQLDESC_ID * &sql_src, |
| SQLDESC_ID * &input_desc, |
| SQLDESC_ID * &output_desc); |
| |
| Lng32 executeImmediate(const char * stmt, |
| char * outputBuf = NULL, |
| Lng32 * outputBufLen = NULL, |
| NABoolean nullTerminate = TRUE, |
| Int64 * rowsAffected = NULL, |
| NABoolean monitorThis = FALSE, |
| ComDiagsArea **globalDiags = NULL); |
| |
| Lng32 executeImmediatePrepare(const char * stmt, |
| char * outputBuf = NULL, |
| Lng32 * outputBufLen = NULL, |
| Int64 * rowsAffected = NULL, |
| NABoolean monitorThis = FALSE, |
| char * stmtName = NULL); |
| |
| Lng32 executeImmediatePrepare2(const char * stmt, |
| char *uniqueStmtId, |
| Lng32 *uniqueStmtIdLen, |
| SQL_QUERY_COST_INFO *query_cost_info, |
| SQL_QUERY_COMPILER_STATS_INFO *comp_stats_info, |
| char * outputBuf = NULL, |
| Lng32 * outputBufLen = NULL, |
| Int64 * rowsAffected = NULL, |
| NABoolean monitorThis = FALSE); |
| |
| Lng32 executeImmediateExec(const char * stmt, |
| char * outputBuf = NULL, |
| Lng32 * outputBufLen = NULL, |
| NABoolean nullTerminate = TRUE, |
| Int64 * rowsAffected = NULL, |
| ComDiagsArea **diagsArea = NULL); |
| |
| Lng32 prepare(const char * stmtStr, |
| SQLMODULE_ID * module, |
| SQLSTMT_ID * stmt, |
| SQLDESC_ID * sql_src, |
| SQLDESC_ID * input_desc, |
| SQLDESC_ID * output_desc, |
| char ** outputBuf, |
| Queue * outputVarPtrList = NULL, |
| char ** inputBuf = NULL, |
| Queue * inputVarPtrList = NULL, |
| char *uniqueStmtId = NULL, |
| Lng32 *uniqueStmtIdLen = NULL, |
| SQL_QUERY_COST_INFO *query_cost_info = NULL, |
| SQL_QUERY_COMPILER_STATS_INFO *comp_stats_info = NULL, |
| NABoolean monitorThis = FALSE, |
| NABoolean doNotCachePlan = FALSE); |
| |
| Lng32 setupExplainData(SQLMODULE_ID * module, |
| SQLSTMT_ID * stmt); |
| Lng32 setupExplainData(); |
| char* getExplainDataPtr() { return explainData_;} |
| Lng32 getExplainDataLen() { return explainDataLen_; } |
| |
| Lng32 exec(char * inputBuf = NULL, Lng32 inputBufLen = 0); |
| Lng32 fetch(); |
| Lng32 close(); |
| Lng32 dealloc(); |
| |
| short clearExecFetchClose(char * inputBuf, Lng32 inputBufLen, |
| char * outputBuf = NULL, |
| Lng32 * outputBufLen = 0); |
| |
| short clearExecFetchCloseOpt(char * inputBuf, Lng32 inputBufLen, |
| char * outputBuf = NULL, |
| Lng32 * outputBufLen = 0, |
| Int64 * rowsAffected = NULL); |
| |
| Lng32 executeImmediateCEFC(const char * stmtStr, |
| char * inputBuf, |
| Lng32 inputBufLen, |
| char * outputBuf, |
| Lng32 * outputBufLen, |
| Int64 * rowsAffected = NULL |
| ); |
| |
| Lng32 rwrsPrepare( |
| const char * stmStr, Lng32 rs_maxsize, |
| NABoolean monitorThis = FALSE); |
| |
| Lng32 rwrsExec( |
| char * inputRow, |
| Int32 inputRowLen, |
| Int64 * rowsAffected); |
| |
| Lng32 rwrsClose(); |
| |
| Lng32 cwrsAllocStuff(SQLMODULE_ID * &module, |
| SQLSTMT_ID * &stmt, |
| SQLDESC_ID * &sql_src, |
| SQLDESC_ID * &input_desc, |
| SQLDESC_ID * &output_desc, |
| SQLDESC_ID * &rs_input_maxsize_desc, |
| const char * stmtName = NULL |
| ); |
| |
| Lng32 cwrsDeallocStuff( |
| SQLMODULE_ID * &module, |
| SQLSTMT_ID * &stmt, |
| SQLDESC_ID * &sql_src, |
| SQLDESC_ID * &input_desc, |
| SQLDESC_ID * &output_desc, |
| SQLDESC_ID * &rs_input_maxsize_desc); |
| |
| Lng32 cwrsPrepare( |
| const char * stmtStr, |
| Lng32 rs_maxsize, |
| NABoolean monitorThis = FALSE); |
| |
| Lng32 cwrsExec( |
| char * inputRow, |
| Int32 inputRowLen, |
| Int64 * rowsAffected); |
| |
| Lng32 cwrsClose(Int64 * rowsAffected); |
| |
| Lng32 getPtrAndLen(short entry, char* &ptr, Lng32 &len, short **ind = NULL); |
| Lng32 getHeadingAndLen(short entry, char* heading, Lng32 &len); |
| |
| Lng32 getNumEntries(Lng32 &numInput, Lng32 &numOutput); |
| Lng32 getAttributes(short entry, NABoolean forInput, |
| Lng32 &fsDatatype, Lng32 &length, |
| Lng32 *indOffset, Lng32 *varOffset); |
| Lng32 getDataOffsets(short entry, Lng32 forInput, |
| Lng32 *indOffset, Lng32 *varOffset); |
| |
| Lng32 getStmtAttr(char * stmtName, Lng32 attrName, |
| Lng32 * numeric_value, char * string_value); |
| |
| short fetchRowsPrologue(const char * sqlStrBuf, NABoolean noExec = FALSE, |
| NABoolean monitorThis = FALSE, |
| char * stmtName = NULL); |
| short fetchRowsEpilogue(const char * sqlStrBuf, NABoolean noClose = FALSE); |
| |
| short initializeInfoList(Queue* &infoList, NABoolean infoListIsOutputInfo); |
| |
| short fetchAllRows(Queue * &infoList, |
| const char * query, |
| Lng32 numOutputEntries = 0, |
| NABoolean varcharFormat = FALSE, |
| NABoolean monitorThis = FALSE, |
| NABoolean initInfoList = FALSE); |
| |
| short prepareAndExecRowsPrologue(const char * sqlInitialStrBuf, |
| char * sqlSecondaryStrBuf, |
| Queue * initialOutputVarPtrList, |
| Queue * continuingOutputVarPtrList, |
| Int64 &rowsAffected, |
| NABoolean monitorThis = FALSE); |
| |
| short execContinuingRows(Queue * secondaryOutputVarPtrs, |
| Int64 &rowsAffected); |
| |
| void setOutputPtrsAsInputPtrs(Queue * entry, |
| SQLDESC_ID * target_inputDesc = NULL); |
| |
| Lng32 setCharsetTypes(); |
| |
| Lng32 prepareAndExecRowsEpilogue(); |
| |
| Lng32 beginWork(); |
| Lng32 commitWork(); |
| Lng32 rollbackWork(); |
| Lng32 autoCommit(NABoolean v); // TRUE, set to ON. FALSE, set to OFF. |
| static Lng32 beginXn(); |
| static Lng32 commitXn(); |
| static Lng32 rollbackXn(); |
| static Lng32 statusXn(); |
| |
| Lng32 createContext(char* contextHandle); // out buf will return context handle |
| Lng32 switchContext(char* contextHandle); // in buf contains context handle |
| Lng32 currentContext(char* contextHandle); // out buf will return context handle |
| Lng32 deleteContext(char* contextHandle); // in buf contains context handle |
| |
| Lng32 retrieveSQLDiagnostics(ComDiagsArea *toDiags); |
| ComDiagsArea *allocAndRetrieveSQLDiagnostics(ComDiagsArea *&toDiags); |
| |
| CollHeap * getHeap() { return heap_; } |
| |
| char * outputBuf() { return outputBuf_; }; |
| Int32 outputDatalen() { return outputDatalen_; }; |
| |
| char * inputBuf() { return inputBuf_; }; |
| Int32 inputDatalen() { return inputDatalen_; }; |
| |
| void clearGlobalDiags(); |
| |
| Int32 getIsoMapping() { return isoMapping_; }; |
| void setIsoMapping(Int32 isoMapping) { isoMapping_ = isoMapping; }; |
| |
| Lng32 GetRowsAffected(Int64 *rowsAffected); |
| |
| Lng32 holdAndSetCQD(const char * defaultName, const char * defaultValue, ComDiagsArea *globalDiags = NULL); |
| |
| Lng32 restoreCQD(const char * defaultName, ComDiagsArea *globalDiags = NULL); |
| |
| Lng32 getCQDval(const char * defaultName, |
| char * val, |
| ComDiagsArea *globalDiags = NULL); |
| |
| void setNotExeUtilInternalQuery(NABoolean v) |
| {(v ? flags_ |= NOT_EXEUTIL_INTERNAL_QUERY : flags_ &= ~NOT_EXEUTIL_INTERNAL_QUERY); }; |
| NABoolean notExeUtilInternalQuery() { return (flags_ & NOT_EXEUTIL_INTERNAL_QUERY) != 0; }; |
| |
| Lng32 setCQS(const char * shape, ComDiagsArea *globalDiags = NULL); |
| Lng32 resetCQS(ComDiagsArea *globalDiags = NULL); |
| |
| // methods for routine invocation |
| Lng32 getRoutine( |
| /* IN */ const char *serializedInvocationInfo, |
| /* IN */ Int32 invocationInfoLen, |
| /* IN */ const char *serializedPlanInfo, |
| /* IN */ Int32 planInfoLen, |
| /* IN */ Int32 language, |
| /* IN */ Int32 paramStyle, |
| /* IN */ const char *externalName, |
| /* IN */ const char *containerName, |
| /* IN */ const char *externalPath, |
| /* IN */ const char *librarySqlName, |
| /* OUT */ Int32 *handle, |
| /* IN/OUT */ ComDiagsArea *diags); |
| |
| Lng32 invokeRoutine( |
| /* IN */ Int32 handle, |
| /* IN */ Int32 phaseEnumAsInt, |
| /* IN */ const char *serializedInvocationInfo, |
| /* IN */ Int32 invocationInfoLen, |
| /* OUT */ Int32 *invocationInfoLenOut, |
| /* IN */ const char *serializedPlanInfo, |
| /* IN */ Int32 planInfoLen, |
| /* IN */ Int32 planNum, |
| /* OUT */ Int32 *planInfoLenOut, |
| /* IN */ char *inputRow, |
| /* IN */ Int32 inputRowLen, |
| /* OUT */ char *outputRow, |
| /* IN */ Int32 outputRowLen, |
| /* IN/OUT */ ComDiagsArea *diags); |
| |
| Lng32 getRoutineInvocationInfo( |
| /* IN */ Int32 handle, |
| /* IN/OUT */ char *serializedInvocationInfo, |
| /* IN */ Int32 invocationInfoMaxLen, |
| /* OUT */ Int32 *invocationInfoLenOut, |
| /* IN/OUT */ char *serializedPlanInfo, |
| /* IN */ Int32 planInfoMaxLen, |
| /* IN */ Int32 planNum, |
| /* OUT */ Int32 *planInfoLenOut, |
| /* IN/OUT */ ComDiagsArea *diags); |
| |
| Lng32 putRoutine( |
| /* IN */ Int32 handle, |
| /* IN/OUT */ ComDiagsArea *diags); |
| |
| private: |
| struct Attrs |
| { |
| Lng32 fsDatatype_; |
| Lng32 nullFlag_; |
| Lng32 length_; |
| Lng32 varOffset_; |
| Lng32 indOffset_; |
| }; |
| |
| SQLMODULE_ID * module_; |
| SQLSTMT_ID * stmt_; |
| SQLDESC_ID * sql_src_; |
| SQLDESC_ID * input_desc_; |
| SQLDESC_ID * output_desc_; |
| char * outputBuf_; |
| Int32 isoMapping_; |
| Int32 outputDatalen_; |
| |
| char * explainData_; |
| Int32 explainDataLen_; |
| |
| Int32 numInputEntries_; |
| Int32 numOutputEntries_; |
| struct Attrs * inputAttrs_; |
| struct Attrs * outputAttrs_; |
| |
| SQLDESC_ID * rs_input_maxsize_desc_; |
| Int32 rs_maxsize_; |
| |
| char * inputBuf_; |
| Int32 inputDatalen_; |
| |
| SQLMODULE_ID * moduleWithCK_; |
| SQLSTMT_ID * stmtWithCK_; |
| SQLDESC_ID * sql_src_withCK_; |
| SQLDESC_ID * input_desc_withCK_; |
| SQLDESC_ID * output_desc_withCK_; |
| char * outputBuf_withCK_; |
| |
| // variables to process rowwise rowset |
| Int32 rsMaxsize_; // max number of of rows in a rowset |
| char * rsInputBuffer_; // rwrs buffer passed to sql/cli |
| Int32 currRSrow_; // current number of rows in the rsInputBuffer_ |
| |
| Int32 numQuadFields_; |
| struct SQLCLI_QUAD_FIELDS * quadFields_; |
| |
| CollHeap * heap_; |
| |
| ContextCli * currContext_; |
| const char * parentQid_; |
| |
| Lng32 flags_; |
| }; |
| |
| |
| #endif |