Browse Source

HPCC-14816 Minor memory reduction for quoted c++ statements

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 9 năm trước cách đây
mục cha
commit
0126f74e8f

+ 12 - 12
ecl/hqlcpp/hqlckey.cpp

@@ -421,7 +421,7 @@ void KeyedJoinInfo::buildClearRightFunction(BuildCtx & classctx)
         //Need to initialize the record with the zero logical values, not zero key values
         //which differs for biased integers etc.
         BuildCtx funcctx(classctx);
-        funcctx.addQuotedCompound("virtual size32_t createDefaultRight(ARowBuilder & crSelf)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t createDefaultRight(ARowBuilder & crSelf)");
         translator.ensureRowAllocated(funcctx, "crSelf");
         
         BoundRow * selfCursor = translator.bindSelf(funcctx, rawKey, "crSelf");
@@ -442,7 +442,7 @@ void KeyedJoinInfo::buildExtractFetchFields(BuildCtx & ctx)
     if (fileAccessDataset)
     {
         BuildCtx ctx1(ctx);
-        ctx1.addQuotedCompound("virtual size32_t extractFetchFields(ARowBuilder & crSelf, const void * _left)");
+        ctx1.addQuotedCompoundLiteral("virtual size32_t extractFetchFields(ARowBuilder & crSelf, const void * _left)");
         translator.ensureRowAllocated(ctx1, "crSelf");
         if (fileAccessTransform)
         {
@@ -463,7 +463,7 @@ void KeyedJoinInfo::buildExtractIndexReadFields(BuildCtx & ctx)
 {
     //virtual size32_t extractIndexReadFields(ARowBuilder & crSelf, const void * _left) = 0;
     BuildCtx ctx1(ctx);
-    ctx1.addQuotedCompound("virtual size32_t extractIndexReadFields(ARowBuilder & crSelf, const void * _left)");
+    ctx1.addQuotedCompoundLiteral("virtual size32_t extractIndexReadFields(ARowBuilder & crSelf, const void * _left)");
     translator.ensureRowAllocated(ctx1, "crSelf");
     if (keyAccessTransform)
     {
@@ -483,7 +483,7 @@ void KeyedJoinInfo::buildExtractJoinFields(ActivityInstance & instance)
 {
     //virtual size32_t extractJoinFields(void *dest, const void *diskRow, IBlobProvider * blobs) = 0;
     BuildCtx extractctx(instance.startctx);
-    extractctx.addQuotedCompound("virtual size32_t extractJoinFields(ARowBuilder & crSelf, const void *_left, unsigned __int64 _filepos, IBlobProvider * blobs)");
+    extractctx.addQuotedCompoundLiteral("virtual size32_t extractJoinFields(ARowBuilder & crSelf, const void *_left, unsigned __int64 _filepos, IBlobProvider * blobs)");
     translator.ensureRowAllocated(extractctx, "crSelf");
     if (needToExtractJoinFields())
     {
@@ -526,7 +526,7 @@ void KeyedJoinInfo::buildIndexReadMatch(BuildCtx & ctx)
     if (matchExpr)
     {
         BuildCtx matchctx(ctx);
-        matchctx.addQuotedCompound("virtual bool indexReadMatch(const void * _left, const void * _right, unsigned __int64 _filepos, IBlobProvider * blobs)");
+        matchctx.addQuotedCompoundLiteral("virtual bool indexReadMatch(const void * _left, const void * _right, unsigned __int64 _filepos, IBlobProvider * blobs)");
 
         matchctx.addQuotedLiteral("const unsigned char * left = (const unsigned char *) _left;");
         matchctx.addQuotedLiteral("const unsigned char * right = (const unsigned char *) _right;");
@@ -553,7 +553,7 @@ void KeyedJoinInfo::buildLeftOnly(BuildCtx & ctx)
     if (leftOnlyMatch)
     {
         BuildCtx funcctx(ctx);
-        funcctx.addQuotedCompound("virtual bool leftCanMatch(const void * _left)");
+        funcctx.addQuotedCompoundLiteral("virtual bool leftCanMatch(const void * _left)");
         funcctx.addQuotedLiteral("const unsigned char * left = (const unsigned char *)_left;");
         translator.bindTableCursor(funcctx, expr->queryChild(0), "left", no_left, joinSeq);
         translator.buildReturn(funcctx, leftOnlyMatch);
@@ -567,7 +567,7 @@ void KeyedJoinInfo::buildMonitors(BuildCtx & ctx)
 
     //---- virtual void createSegmentMonitors(struct IIndexReadContext *) { ... } ----
     BuildCtx createSegmentCtx(ctx);
-    createSegmentCtx.addQuotedCompound("virtual void createSegmentMonitors(IIndexReadContext *irc, const void * _left)");
+    createSegmentCtx.addQuotedCompoundLiteral("virtual void createSegmentMonitors(IIndexReadContext *irc, const void * _left)");
     createSegmentCtx.addQuotedLiteral("const unsigned char * left = (const unsigned char *) _left;");
     translator.bindTableCursor(createSegmentCtx, keyAccessDataset, "left", no_left, joinSeq);
     monitors->buildSegments(createSegmentCtx, "irc", false);
@@ -582,14 +582,14 @@ void KeyedJoinInfo::buildTransform(BuildCtx & ctx)
     case no_join:
     case no_denormalize:
         {
-            funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned __int64 _filepos, unsigned counter)");
+            funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned __int64 _filepos, unsigned counter)");
 
             translator.associateCounter(funcctx, counter, "counter");
             break;
         }
     case no_denormalizegroup:
         {
-            funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned numRows, const void * * _rows)");
+            funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned numRows, const void * * _rows)");
             funcctx.addQuotedLiteral("unsigned char * * rows = (unsigned char * *) _rows;");
             break;
         }
@@ -751,7 +751,7 @@ void KeyedJoinInfo::buildTransformBody(BuildCtx & ctx, IHqlExpression * transfor
 void KeyedJoinInfo::buildFailureTransform(BuildCtx & ctx, IHqlExpression * onFailTransform)
 {
     BuildCtx funcctx(ctx);
-    funcctx.addQuotedCompound("virtual size32_t onFailTransform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned __int64 _filepos, IException * except)");
+    funcctx.addQuotedCompoundLiteral("virtual size32_t onFailTransform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned __int64 _filepos, IException * except)");
     translator.associateLocalFailure(funcctx, "except");
     translator.ensureRowAllocated(funcctx, "crSelf");
 
@@ -1252,7 +1252,7 @@ void HqlCppTranslator::buildKeyedJoinExtra(ActivityInstance & instance, IHqlExpr
         IHqlExpression * index = info->queryKey();
         IHqlExpression * indexRecord = index->queryRecord();
         BuildCtx ctx4(instance.startctx);
-        ctx4.addQuotedCompound("virtual unsigned __int64 extractPosition(const void * _right)");
+        ctx4.addQuotedCompoundLiteral("virtual unsigned __int64 extractPosition(const void * _right)");
         ctx4.addQuotedLiteral("const unsigned char * right = (const unsigned char *) _right;");
         bindTableCursor(ctx4, index, "right");
         OwnedHqlExpr fileposExpr = createSelectExpr(LINK(index), LINK(indexRecord->queryChild(indexRecord->numChildren()-1)));
@@ -1283,7 +1283,7 @@ void HqlCppTranslator::buildKeyedJoinExtra(ActivityInstance & instance, IHqlExpr
         if (limit->hasAttribute(skipAtom))
         {
             BuildCtx ctx1(instance.startctx);
-            ctx1.addQuotedCompound("virtual unsigned __int64 getSkipLimit()");
+            ctx1.addQuotedCompoundLiteral("virtual unsigned __int64 getSkipLimit()");
             buildReturn(ctx1, limit->queryChild(0));
         }
         else

+ 2 - 2
ecl/hqlcpp/hqlcpp.cpp

@@ -5540,11 +5540,11 @@ void HqlCppTranslator::doBuildAssignCatch(BuildCtx & ctx, const CHqlBoundTarget
     subctx.addGroup();
 
     BuildCtx tryctx(subctx);
-    tryctx.addQuotedCompound("try");
+    tryctx.addQuotedCompoundLiteral("try");
     buildExprAssign(tryctx, target, expr->queryChild(0));
 
     BuildCtx catchctx(subctx);
-    catchctx.addQuotedCompound("catch (IException * e)");
+    catchctx.addQuotedCompoundLiteral("catch (IException * e)");
     IHqlExpression * exceptVar = associateLocalFailure(catchctx, "e");
     buildExprAssign(catchctx, target, expr->queryChild(1));
 

+ 2 - 2
ecl/hqlcpp/hqlcset.cpp

@@ -109,7 +109,7 @@ void BaseDatasetCursor::buildIterateMembers(BuildCtx & declarectx, BuildCtx & in
 
     //row = iter.first()
     BuildCtx firstctx(declarectx);
-    firstctx.addQuotedCompound("virtual bool first()");
+    firstctx.addQuotedCompoundLiteral("virtual bool first()");
     s.clear().append(rowName).append(" = (byte *)").append(iterName).append(".first();");
     firstctx.addQuoted(s);
     s.clear().append("return ").append(rowName).append(" != NULL;");
@@ -117,7 +117,7 @@ void BaseDatasetCursor::buildIterateMembers(BuildCtx & declarectx, BuildCtx & in
 
     //row = iter.first()
     BuildCtx nextctx(declarectx);
-    nextctx.addQuotedCompound("virtual bool next()");
+    nextctx.addQuotedCompoundLiteral("virtual bool next()");
     s.clear().append(rowName).append(" = (byte *)").append(iterName).append(".next();");
     nextctx.addQuoted(s);
     s.clear().append("return ").append(rowName).append(" != NULL;");

+ 1 - 1
ecl/hqlcpp/hqlecl.cpp

@@ -489,7 +489,7 @@ void HqlDllGenerator::addWorkUnitAsResource()
 void HqlDllGenerator::insertStandAloneCode()
 {
     BuildCtx ctx(static_cast<HqlCppInstance &>(*code), goAtom);
-    ctx.addQuotedCompound("int main(int argc, const char *argv[])");
+    ctx.addQuotedCompoundLiteral("int main(int argc, const char *argv[])");
     ctx.addQuotedLiteral("return start_query(argc, argv);\n");
 }
 

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 135 - 135
ecl/hqlcpp/hqlhtcpp.cpp


+ 1 - 1
ecl/hqlcpp/hqlinline.cpp

@@ -1915,7 +1915,7 @@ void NestedEvalContext::ensureHelpersExist()
 
         //void onStart(const byte * parentExtract)
         BuildCtx onstartctx(onStart.declarectx);
-        IHqlStmt * onStartStmt = onstartctx.addQuotedCompound("inline void onStart()");
+        IHqlStmt * onStartStmt = onstartctx.addQuotedCompoundLiteral("inline void onStart()");
         if (parentExtract)
             parentExtract->beginChildActivity(onStart.declarectx, onstartctx, GraphCoLocal, colocalMember, true, parentExtract->canSerializeFields(), NULL);
 

+ 9 - 9
ecl/hqlcpp/hqliter.cpp

@@ -280,27 +280,27 @@ void CompoundIteratorBuilder::createSingleIterator(StringBuffer & iterName, IHql
     if (expr->queryBody() == root)
     {
         BuildCtx firstctx(classctx);
-        firstctx.addQuotedCompound("virtual const byte * first()");
+        firstctx.addQuotedCompoundLiteral("virtual const byte * first()");
         createRawFirstFunc(firstctx, expr, cursors);
 
         BuildCtx nextctx(classctx);
-        nextctx.addQuotedCompound("virtual const byte * next()");
+        nextctx.addQuotedCompoundLiteral("virtual const byte * next()");
         createRawNextFunc(nextctx, expr, cursors);
     }
     else
     {
         BuildCtx rawfirstctx(classctx);
-        rawfirstctx.addQuotedCompound("inline const byte * rawFirst()");
+        rawfirstctx.addQuotedCompoundLiteral("inline const byte * rawFirst()");
         createRawFirstFunc(rawfirstctx, root, cursors);
 
         BuildCtx rawnextctx(classctx);
-        rawnextctx.addQuotedCompound("virtual const byte * rawNext()");
+        rawnextctx.addQuotedCompoundLiteral("virtual const byte * rawNext()");
         createRawNextFunc(rawnextctx, root, cursors);
 
         OwnedHqlExpr failValue = createTranslatedOwned(createValue(no_nullptr, makeVoidType()));
         TransformSequenceBuilder checkValidBuilder(translator, failValue);
         BuildCtx checkctx(classctx);
-        checkctx.addQuotedCompound("inline const byte * checkValid()");
+        checkctx.addQuotedCompoundLiteral("inline const byte * checkValid()");
         bindParentCursors(checkctx, cursors);
         if (isArrayRowset(expr->queryType()))
             translator.bindTableCursor(checkctx, root, "(*cur)");
@@ -313,15 +313,15 @@ void CompoundIteratorBuilder::createSingleIterator(StringBuffer & iterName, IHql
         checkctx.addReturn(row);
 
         BuildCtx firstctx(classctx);
-        firstctx.addQuotedCompound("virtual const byte * first()");
+        firstctx.addQuotedCompoundLiteral("virtual const byte * first()");
         firstctx.addQuotedLiteral("if (!rawFirst()) return NULL;");
-        firstctx.addQuotedCompound("for (;;)");
+        firstctx.addQuotedCompoundLiteral("for (;;)");
         firstctx.addQuotedLiteral("const byte * valid = checkValid(); if (valid) return valid;");
         firstctx.addQuotedLiteral("if (!rawNext()) return NULL;");
 
         BuildCtx nextctx(classctx);
-        nextctx.addQuotedCompound("virtual const byte * next()");
-        nextctx.addQuotedCompound("for (;;)");
+        nextctx.addQuotedCompoundLiteral("virtual const byte * next()");
+        nextctx.addQuotedCompoundLiteral("for (;;)");
         nextctx.addQuotedLiteral("if (!rawNext()) return NULL;");
         nextctx.addQuotedLiteral("const byte * valid = checkValid(); if (valid) return valid;");
     }

+ 4 - 4
ecl/hqlcpp/hqllib.cpp

@@ -480,7 +480,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityLibrarySelect(BuildCtx & ctx,
 void HqlCppTranslator::buildLibraryInstanceExtract(BuildCtx & ctx, HqlCppLibraryInstance * libraryInstance)
 {
     BuildCtx subctx(ctx);
-    subctx.addQuotedCompound("virtual void createParentExtract(rtlRowBuilder & builder)");
+    subctx.addQuotedCompoundLiteral("virtual void createParentExtract(rtlRowBuilder & builder)");
 
 
     BuildCtx beforeBuilderCtx(subctx);
@@ -585,9 +585,9 @@ ABoundActivity * HqlCppTranslator::doBuildActivityLibraryInstance(BuildCtx & ctx
 
     StringBuffer s;
     BuildCtx metactx(instance->classctx);
-    metactx.addQuotedCompound("virtual IOutputMetaData * queryOutputMeta(unsigned whichOutput)");
+    metactx.addQuotedCompoundLiteral("virtual IOutputMetaData * queryOutputMeta(unsigned whichOutput)");
     BuildCtx switchctx(metactx);
-    switchctx.addQuotedCompound("switch (whichOutput)");
+    switchctx.addQuotedCompoundLiteral("switch (whichOutput)");
 
     HqlDummyLookupContext dummyCtx(NULL);
     IHqlScope * moduleScope = module->queryScope();
@@ -604,7 +604,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityLibraryInstance(BuildCtx & ctx
 
     //Library Name must be onCreate invariant
     BuildCtx namectx(instance->createctx);
-    namectx.addQuotedCompound("virtual char * getLibraryName()");
+    namectx.addQuotedCompoundLiteral("virtual char * getLibraryName()");
     buildReturn(namectx, name, unknownVarStringType);
 
     buildInstanceSuffix(instance);

+ 12 - 12
ecl/hqlcpp/hqlnlp.cpp

@@ -223,9 +223,9 @@ void NlpParseContext::buildValidators(HqlCppTranslator & translator, BuildCtx &
         translator.beginNestedClass(helperctx, "helper", "INlpHelper");
 
         BuildCtx funcctx(helperctx);
-        funcctx.addQuotedCompound("virtual IValidator * queryValidator(unsigned i)");
+        funcctx.addQuotedCompoundLiteral("virtual IValidator * queryValidator(unsigned i)");
         BuildCtx casectx(funcctx);
-        casectx.addQuotedCompound("switch (i)");
+        casectx.addQuotedCompoundLiteral("switch (i)");
 
         ForEachItemIn(idx, validators)
         {
@@ -243,14 +243,14 @@ void NlpParseContext::buildValidators(HqlCppTranslator & translator, BuildCtx &
             CHqlBoundExpr boundMatched;
             if (kind != ValidateIsUnicode)
             {
-                validctx.addQuotedCompound("virtual bool isValid(unsigned len, const char * data)");
+                validctx.addQuotedCompoundLiteral("virtual bool isValid(unsigned len, const char * data)");
                 boundMatched.length.setown(createVariable("len", LINK(sizetType)));
                 boundMatched.expr.setown(createVariable("data", makeReferenceModifier(LINK(unknownStringType))));
                 validctx.associateExpr(activeMatchTextExpr, boundMatched);
             }
             else
             {
-                validctx.addQuotedCompound("virtual bool isValid(unsigned len, const UChar * data)");
+                validctx.addQuotedCompoundLiteral("virtual bool isValid(unsigned len, const UChar * data)");
                 boundMatched.length.setown(createVariable("len", LINK(sizetType)));
                 boundMatched.expr.setown(createVariable("data", makeReferenceModifier(LINK(unknownUnicodeType))));
                 validctx.associateExpr(activeMatchUnicodeExpr, boundMatched);
@@ -282,10 +282,10 @@ void NlpParseContext::buildProductions(HqlCppTranslator & translator, BuildCtx &
 
     {
         BuildCtx metactx(classctx);
-        metactx.addQuotedCompound("virtual IOutputMetaData * queryProductionMeta(unsigned id)");
+        metactx.addQuotedCompoundLiteral("virtual IOutputMetaData * queryProductionMeta(unsigned id)");
 
         BuildCtx metacasectx(metactx);
-        metacasectx.addQuotedCompound("switch (id)");
+        metacasectx.addQuotedCompoundLiteral("switch (id)");
 
         StringBuffer s;
         ForEachItemIn(i, productions)
@@ -304,11 +304,11 @@ void NlpParseContext::buildProductions(HqlCppTranslator & translator, BuildCtx &
     {
         OwnedHqlExpr callback = createVariable("input", makeBoolType());
         BuildCtx prodctx(startctx);
-        prodctx.addQuotedCompound("virtual size32_t executeProduction(ARowBuilder & crSelf, unsigned id, IProductionCallback * input)");
+        prodctx.addQuotedCompoundLiteral("virtual size32_t executeProduction(ARowBuilder & crSelf, unsigned id, IProductionCallback * input)");
         prodctx.associateExpr(activeProductionMarkerExpr, callback);
 
         BuildCtx prodcasectx(prodctx);
-        prodcasectx.addQuotedCompound("switch (id)");
+        prodcasectx.addQuotedCompoundLiteral("switch (id)");
 
         StringBuffer s, subname;
         ForEachItemIn(i, productions)
@@ -511,7 +511,7 @@ void HqlCppTranslator::doBuildParseTransform(BuildCtx & classctx, IHqlExpression
 {
     BuildCtx funcctx(classctx);
 
-    funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, IMatchedResults * matched, IMatchWalker * walker)");
+    funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, IMatchedResults * matched, IMatchWalker * walker)");
     ensureRowAllocated(funcctx, "crSelf");
     funcctx.addQuotedLiteral("const unsigned char * left = (const unsigned char *) _left;");
     funcctx.associateExpr(activeNlpMarkerExpr, activeNlpMarkerExpr);
@@ -539,11 +539,11 @@ void HqlCppTranslator::doBuildParseSearchText(BuildCtx & classctx, IHqlExpressio
 
     if (searchTypeCode == type_unicode)
     {
-        funcctx.addQuotedCompound("virtual void getSearchText(size32_t & retLen, char * & _retText, const void * _self)");
+        funcctx.addQuotedCompoundLiteral("virtual void getSearchText(size32_t & retLen, char * & _retText, const void * _self)");
         funcctx.addQuotedLiteral("UChar * & retText = *(UChar * *)&_retText;");        // don't ask.
     }
     else
-        funcctx.addQuotedCompound("virtual void getSearchText(size32_t & retLen, char * & retText, const void * _self)");
+        funcctx.addQuotedCompoundLiteral("virtual void getSearchText(size32_t & retLen, char * & retText, const void * _self)");
     funcctx.addQuotedLiteral("const unsigned char * self = (const unsigned char *) _self;");
     bindTableCursor(funcctx, dataset, "self");
 
@@ -646,7 +646,7 @@ void HqlCppTranslator::doBuildParseCompiled(BuildCtx & classctx, MemoryBuffer &
     OwnedHqlExpr srcData = addDataLiteral((const char *)compressed.toByteArray(), buffLen);
     OwnedHqlExpr retData = createVariable("retData", makePointerType(makeVoidType()));
 
-    funcctx.addQuotedCompound("virtual void queryCompiled(IResourceContext *ctx, size32_t & retLen, const void * & retData)");
+    funcctx.addQuotedCompoundLiteral("virtual void queryCompiled(IResourceContext *ctx, size32_t & retLen, const void * & retData)");
     funcctx.addQuotedF("//uncompressed size = %d", buffer.length());
     buildExpr(funcctx, srcData, bound);
 

+ 55 - 55
ecl/hqlcpp/hqlsource.cpp

@@ -640,7 +640,7 @@ public:
                 outputStepping.generateSteppingMetaMember(translator, ctx, "ProjectedSteppingMeta");
 
                 BuildCtx transformctx(ctx);
-                transformctx.addQuotedCompound("virtual void mapOutputToInput(ARowBuilder & crSelf, const void * _projected, unsigned numFields)");
+                transformctx.addQuotedCompoundLiteral("virtual void mapOutputToInput(ARowBuilder & crSelf, const void * _projected, unsigned numFields)");
                 translator.ensureRowAllocated(transformctx, "crSelf");
                 transformctx.addQuotedLiteral("const byte * pr = (const byte *)_projected;");
 
@@ -662,7 +662,7 @@ public:
         {
             OwnedHqlExpr fail = createValue(no_fail, makeVoidType(), createConstant("Cannot step output of index read"));
             BuildCtx transformctx(ctx);
-            transformctx.addQuotedCompound("virtual void mapOutputToInput(void * _original, const void * _projected, unsigned numFields)");
+            transformctx.addQuotedCompoundLiteral("virtual void mapOutputToInput(void * _original, const void * _projected, unsigned numFields)");
             translator.buildStmt(transformctx, fail);
         }
     }
@@ -1167,7 +1167,7 @@ void SourceBuilder::buildLimits(BuildCtx & classctx, IHqlExpression * expr, uniq
     if (choosenValue)
     {
         BuildCtx funcctx(classctx);
-        funcctx.addQuotedCompound("virtual unsigned __int64 getChooseNLimit()");
+        funcctx.addQuotedCompoundLiteral("virtual unsigned __int64 getChooseNLimit()");
         OwnedHqlExpr newLimit = ensurePositiveOrZeroInt64(choosenValue);
         translator.buildReturn(funcctx, newLimit);
     }
@@ -1650,13 +1650,13 @@ void SourceBuilder::doBuildNormalizeIterators(BuildCtx & ctx, IHqlExpression * e
     if (isChildIterator)
     {
         assertex(!root);
-        firstctx.addQuotedCompound("virtual bool first()");
+        firstctx.addQuotedCompoundLiteral("virtual bool first()");
     }
     else
     {
         assertex(root);
 
-        firstctx.addQuotedCompound("virtual bool first(const void * _src)");
+        firstctx.addQuotedCompoundLiteral("virtual bool first(const void * _src)");
         bool isProjected = (root->queryNormalizedSelector() != tableExpr->queryNormalizedSelector());
         if (!isProjected)
         {
@@ -1695,7 +1695,7 @@ void SourceBuilder::doBuildNormalizeIterators(BuildCtx & ctx, IHqlExpression * e
         firstctx.addQuoted(s.clear().append("return (").append(cursorName).append(" = (byte *)").append(iterName).append(".first()) != 0;"));
 
         BuildCtx nextctx(instance->startctx);
-        nextctx.addQuotedCompound("virtual bool next()");
+        nextctx.addQuotedCompoundLiteral("virtual bool next()");
         nextctx.addQuoted(s.clear().append("return (").append(cursorName).append(" = (byte *)").append(iterName).append(".next()) != 0;"));
     }
     else
@@ -1705,7 +1705,7 @@ void SourceBuilder::doBuildNormalizeIterators(BuildCtx & ctx, IHqlExpression * e
         firstctx.addQuotedLiteral("return iter.first();");
 
         BuildCtx nextctx(instance->startctx);
-        nextctx.addQuotedCompound("virtual bool next()");
+        nextctx.addQuotedCompoundLiteral("virtual bool next()");
         nextctx.addQuotedLiteral("return iter.next();");
     }
 
@@ -2020,7 +2020,7 @@ void SourceBuilder::buildKeyedLimitHelper(IHqlExpression * self)
     {
         IHqlExpression * limitValue = keyedLimitExpr->queryChild(1);
         BuildCtx func1ctx(instance->startctx);
-        func1ctx.addQuotedCompound("virtual unsigned __int64 getKeyedLimit()");
+        func1ctx.addQuotedCompoundLiteral("virtual unsigned __int64 getKeyedLimit()");
         translator.buildReturn(func1ctx, limitValue);
         if (isZero(limitValue))
             translator.WARNING(CategoryUnusual, HQLWRN_KeyedLimitIsZero);
@@ -2030,14 +2030,14 @@ void SourceBuilder::buildKeyedLimitHelper(IHqlExpression * self)
             fail.setown(translator.createFailAction("Keyed limit exceeded", limitValue, NULL, instance->activityId));
 
         BuildCtx func2ctx(instance->startctx);
-        func2ctx.addQuotedCompound("virtual void onKeyedLimitExceeded()");
+        func2ctx.addQuotedCompoundLiteral("virtual void onKeyedLimitExceeded()");
         translator.buildStmt(func2ctx, fail);
 
         IHqlExpression * transform = queryAttributeChild(keyedLimitExpr, onFailAtom, 0);
         if (transform)
         {
             BuildCtx transformctx(instance->startctx);
-            transformctx.addQuotedCompound("virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & crSelf)");
+            transformctx.addQuotedCompoundLiteral("virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & crSelf)");
             translator.ensureRowAllocated(transformctx, "crSelf");
             translator.buildTransformBody(transformctx, transform, NULL, NULL, self, NULL);
         }
@@ -2100,7 +2100,7 @@ void SourceBuilder::buildGroupAggregateHashHelper(ParentExtract * extractBuilder
     translator.beginNestedClass(classctx, "hash", "IHash", NULL, extractBuilder);
 
     BuildCtx funcctx(classctx);
-    funcctx.addQuotedCompound("virtual unsigned hash(const void * _self)");
+    funcctx.addQuotedCompoundLiteral("virtual unsigned hash(const void * _self)");
     assignLocalExtract(funcctx, extractBuilder, dataset, "_self");
 
     OwnedHqlExpr hash = createValue(no_hash32, LINK(unsignedType), LINK(fields), createAttribute(internalAtom));
@@ -2163,7 +2163,7 @@ void SourceBuilder::buildGroupAggregateCompareHelper(ParentExtract * extractBuil
     translator.beginNestedClass(classctx, "compareRowElement", "ICompare", NULL, extractBuilder);
 
     BuildCtx funcctx(classctx);
-    funcctx.addQuotedCompound("virtual int docompare(const void * _left, const void * _right) const");
+    funcctx.addQuotedCompoundLiteral("virtual int docompare(const void * _left, const void * _right) const");
     assignLocalExtract(funcctx, extractBuilder, aggregate->queryChild(0), "_left");
     funcctx.addQuotedLiteral("const unsigned char * right = (const unsigned char *) _right;");
     funcctx.associateExpr(constantMemberMarkerExpr, constantMemberMarkerExpr);
@@ -2291,12 +2291,12 @@ void SourceBuilder::buildGlobalGroupAggregateHelpers(IHqlExpression * expr)
 
     //virtual void processRow(void * self, const void * src) = 0;
     BuildCtx rowctx(instance->startctx);
-    rowctx.addQuotedCompound("virtual void processRow(const void * src, IHThorGroupAggregateCallback * callback)");
+    rowctx.addQuotedCompoundLiteral("virtual void processRow(const void * src, IHThorGroupAggregateCallback * callback)");
     rowctx.addQuotedLiteral("doProcessRow((byte *)src, callback);");
 
     //virtual void processRows(void * self, size32_t srcLen, const void * src) = 0;
     BuildCtx rowsctx(instance->startctx);
-    rowsctx.addQuotedCompound("virtual void processRows(size32_t srcLen, const void * _left, IHThorGroupAggregateCallback * callback)");
+    rowsctx.addQuotedCompoundLiteral("virtual void processRows(size32_t srcLen, const void * _left, IHThorGroupAggregateCallback * callback)");
     rowsctx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
     OwnedHqlExpr ds = createVariable("left", makeReferenceModifier(tableExpr->getType()));
     OwnedHqlExpr len = createVariable("srcLen", LINK(sizetType));
@@ -2321,7 +2321,7 @@ void SourceBuilder::buildGroupingMonitors(IHqlExpression * expr, MonitorExtracto
 
     //virtual void createGroupSegmentMonitors(IIndexReadContext *ctx) = 0;
     BuildCtx groupctx(instance->startctx);
-    IHqlStmt * group = groupctx.addQuotedCompound("virtual bool createGroupSegmentMonitors(IIndexReadContext * irc)");
+    IHqlStmt * group = groupctx.addQuotedCompoundLiteral("virtual bool createGroupSegmentMonitors(IIndexReadContext * irc)");
 
     monitorsForGrouping = true;
     if (op == no_newaggregate)
@@ -2389,12 +2389,12 @@ void SourceBuilder::buildCountHelpers(IHqlExpression * expr, bool allowMultiple)
         {
             //virtual size32_t numValid(const void * src) = 0;
             BuildCtx rowctx(instance->startctx);
-            rowctx.addQuotedCompound("virtual size32_t numValid(const void * src)");
+            rowctx.addQuotedCompoundLiteral("virtual size32_t numValid(const void * src)");
             rowctx.addQuotedLiteral("return valid((byte *)src);");
 
             //virtual size32_t numValid(size32_t srcLen, const void * src);
             BuildCtx rowsctx(instance->startctx);
-            rowsctx.addQuotedCompound("virtual size32_t numValid(size32_t srcLen, const void * _src)");
+            rowsctx.addQuotedCompoundLiteral("virtual size32_t numValid(size32_t srcLen, const void * _src)");
             rowsctx.addQuotedLiteral("unsigned char * src = (unsigned char *)_src;");
             OwnedHqlExpr ds = createVariable("src", makeReferenceModifier(tableExpr->getType()));
             OwnedHqlExpr len = createVariable("srcLen", LINK(sizetType));
@@ -2427,7 +2427,7 @@ void SourceBuilder::buildCountHelpers(IHqlExpression * expr, bool allowMultiple)
         {
             //virtual size32_t numValid(size32_t srcLen, const void * src);
             BuildCtx rowsctx(instance->startctx);
-            rowsctx.addQuotedCompound("virtual size32_t numValid(size32_t srcLen, const void * _src)");
+            rowsctx.addQuotedCompoundLiteral("virtual size32_t numValid(size32_t srcLen, const void * _src)");
             if (isExists)
                 rowsctx.addReturn(one);
             else
@@ -2628,7 +2628,7 @@ void DiskReadBuilderBase::buildMembers(IHqlExpression * expr)
     if (monitors.isFiltered())
     {
         BuildCtx createSegmentCtx(instance->startctx);
-        createSegmentCtx.addQuotedCompound("virtual void createSegmentMonitors(IIndexReadContext *irc)");
+        createSegmentCtx.addQuotedCompoundLiteral("virtual void createSegmentMonitors(IIndexReadContext *irc)");
         monitors.buildSegments(createSegmentCtx, "irc", true);
     }
     instance->addAttributeBool("_isKeyed", monitors.isFiltered());
@@ -2667,7 +2667,7 @@ void DiskReadBuilderBase::buildMembers(IHqlExpression * expr)
     if (preloadSize)
     {
         BuildCtx subctx(instance->classctx);
-        subctx.addQuotedCompound("virtual size32_t getPreloadSize()");
+        subctx.addQuotedCompoundLiteral("virtual size32_t getPreloadSize()");
         translator.buildReturn(subctx, preloadSize, sizetType);
         instance->addAttributeInt("_preloadSize", preloadSize->queryValue()->getIntValue());
     }
@@ -2795,7 +2795,7 @@ void DiskReadBuilder::buildMembers(IHqlExpression * expr)
         if (expr->hasAttribute(_disallowed_Atom))
             throwError(HQLERR_PipeNotAllowed);
         BuildCtx pipeCtx(instance->startctx);
-        pipeCtx.addQuotedCompound("virtual const char * getPipeProgram()");
+        pipeCtx.addQuotedCompoundLiteral("virtual const char * getPipeProgram()");
         translator.buildReturn(pipeCtx, mode->queryChild(0), unknownVarStringType);
 
         IHqlExpression * csvFromPipe = tableExpr->queryAttribute(csvAtom);
@@ -2855,7 +2855,7 @@ void DiskReadBuilder::buildTransform(IHqlExpression * expr)
         translator.buildCsvParameters(instance->nestedctx, mode, NULL, true);
 
         BuildCtx funcctx(instance->startctx);
-        funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenSrc, const char * * dataSrc)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenSrc, const char * * dataSrc)");
         translator.ensureRowAllocated(funcctx, "crSelf");
 
         //associateVirtualCallbacks(*this, funcctx, tableExpr);
@@ -2870,9 +2870,9 @@ void DiskReadBuilder::buildTransform(IHqlExpression * expr)
 
     BuildCtx transformCtx(instance->startctx);
     if (instance->kind == TAKdiskread)
-        transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left)");
     else
-        transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, IFilePositionProvider * fpp)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, IFilePositionProvider * fpp)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     transformCtx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
     buildTransformBody(transformCtx, expr, true, false, true);
@@ -2967,7 +2967,7 @@ void DiskNormalizeBuilder::buildTransform(IHqlExpression * expr)
     globaliterctx.setown(new BuildCtx(instance->startctx));
     globaliterctx->addGroup();
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf)");
+    transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     buildTransformBody(transformCtx, expr, true, false, false);
 }
@@ -3034,12 +3034,12 @@ void DiskAggregateBuilder::buildMembers(IHqlExpression * expr)
 
     //virtual void processRow(void * self, const void * src) = 0;
     BuildCtx rowctx(instance->startctx);
-    rowctx.addQuotedCompound("virtual void processRow(ARowBuilder & crSelf, const void * src)");
+    rowctx.addQuotedCompoundLiteral("virtual void processRow(ARowBuilder & crSelf, const void * src)");
     rowctx.addQuotedLiteral("doProcessRow(crSelf, (byte *)src);");
 
     //virtual void processRows(void * self, size32_t srcLen, const void * src) = 0;
     BuildCtx rowsctx(instance->startctx);
-    rowsctx.addQuotedCompound("virtual void processRows(ARowBuilder & crSelf, size32_t srcLen, const void * _left)");
+    rowsctx.addQuotedCompoundLiteral("virtual void processRows(ARowBuilder & crSelf, size32_t srcLen, const void * _left)");
     rowsctx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
     OwnedHqlExpr ds = createVariable("left", makeReferenceModifier(tableExpr->getType()));
     OwnedHqlExpr len = createVariable("srcLen", LINK(sizetType));
@@ -3057,7 +3057,7 @@ void DiskAggregateBuilder::buildMembers(IHqlExpression * expr)
 void DiskAggregateBuilder::buildTransform(IHqlExpression * expr)
 {
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("void doProcessRow(ARowBuilder & crSelf, byte * left)");
+    transformCtx.addQuotedCompoundLiteral("void doProcessRow(ARowBuilder & crSelf, byte * left)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     buildTransformBody(transformCtx, expr, false, false, true);
 }
@@ -3112,7 +3112,7 @@ void DiskCountBuilder::buildTransform(IHqlExpression * expr)
     if (transformCanFilter||isNormalize)
     {
         BuildCtx transformCtx(instance->startctx);
-        transformCtx.addQuotedCompound("size32_t valid(byte * _left)");
+        transformCtx.addQuotedCompoundLiteral("size32_t valid(byte * _left)");
         transformCtx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
         OwnedHqlExpr cnt;
         if (isNormalize)
@@ -3202,7 +3202,7 @@ void DiskGroupAggregateBuilder::buildMembers(IHqlExpression * expr)
 void DiskGroupAggregateBuilder::buildTransform(IHqlExpression * expr)
 {
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("void doProcessRow(byte * left, IHThorGroupAggregateCallback * callback)");
+    transformCtx.addQuotedCompoundLiteral("void doProcessRow(byte * left, IHThorGroupAggregateCallback * callback)");
     bool accessesCallback = containsOperator(expr, no_filepos) || containsOperator(expr, no_file_logicalname); 
     buildGroupAggregateTransformBody(transformCtx, expr, isNormalize || accessesCallback, true);
 }
@@ -3286,7 +3286,7 @@ void ChildNormalizeBuilder::buildTransform(IHqlExpression * expr)
     globaliterctx.setown(new BuildCtx(instance->startctx));
     globaliterctx->addGroup();
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf)");
+    transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     buildTransformBody(transformCtx, expr, true, false, false);
 }
@@ -3342,7 +3342,7 @@ void ChildAggregateBuilder::buildMembers(IHqlExpression * expr)
 void ChildAggregateBuilder::buildTransform(IHqlExpression * expr)
 {
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("virtual void processRows(ARowBuilder & crSelf)");
+    transformCtx.addQuotedCompoundLiteral("virtual void processRows(ARowBuilder & crSelf)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     buildTransformBody(transformCtx, expr, false, false, false);
 }
@@ -3406,7 +3406,7 @@ void ChildGroupAggregateBuilder::buildMembers(IHqlExpression * expr)
 void ChildGroupAggregateBuilder::buildTransform(IHqlExpression * expr)
 {
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("void processRows(IHThorGroupAggregateCallback * callback)");
+    transformCtx.addQuotedCompoundLiteral("void processRows(IHThorGroupAggregateCallback * callback)");
     buildGroupAggregateTransformBody(transformCtx, expr, true, false);
 }
 
@@ -3466,7 +3466,7 @@ void ChildThroughNormalizeBuilder::buildTransform(IHqlExpression * expr)
     globaliterctx.setown(new BuildCtx(instance->startctx));
     globaliterctx->addGroup();
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf)");
+    transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     buildTransformBody(transformCtx, expr, true, false, false);
 }
@@ -4458,7 +4458,7 @@ void MonitorExtractor::generateOffsetWrapping(StringBuffer & createMonitorText,
     classctx.addQuotedLiteral("virtual bool Release() const { return RtlCInterface::Release(); }");
     classctx.addQuoted(s.clear().append("virtual const char * queryFactoryName() const { return \"").append(factoryName).append("\"; }"));
 
-    classctx.addQuotedCompound("virtual const void * getSegmentBase(const void * _row) const");
+    classctx.addQuotedCompoundLiteral("virtual const void * getSegmentBase(const void * _row) const");
     classctx.addQuotedLiteral("const byte * row = (const byte *)_row;");
     classctx.associateExpr(constantMemberMarkerExpr, constantMemberMarkerExpr);
     translator.bindTableCursor(classctx, tableExpr, "row");
@@ -4503,7 +4503,7 @@ void MonitorExtractor::generateFormatWrapping(StringBuffer & createMonitorText,
     classctx.addQuotedLiteral("virtual bool Release() const { return RtlCInterface::Release(); }");
     classctx.addQuoted(s.clear().append("virtual const char * queryFactoryName() const { return \"").append(factoryName).append("\"; }"));
     classctx.addQuoted(s.clear().append("virtual unsigned queryHashCode() const { return ").append(getExpressionCRC(selector)).append("; }"));
-    classctx.addQuotedCompound("virtual void extractField(void * _target, const void * _row) const");
+    classctx.addQuotedCompoundLiteral("virtual void extractField(void * _target, const void * _row) const");
     classctx.associateExpr(constantMemberMarkerExpr, constantMemberMarkerExpr);
     classctx.addQuotedLiteral("const byte * row = (const byte *)_row;");
     classctx.addQuotedLiteral("byte * target = (byte *)_target;");
@@ -6202,7 +6202,7 @@ void IndexReadBuilderBase::buildMembers(IHqlExpression * expr)
 {
     //---- virtual void createSegmentMonitors(struct IIndexReadContext *) { ... } ----
     BuildCtx createSegmentCtx(instance->startctx);
-    createSegmentCtx.addQuotedCompound("virtual void createSegmentMonitors(IIndexReadContext *irc)");
+    createSegmentCtx.addQuotedCompoundLiteral("virtual void createSegmentMonitors(IIndexReadContext *irc)");
     monitors.buildSegments(createSegmentCtx, "irc", false);
 
     buildLimits(instance->startctx, expr, instance->activityId);
@@ -6385,7 +6385,7 @@ void NewIndexReadBuilder::buildTransform(IHqlExpression * expr)
     if (true)
     {
         BuildCtx transformCtx(instance->startctx);
-        transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left)");
         translator.ensureRowAllocated(transformCtx, "crSelf");
         transformCtx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
         translator.associateBlobHelper(transformCtx, tableExpr, "fpp");
@@ -6395,7 +6395,7 @@ void NewIndexReadBuilder::buildTransform(IHqlExpression * expr)
     if (generateUnfilteredTransform)
     {
         BuildCtx transformCtx(instance->startctx);
-        transformCtx.addQuotedCompound("virtual size32_t unfilteredTransform(ARowBuilder & crSelf, const void * _left)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t unfilteredTransform(ARowBuilder & crSelf, const void * _left)");
         translator.ensureRowAllocated(transformCtx, "crSelf");
         transformCtx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
         translator.associateBlobHelper(transformCtx, tableExpr, "fpp");
@@ -6468,7 +6468,7 @@ void IndexNormalizeBuilder::buildTransform(IHqlExpression * expr)
     globaliterctx.setown(new BuildCtx(instance->startctx));
     globaliterctx->addGroup();
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf)");
+    transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
 
     //Because this transform creates iterator classes for the child iterators the expression tree needs to be modified
@@ -6535,12 +6535,12 @@ void IndexAggregateBuilder::buildMembers(IHqlExpression * expr)
 
     //virtual void processRow(void * self, const void * src) = 0;
     BuildCtx rowctx(instance->startctx);
-    rowctx.addQuotedCompound("virtual void processRow(ARowBuilder & crSelf, const void * src)");
+    rowctx.addQuotedCompoundLiteral("virtual void processRow(ARowBuilder & crSelf, const void * src)");
     rowctx.addQuotedLiteral("doProcessRow(crSelf, (byte *)src);");
 
     //virtual void processRows(void * self, size32_t srcLen, const void * src) = 0;
     BuildCtx rowsctx(instance->startctx);
-    rowsctx.addQuotedCompound("virtual void processRows(ARowBuilder & crSelf, size32_t srcLen, const void * _left)");
+    rowsctx.addQuotedCompoundLiteral("virtual void processRows(ARowBuilder & crSelf, size32_t srcLen, const void * _left)");
     rowsctx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
     OwnedHqlExpr ds = createVariable("left", makeReferenceModifier(tableExpr->getType()));
     OwnedHqlExpr len = createVariable("srcLen", LINK(sizetType));
@@ -6558,7 +6558,7 @@ void IndexAggregateBuilder::buildMembers(IHqlExpression * expr)
 void IndexAggregateBuilder::buildTransform(IHqlExpression * expr)
 {
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("void doProcessRow(ARowBuilder & crSelf, byte * left)");
+    transformCtx.addQuotedCompoundLiteral("void doProcessRow(ARowBuilder & crSelf, byte * left)");
     translator.ensureRowAllocated(transformCtx, "crSelf");
     translator.associateBlobHelper(transformCtx, tableExpr, "fpp");
     buildTransformBody(transformCtx, expr, false, false, true);
@@ -6629,7 +6629,7 @@ void IndexCountBuilder::buildTransform(IHqlExpression * expr)
     if (transformCanFilter||isNormalize)
     {
         BuildCtx transformCtx(instance->startctx);
-        transformCtx.addQuotedCompound("virtual size32_t numValid(const void * _left)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t numValid(const void * _left)");
         transformCtx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
         translator.associateBlobHelper(transformCtx, tableExpr, "fpp");
         OwnedHqlExpr cnt;
@@ -6746,7 +6746,7 @@ void IndexGroupAggregateBuilder::doBuildProcessCountMembers(BuildCtx & ctx, IHql
 
     {
         BuildCtx funcctx(ctx);
-        funcctx.addQuotedCompound("virtual size32_t initialiseCountGrouping(ARowBuilder & crSelf, const void * _src)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t initialiseCountGrouping(ARowBuilder & crSelf, const void * _src)");
         translator.ensureRowAllocated(funcctx, "crSelf");
         funcctx.addQuotedLiteral("unsigned char * src = (unsigned char *) _src;");
         translator.associateBlobHelper(funcctx, tableExpr, "fpp");
@@ -6766,7 +6766,7 @@ void IndexGroupAggregateBuilder::doBuildProcessCountMembers(BuildCtx & ctx, IHql
 
     {
         BuildCtx funcctx(ctx);
-        funcctx.addQuotedCompound("virtual size32_t processCountGrouping(ARowBuilder & crSelf, unsigned __int64 count)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t processCountGrouping(ARowBuilder & crSelf, unsigned __int64 count)");
         translator.ensureRowAllocated(funcctx, "crSelf");
         BoundRow * selfCursor = translator.bindSelf(funcctx, resultDataset, "crSelf");
 
@@ -6804,7 +6804,7 @@ void IndexGroupAggregateBuilder::doBuildProcessCountMembers(BuildCtx & ctx, IHql
 void IndexGroupAggregateBuilder::buildTransform(IHqlExpression * expr)
 {
     BuildCtx transformCtx(instance->startctx);
-    transformCtx.addQuotedCompound("void doProcessRow(byte * left, IHThorGroupAggregateCallback * callback)");
+    transformCtx.addQuotedCompoundLiteral("void doProcessRow(byte * left, IHThorGroupAggregateCallback * callback)");
     translator.associateBlobHelper(transformCtx, tableExpr, "fpp");
     buildGroupAggregateTransformBody(transformCtx, expr, isNormalize || transformAccessesCallback, true);
 }
@@ -6876,7 +6876,7 @@ void HqlCppTranslator::buildXmlReadTransform(IHqlExpression * dataset, StringBuf
     classctx.addQuoted(s);
 
     BuildCtx funcctx(classctx);
-    funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, IColumnProvider * row, IThorDiskCallback * fpp)");
+    funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, IColumnProvider * row, IThorDiskCallback * fpp)");
     ensureRowAllocated(funcctx, "crSelf");
 
     xmlUsesContents = false;
@@ -6912,9 +6912,9 @@ unsigned HqlCppTranslator::buildCsvReadTransform(BuildCtx & subctx, IHqlExpressi
     BuildCtx funcctx(subctx);
 
     if (newInterface)
-        funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenSrc, const char * * dataSrc)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenSrc, const char * * dataSrc)");
     else
-        funcctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenSrc, const char * * dataSrc, unsigned __int64 _fpos)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenSrc, const char * * dataSrc, unsigned __int64 _fpos)");
 
     //MORE: If this becomes a compound activity
     BoundRow * rootSelfRow = bindSelf(funcctx, dataset, "crSelf");
@@ -7104,7 +7104,7 @@ void FetchBuilder::buildMembers(IHqlExpression * expr)
 
     IHqlExpression * fetch = queryFetch(expr);
     BuildCtx getposctx(instance->startctx);
-    getposctx.addQuotedCompound("virtual unsigned __int64 extractPosition(const void * _right)");
+    getposctx.addQuotedCompoundLiteral("virtual unsigned __int64 extractPosition(const void * _right)");
     getposctx.addQuotedLiteral("const unsigned char * right = (const unsigned char *) _right;");
     translator.bindTableCursor(getposctx, fetch->queryChild(1), "right", no_right, selSeq);
     translator.buildReturn(getposctx, fetch->queryChild(2));
@@ -7157,7 +7157,7 @@ void FetchBuilder::buildMembers(IHqlExpression * expr)
         instance->classctx.addQuotedLiteral("virtual bool extractAllJoinFields() { return true; }");
 
         BuildCtx funcctx(instance->startctx);
-        funcctx.addQuotedCompound("virtual size32_t extractJoinFields(ARowBuilder & crSelf, const void * _left)");
+        funcctx.addQuotedCompoundLiteral("virtual size32_t extractJoinFields(ARowBuilder & crSelf, const void * _left)");
         translator.ensureRowAllocated(funcctx, "crSelf");
         translator.buildRecordSerializeExtract(funcctx, memoryRhsRecord);
 
@@ -7177,16 +7177,16 @@ void FetchBuilder::buildTransform(IHqlExpression * expr)
     switch (getDatasetKind(tableExpr))
     {
     case no_csv:
-        transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenLeft, const char * * dataLeft, const void * _right, unsigned __int64 _fpos)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, unsigned * lenLeft, const char * * dataLeft, const void * _right, unsigned __int64 _fpos)");
         transformCtx.addQuotedLiteral("unsigned char * right = (unsigned char *)_right;");
         break;
     case no_xml:
     case no_json:
-        transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, IColumnProvider * xmlLeft, const void * _right, unsigned __int64 _fpos)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, IColumnProvider * xmlLeft, const void * _right, unsigned __int64 _fpos)");
         transformCtx.addQuotedLiteral("unsigned char * right = (unsigned char *)_right;");
         break;
     default:
-        transformCtx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned __int64 _fpos)");
+        transformCtx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, const void * _left, const void * _right, unsigned __int64 _fpos)");
         transformCtx.addQuotedLiteral("unsigned char * left = (unsigned char *)_left;");
         transformCtx.addQuotedLiteral("unsigned char * right = (unsigned char *)_right;");
         break;

+ 11 - 11
ecl/hqlcpp/hqlstep.cpp

@@ -552,10 +552,10 @@ IHqlExpression * SteppingFieldSelection::generateSteppingMeta(HqlCppTranslator &
         OwnedHqlExpr result = createVariable("ret", LINK(intType));
 
         BuildCtx comparectx(classctx);
-        comparectx.addQuotedCompound("class Compare : public IRangeCompare", s2.clear().append(" ").append(compareName).append(";"));
+        comparectx.addQuotedCompoundLiteral("class Compare : public IRangeCompare", s2.clear().append(" ").append(compareName).append(";"));
         translator.doBuildUnsignedFunction(comparectx, "maxFields", lenOffsets/2);
 
-        comparectx.addQuotedCompound("virtual int docompare(const void * _left,const void * _right, unsigned numFields) const");
+        comparectx.addQuotedCompoundLiteral("virtual int docompare(const void * _left,const void * _right, unsigned numFields) const");
         comparectx.addQuotedLiteral("const byte * left = (const byte *)_left;");
         comparectx.addQuotedLiteral("const byte * right = (const byte *)_right;");
         comparectx.addQuotedLiteral("int ret;");
@@ -587,8 +587,8 @@ IHqlExpression * SteppingFieldSelection::generateSteppingMeta(HqlCppTranslator &
         OwnedHqlExpr result = createVariable("ret", LINK(intType));
 
         BuildCtx distancectx(classctx);
-        distancectx.addQuotedCompound("class Distance : public IDistanceCalculator", s2.clear().append(" ").append(distanceName).append(";"));
-        distancectx.addQuotedCompound("virtual unsigned getDistance(unsigned __int64 & distance, const void * _before, const void * _after, unsigned numFields) const");
+        distancectx.addQuotedCompoundLiteral("class Distance : public IDistanceCalculator", s2.clear().append(" ").append(distanceName).append(";"));
+        distancectx.addQuotedCompoundLiteral("virtual unsigned getDistance(unsigned __int64 & distance, const void * _before, const void * _after, unsigned numFields) const");
         distancectx.addQuotedLiteral("const byte * before = (const byte *)_before;");
         distancectx.addQuotedLiteral("const byte * after = (const byte *)_after;");
 
@@ -756,7 +756,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityRowsetRange(BuildCtx & ctx, IH
     OwnedHqlExpr normalized = normalizeListCasts(castList);
 
     BuildCtx funcctx(instance->startctx);
-    funcctx.addQuotedCompound("virtual void getInputSelection(bool & __isAllResult, size32_t & __lenResult, void * & __result)");
+    funcctx.addQuotedCompoundLiteral("virtual void getInputSelection(bool & __isAllResult, size32_t & __lenResult, void * & __result)");
     doBuildFunctionReturn(funcctx, castType, normalized);
 
     if ((kind == TAKnwaygraphloopresultread) && isGrouped(rowset))
@@ -995,7 +995,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityNWayMergeJoin(BuildCtx & ctx,
         //virtual unsigned __int64 extractRangeValue(const void * input);               // distance is assumed to be unsigned, code generator must bias if not true.
         {
             BuildCtx extractCtx(instance->startctx);
-            extractCtx.addQuotedCompound("unsigned __int64 extractRangeValue(const void * _left)");
+            extractCtx.addQuotedCompoundLiteral("unsigned __int64 extractRangeValue(const void * _left)");
             extractCtx.addQuotedLiteral("const byte * left = (const byte *)_left;");
             bindTableCursor(extractCtx, dataset, "left", no_left, selSeq);
             buildReturn(extractCtx, rangeValue);
@@ -1004,7 +1004,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityNWayMergeJoin(BuildCtx & ctx,
         //virtual void adjustRangeValue(void * self, const void * input, __int64 delta);        // implementation must ensure field doesn't go -ve.
         {
             BuildCtx adjustCtx(instance->startctx);
-            adjustCtx.addQuotedCompound("void adjustRangeValue(ARowBuilder & crSelf, const void * _left, __int64 delta)");
+            adjustCtx.addQuotedCompoundLiteral("void adjustRangeValue(ARowBuilder & crSelf, const void * _left, __int64 delta)");
             ensureRowAllocated(adjustCtx, "crSelf");
             adjustCtx.addQuotedLiteral("const byte * left = (const byte *)_left;");
 
@@ -1034,7 +1034,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityNWayMergeJoin(BuildCtx & ctx,
         //virtual __int64 maxRightBeforeLeft()
         {
             BuildCtx rBeforeLctx(instance->startctx);
-            rBeforeLctx.addQuotedCompound("virtual __int64 maxRightBeforeLeft()");
+            rBeforeLctx.addQuotedCompoundLiteral("virtual __int64 maxRightBeforeLeft()");
             OwnedHqlExpr mrbl = stepCondition.getMaxRightBeforeLeft();
             buildReturn(rBeforeLctx, mrbl);
         }
@@ -1042,7 +1042,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityNWayMergeJoin(BuildCtx & ctx,
         //virtual __int64 maxLeftBeforeRight()
         {
             BuildCtx lBeforeRctx(instance->startctx);
-            lBeforeRctx.addQuotedCompound("virtual __int64 maxLeftBeforeRight()");
+            lBeforeRctx.addQuotedCompoundLiteral("virtual __int64 maxLeftBeforeRight()");
             OwnedHqlExpr mlbr = stepCondition.getMaxLeftBeforeRight();
             buildReturn(lBeforeRctx, mlbr);
         }
@@ -1062,7 +1062,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityNWayMergeJoin(BuildCtx & ctx,
     if (transform)
     {
         BuildCtx transformctx(instance->startctx);
-        transformctx.addQuotedCompound("virtual size32_t transform(ARowBuilder & crSelf, unsigned numRows, const void * * _rows)");
+        transformctx.addQuotedCompoundLiteral("virtual size32_t transform(ARowBuilder & crSelf, unsigned numRows, const void * * _rows)");
         ensureRowAllocated(transformctx, "crSelf");
         transformctx.addQuotedLiteral("const unsigned char * left = (const unsigned char *) _rows[0];");
         transformctx.addQuotedLiteral("const unsigned char * right = (const unsigned char *) _rows[1];");
@@ -1092,7 +1092,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityNWayMergeJoin(BuildCtx & ctx,
         if (lastJoinField->queryType()->isInteger())
         {
             BuildCtx transformctx(instance->startctx);
-            transformctx.addQuotedCompound("virtual bool createNextJoinValue(ARowBuilder & crSelf, const void * _value)");
+            transformctx.addQuotedCompoundLiteral("virtual bool createNextJoinValue(ARowBuilder & crSelf, const void * _value)");
             ensureRowAllocated(transformctx, "crSelf");
             transformctx.addQuotedLiteral("const byte * value = (const byte *)_value;");
 

+ 24 - 2
ecl/hqlcpp/hqlstmt.cpp

@@ -459,18 +459,28 @@ IHqlStmt * BuildCtx::addQuotedCompound(const char * text, const char * extra)
 {
     if (ignoreInput)
         return NULL;
-    HqlCompoundStmt * next = new HqlQuoteStmt(quote_compound_stmt, curStmts, text);
+    HqlCompoundStmt * next = new HqlQuoteCompoundStmt(quote_compound_stmt, curStmts, text);
     if (extra)
         next->addExpr(createQuoted(extra, makeVoidType()));
     return appendCompound(next);
 }
 
 
+IHqlStmt * BuildCtx::addQuotedCompoundLiteral(const char * text, const char * extra)
+{
+    if (ignoreInput)
+        return NULL;
+    HqlCompoundStmt * next = new HqlQuoteLiteralCompoundStmt(quote_compound_stmt, curStmts, text);
+    if (extra)
+        next->addExpr(createQuoted(extra, makeVoidType()));
+    return appendCompound(next);
+}
+
 IHqlStmt * BuildCtx::addQuotedCompoundOpt(const char * text, const char * extra)
 {
     if (ignoreInput)
         return NULL;
-    HqlCompoundStmt * next = new HqlQuoteStmt(quote_compoundopt_stmt, curStmts, text);
+    HqlCompoundStmt * next = new HqlQuoteCompoundStmt(quote_compoundopt_stmt, curStmts, text);
     if (extra)
         next->addExpr(createQuoted(extra, makeVoidType()));
     return appendCompound(next);
@@ -1297,6 +1307,18 @@ StringBuffer & HqlQuoteLiteralStmt::getTextExtra(StringBuffer & out) const
 }
 
 
+StringBuffer & HqlQuoteCompoundStmt::getTextExtra(StringBuffer & out) const
+{
+    return out.append(text);
+}
+
+
+StringBuffer & HqlQuoteLiteralCompoundStmt::getTextExtra(StringBuffer & out) const
+{
+    return out.append(text);
+}
+
+
 //---------------------------------------------------------------------------
 int queryMemsetChar(IHqlExpression * expr)
 {

+ 1 - 0
ecl/hqlcpp/hqlstmt.hpp

@@ -122,6 +122,7 @@ public:
     IHqlStmt *                  addQuotedLiteral(const char * text); // must only be used for constant C++ strings - avoids a memory clone
     IHqlStmt *                  addQuotedF(const char * text, ...) __attribute__((format(printf, 2, 3)));
     IHqlStmt *                  addQuotedCompound(const char * text, const char * extra = NULL);
+    IHqlStmt *                  addQuotedCompoundLiteral(const char * text, const char * extra = NULL);
     IHqlStmt *                  addQuotedCompoundOpt(const char * text, const char * extra = NULL);
     IHqlStmt *                  addQuoted(StringBuffer & text)              { return addQuoted(text.str()); }
     IHqlStmt *                  addQuotedCompound(StringBuffer & text, const char * extra = NULL){ return addQuotedCompound(text.str(), extra); }

+ 28 - 4
ecl/hqlcpp/hqlstmt.ipp

@@ -165,10 +165,10 @@ protected:
     IHqlStmt * stmt;
 };
 
-class HqlQuoteStmt : public HqlCompoundStmt
+class HqlQuoteStmt : public HqlStmt
 {
 public:
-    HqlQuoteStmt(StmtKind _kind, HqlStmts * _container, const char * _text) : HqlCompoundStmt(_kind, _container), text(_text) {}
+    HqlQuoteStmt(StmtKind _kind, HqlStmts * _container, const char * _text) : HqlStmt(_kind, _container), text(_text) {}
 
     virtual StringBuffer &          getTextExtra(StringBuffer & out) const;
 
@@ -177,10 +177,34 @@ protected:
 };
 
 
-class HqlQuoteLiteralStmt : public HqlCompoundStmt
+class HqlQuoteLiteralStmt : public HqlStmt
 {
 public:
-    HqlQuoteLiteralStmt(StmtKind _kind, HqlStmts * _container, const char * _text) : HqlCompoundStmt(_kind, _container), text(_text) {}
+    HqlQuoteLiteralStmt(StmtKind _kind, HqlStmts * _container, const char * _text) : HqlStmt(_kind, _container), text(_text) {}
+
+    virtual StringBuffer &          getTextExtra(StringBuffer & out) const;
+
+protected:
+    const char * text;
+};
+
+
+class HqlQuoteCompoundStmt : public HqlCompoundStmt
+{
+public:
+    HqlQuoteCompoundStmt(StmtKind _kind, HqlStmts * _container, const char * _text) : HqlCompoundStmt(_kind, _container), text(_text) {}
+
+    virtual StringBuffer &          getTextExtra(StringBuffer & out) const;
+
+protected:
+  StringAttr text;
+};
+
+
+class HqlQuoteLiteralCompoundStmt : public HqlCompoundStmt
+{
+public:
+    HqlQuoteLiteralCompoundStmt(StmtKind _kind, HqlStmts * _container, const char * _text) : HqlCompoundStmt(_kind, _container), text(_text) {}
 
     virtual StringBuffer &          getTextExtra(StringBuffer & out) const;