Changeset: 6b87f2efb8eb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6b87f2efb8eb Added Files: gdk/gdk_analytic_statistics.c Modified Files: gdk/CMakeLists.txt gdk/gdk_analytic_func.c Branch: default Log Message:
Split gdk_analytic_func.c into two files.
diffs (truncated from 2875 to 300 lines):
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -81,6 +81,7 @@ target_sources(bat
gdk_firstn.c
gdk_subquery.c gdk_subquery.h
gdk_analytic_bounds.c
+ gdk_analytic_statistics.c
gdk_analytic_func.c
gdk_analytic.h
gdk_tracer.c gdk_tracer.h
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -2537,1423 +2537,3 @@ nosupport:
res = GDK_FAIL;
goto cleanup;
}
-
-#ifdef HAVE_HGE
-#define LNG_HGE hge
-#define GDK_LNG_HGE_max GDK_hge_max
-#define LNG_HGE_nil hge_nil
-#else
-#define LNG_HGE lng
-#define GDK_LNG_HGE_max GDK_lng_max
-#define LNG_HGE_nil lng_nil
-#endif
-
-/* average on integers */
-#define ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, ARG) \
- if (!is_##TPE##_nil(ARG)) { \
- ADD_WITH_CHECK(ARG, sum, LNG_HGE, sum, GDK_LNG_HGE_max, goto
avg_overflow##TPE##IMP); \
- /* count only when no overflow occurs */ \
- n++; \
- }
-
-#define ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP) \
- if (0) { \
-avg_overflow##TPE##IMP: \
- assert(n > 0); \
- if (sum >= 0) { \
- a = (TPE) (sum / n); \
- rr = (lng) (sum % n); \
- } else { \
- sum = -sum; \
- a = - (TPE) (sum / n); \
- rr = (lng) (sum % n); \
- if (r) { \
- a--; \
- rr = n - rr; \
- } \
- }
-
-#define ANALYTICAL_AVG_IMP_NUM_UNBOUNDED_TILL_CURRENT_ROW(TPE, IMP) \
- do { \
- TPE a = 0; \
- dbl curval = dbl_nil; \
- for (; k < i;) { \
- j = k; \
- do { \
- ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP,
bp[k]) \
- ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP) \
- while (k < i && !op[k]) { \
- TPE v = bp[k++]; \
- if (is_##TPE##_nil(v)) \
- continue; \
- AVERAGE_ITER(TPE, v, a, rr, n);
\
- } \
- curval = a + (dbl) rr / n; \
- goto calc_done##TPE##IMP; \
- } \
- k++; \
- } while (k < i && !op[k]); \
- curval = n > 0 ? (dbl) sum / n : dbl_nil; \
-calc_done##TPE##IMP: \
- for (; j < k; j++) \
- rb[j] = curval; \
- has_nils |= (n == 0); \
- } \
- n = 0; \
- sum = 0; \
- } while (0)
-
-#define ANALYTICAL_AVG_IMP_NUM_CURRENT_ROW_TILL_UNBOUNDED(TPE, IMP) \
- do { \
- TPE a = 0; \
- dbl curval = dbl_nil; \
- l = i - 1; \
- for (j = l; ; j--) { \
- ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, bp[j]) \
- ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP) \
- while (!(op[j] || j == k)) { \
- TPE v = bp[j--]; \
- if (is_##TPE##_nil(v)) \
- continue; \
- AVERAGE_ITER(TPE, v, a, rr, n); \
- } \
- curval = a + (dbl) rr / n; \
- goto calc_done##TPE##IMP; \
- } \
- if (op[j] || j == k) { \
- curval = n > 0 ? (dbl) sum / n : dbl_nil; \
-calc_done##TPE##IMP: \
- for (; ; l--) { \
- rb[l] = curval; \
- if (l == j) \
- break; \
- } \
- has_nils |= (n == 0); \
- if (j == k) \
- break; \
- l = j - 1; \
- } \
- } \
- n = 0; \
- sum = 0; \
- k = i; \
- } while (0)
-
-#define ANALYTICAL_AVG_IMP_NUM_ALL_ROWS(TPE, IMP) \
- do { \
- TPE a = 0; \
- for (; j < i; j++) { \
- TPE v = bp[j]; \
- ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, v) \
- ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP) \
- for (; j < i; j++) { \
- v = bp[j]; \
- if (is_##TPE##_nil(v)) \
- continue; \
- AVERAGE_ITER(TPE, v, a, rr, n); \
- } \
- curval = a + (dbl) rr / n; \
- goto calc_done##TPE##IMP; \
- } \
- } \
- curval = n > 0 ? (dbl) sum / n : dbl_nil; \
-calc_done##TPE##IMP: \
- for (; k < i; k++) \
- rb[k] = curval; \
- has_nils |= (n == 0); \
- n = 0; \
- sum = 0; \
- } while (0)
-
-#define ANALYTICAL_AVG_IMP_NUM_CURRENT_ROW(TPE, IMP) \
- do { \
- for (; k < i; k++) { \
- TPE v = bp[k]; \
- if (is_##TPE##_nil(v)) { \
- rb[k] = dbl_nil; \
- has_nils = true; \
- } else { \
- rb[k] = (dbl) v; \
- } \
- } \
- } while (0)
-
-#define avg_num_deltas(TPE) typedef struct avg_num_deltas##TPE { TPE a; lng n;
lng rr;} avg_num_deltas##TPE;
-avg_num_deltas(bte)
-avg_num_deltas(sht)
-avg_num_deltas(int)
-avg_num_deltas(lng)
-
-#define INIT_AGGREGATE_AVG_NUM(TPE, NOTHING1, NOTHING2) \
- do { \
- computed = (avg_num_deltas##TPE) {0}; \
- } while (0)
-#define COMPUTE_LEVEL0_AVG_NUM(X, TPE, NOTHING1, NOTHING2) \
- do { \
- TPE v = bp[j + X]; \
- computed = is_##TPE##_nil(v) ? (avg_num_deltas##TPE){0} :
(avg_num_deltas##TPE) {.a = v, .n = 1}; \
- } while (0)
-#define COMPUTE_LEVELN_AVG_NUM(VAL, TPE, NOTHING1, NOTHING2) \
- do { \
- if (VAL.n) \
- AVERAGE_ITER(TPE, VAL.a, computed.a, computed.rr,
computed.n); \
- } while (0)
-#define FINALIZE_AGGREGATE_AVG_NUM(TPE, NOTHING1, NOTHING2) \
- do { \
- if (computed.n == 0) { \
- rb[k] = dbl_nil; \
- has_nils = true; \
- } else { \
- rb[k] = computed.a + (dbl) computed.rr / computed.n; \
- } \
- } while (0)
-#define ANALYTICAL_AVG_IMP_NUM_OTHERS(TPE, IMP)
\
- do { \
- oid ncount = i - k; \
- if ((res = GDKrebuild_segment_tree(ncount,
sizeof(avg_num_deltas##TPE), st, &segment_tree, &levels_offset, &nlevels)) !=
GDK_SUCCEED) \
- goto cleanup; \
- populate_segment_tree(avg_num_deltas##TPE, ncount,
INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVEL0_AVG_NUM, COMPUTE_LEVELN_AVG_NUM, TPE,
NOTHING, NOTHING); \
- for (; k < i; k++) \
- compute_on_segment_tree(avg_num_deltas##TPE, start[k] -
j, end[k] - j, INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVELN_AVG_NUM,
FINALIZE_AGGREGATE_AVG_NUM, TPE, NOTHING, NOTHING); \
- j = k; \
- } while (0)
-
-/* average on floating-points */
-#define ANALYTICAL_AVG_IMP_FP_UNBOUNDED_TILL_CURRENT_ROW(TPE, IMP) \
- do { \
- TPE a = 0; \
- dbl curval = dbl_nil; \
- for (; k < i;) { \
- j = k; \
- do { \
- if (!is_##TPE##_nil(bp[k])) \
- AVERAGE_ITER_FLOAT(TPE, bp[k], a, n); \
- k++; \
- } while (k < i && !op[k]); \
- if (n > 0) \
- curval = a; \
- else \
- has_nils = true; \
- for (; j < k; j++) \
- rb[j] = curval; \
- } \
- n = 0; \
- } while (0)
-
-#define ANALYTICAL_AVG_IMP_FP_CURRENT_ROW_TILL_UNBOUNDED(TPE, IMP) \
- do { \
- TPE a = 0; \
- dbl curval = dbl_nil; \
- l = i - 1; \
- for (j = l; ; j--) { \
- if (!is_##TPE##_nil(bp[j])) \
- AVERAGE_ITER_FLOAT(TPE, bp[j], a, n); \
- if (op[j] || j == k) { \
- for (; ; l--) { \
- rb[l] = curval; \
- if (l == j) \
- break; \
- } \
- has_nils |= is_##TPE##_nil(curval); \
- if (j == k) \
- break; \
- l = j - 1; \
- } \
- } \
- n = 0; \
- k = i; \
- } while (0)
-
-#define ANALYTICAL_AVG_IMP_FP_ALL_ROWS(TPE, IMP) \
- do { \
- TPE a = 0; \
- dbl curval = dbl_nil; \
- for (; j < i; j++) { \
- TPE v = bp[j]; \
- if (!is_##TPE##_nil(v)) \
- AVERAGE_ITER_FLOAT(TPE, v, a, n); \
- } \
- if (n > 0) \
- curval = a; \
- else \
- has_nils = true; \
- for (; k < i; k++) \
- rb[k] = curval; \
- n = 0; \
- } while (0)
-
-#define ANALYTICAL_AVG_IMP_FP_CURRENT_ROW(TPE, IMP)
ANALYTICAL_AVG_IMP_NUM_CURRENT_ROW(TPE, IMP)
-
-#define avg_fp_deltas(TPE) typedef struct avg_fp_deltas_##TPE {TPE a; lng n;}
avg_fp_deltas_##TPE;
-avg_fp_deltas(flt)
-avg_fp_deltas(dbl)
-
-#define INIT_AGGREGATE_AVG_FP(TPE, NOTHING1, NOTHING2) \
- do { \
- computed = (avg_fp_deltas_##TPE) {0}; \
- } while (0)
-#define COMPUTE_LEVEL0_AVG_FP(X, TPE, NOTHING1, NOTHING2) \
- do { \
- TPE v = bp[j + X]; \
- computed = is_##TPE##_nil(v) ? (avg_fp_deltas_##TPE) {0} :
(avg_fp_deltas_##TPE) {.n = 1, .a = v}; \
- } while (0)
-#define COMPUTE_LEVELN_AVG_FP(VAL, TPE, NOTHING1, NOTHING2) \
- do { \
- if (VAL.n) \
- AVERAGE_ITER_FLOAT(TPE, VAL.a, computed.a, computed.n);
\
- } while (0)
-#define FINALIZE_AGGREGATE_AVG_FP(TPE, NOTHING1, NOTHING2) \
- do { \
- if (computed.n == 0) { \
- rb[k] = dbl_nil; \
- has_nils = true; \
- } else { \
- rb[k] = computed.a; \
- } \
- } while (0)
-#define ANALYTICAL_AVG_IMP_FP_OTHERS(TPE, IMP) \
- do { \
- oid ncount = i - k; \
- if ((res = GDKrebuild_segment_tree(ncount,
sizeof(avg_fp_deltas_##TPE), st, &segment_tree, &levels_offset, &nlevels)) !=
GDK_SUCCEED) \
- goto cleanup; \
- populate_segment_tree(avg_fp_deltas_##TPE, ncount,
INIT_AGGREGATE_AVG_FP, COMPUTE_LEVEL0_AVG_FP, COMPUTE_LEVELN_AVG_FP, TPE,
NOTHING, NOTHING); \
- for (; k < i; k++) \
- compute_on_segment_tree(avg_fp_deltas_##TPE, start[k] -
j, end[k] - j, INIT_AGGREGATE_AVG_FP, COMPUTE_LEVELN_AVG_FP,
FINALIZE_AGGREGATE_AVG_FP, TPE, NOTHING, NOTHING); \
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
