Browse Source

HPCC-8556 Refactor const char * query functions from helpers

Renamed context method to something a little clearer.
Other minor changes from code review.

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 12 years ago
parent
commit
1c18578504

+ 4 - 4
common/thorhelper/thorcommon.hpp

@@ -391,13 +391,13 @@ public:
     {
         return ctx->getRowAllocator(meta, activityId);
     }
-    virtual const char *getString(const char *str) const
+    virtual const char *cloneVString(const char *str) const
     {
-        return ctx->getString(str);
+        return ctx->cloneVString(str);
     }
-    virtual const char *getString(size32_t len, const char *str) const
+    virtual const char *cloneVString(size32_t len, const char *str) const
     {
-        return ctx->getString(len, str);
+        return ctx->cloneVString(len, str);
     }
     virtual void getResultRowset(size32_t & tcount, byte * * & tgt, const char * name, unsigned sequence, IEngineRowAllocator * _rowAllocator, bool isGrouped, IXmlToRowTransformer * xmlTransformer, ICsvToRowTransformer * csvTransformer)
     {

+ 4 - 4
ecl/eclagent/eclagent.ipp

@@ -609,13 +609,13 @@ public:
     {
         return allocatorMetaCache->ensure(meta, activityId);
     }
-    virtual const char *getString(const char *str) const
+    virtual const char *cloneVString(const char *str) const
     {
-        return rowManager->strdup(str);
+        return rowManager->cloneVString(str);
     }
-    virtual const char *getString(size32_t len, const char *str) const
+    virtual const char *cloneVString(size32_t len, const char *str) const
     {
-        return rowManager->strdup(len, str);
+        return rowManager->cloneVString(len, str);
     }
     virtual void getRowXML(size32_t & lenResult, char * & result, IOutputMetaData & info, const void * row, unsigned flags)
     {

+ 4 - 4
ecl/hqlcpp/hqlcatom.cpp

@@ -70,6 +70,8 @@ _ATOM clearAtom;
 _ATOM __clearHelperAtom;
 _ATOM clearPersistAtom;
 _ATOM clibExpIdAtom;
+_ATOM cloneVStringAtom;
+_ATOM cloneVStringXAtom;
 _ATOM codeGeneratorAtom;
 _ATOM codepage2UnicodeAtom;
 _ATOM codepage2UnicodeXAtom;
@@ -329,8 +331,6 @@ _ATOM getResultUnicodeAtom;
 _ATOM getResultVarStringAtom;
 _ATOM getResultVarUnicodeAtom;
 _ATOM getRootResultAtom;
-_ATOM getStringAtom;
-_ATOM getStringXAtom;
 _ATOM getWorkflowIdAtom;
 _ATOM getWuidAtom;
 _ATOM goAtom;
@@ -792,6 +792,8 @@ MODULE_INIT(INIT_PRIORITY_HQLATOM-1)
     MAKEATOM(__clearHelper);
     MAKEATOM(clearPersist);
     MAKEID(clibExp);
+    MAKEATOM(cloneVString);
+    MAKEATOM(cloneVStringX);
     MAKEATOM(codeGenerator);
     MAKEATOM(codepage2Unicode);
     MAKEATOM(codepage2UnicodeX);
@@ -1051,8 +1053,6 @@ MODULE_INIT(INIT_PRIORITY_HQLATOM-1)
     MAKEATOM(getResultVarString);
     MAKEATOM(getResultVarUnicode);
     MAKEATOM(getRootResult);
-    MAKEATOM(getString);
-    MAKEATOM(getStringX);
     MAKEATOM(getWorkflowId);
     MAKEATOM(getWuid);
     MAKEATOM(groupedDataset2RowsetX);

+ 2 - 2
ecl/hqlcpp/hqlcatom.hpp

@@ -70,6 +70,8 @@ extern _ATOM clearAtom;
 extern _ATOM __clearHelperAtom;
 extern _ATOM clearPersistAtom;
 extern _ATOM clibExpIdAtom;
+extern _ATOM cloneVStringAtom;
+extern _ATOM cloneVStringXAtom;
 extern _ATOM containerAtom;
 extern _ATOM codeGeneratorAtom;
 extern _ATOM codepage2UnicodeAtom;
@@ -329,8 +331,6 @@ extern _ATOM getResultUnicodeAtom;
 extern _ATOM getResultVarStringAtom;
 extern _ATOM getResultVarUnicodeAtom;
 extern _ATOM getRootResultAtom;
-extern _ATOM getStringAtom;
-extern _ATOM getStringXAtom;
 extern _ATOM getWorkflowIdAtom;
 extern _ATOM getWuidAtom;
 extern _ATOM groupedDataset2RowsetXAtom;

+ 2 - 2
ecl/hqlcpp/hqlcpp.cpp

@@ -3386,9 +3386,9 @@ void HqlCppTranslator::buildReturn(BuildCtx & ctx, IHqlExpression * expr, ITypeI
             {
                 _ATOM funcAtom;
                 if (expr->queryType()->getTypeCode()==type_varstring)
-                    funcAtom = getStringAtom;
+                    funcAtom = cloneVStringAtom;
                 else
-                    funcAtom = getStringXAtom;
+                    funcAtom = cloneVStringXAtom;
                 HqlExprArray args;
                 args.append(*LINK(expr));
                 OwnedHqlExpr call = bindFunctionCall(funcAtom, args);

+ 2 - 2
ecl/hqlcpp/hqlcppsys.ecl

@@ -655,8 +655,8 @@ const char * cppSystemText[]  = {
     "   _linkcounted_ dataset getResultRowset(const varstring stepname, unsigned4 sequence, boolean _allocator, boolean isGrouped, boolean xmltransformer, boolean csvtransformer) : ctxmethod,allocator(false),pure,entrypoint='getResultRowset';",
     "   linkcounted dictionary getResultDictionary(const varstring stepname, unsigned4 sequence, boolean xmltransformer, boolean csvtransformer, boolean hasher) : ctxmethod,pure,entrypoint='getResultDictionary';",
 
-    "   const varstring  getString(const varstring str) : ctxmethod,pure,entrypoint='getString';",
-    "   const varstring  getStringX(const string str) : ctxmethod,pure,entrypoint='getString';",
+    "   const varstring  cloneVString(const varstring str) : ctxmethod,pure,entrypoint='cloneVString';",
+    "   const varstring  cloneVStringX(const string str) : ctxmethod,pure,entrypoint='cloneVString';",
 
     //Don't make these pure because they may change over time.
     "   boolean isResult(const varstring stepname, unsigned4 sequence) : gctxmethod,entrypoint='isResult';",

+ 4 - 4
roxie/ccd/ccdactivities.cpp

@@ -590,13 +590,13 @@ public:
     {
         return queryContext->queryCodeContext()->getRowAllocator(meta, activityId); 
     }
-    virtual const char *getString(const char *str) const
+    virtual const char *cloneVString(const char *str) const
     {
-        return queryContext->queryCodeContext()->getString(str);
+        return queryContext->queryCodeContext()->cloneVString(str);
     }
-    virtual const char *getString(size32_t len, const char *str) const
+    virtual const char *cloneVString(size32_t len, const char *str) const
     {
-        return queryContext->queryCodeContext()->getString(len, str);
+        return queryContext->queryCodeContext()->cloneVString(len, str);
     }
     virtual void getRowXML(size32_t & lenResult, char * & result, IOutputMetaData & info, const void * row, unsigned flags)
     {

+ 4 - 4
roxie/ccd/ccdcontext.cpp

@@ -1211,14 +1211,14 @@ public:
         return allocatorMetaCache->ensure(meta, activityId);
     }
 
-    virtual const char *getString(const char *str) const
+    virtual const char *cloneVString(const char *str) const
     {
-        return rowManager->strdup(str);
+        return rowManager->cloneVString(str);
     }
 
-    virtual const char *getString(size32_t len, const char *str) const
+    virtual const char *cloneVString(size32_t len, const char *str) const
     {
-        return rowManager->strdup(len, str);
+        return rowManager->cloneVString(len, str);
     }
 
     virtual void getRowXML(size32_t & lenResult, char * & result, IOutputMetaData & info, const void * row, unsigned flags)

+ 3 - 3
roxie/roxiemem/roxiemem.cpp

@@ -2370,7 +2370,7 @@ public:
         return normalHeap.doAllocate(activityId);
     }
 
-    virtual const char *strdup(size32_t len, const char *str)
+    virtual const char *cloneVString(size32_t len, const char *str)
     {
         if (str)
         {
@@ -2386,10 +2386,10 @@ public:
         }
     }
 
-    virtual const char *strdup(const char *str)
+    virtual const char *cloneVString(const char *str)
     {
         if (str)
-            return strdup(strlen(str), str);
+            return cloneVString(strlen(str), str);
         else
             return NULL;
     }

+ 2 - 2
roxie/roxiemem/roxiemem.hpp

@@ -402,8 +402,8 @@ interface IRowResizeCallback
 interface IRowManager : extends IInterface
 {
     virtual void *allocate(memsize_t size, unsigned activityId) = 0;
-    virtual const char *strdup(const char *str) = 0;
-    virtual const char *strdup(size32_t len, const char *str) = 0;
+    virtual const char *cloneVString(const char *str) = 0;
+    virtual const char *cloneVString(size32_t len, const char *str) = 0;
     virtual void resizeRow(void * original, memsize_t copysize, memsize_t newsize, unsigned activityId, IRowResizeCallback & callback) = 0;
     virtual void resizeRow(memsize_t & capacity, void * & original, memsize_t copysize, memsize_t newsize, unsigned activityId) = 0;
     virtual void *finalizeRow(void *final, memsize_t originalSize, memsize_t finalSize, unsigned activityId) = 0;

+ 11 - 2
rtl/include/eclhelper.hpp

@@ -21,6 +21,15 @@
 /*
 This file contains interface definitions for the meta-information, dataset processing an activities.
 It should only contain pure interface definitions or inline functions.
+
+A note on naming conventions:
+  getXXX implies that the returned value should be released by the caller
+  queryXXX implies that it should not
+
+Methods named getXXX returning const char * from generated code will return a value that MAY need releasing (via roxiemem)
+or that may be constants. Callers should always call roxiemem::ReleaseRoxieRow on the returned value - this will do nothing
+if the supplied pointer was not from the roxiemem heap. Usually an OwnedRoxieString is the easiest way to achieve this.
+
 */
 
 #include "jscm.hpp"
@@ -578,8 +587,8 @@ interface ICodeContext : public IResourceContext
     // Memory management
 
     virtual IEngineRowAllocator * getRowAllocator(IOutputMetaData * meta, unsigned activityId) const = 0;
-    virtual const char * getString(const char *str) const = 0;
-    virtual const char * getString(size32_t len, const char *str) const = 0;
+    virtual const char * cloneVString(const char *str) const = 0;
+    virtual const char * cloneVString(size32_t len, const char *str) const = 0;
 
     // Called from generated code for FROMXML/TOXML
 

+ 2 - 2
thorlcr/graph/thgraph.hpp

@@ -474,8 +474,8 @@ class graph_decl CGraphBase : public CInterface, implements ILocalGraph, impleme
         virtual char *getResultVarString(const char * name, unsigned sequence) { return ctx->getResultVarString(name, sequence); }
         virtual UChar *getResultVarUnicode(const char * name, unsigned sequence) { return ctx->getResultVarUnicode(name, sequence); }
         virtual unsigned getResultHash(const char * name, unsigned sequence) { return ctx->getResultHash(name, sequence); }
-        virtual const char *getString(const char *str) const { return ctx->getString(str); }
-        virtual const char *getString(size32_t len, const char *str) const { return ctx->getString(len, str); }
+        virtual const char *cloneVString(const char *str) const { return ctx->cloneVString(str); }
+        virtual const char *cloneVString(size32_t len, const char *str) const { return ctx->cloneVString(len, str); }
         virtual char *getWuid() { return ctx->getWuid(); }
         virtual void getExternalResultRaw(unsigned & tlen, void * & tgt, const char * wuid, const char * stepname, unsigned sequence, IXmlToRowTransformer * xmlTransformer, ICsvToRowTransformer * csvTransformer) { ctx->getExternalResultRaw(tlen, tgt, wuid, stepname, sequence, xmlTransformer, csvTransformer); }
         virtual void executeGraph(const char * graphName, bool realThor, size32_t parentExtractSize, const void * parentExtract) { ctx->executeGraph(graphName, realThor, parentExtractSize, parentExtract); }

+ 4 - 4
thorlcr/thorcodectx/thcodectx.cpp

@@ -97,14 +97,14 @@ IEngineRowAllocator * CThorCodeContextBase::getRowAllocator(IOutputMetaData * me
     return job.getRowAllocator(meta, activityId);
 }
 
-const char * CThorCodeContextBase::getString(const char * str) const
+const char * CThorCodeContextBase::cloneVString(const char * str) const
 {
-    return job.queryRowManager()->strdup(str);
+    return job.queryRowManager()->cloneVString(str);
 }
 
-const char * CThorCodeContextBase::getString(size32_t len, const char * str) const
+const char * CThorCodeContextBase::cloneVString(size32_t len, const char * str) const
 {
-    return job.queryRowManager()->strdup(len, str);
+    return job.queryRowManager()->cloneVString(len, str);
 }
 
 ILocalGraph *CThorCodeContextBase::resolveLocalQuery(__int64 gid)

+ 2 - 2
thorlcr/thorcodectx/thcodectx.hpp

@@ -108,8 +108,8 @@ public:
     virtual char *getGroupName(); // thorlib.group()
     virtual char *queryIndexMetaData(char const * lfn, char const * xpath) { UNIMPLEMENTED; }
     virtual IEngineRowAllocator * getRowAllocator(IOutputMetaData * meta, unsigned activityId) const;
-    virtual const char *getString(const char *str) const;
-    virtual const char *getString(size32_t len, const char *str) const;
+    virtual const char *cloneVString(const char *str) const;
+    virtual const char *cloneVString(size32_t len, const char *str) const;
     virtual ILocalGraph *resolveLocalQuery(__int64 gid);
     virtual IThorChildGraph * resolveChildQuery(__int64 activityId, IHThorArg * colocal);
     virtual void getRowXML(size32_t & lenResult, char * & result, IOutputMetaData & info, const void * row, unsigned flags);