Skip to content

Commit baf6585

Browse files
committed
fix: wire schema columns through all buildFilterClause call sites
1 parent f4f1f5e commit baf6585

5 files changed

Lines changed: 27 additions & 7 deletions

File tree

apps/sim/app/api/table/[tableId]/rows/route.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,10 @@ export const GET = withRouteHandler(
266266
eq(userTableRows.workspaceId, validated.workspaceId),
267267
]
268268

269+
const schema = table.schema as TableSchema
270+
269271
if (validated.filter) {
270-
const filterClause = buildFilterClause(validated.filter as Filter, USER_TABLE_ROWS_SQL_NAME)
272+
const filterClause = buildFilterClause(validated.filter as Filter, USER_TABLE_ROWS_SQL_NAME, schema.columns)
271273
if (filterClause) {
272274
baseConditions.push(filterClause)
273275
}
@@ -286,7 +288,6 @@ export const GET = withRouteHandler(
286288
.where(and(...baseConditions))
287289

288290
if (validated.sort) {
289-
const schema = table.schema as TableSchema
290291
const sortClause = buildSortClause(validated.sort, USER_TABLE_ROWS_SQL_NAME, schema.columns)
291292
if (sortClause) {
292293
query = query.orderBy(sortClause) as typeof query
@@ -509,6 +510,7 @@ export const DELETE = withRouteHandler(
509510
limit: validated.limit,
510511
workspaceId: validated.workspaceId,
511512
},
513+
table,
512514
requestId
513515
)
514516

apps/sim/app/api/v1/tables/[tableId]/rows/route.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,10 @@ export const GET = withRouteHandler(async (request: NextRequest, context: TableR
158158
eq(userTableRows.workspaceId, validated.workspaceId),
159159
]
160160

161+
const schema = table.schema as TableSchema
162+
161163
if (validated.filter) {
162-
const filterClause = buildFilterClause(validated.filter as Filter, USER_TABLE_ROWS_SQL_NAME)
164+
const filterClause = buildFilterClause(validated.filter as Filter, USER_TABLE_ROWS_SQL_NAME, schema.columns)
163165
if (filterClause) {
164166
baseConditions.push(filterClause)
165167
}
@@ -177,7 +179,6 @@ export const GET = withRouteHandler(async (request: NextRequest, context: TableR
177179
.where(and(...baseConditions))
178180

179181
if (validated.sort) {
180-
const schema = table.schema as TableSchema
181182
const sortClause = buildSortClause(validated.sort, USER_TABLE_ROWS_SQL_NAME, schema.columns)
182183
if (sortClause) {
183184
query = query.orderBy(sortClause) as typeof query
@@ -490,6 +491,7 @@ export const DELETE = withRouteHandler(
490491
limit: validated.limit,
491492
workspaceId: validated.workspaceId,
492493
},
494+
table,
493495
requestId
494496
)
495497

apps/sim/lib/copilot/tools/server/table/user-table.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,11 @@ export const userTableServerTool: BaseServerTool<UserTableArgs, UserTableResult>
474474
return { success: false, message: 'Workspace ID is required' }
475475
}
476476

477+
const table = await getTableById(args.tableId)
478+
if (!table) {
479+
return { success: false, message: `Table not found: ${args.tableId}` }
480+
}
481+
477482
const requestId = generateId().slice(0, 8)
478483
const result = await queryRows(
479484
args.tableId,
@@ -483,6 +488,7 @@ export const userTableServerTool: BaseServerTool<UserTableArgs, UserTableResult>
483488
sort: args.sort,
484489
limit: args.limit,
485490
offset: args.offset,
491+
columns: table.schema.columns,
486492
},
487493
requestId
488494
)
@@ -605,6 +611,11 @@ export const userTableServerTool: BaseServerTool<UserTableArgs, UserTableResult>
605611
return { success: false, message: 'Workspace ID is required' }
606612
}
607613

614+
const table = await getTableById(args.tableId)
615+
if (!table) {
616+
return { success: false, message: `Table not found: ${args.tableId}` }
617+
}
618+
608619
const requestId = generateId().slice(0, 8)
609620
assertNotAborted()
610621
const result = await deleteRowsByFilter(
@@ -614,6 +625,7 @@ export const userTableServerTool: BaseServerTool<UserTableArgs, UserTableResult>
614625
limit: args.limit,
615626
workspaceId,
616627
},
628+
table,
617629
requestId
618630
)
619631

apps/sim/lib/table/service.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,7 @@ export async function queryRows(
14351435

14361436
let whereClause = baseConditions
14371437
if (filter && Object.keys(filter).length > 0) {
1438-
const filterClause = buildFilterClause(filter, tableName)
1438+
const filterClause = buildFilterClause(filter, tableName, options.columns)
14391439
if (filterClause) {
14401440
whereClause = and(baseConditions, filterClause)
14411441
}
@@ -1818,7 +1818,7 @@ export async function updateRowsByFilter(
18181818
): Promise<BulkOperationResult> {
18191819
const tableName = USER_TABLE_ROWS_SQL_NAME
18201820

1821-
const filterClause = buildFilterClause(data.filter, tableName)
1821+
const filterClause = buildFilterClause(data.filter, tableName, (table.schema as TableSchema).columns)
18221822
if (!filterClause) {
18231823
throw new Error('Filter is required for bulk update')
18241824
}
@@ -2119,17 +2119,19 @@ async function recompactPositions(tableId: string, trx: DbTransaction, minDelete
21192119
* Deletes multiple rows matching a filter.
21202120
*
21212121
* @param data - Bulk delete data
2122+
* @param table - Table definition used to emit correct SQL casts in filter expressions
21222123
* @param requestId - Request ID for logging
21232124
* @returns Bulk operation result
21242125
*/
21252126
export async function deleteRowsByFilter(
21262127
data: BulkDeleteData,
2128+
table: TableDefinition,
21272129
requestId: string
21282130
): Promise<BulkOperationResult> {
21292131
const tableName = USER_TABLE_ROWS_SQL_NAME
21302132

21312133
// Build filter clause
2132-
const filterClause = buildFilterClause(data.filter, tableName)
2134+
const filterClause = buildFilterClause(data.filter, tableName, (table.schema as TableSchema).columns)
21332135
if (!filterClause) {
21342136
throw new Error('Filter is required for bulk delete')
21352137
}

apps/sim/lib/table/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ export interface QueryOptions {
227227
* is returned as `null` to signal it was not computed.
228228
*/
229229
includeTotal?: boolean
230+
/** Column definitions used to emit correct SQL casts for date/number fields in filter expressions. */
231+
columns?: ColumnDefinition[]
230232
}
231233

232234
export interface QueryResult {

0 commit comments

Comments
 (0)