diff --git a/Test-SQLScripts.ps1 b/Test-SQLScripts.ps1 index e18fdcd..1468d0c 100644 --- a/Test-SQLScripts.ps1 +++ b/Test-SQLScripts.ps1 @@ -99,7 +99,19 @@ begin { Return $TableReference.SchemaObject } } - + function Get-UpdatedTableFromQueryDefinedTable($QueryDefinedTable) { + Write-Verbose "Looks like a sub query was used, need to get into the sub queries..." + If ($QueryDefinedTable.QueryExpression) { + Get-UpdatedTableFromQueryDefinedTable $QueryDefinedTable.QueryExpression.FromClause.TableReferences + } Else { + Write-Verbose "closing recursion..." + If ($QueryDefinedTable.FirstTableReference) { + Get-UpdatedTableFromReferences $QueryDefinedTable.FirstTableReference + } Else { + Return $QueryDefinedTable.SchemaObject + } + } + } function Get-Statement ($Statement, $Keys) { $StatementObject = [PSCustomObject] @{ PSTypeName = "Parser.DOM.Statement" @@ -140,6 +152,10 @@ begin { $SchemaObject = Get-UpdatedTableFromReferences $statement.Queryexpression.fromclause.tablereferences.FirstTableReference $StatementObject.OnObjectSchema = $SchemaObject.SchemaIdentifier.Value $StatementObject.OnObjectName = $SchemaObject.BaseIdentifier.Value + } elseif ($ObjectType -eq "SelectStatement" -and $statement.Queryexpression.FromClause.TableReferences.QueryExpression -ne $null) { + $SchemaObject = Get-UpdatedTableFromQueryDefinedTable $statement.QueryExpression.FromClause.TableReferences + $StatementObject.OnObjectSchema = $SchemaObject.SchemaIdentifier.Value + $StatementObject.OnObjectName = $SchemaObject.BaseIdentifier.Value } else { try { $StatementObject.StatementType = $Statement.GetType().Name.ToString() diff --git a/TestScripts/QueryDefinedTable.sql b/TestScripts/QueryDefinedTable.sql new file mode 100644 index 0000000..018e2bc --- /dev/null +++ b/TestScripts/QueryDefinedTable.sql @@ -0,0 +1,7 @@ +SELECT sub.last_name, + sub.first_name +FROM (SELECT customer.last_name, + customer.first_name + FROM customer + WHERE customer.age > '30') AS sub +