Format a WITH aggregation value into buf */
| 3578 | |
| 3579 | /* Format a WITH aggregation value into buf */ |
| 3580 | static void with_agg_format(const char *func, with_agg_t *agg, int ci, char *buf, size_t buf_sz) { |
| 3581 | if (strcmp(func, "SUM") == 0) { |
| 3582 | snprintf(buf, buf_sz, "%.10g", agg->sums[ci]); |
| 3583 | } else if (strcmp(func, "AVG") == 0) { |
| 3584 | snprintf(buf, buf_sz, "%.10g", agg->counts[ci] > 0 ? agg->sums[ci] / agg->counts[ci] : 0.0); |
| 3585 | } else if (strcmp(func, "MIN") == 0) { |
| 3586 | snprintf(buf, buf_sz, "%.10g", agg->mins[ci]); |
| 3587 | } else if (strcmp(func, "MAX") == 0) { |
| 3588 | snprintf(buf, buf_sz, "%.10g", agg->maxs[ci]); |
| 3589 | } else { |
| 3590 | snprintf(buf, buf_sz, "%d", agg->counts[ci]); |
| 3591 | } |
| 3592 | } |
| 3593 | |
| 3594 | /* Add a virtual variable binding for one WITH item */ |
| 3595 | static void with_add_vbinding_var(binding_t *vb, const char *alias, const char *val) { |
no outgoing calls
no test coverage detected