new COMMENT-ON SQL statement: review change - delete allocated spaces for function CmpSeabaseDDL::getSeabaseObjectComment
1. delete allocated COMMENT spaces after used. Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/4bdd4b84 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/4bdd4b84 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/4bdd4b84 Branch: refs/heads/master Commit: 4bdd4b84e5c718898c43575fe993051fd4fedaba Parents: 4127e1c Author: eedy <[email protected]> Authored: Mon Nov 6 13:39:16 2017 +0800 Committer: eedy <[email protected]> Committed: Mon Nov 6 13:39:16 2017 +0800 ---------------------------------------------------------------------- core/sql/comexe/ComTdb.h | 7 ++ core/sql/sqlcomp/CmpDescribe.cpp | 111 +++++++++++++++----------- core/sql/sqlcomp/CmpSeabaseDDL.h | 3 +- core/sql/sqlcomp/CmpSeabaseDDLschema.cpp | 14 ++-- core/sql/sqlcomp/CmpSeabaseDDLtable.cpp | 82 +++++++------------ 5 files changed, 110 insertions(+), 107 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4bdd4b84/core/sql/comexe/ComTdb.h ---------------------------------------------------------------------- diff --git a/core/sql/comexe/ComTdb.h b/core/sql/comexe/ComTdb.h index 73fa28a..1b90b90 100644 --- a/core/sql/comexe/ComTdb.h +++ b/core/sql/comexe/ComTdb.h @@ -1167,6 +1167,13 @@ class ComTdbVirtObjCommentInfo : public ComTdbVirtTableBase : ComTdbVirtTableBase() { init(); + + objectUid = 0; + objectComment = NULL; + numColumnComment = 0; + columnCommentArray = NULL; + numIndexComment = 0; + indexCommentArray = NULL; } virtual Int32 size() { return sizeof(ComTdbVirtObjCommentInfo);} http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4bdd4b84/core/sql/sqlcomp/CmpDescribe.cpp ---------------------------------------------------------------------- diff --git a/core/sql/sqlcomp/CmpDescribe.cpp b/core/sql/sqlcomp/CmpDescribe.cpp index fed0087..2d9c9da 100644 --- a/core/sql/sqlcomp/CmpDescribe.cpp +++ b/core/sql/sqlcomp/CmpDescribe.cpp @@ -3070,35 +3070,41 @@ short CmpDescribeSeabaseTable ( return -1; } - ComTdbVirtObjCommentInfo * objCommentInfo = NULL; - cmpSBD.getSeabaseObjectComment(objectUID, COM_VIEW_OBJECT, objCommentInfo); + ComTdbVirtObjCommentInfo objCommentInfo; + cmpSBD.getSeabaseObjectComment(objectUID, COM_VIEW_OBJECT, objCommentInfo, heap); - if (objCommentInfo != NULL) + //display VIEW COMMENT statements + if (objCommentInfo.objectComment != NULL) { //new line outputLine(*space, "", 0); - //display VIEW COMMENT statements - if (objCommentInfo->objectComment != NULL) - { - sprintf(buf, "COMMENT ON VIEW %s IS '%s' ;", - tableName.data(), - objCommentInfo->objectComment); - outputLine(*space, buf, 0); - } + sprintf(buf, "COMMENT ON VIEW %s IS '%s' ;", + tableName.data(), + objCommentInfo.objectComment); + outputLine(*space, buf, 0); + } + if (objCommentInfo.numColumnComment > 0 && objCommentInfo.columnCommentArray != NULL) + { //display Column COMMENT statements outputLine(*space, "", 0); - for (int idx = 0; idx < objCommentInfo->numColumnComment; idx++) + for (int idx = 0; idx < objCommentInfo.numColumnComment; idx++) { sprintf(buf, "COMMENT ON COLUMN %s.%s IS '%s' ;", tableName.data(), - objCommentInfo->columnCommentArray[idx].columnName, - objCommentInfo->columnCommentArray[idx].columnComment); + objCommentInfo.columnCommentArray[idx].columnName, + objCommentInfo.columnCommentArray[idx].columnComment); outputLine(*space, buf, 0); } } + //do a comment info memory clean + if (objCommentInfo.columnCommentArray != NULL) + { + NADELETEBASIC(objCommentInfo.columnCommentArray, heap); + } + cmpSBD.switchBackCompiler(); } @@ -3835,46 +3841,59 @@ short CmpDescribeSeabaseTable ( return -1; } - ComTdbVirtObjCommentInfo * objCommentInfo = NULL; - cmpSBD.getSeabaseObjectComment(objectUID, objType, objCommentInfo); - - if (objCommentInfo != NULL) + ComTdbVirtObjCommentInfo objCommentInfo; + cmpSBD.getSeabaseObjectComment(objectUID, objType, objCommentInfo, heap); + + //display Table COMMENT statements + if (objCommentInfo.objectComment != NULL) { - //new line - outputLine(*space, "", 0); + //new line + outputLine(*space, "", 0); + + sprintf(buf, "COMMENT ON %s %s IS '%s' ;", + objType == COM_BASE_TABLE_OBJECT? "TABLE" : "VIEW", + tableName.data(), + objCommentInfo.objectComment); + outputLine(*space, buf, 0); + } - //display Table COMMENT statements - if (objCommentInfo->objectComment != NULL) - { - sprintf(buf, "COMMENT ON %s %s IS '%s' ;", - objType == COM_BASE_TABLE_OBJECT? "TABLE" : "VIEW", - tableName.data(), - objCommentInfo->objectComment); - outputLine(*space, buf, 0); - } - - //display Column COMMENT statements + //display Column COMMENT statements + if (objCommentInfo.numColumnComment > 0 && objCommentInfo.columnCommentArray != NULL) + { outputLine(*space, "", 0); - for (int idx = 0; idx < objCommentInfo->numColumnComment; idx++) + for (int idx = 0; idx < objCommentInfo.numColumnComment; idx++) { sprintf(buf, "COMMENT ON COLUMN %s.%s IS '%s' ;", tableName.data(), - objCommentInfo->columnCommentArray[idx].columnName, - objCommentInfo->columnCommentArray[idx].columnComment); + objCommentInfo.columnCommentArray[idx].columnName, + objCommentInfo.columnCommentArray[idx].columnComment); outputLine(*space, buf, 0); } + } - //display Index COMMENT statements + //display Index COMMENT statements + if (objCommentInfo.numIndexComment > 0 && objCommentInfo.indexCommentArray != NULL) + { outputLine(*space, "", 0); - for (int idx = 0; idx < objCommentInfo->numIndexComment; idx++) + for (int idx = 0; idx < objCommentInfo.numIndexComment; idx++) { sprintf(buf, "COMMENT ON INDEX %s IS '%s' ;", - objCommentInfo->indexCommentArray[idx].indexFullName, - objCommentInfo->indexCommentArray[idx].indexComment); + objCommentInfo.indexCommentArray[idx].indexFullName, + objCommentInfo.indexCommentArray[idx].indexComment); outputLine(*space, buf, 0); } } + //do a comment info memory clean + if (objCommentInfo.columnCommentArray != NULL) + { + NADELETEBASIC(objCommentInfo.columnCommentArray, heap); + } + if (objCommentInfo.indexCommentArray != NULL) + { + NADELETEBASIC(objCommentInfo.indexCommentArray, heap); + } + cmpSBD.switchBackCompiler(); } @@ -4239,17 +4258,17 @@ char buf[1000]; return -1; } - ComTdbVirtObjCommentInfo * objCommentInfo = NULL; - cmpSBD.getSeabaseObjectComment(libraryUID, COM_LIBRARY_OBJECT, objCommentInfo); + ComTdbVirtObjCommentInfo objCommentInfo; + cmpSBD.getSeabaseObjectComment(libraryUID, COM_LIBRARY_OBJECT, objCommentInfo, heap); - if (objCommentInfo != NULL && objCommentInfo->objectComment != NULL) + if (objCommentInfo.objectComment != NULL) { //new line outputLine(*space, "", 0); sprintf(buf, "COMMENT ON LIBRARY %s IS '%s' ;", cn.getQualifiedNameObj().getQualifiedNameAsAnsiString(TRUE).data(), - objCommentInfo->objectComment); + objCommentInfo.objectComment); outputLine(*space, buf, 0); } @@ -4780,10 +4799,10 @@ short CmpDescribeRoutine (const CorrName & cn, return -1; } - ComTdbVirtObjCommentInfo * objCommentInfo = NULL; - cmpSBD.getSeabaseObjectComment(routineUID, COM_USER_DEFINED_ROUTINE_OBJECT, objCommentInfo); + ComTdbVirtObjCommentInfo objCommentInfo; + cmpSBD.getSeabaseObjectComment(routineUID, COM_USER_DEFINED_ROUTINE_OBJECT, objCommentInfo, heap); - if (objCommentInfo != NULL && objCommentInfo->objectComment != NULL) + if (objCommentInfo.objectComment != NULL) { //new line outputLine(*space, "", 0); @@ -4791,7 +4810,7 @@ short CmpDescribeRoutine (const CorrName & cn, sprintf(buf, "COMMENT ON %s %s IS '%s' ;", routine->getRoutineType() == COM_PROCEDURE_TYPE ? "PROCEDURE" : "FUNCTION", cn.getQualifiedNameObj().getQualifiedNameAsAnsiString(TRUE).data(), - objCommentInfo->objectComment); + objCommentInfo.objectComment); outputLine(*space, buf, 0); } http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4bdd4b84/core/sql/sqlcomp/CmpSeabaseDDL.h ---------------------------------------------------------------------- diff --git a/core/sql/sqlcomp/CmpSeabaseDDL.h b/core/sql/sqlcomp/CmpSeabaseDDL.h index a31ef52..a0e4e34 100644 --- a/core/sql/sqlcomp/CmpSeabaseDDL.h +++ b/core/sql/sqlcomp/CmpSeabaseDDL.h @@ -255,7 +255,8 @@ class CmpSeabaseDDL short getSeabaseObjectComment(Int64 object_uid, enum ComObjectType object_type, - ComTdbVirtObjCommentInfo * & comment_info); + ComTdbVirtObjCommentInfo & comment_info, + CollHeap * heap); short getObjectOwner(ExeCliInterface *cliInterface, const char * catName, http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4bdd4b84/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp ---------------------------------------------------------------------- diff --git a/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp b/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp index 021a605..e44faeb 100644 --- a/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp +++ b/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp @@ -452,13 +452,13 @@ Int16 status = ComUser::getAuthNameFromAuthID(objectOwner,username, output += "\";"; outlines.push_back(output.data()); - + // Display Comment of schema { - ComTdbVirtObjCommentInfo * objCommentInfo = NULL; - cmpSBD.getSeabaseObjectComment(schemaUID, objectType, objCommentInfo); + ComTdbVirtObjCommentInfo objCommentInfo; + cmpSBD.getSeabaseObjectComment(schemaUID, objectType, objCommentInfo, STMTHEAP); - if (objCommentInfo != NULL && objCommentInfo->objectComment != NULL) + if (objCommentInfo.objectComment != NULL) { outlines.push_back(" "); @@ -467,13 +467,11 @@ Int16 status = ComUser::getAuthNameFromAuthID(objectOwner,username, output += "."; output += schemaName.data(); output += " IS '"; - output += objCommentInfo->objectComment; + output += objCommentInfo.objectComment; output += "' ;"; - - outlines.push_back(output.data()); + outlines.push_back(output.data()); } - } cmpSBD.switchBackCompiler(); http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4bdd4b84/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp ---------------------------------------------------------------------- diff --git a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp index 5fd5794..886c42d 100644 --- a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp +++ b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp @@ -12942,13 +12942,20 @@ TrafDesc *CmpSeabaseDDL::getSeabaseRoutineDescInternal(const NAString &catName, short CmpSeabaseDDL::getSeabaseObjectComment(Int64 object_uid, enum ComObjectType object_type, - ComTdbVirtObjCommentInfo * & comment_info) + ComTdbVirtObjCommentInfo & comment_info, + CollHeap * heap) { Lng32 retcode = 0; Lng32 cliRC = 0; char query[4000]; - comment_info = NULL; + + comment_info.objectUid = object_uid; + comment_info.objectComment = NULL; + comment_info.numColumnComment = 0; + comment_info.columnCommentArray = NULL; + comment_info.numIndexComment = 0; + comment_info.indexCommentArray = NULL; ExeCliInterface cliInterface(STMTHEAP, NULL, NULL, CmpCommon::context()->sqlSession()->getParentQid()); @@ -12967,30 +12974,19 @@ short CmpSeabaseDDL::getSeabaseObjectComment(Int64 object_uid, return -1; } - if (objQueue->numEntries() == 1) + //We should have only 1 comment for object + if (objQueue->numEntries() > 0) { objQueue->position(); - - OutputInfo * vi = (OutputInfo*)objQueue->getNext(); - - comment_info = new(STMTHEAP) ComTdbVirtObjCommentInfo[1]; - comment_info->objectUid = object_uid; - comment_info->numColumnComment = 0; - comment_info->columnCommentArray = NULL; - comment_info->numIndexComment = 0; - comment_info->indexCommentArray = NULL; - comment_info->objectComment = (char*)vi->get(0); - } - else - { - return -1; + OutputInfo * vi = (OutputInfo*)objQueue->getNext(); + comment_info.objectComment = (char*)vi->get(0); } + //get index comments of table if (COM_BASE_TABLE_OBJECT == object_type) { - //get index comment of table str_sprintf(query, "select CATALOG_NAME||'.'||SCHEMA_NAME||'.'||OBJECT_NAME, COMMENT " - "from %s.\"%s\".%s as O, %s.\"%s\".%s as I " + "from %s.\"%s\".%s as O, %s.\"%s\".%s as I " "where I.BASE_TABLE_UID = %ld and O.OBJECT_UID = I.INDEX_UID and O.comment <> '' ;", getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS, getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_INDEXES, @@ -13007,23 +13003,14 @@ short CmpSeabaseDDL::getSeabaseObjectComment(Int64 object_uid, if (indexQueue->numEntries() > 0) { - if (NULL == comment_info) - { - comment_info = new(STMTHEAP) ComTdbVirtObjCommentInfo[1]; - comment_info->objectUid = object_uid; - comment_info->objectComment = NULL; - comment_info->numColumnComment = 0; - comment_info->columnCommentArray = NULL; - } - - comment_info->numIndexComment = indexQueue->numEntries(); - comment_info->indexCommentArray = new(STMTHEAP) ComTdbVirtIndexCommentInfo[comment_info->numIndexComment]; + comment_info.numIndexComment = indexQueue->numEntries(); + comment_info.indexCommentArray = new(heap) ComTdbVirtIndexCommentInfo[comment_info.numIndexComment]; indexQueue->position(); - for (Lng32 idx = 0; idx < comment_info->numIndexComment; idx++) + for (Lng32 idx = 0; idx < comment_info.numIndexComment; idx++) { OutputInfo * oi = (OutputInfo*)indexQueue->getNext(); - ComTdbVirtIndexCommentInfo &indexComment = comment_info->indexCommentArray[idx]; + ComTdbVirtIndexCommentInfo &indexComment = comment_info.indexCommentArray[idx]; // get the index full name indexComment.indexFullName = (char*) oi->get(0); @@ -13032,9 +13019,9 @@ short CmpSeabaseDDL::getSeabaseObjectComment(Int64 object_uid, } } + //get column comments of table and view if (COM_BASE_TABLE_OBJECT == object_type || COM_VIEW_OBJECT == object_type) { - //get column comment of table str_sprintf(query, "select COLUMN_NAME, COMMENT from %s.\"%s\".%s where OBJECT_UID = %ld and comment <> '' order by COLUMN_NUMBER ;", getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_COLUMNS, object_uid); @@ -13049,28 +13036,19 @@ short CmpSeabaseDDL::getSeabaseObjectComment(Int64 object_uid, if (colQueue->numEntries() > 0) { - if (NULL == comment_info) - { - comment_info = new(STMTHEAP) ComTdbVirtObjCommentInfo[1]; - comment_info->objectUid = object_uid; - comment_info->objectComment = NULL; - comment_info->numIndexComment = 0; - comment_info->indexCommentArray = NULL; - } - - comment_info->numColumnComment = colQueue->numEntries(); - comment_info->columnCommentArray = new(STMTHEAP) ComTdbVirtColumnCommentInfo[comment_info->numColumnComment]; + comment_info.numColumnComment = colQueue->numEntries(); + comment_info.columnCommentArray = new(heap) ComTdbVirtColumnCommentInfo[comment_info.numColumnComment]; colQueue->position(); - for (Lng32 idx = 0; idx < comment_info->numColumnComment; idx++) - { - OutputInfo * oi = (OutputInfo*)colQueue->getNext(); - ComTdbVirtColumnCommentInfo &colComment = comment_info->columnCommentArray[idx]; + for (Lng32 idx = 0; idx < comment_info.numColumnComment; idx++) + { + OutputInfo * oi = (OutputInfo*)colQueue->getNext(); + ComTdbVirtColumnCommentInfo &colComment = comment_info.columnCommentArray[idx]; - // get the column name - colComment.columnName = (char*) oi->get(0); - colComment.columnComment = (char*) oi->get(1); - } + // get the column name + colComment.columnName = (char*) oi->get(0); + colComment.columnComment = (char*) oi->get(1); + } } }
