Languages/SQL/SQL-Language.ps1
function Language.SQL { <# .SYNOPSIS SQL PipeScript Language Definition. .DESCRIPTION Allows PipeScript to generate SQL. PipeScript can be embedded in multiline or singleline format In multiline format, PipeScript will be embedded within: `/*{...}*/` In single line format -- { or -- PipeScript{ begins a PipeScript block -- } or -- }PipeScript ends a PipeScript block ```SQL -- { Uncommented lines between these two points will be ignored -- # Commented lines will become PipeScript / PowerShell. -- param($message = 'hello world') -- "-- $message" -- } ``` .EXAMPLE Invoke-PipeScript { $SQLScript = ' -- { Uncommented lines between these two points will be ignored -- # Commented lines will become PipeScript / PowerShell. -- param($message = "hello world") -- "-- $message" -- } ' [OutputFile('.\HelloWorld.ps1.sql')]$SQLScript } Invoke-PipeScript .\HelloWorld.ps1.sql #> [ValidatePattern('\.sql$')] param() $this = $myInvocation.MyCommand if (-not $this.Self) { $languageDefinition = New-Module { param() $FilePattern = '\.sql$' # We start off by declaring a number of regular expressions: $startComment = '(?> (?> (?<IsSingleLine>--)| /\* )\s{0,}(?:PipeScript)?\s{0,}\{)' $endComment = '(?> --\s{0,}\}\s{0,}(?:PipeScript)? | \}\*/(?:PipeScript)?\s{0,} ) ' $startPattern = "(?<PSStart>${startComment})" $endPattern = [Regex]::new("(?<PSEnd>${endComment})",'IgnoreCase,IgnorePatternWhitespace') # Create a splat containing arguments to the core inline transpiler # Using -LinePattern will skip any inline code not starting with -- $LinePattern = "^\s{0,}--\s{0,}" $LanguageName = 'SQL' Export-ModuleMember -Variable * -Function * -Alias * } -AsCustomObject $languageDefinition.pstypenames.clear() $languageDefinition.pstypenames.add("Language") $languageDefinition.pstypenames.add("Language.SQL") $this.psobject.properties.add([PSNoteProperty]::new('Self',$languageDefinition)) } $this.Self } |