Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 69785200B8B for ; Tue, 20 Sep 2016 01:51:18 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 67F47160ADC; Mon, 19 Sep 2016 23:51:18 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 8691E160ACC for ; Tue, 20 Sep 2016 01:51:17 +0200 (CEST) Received: (qmail 96937 invoked by uid 500); 19 Sep 2016 23:51:16 -0000 Mailing-List: contact commits-help@trafodion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: commits@trafodion.apache.org Delivered-To: mailing list commits@trafodion.apache.org Received: (qmail 96928 invoked by uid 99); 19 Sep 2016 23:51:16 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Sep 2016 23:51:16 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 5976B1804C1 for ; Mon, 19 Sep 2016 23:51:16 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.646 X-Spam-Level: X-Spam-Status: No, score=-4.646 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id ahI-8p5Un0i7 for ; Mon, 19 Sep 2016 23:51:14 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with SMTP id A39595FBB7 for ; Mon, 19 Sep 2016 23:51:13 +0000 (UTC) Received: (qmail 96827 invoked by uid 99); 19 Sep 2016 23:51:12 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Sep 2016 23:51:12 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 9AC40E04BA; Mon, 19 Sep 2016 23:51:12 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: dbirdsall@apache.org To: commits@trafodion.incubator.apache.org Date: Mon, 19 Sep 2016 23:51:12 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/2] incubator-trafodion git commit: [TRAFODION-1755] - Additional changes to handle error 8887. archived-at: Mon, 19 Sep 2016 23:51:18 -0000 Repository: incubator-trafodion Updated Branches: refs/heads/master 9439b687f -> 16ebe09a1 [TRAFODION-1755] - Additional changes to handle error 8887. Changes in mxosrvr to handle null terminator in explain plan as needed by the following pull request: https://github.com/apache/incubator-trafodion/pull/694/files Without these changes plans > 50K fail with error 8887. Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/56dbe754 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/56dbe754 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/56dbe754 Branch: refs/heads/master Commit: 56dbe7548156e18ad45bfd5f7007853e9bcf957b Parents: cc392ff Author: Arvind Narain Authored: Mon Sep 19 20:35:30 2016 +0000 Committer: Arvind Narain Committed: Mon Sep 19 20:35:30 2016 +0000 ---------------------------------------------------------------------- core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp | 118 +++++++++++-------- 1 file changed, 72 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/56dbe754/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp ---------------------------------------------------------------------- diff --git a/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp b/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp index d0ee521..ef7efdb 100644 --- a/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp +++ b/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp @@ -1015,12 +1015,14 @@ static void* SessionWatchDog(void* arg) } else if (retcode < 0) { - char errStr[256]; - sprintf( errStr, "Error updating explain data. SQL_EXEC_StoreExplainData() returned: %d", retcode ); - SendEventMsg(MSG_ODBC_NSK_ERROR, EVENTLOG_ERROR_TYPE, + char errStr[256]; + sprintf( errStr, "Error updating explain data. SQL_EXEC_StoreExplainData() returned: %d", retcode ); + SendEventMsg(MSG_ODBC_NSK_ERROR, EVENTLOG_ERROR_TYPE, 0, ODBCMX_SERVER, srvrGlobal->srvrObjRef, 1, errStr); } + // Clear diagnostics + SRVR::WSQL_EXEC_ClearDiagnostics(NULL); } } } @@ -6712,7 +6714,7 @@ bool getSQLInfo(E_GetSQLInfoType option, long stmtHandle, char *stmtLabel ) return true; // allocate explainDataLen bytes of explainData space - explainData = new char[explainDataLen]; + explainData = new char[explainDataLen + 1]; if (explainData == NULL) { char errStr[128]; @@ -6724,16 +6726,19 @@ bool getSQLInfo(E_GetSQLInfoType option, long stmtHandle, char *stmtLabel ) } iqqcode = SQL_EXEC_GetExplainData(&(pSrvrStmt->stmt), explainData, - explainDataLen, + explainDataLen + 1, &retExplainLen); if (iqqcode == -CLI_GENCODE_BUFFER_TOO_SMALL) { explainDataLen = retExplainLen; + // Clear diagnostics + SRVR::WSQL_EXEC_ClearDiagnostics(NULL); + // allocate explainDataLen bytes of explainData space if (explainData) delete explainData; - explainData = new char[explainDataLen]; + explainData = new char[explainDataLen + 1]; if (explainData == NULL) { char errStr[128]; @@ -6743,18 +6748,24 @@ bool getSQLInfo(E_GetSQLInfoType option, long stmtHandle, char *stmtLabel ) srvrGlobal->srvrObjRef, 1, errStr); return false; } + iqqcode = SQL_EXEC_GetExplainData(&(pSrvrStmt->stmt), explainData, - explainDataLen, + explainDataLen + 1, &retExplainLen); } - else if (iqqcode == -EXE_NO_EXPLAIN_INFO) - { - retExplainLen = 0; - if (explainData) - delete explainData; - explainData = 0; - } + else if (iqqcode == -EXE_NO_EXPLAIN_INFO) + { + retExplainLen = 0; + if (explainData) + delete explainData; + explainData = 0; + iqqcode = 0; + + // Clear diagnostics + SRVR::WSQL_EXEC_ClearDiagnostics(NULL); + } + if (iqqcode < 0) { char errStr[256]; @@ -6770,8 +6781,10 @@ bool getSQLInfo(E_GetSQLInfoType option, long stmtHandle, char *stmtLabel ) delete pSrvrStmt->sqlPlan; pSrvrStmt->sqlPlan = NULL; } + pSrvrStmt->sqlPlan = explainData; - pSrvrStmt->sqlPlanLen = retExplainLen; + if (retExplainLen > 0) + pSrvrStmt->sqlPlanLen = retExplainLen + 1; // include null terminator pSrvrStmt->exPlan = SRVR_STMT_HDL::COLLECTED; return true; break; @@ -9379,43 +9392,56 @@ bailout: } short DO_WouldLikeToExecute( - IDL_char *stmtLabel - , Long stmtHandle - , IDL_long* returnCode - , IDL_long* sqlWarningOrErrorLength - , BYTE*& sqlWarningOrError - ) + IDL_char *stmtLabel + , Long stmtHandle + , IDL_long* returnCode + , IDL_long* sqlWarningOrErrorLength + , BYTE*& sqlWarningOrError + ) { - SRVR_STMT_HDL *pSrvrStmt = NULL; - if (stmtLabel != NULL && stmtLabel[0] != 0) - pSrvrStmt = SRVR::getSrvrStmt(stmtLabel, FALSE); - else - pSrvrStmt = (SRVR_STMT_HDL *)stmtHandle; + SRVR_STMT_HDL *pSrvrStmt = NULL; + if (stmtLabel != NULL && stmtLabel[0] != 0) + pSrvrStmt = SRVR::getSrvrStmt(stmtLabel, FALSE); + else + pSrvrStmt = (SRVR_STMT_HDL *)stmtHandle; - if (pSrvrStmt == NULL) - return 0; + if (pSrvrStmt == NULL) + return 0; - if (srvrGlobal->sqlPlan) - getSQLInfo( EXPLAIN_PLAN, stmtHandle, stmtLabel ); + if (srvrGlobal->sqlPlan) + { + if (! getSQLInfo( EXPLAIN_PLAN, stmtHandle, stmtLabel )) + { + // Clear diagnostics if there were errors while retrieving the plan + SRVR::WSQL_EXEC_ClearDiagnostics(NULL); - if(resStatStatement != NULL) - { - resStatStatement->wouldLikeToStart_ts = JULIANTIMESTAMP(); - resStatStatement->pubStarted = false; - resStatStatement->queryFinished = false; - } + if (pSrvrStmt->sqlPlan != NULL) + { + delete pSrvrStmt->sqlPlan; + pSrvrStmt->sqlPlan = NULL; + pSrvrStmt->sqlPlanLen = 0; + } + } + } - // Update the query status - pSrvrStmt->m_state = QUERY_EXECUTING; + if (resStatStatement != NULL) + { + resStatStatement->wouldLikeToStart_ts = JULIANTIMESTAMP(); + resStatStatement->pubStarted = false; + resStatStatement->queryFinished = false; + } - pQueryStmt = pSrvrStmt; - pSrvrStmt->m_bDoneWouldLikeToExecute = true; - if ((srvrGlobal->m_bStatisticsEnabled)&&(srvrGlobal->m_statisticsPubType==STATISTICS_AGGREGATED)&&(srvrGlobal->m_iQueryPubThreshold>=0)) - { - limit_count=0; - } - - return 0; +// Update the query status + pSrvrStmt->m_state = QUERY_EXECUTING; + + pQueryStmt = pSrvrStmt; + pSrvrStmt->m_bDoneWouldLikeToExecute = true; + if ((srvrGlobal->m_bStatisticsEnabled)&&(srvrGlobal->m_statisticsPubType==STATISTICS_AGGREGATED)&&(srvrGlobal->m_iQueryPubThreshold>=0)) + { + limit_count=0; + } + + return 0; } short qrysrvc_ExecuteFinished(