Skip to content

Commit e4de0bc

Browse files
committed
fix(dynamodb): add legacy fallbacks in params for subblock migration compatibility
Workflows saved with the old shared IDs (key, filterExpression, etc.) that migrate to get-scoped slots via subblock-migrations still work correctly on update/delete/scan/put operations via fallback lookups in tools.config.params.
1 parent 1c66e25 commit e4de0bc

1 file changed

Lines changed: 53 additions & 17 deletions

File tree

apps/sim/blocks/blocks/dynamodb.ts

Lines changed: 53 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -596,14 +596,20 @@ Return ONLY the expression - no explanations.`,
596596
secretAccessKey: params.secretAccessKey,
597597
}
598598

599-
// Table name (introspect uses introspectTableName, all others use tableName)
599+
// Table name (introspect uses introspectTableName, all others use tableName).
600+
// Legacy blocks stored both operations under 'tableName'; fall back to tableName
601+
// for introspect if introspectTableName is not present (migration grace period).
600602
if (op === 'introspect') {
601-
if (params.introspectTableName) result.tableName = params.introspectTableName
603+
const tbl = params.introspectTableName || params.tableName
604+
if (tbl) result.tableName = tbl
602605
} else {
603606
result.tableName = params.tableName
604607
}
605608

606-
// Operation-specific params — map unique subBlock IDs back to tool param names
609+
// Operation-specific params — map unique subBlock IDs back to tool param names.
610+
// Where a fallback to the legacy migrated ID is present (e.g. params.getKey as
611+
// fallback for update/delete), it covers blocks saved before the subblock rename
612+
// whose migration entry routed the shared old ID to the query/get slot.
607613
if (op === 'get') {
608614
const key = parseJson(params.getKey, 'key')
609615
if (key !== undefined) result.key = key
@@ -615,11 +621,20 @@ Return ONLY the expression - no explanations.`,
615621
if (op === 'put') {
616622
const item = parseJson(params.item, 'item')
617623
if (item !== undefined) result.item = item
618-
if (params.putConditionExpression)
619-
result.conditionExpression = params.putConditionExpression
620-
const names = parseJson(params.putExpressionAttributeNames, 'expressionAttributeNames')
624+
// conditionExpression: fall back to updateConditionExpression (legacy migration target)
625+
const condExpr = params.putConditionExpression || params.updateConditionExpression
626+
if (condExpr) result.conditionExpression = condExpr
627+
// expressionAttributeNames: fall back to queryExpressionAttributeNames (legacy migration target)
628+
const names = parseJson(
629+
params.putExpressionAttributeNames || params.queryExpressionAttributeNames,
630+
'expressionAttributeNames'
631+
)
621632
if (names !== undefined) result.expressionAttributeNames = names
622-
const values = parseJson(params.putExpressionAttributeValues, 'expressionAttributeValues')
633+
// expressionAttributeValues: fall back to queryExpressionAttributeValues (legacy migration target)
634+
const values = parseJson(
635+
params.putExpressionAttributeValues || params.queryExpressionAttributeValues,
636+
'expressionAttributeValues'
637+
)
623638
if (values !== undefined) result.expressionAttributeValues = values
624639
}
625640

@@ -644,28 +659,43 @@ Return ONLY the expression - no explanations.`,
644659
}
645660

646661
if (op === 'scan') {
647-
if (params.scanFilterExpression) result.filterExpression = params.scanFilterExpression
662+
// filterExpression: fall back to queryFilterExpression (legacy migration target for 'filterExpression')
663+
const filterExpr = params.scanFilterExpression || params.queryFilterExpression
664+
if (filterExpr) result.filterExpression = filterExpr
648665
if (params.projectionExpression) result.projectionExpression = params.projectionExpression
649-
const names = parseJson(params.scanExpressionAttributeNames, 'expressionAttributeNames')
666+
// expressionAttributeNames: fall back to queryExpressionAttributeNames (legacy migration target)
667+
const names = parseJson(
668+
params.scanExpressionAttributeNames || params.queryExpressionAttributeNames,
669+
'expressionAttributeNames'
670+
)
650671
if (names !== undefined) result.expressionAttributeNames = names
672+
// expressionAttributeValues: fall back to queryExpressionAttributeValues (legacy migration target)
651673
const values = parseJson(
652-
params.scanExpressionAttributeValues,
674+
params.scanExpressionAttributeValues || params.queryExpressionAttributeValues,
653675
'expressionAttributeValues'
654676
)
655677
if (values !== undefined) result.expressionAttributeValues = values
656-
if (params.scanLimit) result.limit = Number.parseInt(String(params.scanLimit), 10)
678+
// limit: fall back to queryLimit (legacy migration target for 'limit')
679+
const lim = params.scanLimit || params.queryLimit
680+
if (lim) result.limit = Number.parseInt(String(lim), 10)
657681
const esk = parseJson(params.scanExclusiveStartKey, 'exclusiveStartKey')
658682
if (esk !== undefined) result.exclusiveStartKey = esk
659683
}
660684

661685
if (op === 'update') {
662-
const key = parseJson(params.updateKey, 'key')
686+
// key: fall back to getKey (legacy migration target for shared 'key' subblock)
687+
const key = parseJson(params.updateKey || params.getKey, 'key')
663688
if (key !== undefined) result.key = key
664689
if (params.updateExpression) result.updateExpression = params.updateExpression
665-
const names = parseJson(params.updateExpressionAttributeNames, 'expressionAttributeNames')
690+
// expressionAttributeNames: fall back to queryExpressionAttributeNames (legacy migration target)
691+
const names = parseJson(
692+
params.updateExpressionAttributeNames || params.queryExpressionAttributeNames,
693+
'expressionAttributeNames'
694+
)
666695
if (names !== undefined) result.expressionAttributeNames = names
696+
// expressionAttributeValues: fall back to queryExpressionAttributeValues (legacy migration target)
667697
const values = parseJson(
668-
params.updateExpressionAttributeValues,
698+
params.updateExpressionAttributeValues || params.queryExpressionAttributeValues,
669699
'expressionAttributeValues'
670700
)
671701
if (values !== undefined) result.expressionAttributeValues = values
@@ -674,14 +704,20 @@ Return ONLY the expression - no explanations.`,
674704
}
675705

676706
if (op === 'delete') {
677-
const key = parseJson(params.deleteKey, 'key')
707+
// key: fall back to getKey (legacy migration target for shared 'key' subblock)
708+
const key = parseJson(params.deleteKey || params.getKey, 'key')
678709
if (key !== undefined) result.key = key
679710
if (params.deleteConditionExpression)
680711
result.conditionExpression = params.deleteConditionExpression
681-
const names = parseJson(params.deleteExpressionAttributeNames, 'expressionAttributeNames')
712+
// expressionAttributeNames: fall back to queryExpressionAttributeNames (legacy migration target)
713+
const names = parseJson(
714+
params.deleteExpressionAttributeNames || params.queryExpressionAttributeNames,
715+
'expressionAttributeNames'
716+
)
682717
if (names !== undefined) result.expressionAttributeNames = names
718+
// expressionAttributeValues: fall back to queryExpressionAttributeValues (legacy migration target)
683719
const values = parseJson(
684-
params.deleteExpressionAttributeValues,
720+
params.deleteExpressionAttributeValues || params.queryExpressionAttributeValues,
685721
'expressionAttributeValues'
686722
)
687723
if (values !== undefined) result.expressionAttributeValues = values

0 commit comments

Comments
 (0)