diff --git a/packages/core/src/migrate/client.ts b/packages/core/src/migrate/client.ts index 71b996064..0a0ab93ba 100644 --- a/packages/core/src/migrate/client.ts +++ b/packages/core/src/migrate/client.ts @@ -132,11 +132,32 @@ export class LaunchQLMigrate { const fullPlanResult = parsePlanFile(planPath); const packageDir = dirname(planPath); - const resolvedDeps = resolveDependencies(packageDir, fullPlanResult.data?.package || plan.package, { + const resolvedDepsPlan = resolveDependencies(packageDir, fullPlanResult.data?.package || plan.package, { tagResolution: 'resolve', loadPlanFiles: true, - source: options.usePlan ? 'plan' : 'sql' + source: 'plan' }); + const resolvedDepsSql = resolveDependencies(packageDir, fullPlanResult.data?.package || plan.package, { + tagResolution: 'resolve', + loadPlanFiles: true, + source: 'sql' + }); + const mergeArrays = (a?: string[], b?: string[]) => { + const arr = [...(a || []), ...(b || [])]; + return arr.length ? Array.from(new Set(arr)) : []; + }; + const mergedDeps: DependencyResult = { + external: Array.from(new Set([...(resolvedDepsPlan.external || []), ...(resolvedDepsSql.external || [])])), + resolved: Array.from(new Set([...(resolvedDepsPlan.resolved || []), ...(resolvedDepsSql.resolved || [])])), + deps: {}, + resolvedTags: { ...(resolvedDepsPlan.resolvedTags || {}), ...(resolvedDepsSql.resolvedTags || {}) } + }; + const allKeys = Array.from(new Set([...Object.keys(resolvedDepsPlan.deps || {}), ...Object.keys(resolvedDepsSql.deps || {})])); + for (const k of allKeys) { + mergedDeps.deps[k] = mergeArrays(resolvedDepsPlan.deps[k], resolvedDepsSql.deps[k]); + } + const resolvedDeps = mergedDeps; + const deployed: string[] = []; const skipped: string[] = []; @@ -175,7 +196,10 @@ export class LaunchQLMigrate { const changeKey = `/deploy/${change.name}.sql`; const resolvedFromDeps = resolvedDeps?.deps[changeKey]; - const resolvedChangeDeps = (resolvedFromDeps && resolvedFromDeps.length > 0) ? resolvedFromDeps : change.dependencies; + const resolvedChangeDeps = (resolvedFromDeps !== undefined) ? resolvedFromDeps : change.dependencies; + const qualifiedDeps = (resolvedChangeDeps && resolvedChangeDeps.length > 0) + ? Array.from(new Set(resolvedChangeDeps.map(dep => (dep.includes(':') ? dep : `${plan.package}:${dep}`)))) + : resolvedChangeDeps; try { // Call the deploy stored procedure @@ -186,7 +210,7 @@ export class LaunchQLMigrate { plan.package, change.name, scriptHash, - resolvedChangeDeps.length > 0 ? resolvedChangeDeps : null, + qualifiedDeps && qualifiedDeps.length > 0 ? qualifiedDeps : null, cleanDeploySql, logOnly ]