Skip to content

Commit 923d615

Browse files
fix: zero rows now shows 0 instead of — (null)
Backend: add _sum_or_none() helper — returns None only when ALL model values are None, returns 0 when sum is legitimately zero. Frontend: replace `|| null` with `.some(m => m.field != null)` check. A zero-row incremental run now correctly shows "0" instead of "—".
1 parent 25470e6 commit 923d615

2 files changed

Lines changed: 34 additions & 26 deletions

File tree

backend/backend/core/scheduler/celery_tasks.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@
3030

3131
logger = logging.getLogger(__name__)
3232

33+
34+
def _sum_or_none(results, attr):
35+
"""Sum an attribute across results. Return None only if ALL values are None,
36+
return 0 if the sum is legitimately zero (not all missing)."""
37+
values = [getattr(r, attr, None) for r in results]
38+
if all(v is None for v in values):
39+
return None
40+
return sum(v or 0 for v in values)
41+
3342
# Default max duration before a job is considered stuck (1 hour)
3443
DEFAULT_STUCK_JOB_THRESHOLD_SECONDS = 3600
3544

@@ -373,18 +382,10 @@ def _clean_name(raw):
373382
"total": len(user_results),
374383
"passed": sum(1 for r in user_results if r.end_status == "OK"),
375384
"failed": sum(1 for r in user_results if r.end_status == "FAIL"),
376-
"rows_processed": sum(
377-
getattr(r, "rows_affected", 0) or 0 for r in user_results
378-
) or None,
379-
"rows_added": sum(
380-
getattr(r, "rows_inserted", 0) or 0 for r in user_results
381-
) or None,
382-
"rows_modified": sum(
383-
getattr(r, "rows_updated", 0) or 0 for r in user_results
384-
) or None,
385-
"rows_deleted": sum(
386-
getattr(r, "rows_deleted", 0) or 0 for r in user_results
387-
) or None,
385+
"rows_processed": _sum_or_none(user_results, "rows_affected"),
386+
"rows_added": _sum_or_none(user_results, "rows_inserted"),
387+
"rows_modified": _sum_or_none(user_results, "rows_updated"),
388+
"rows_deleted": _sum_or_none(user_results, "rows_deleted"),
388389
}
389390
except Exception:
390391
_clear_base_result()

frontend/src/ide/run-history/Runhistory.jsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -487,12 +487,15 @@ const Runhistory = () => {
487487
const nonEph = (r.result?.models || []).filter(
488488
(m) => m.type !== "ephemeral"
489489
);
490-
const added =
491-
nonEph.reduce((s, m) => s + (m.rows_inserted || 0), 0) || null;
492-
const modified =
493-
nonEph.reduce((s, m) => s + (m.rows_updated || 0), 0) || null;
494-
const deleted =
495-
nonEph.reduce((s, m) => s + (m.rows_deleted || 0), 0) || null;
490+
const added = nonEph.some((m) => m.rows_inserted != null)
491+
? nonEph.reduce((s, m) => s + (m.rows_inserted || 0), 0)
492+
: null;
493+
const modified = nonEph.some((m) => m.rows_updated != null)
494+
? nonEph.reduce((s, m) => s + (m.rows_updated || 0), 0)
495+
: null;
496+
const deleted = nonEph.some((m) => m.rows_deleted != null)
497+
? nonEph.reduce((s, m) => s + (m.rows_deleted || 0), 0)
498+
: null;
496499
if (added === null && modified === null && deleted === null)
497500
return <Text type="secondary"></Text>;
498501
return (
@@ -636,14 +639,18 @@ const Runhistory = () => {
636639
const errorModelName = failedModels.length > 0 ? failedModels[0] : null;
637640

638641
// Aggregate row-level changes — exclude ephemeral
639-
const totalRowsProcessed =
640-
models.reduce((sum, m) => sum + (m.rows_affected || 0), 0) || null;
641-
const totalAdded =
642-
models.reduce((sum, m) => sum + (m.rows_inserted || 0), 0) || null;
643-
const totalModified =
644-
models.reduce((sum, m) => sum + (m.rows_updated || 0), 0) || null;
645-
const totalDeleted =
646-
models.reduce((sum, m) => sum + (m.rows_deleted || 0), 0) || null;
642+
const totalRowsProcessed = models.some((m) => m.rows_affected != null)
643+
? models.reduce((sum, m) => sum + (m.rows_affected || 0), 0)
644+
: null;
645+
const totalAdded = models.some((m) => m.rows_inserted != null)
646+
? models.reduce((sum, m) => sum + (m.rows_inserted || 0), 0)
647+
: null;
648+
const totalModified = models.some((m) => m.rows_updated != null)
649+
? models.reduce((sum, m) => sum + (m.rows_updated || 0), 0)
650+
: null;
651+
const totalDeleted = models.some((m) => m.rows_deleted != null)
652+
? models.reduce((sum, m) => sum + (m.rows_deleted || 0), 0)
653+
: null;
647654

648655
// Parse error into message + stack
649656
const errorLines = (run.error_message || "").split("\n");

0 commit comments

Comments
 (0)