lib/storedprocedures.ps1
function Set-CosmosDbStoredProcedureType { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] $StoredProcedure ) foreach ($item in $StoredProcedure) { $item.PSObject.TypeNames.Insert(0, 'CosmosDB.StoredProcedure') } return $StoredProcedure } function Get-CosmosDbStoredProcedureResourcePath { [CmdletBinding()] [OutputType([System.String])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Database, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $CollectionId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id ) return ('dbs/{0}/colls/{1}/sprocs/{2}' -f $Database, $CollectionId, $Id) } function Get-CosmosDbStoredProcedure { [CmdletBinding(DefaultParameterSetName = 'Context')] [OutputType([Object])] param ( [Alias("Connection")] [Parameter(Mandatory = $true, ParameterSetName = 'Context')] [ValidateNotNullOrEmpty()] [CosmosDb.Context] $Context, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Database, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $CollectionId, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Id ) $null = $PSBoundParameters.Remove('CollectionId') $resourcePath = ('colls/{0}/sprocs' -f $CollectionId) if ($PSBoundParameters.ContainsKey('Id')) { $null = $PSBoundParameters.Remove('Id') $result = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Get' ` -ResourceType 'sprocs' ` -ResourcePath ('{0}/{1}' -f $resourcePath, $Id) $storedProcedure = ConvertFrom-Json -InputObject $result.Content } else { $result = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Get' ` -ResourceType 'sprocs' ` -ResourcePath $resourcePath $body = ConvertFrom-Json -InputObject $result.Content $storedProcedure = $body.StoredProcedures } if ($storedProcedure) { return (Set-CosmosDbStoredProcedureType -StoredProcedure $storedProcedure) } } function Invoke-CosmosDbStoredProcedure { [CmdletBinding(DefaultParameterSetName = 'Context')] [OutputType([Object])] param ( [Alias("Connection")] [Parameter(Mandatory = $true, ParameterSetName = 'Context')] [ValidateNotNullOrEmpty()] [CosmosDb.Context] $Context, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Database, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $CollectionId, [Parameter()] [ValidateNotNullOrEmpty()] [System.String[]] $PartitionKey, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id, [Parameter()] [ValidateNotNullOrEmpty()] [System.Object[]] $StoredProcedureParameter ) $null = $PSBoundParameters.Remove('CollectionId') $null = $PSBoundParameters.Remove('Id') $resourcePath = ('colls/{0}/sprocs/{1}' -f $CollectionId, $Id) $headers = @{} if ($PSBoundParameters.ContainsKey('PartitionKey')) { $headers += @{ 'x-ms-documentdb-partitionkey' = '["' + ($PartitionKey -join '","') + '"]' } $null = $PSBoundParameters.Remove('PartitionKey') } if ($PSBoundParameters.ContainsKey('Debug')) { $headers += @{ 'x-ms-documentdb-script-enable-logging' = $true } $null = $PSBoundParameters.Remove('Debug') } if ($PSBoundParameters.ContainsKey('StoredProcedureParameter')) { $body = ConvertTo-Json -InputObject $StoredProcedureParameter -Depth 10 -Compress $null = $PSBoundParameters.Remove('StoredProcedureParameter') } else { $body = '[]' } <# Because the headers of this request will contain important information then we need to use a plain web request. #> $result = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Post' ` -ResourceType 'sprocs' ` -ResourcePath $resourcePath ` -Headers $headers ` -Body $body if ($result.Headers.'x-ms-documentdb-script-log-results') { $logs = [Uri]::UnescapeDataString($result.Headers.'x-ms-documentdb-script-log-results').Trim() Write-Verbose -Message $($LocalizedData.StoredProcedureScriptLogResults -f $Id, $logs) } if ($result.Content) { return (ConvertFrom-Json -InputObject $result.Content) } } function New-CosmosDbStoredProcedure { [CmdletBinding(DefaultParameterSetName = 'Context')] [OutputType([Object])] param ( [Alias("Connection")] [Parameter(Mandatory = $true, ParameterSetName = 'Context')] [ValidateNotNullOrEmpty()] [CosmosDb.Context] $Context, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Database, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $CollectionId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $StoredProcedureBody ) $null = $PSBoundParameters.Remove('CollectionId') $null = $PSBoundParameters.Remove('Id') $null = $PSBoundParameters.Remove('StoredProcedureBody') $resourcePath = ('colls/{0}/sprocs' -f $CollectionId) $requestBody = Convert-CosmosDbRequestBody -RequestBodyObject @{ id = $id body = $StoredProcedureBody } $result = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Post' ` -ResourceType 'sprocs' ` -ResourcePath $resourcePath ` -Body $requestBody $storedProcedure = ConvertFrom-Json -InputObject $result.Content if ($storedProcedure) { return (Set-CosmosDbStoredProcedureType -StoredProcedure $storedProcedure) } } function Remove-CosmosDbStoredProcedure { [CmdletBinding(DefaultParameterSetName = 'Context')] param ( [Alias("Connection")] [Parameter(Mandatory = $true, ParameterSetName = 'Context')] [ValidateNotNullOrEmpty()] [CosmosDb.Context] $Context, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Database, [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $CollectionId, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Id ) $null = $PSBoundParameters.Remove('CollectionId') $null = $PSBoundParameters.Remove('Id') $resourcePath = ('colls/{0}/sprocs/{1}' -f $CollectionId, $Id) $null = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Delete' ` -ResourceType 'sprocs' ` -ResourcePath $resourcePath } function Set-CosmosDbStoredProcedure { [CmdletBinding(DefaultParameterSetName = 'Context')] [OutputType([Object])] param ( [Alias("Connection")] [Parameter(Mandatory = $true, ParameterSetName = 'Context')] [ValidateNotNullOrEmpty()] [CosmosDb.Context] $Context, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Database, [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter(ParameterSetName = 'Account')] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $CollectionId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $StoredProcedureBody ) $null = $PSBoundParameters.Remove('CollectionId') $null = $PSBoundParameters.Remove('Id') $null = $PSBoundParameters.Remove('StoredProcedureBody') $resourcePath = ('colls/{0}/sprocs/{1}' -f $CollectionId, $Id) $requestBody = Convert-CosmosDbRequestBody -RequestBodyObject @{ id = $id body = $StoredProcedureBody } $result = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Put' ` -ResourceType 'sprocs' ` -ResourcePath $resourcePath ` -Body $requestBody $storedProcedure = ConvertFrom-Json -InputObject $result.Content if ($storedProcedure) { return (Set-CosmosDbStoredProcedureType -StoredProcedure $storedProcedure) } } |