@@ -13,6 +13,7 @@ import { mergeQueryResults } from "./merge.js";
1313import { decodeColumnarBatch , columnarBatchToRows } from "./columnar.js" ;
1414import { coalesceRanges , fetchBounded , withRetry , withTimeout } from "./coalesce.js" ;
1515import { R2SpillBackend , encodeColumnarRun } from "./r2-spill.js" ;
16+ import { QueryModeError } from "./errors.js" ;
1617import {
1718 type Operator , type RowBatch ,
1819 buildEdgePipeline , drainPipeline , estimateRowSize ,
@@ -678,7 +679,7 @@ export class QueryDO extends DurableObject<Env> {
678679 const metaCached = ! ! meta ;
679680 if ( ! meta ) {
680681 meta = ( await this . loadTableFromR2 ( query . table ) ) ?? undefined ;
681- if ( ! meta ) throw new Error ( `Table "${ query . table } " not found` ) ;
682+ if ( ! meta ) throw new QueryModeError ( "TABLE_NOT_FOUND" , `Table "${ query . table } " not found` ) ;
682683 }
683684
684685 const { columns } = meta ;
@@ -801,7 +802,7 @@ export class QueryDO extends DurableObject<Env> {
801802 let meta : TableMeta | undefined = this . footerCache . get ( query . table ) ;
802803 if ( ! meta ) {
803804 meta = ( await this . loadTableFromR2 ( query . table ) ) ?? undefined ;
804- if ( ! meta ) throw new Error ( `Table "${ query . table } " not found` ) ;
805+ if ( ! meta ) throw new QueryModeError ( "TABLE_NOT_FOUND" , `Table "${ query . table } " not found` ) ;
805806 }
806807
807808 // Use operator pipeline for any query that could produce unbounded results:
@@ -1252,7 +1253,7 @@ export class QueryDO extends DurableObject<Env> {
12521253 let leftMeta : TableMeta | undefined = this . footerCache . get ( query . table ) ;
12531254 if ( ! leftMeta ) {
12541255 leftMeta = ( await this . loadTableFromR2 ( query . table ) ) ?? undefined ;
1255- if ( ! leftMeta ) throw new Error ( `Table "${ query . table } " not found` ) ;
1256+ if ( ! leftMeta ) throw new QueryModeError ( "TABLE_NOT_FOUND" , `Table "${ query . table } " not found` ) ;
12561257 }
12571258
12581259 // Build left scan (no sort/limit/agg — those apply after join)
@@ -1272,7 +1273,7 @@ export class QueryDO extends DurableObject<Env> {
12721273 let rightMeta : TableMeta | undefined = this . footerCache . get ( join . right . table ) ;
12731274 if ( ! rightMeta ) {
12741275 rightMeta = ( await this . loadTableFromR2 ( join . right . table ) ) ?? undefined ;
1275- if ( ! rightMeta ) throw new Error ( `Table "${ join . right . table } " not found` ) ;
1276+ if ( ! rightMeta ) throw new QueryModeError ( "TABLE_NOT_FOUND" , `Table "${ join . right . table } " not found` ) ;
12761277 }
12771278
12781279 // Build right scan
@@ -1907,7 +1908,9 @@ export class QueryDO extends DurableObject<Env> {
19071908 if ( s . status === "fulfilled" ) {
19081909 results . push ( s . value ) ;
19091910 } else {
1910- failures . push ( String ( s . reason ) ) ;
1911+ const reason = String ( s . reason ) ;
1912+ failures . push ( reason ) ;
1913+ this . log ( "error" , "reducer_do_failed" , { reason, tier } ) ;
19111914 }
19121915 }
19131916 if ( failures . length > 0 ) {
0 commit comments