Browse Source

HPCC-12267 Define code generator/engine interface for QUANTILE

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 10 years ago
parent
commit
bda9519410
2 changed files with 54 additions and 2 deletions
  1. 30 1
      rtl/include/eclhelper.hpp
  2. 24 1
      rtl/include/eclhelper_base.hpp

+ 30 - 1
rtl/include/eclhelper.hpp

@@ -923,6 +923,7 @@ enum ThorActivityKind
     TAKjsonwrite,
     TAKjsonread,
     TAKtrace,
+    TAKquantile,
 
     TAKlast
 };
@@ -1062,7 +1063,9 @@ enum ActivityInterfaceEnum
     TAIdictionaryworkunitwritearg_1,
     TAIdictionaryresultwritearg_1,
     TAItracearg_1,
-//Should remain as last of all meaningful tags, but before aliases
+    TAIquantilearg_1,
+
+    //Should remain as last of all meaningful tags, but before aliases
     TAImax,
 
 //Only aliases follow - for interfaces implemented via typedefs
@@ -1322,6 +1325,32 @@ struct IHThorSelectNArg : public IHThorArg
     virtual size32_t createDefault(ARowBuilder & rowBuilder) = 0;
 };
 
+enum
+{
+    TQFfirst            = 0x0001,       // default flags is zero
+    TQFlast             = 0x0002,
+    TQFsorted           = 0x0004,
+    TQFlocalsorted      = 0x0008,
+    TQFhasscore         = 0x0010,
+    TQFhasrange         = 0x0020,
+    TQFhasskew          = 0x0040,
+    TQFdedup            = 0x0080,
+    TQFunstable         = 0x0100,
+    TQFvariabledivisions= 0x0200,       // num divisions is not a constant
+    TQFneedtransform    = 0x0400,       // if not set the records are returned as-is
+};
+
+struct IHThorQuantileArg : public IHThorArg
+{
+    virtual unsigned getFlags() = 0;
+    virtual unsigned __int64 getNumDivisions() = 0;
+    virtual double getSkew() = 0;
+    virtual ICompare * queryCompare() = 0;
+    virtual size32_t createDefault(ARowBuilder & rowBuilder) = 0;
+    virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, unsigned __int64 _counter) = 0;
+    virtual unsigned __int64 getScore(const void * _left) = 0;
+    virtual void getRange(bool & isAll, size32_t & tlen, void * & tgt) = 0;
+};
 
 struct IHThorCombineArg : public IHThorArg
 {

+ 24 - 1
rtl/include/eclhelper_base.hpp

@@ -1,4 +1,3 @@
-
 /*##############################################################################
 #    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
 #
@@ -708,6 +707,30 @@ class CThorProjectArg : public CThorArg, implements IHThorProjectArg
     virtual bool canFilter()                                { return false; }
 };
 
+class CThorQuantileArg : public CThorArg, implements IHThorQuantileArg
+{
+    virtual void Link() const { RtlCInterface::Link(); }
+    virtual bool Release() const { return RtlCInterface::Release(); }
+    virtual void onCreate(ICodeContext * _ctx, IHThorArg *, MemoryBuffer * in) { ctx = _ctx; }
+
+    virtual IInterface * selectInterface(ActivityInterfaceEnum which)
+    {
+        switch (which)
+        {
+        case TAIarg:
+        case TAIquantilearg_1:
+            return static_cast<IHThorQuantileArg *>(this);
+        }
+        return NULL;
+    }
+
+    virtual unsigned getFlags() { return 0; }
+    virtual unsigned __int64 getNumDivisions() { return 2; }
+    virtual double getSkew() { return 0; }
+    virtual unsigned __int64 getScore(const void * _left) { return 1; }
+    virtual void getRange(bool & isAll, size32_t & tlen, void * & tgt) { isAll = true; tlen = 0; tgt = NULL; }
+};
+
 class CThorPrefetchProjectArg : public CThorArg, implements IHThorPrefetchProjectArg
 {
     virtual void Link() const { RtlCInterface::Link(); }