sum_double.c 2.3 KB
Newer Older
D
dapan1121 已提交
1 2 3 4 5 6 7 8 9 10 11 12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct SUdfInit{
 int maybe_null;       /* 1 if function can return NULL */
 int decimals;     /* for real functions */
 long long length;       /* For string functions */
 char  *ptr;            /* free pointer for function data */
 int const_item;       /* 0 if result is independent of arguments */
} SUdfInit;

D
dapan1121 已提交
13 14
void sum_double(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* tsOutput,
                        int* numOfOutput, short otype, short obytes, SUdfInit* buf) {
D
dapan1121 已提交
15 16
   int i;
   int r = 0;
D
dapan1121 已提交
17 18
   printf("sum_double input data:%p, type:%d, rows:%d, ts:%p,%lld, dataoutput:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, tsOutput, numOfOutput, buf);
   if (itype == 4) {
D
dapan1121 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
     r=*(int *)dataOutput;
     for(i=0;i<numOfRows;++i) {
       r+=*((int *)data + i);
       if (tsOutput) {
         *(long long*)tsOutput=1000000;
       }
     }
     *(int *)dataOutput=r;
     *numOfOutput=1;

     printf("sum_double out, dataoutput:%d, numOfOutput:%d\n", *(int *)dataOutput, *numOfOutput);
   }
}



void sum_double_finalize(char* dataOutput, int* numOfOutput, SUdfInit* buf) {
   int i;
   int r = 0;
D
dapan1121 已提交
38
   printf("sum_double_finalize dataoutput:%p:%d, numOfOutput:%d, buf:%p\n", dataOutput, *dataOutput, *numOfOutput, buf);
D
dapan1121 已提交
39 40 41 42 43 44
   *numOfOutput=1;
   *(int*)(buf->ptr)=*(int*)dataOutput*2;
   *(int*)dataOutput=*(int*)(buf->ptr);
   printf("sum_double finalize, dataoutput:%d, numOfOutput:%d\n", *(int *)dataOutput, *numOfOutput);
}

D
dapan1121 已提交
45
void sum_double_merge(char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput, SUdfInit* buf) {
D
dapan1121 已提交
46 47 48
   int r = 0;
   int sum = 0;
   
D
dapan1121 已提交
49 50 51 52
   printf("sum_double_merge dataoutput:%p, numOfOutput:%d, buf:%p\n", dataOutput, *numOfOutput, buf);
   for (int i = 0; i < numOfRows; ++i) {
     printf("sum_double_merge %d - %d\n", i, *((int*)data + i));
     sum +=*((int*)data + i);
D
dapan1121 已提交
53 54
   }
   
D
dapan1121 已提交
55
   *(int*)dataOutput+=sum;
D
dapan1121 已提交
56 57
   *numOfOutput=1;
   
D
dapan1121 已提交
58
   printf("sum_double_merge, dataoutput:%d, numOfOutput:%d\n", *(int *)dataOutput, *numOfOutput);
D
dapan1121 已提交
59 60 61
}


D
dapan1121 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74
int sum_double_init(SUdfInit* buf) {
   buf->maybe_null=1;
   buf->ptr = malloc(sizeof(int));
   printf("sum_double init\n");
   return 0;
}


void sum_double_destroy(SUdfInit* buf) {
   free(buf->ptr);
   printf("sum_double destroy\n");
}