@gscdump/cloudflare 0.25.11 → 0.25.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,14 +14,6 @@ function metricExpr(metric) {
14
14
  case "position": return "SUM(sum_position) / NULLIF(SUM(impressions), 0) AS position";
15
15
  }
16
16
  }
17
- function orderMetricExpr(metric) {
18
- switch (metric) {
19
- case "clicks": return "SUM(clicks)";
20
- case "impressions": return "SUM(impressions)";
21
- case "ctr": return "SUM(clicks) / NULLIF(SUM(impressions), 0)";
22
- case "position": return "SUM(sum_position) / NULLIF(SUM(impressions), 0)";
23
- }
24
- }
25
17
  const DEVICE_SUFFIXES = [
26
18
  "desktop",
27
19
  "mobile",
@@ -138,8 +130,8 @@ function buildTopNBreakdown(q) {
138
130
  };
139
131
  }
140
132
  const col = dimColumn(q.dimension);
141
- const metrics = q.metrics.map(metricExpr).join(", ");
142
- const order = `${orderMetricExpr(q.orderBy.metric)} ${q.orderBy.dir.toUpperCase()}`;
133
+ const metrics = (q.metrics.includes(q.orderBy.metric) ? q.metrics : [...q.metrics, q.orderBy.metric]).map(metricExpr).join(", ");
134
+ const order = `${q.orderBy.metric} ${q.orderBy.dir.toUpperCase()}`;
143
135
  const facet = facetPredicate(q);
144
136
  let sql = `SELECT ${col}, ${metrics} FROM ${TABLE_PLACEHOLDER} WHERE ${w.clause}${facet.sql} GROUP BY ${col} ORDER BY ${order} LIMIT ${Math.max(0, Math.floor(q.limit))}`;
145
137
  if (q.offset && q.offset > 0) sql += ` OFFSET ${Math.floor(q.offset)}`;
@@ -203,8 +195,8 @@ function buildTwoDimensionDetail(q) {
203
195
  const facet = facetPredicate(q);
204
196
  clause += facet.sql;
205
197
  params.push(...facet.params);
206
- let sql = `SELECT url, query, ${q.metrics.map(metricExpr).join(", ")} FROM ${TABLE_PLACEHOLDER} WHERE ${clause} GROUP BY url, query`;
207
- if (q.orderBy) sql += ` ORDER BY ${orderMetricExpr(q.orderBy.metric)} ${q.orderBy.dir.toUpperCase()}`;
198
+ let sql = `SELECT url, query, ${(q.orderBy && !q.metrics.includes(q.orderBy.metric) ? [...q.metrics, q.orderBy.metric] : q.metrics).map(metricExpr).join(", ")} FROM ${TABLE_PLACEHOLDER} WHERE ${clause} GROUP BY url, query`;
199
+ if (q.orderBy) sql += ` ORDER BY ${q.orderBy.metric} ${q.orderBy.dir.toUpperCase()}`;
208
200
  if (q.limit && q.limit > 0) sql += ` LIMIT ${Math.floor(q.limit)}`;
209
201
  return {
210
202
  table: "page_queries",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gscdump/cloudflare",
3
3
  "type": "module",
4
- "version": "0.25.11",
4
+ "version": "0.25.13",
5
5
  "description": "Cloudflare-Workers-flavored helpers for the gscdump analytics stack: AnalyticsEnv binding contract, R2 SigV4 presigner, size-hint HMAC, DuckDB Workers shims, engine factory.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -46,11 +46,11 @@
46
46
  "dependencies": {
47
47
  "@uwdata/flechette": "^2.5.0",
48
48
  "aws4fetch": "^1.0.20",
49
- "@gscdump/engine": "0.25.11",
50
- "@gscdump/contracts": "0.25.11",
51
- "@gscdump/sdk": "0.25.11",
52
- "gscdump": "0.25.11",
53
- "@gscdump/engine-sqlite": "0.25.11"
49
+ "@gscdump/engine": "0.25.13",
50
+ "@gscdump/contracts": "0.25.13",
51
+ "@gscdump/sdk": "0.25.13",
52
+ "gscdump": "0.25.13",
53
+ "@gscdump/engine-sqlite": "0.25.13"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@cloudflare/vitest-pool-workers": "^0.16.10",