< Summary

Class:Azure.Data.Tables.TableRestClient
Assembly:Azure.Data.Tables
File(s):C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\Generated\TableRestClient.cs
Covered lines:481
Uncovered lines:81
Coverable lines:562
Total lines:1228
Line coverage:85.5% (481 of 562)
Covered branches:197
Total branches:280
Branch coverage:70.3% (197 of 280)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor(...)-80%50%
CreateQueryRequest(...)-91.3%90%
QueryAsync()-88.89%50%
Query(...)-88.89%50%
CreateCreateRequest(...)-90.48%75%
CreateAsync()-83.33%66.67%
Create(...)-83.33%66.67%
CreateDeleteRequest(...)-92.86%50%
DeleteAsync()-88.89%75%
Delete(...)-88.89%75%
CreateQueryEntitiesRequest(...)-89.66%87.5%
QueryEntitiesAsync()-81.82%50%
QueryEntities(...)-81.82%50%
CreateQueryEntitiesWithPartitionAndRowKeyRequest(...)-85.19%75%
QueryEntitiesWithPartitionAndRowKeyAsync()-77.78%60%
QueryEntitiesWithPartitionAndRowKey(...)-77.78%60%
CreateUpdateEntityRequest(...)-94.12%85.71%
UpdateEntityAsync()-76.92%62.5%
UpdateEntity(...)-76.92%62.5%
CreateMergeEntityRequest(...)-93.94%85.71%
MergeEntityAsync()-76.92%62.5%
MergeEntity(...)-76.92%62.5%
CreateDeleteEntityRequest(...)-91.3%75%
DeleteEntityAsync()-73.33%60%
DeleteEntity(...)-73.33%60%
CreateInsertEntityRequest(...)-89.66%78.57%
InsertEntityAsync()-80%50%
InsertEntity(...)-80%50%
CreateGetAccessPolicyRequest(...)-86.67%50%
GetAccessPolicyAsync()-87.5%75%
GetAccessPolicy(...)-87.5%75%
CreateSetAccessPolicyRequest(...)-91.67%75%
SetAccessPolicyAsync()-77.78%50%
SetAccessPolicy(...)-77.78%50%

File(s)

C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\Generated\TableRestClient.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4// <auto-generated/>
 5
 6#nullable disable
 7
 8using System;
 9using System.Collections.Generic;
 10using System.Text.Json;
 11using System.Threading;
 12using System.Threading.Tasks;
 13using System.Xml.Linq;
 14using Azure.Core;
 15using Azure.Core.Pipeline;
 16using Azure.Data.Tables.Models;
 17
 18namespace Azure.Data.Tables
 19{
 20    internal partial class TableRestClient
 21    {
 22        private string url;
 23        private string version;
 24        private ClientDiagnostics _clientDiagnostics;
 25        private HttpPipeline _pipeline;
 26
 27        /// <summary> Initializes a new instance of TableRestClient. </summary>
 28        /// <param name="clientDiagnostics"> The handler for diagnostic messaging in the client. </param>
 29        /// <param name="pipeline"> The HTTP pipeline for sending and receiving REST requests and responses. </param>
 30        /// <param name="url"> The URL of the service account or table that is the targe of the desired operation. </par
 31        /// <param name="version"> Specifies the version of the operation to use for this request. </param>
 32        /// <exception cref="ArgumentNullException"> <paramref name="url"/> or <paramref name="version"/> is null. </exc
 49633        public TableRestClient(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, string url, string version = 
 34        {
 49635            if (url == null)
 36            {
 037                throw new ArgumentNullException(nameof(url));
 38            }
 49639            if (version == null)
 40            {
 041                throw new ArgumentNullException(nameof(version));
 42            }
 43
 49644            this.url = url;
 49645            this.version = version;
 49646            _clientDiagnostics = clientDiagnostics;
 49647            _pipeline = pipeline;
 49648        }
 49
 50        internal HttpMessage CreateQueryRequest(string requestId, string nextTableName, QueryOptions queryOptions)
 51        {
 5652            var message = _pipeline.CreateMessage();
 5653            var request = message.Request;
 5654            request.Method = RequestMethod.Get;
 5655            var uri = new RawRequestUriBuilder();
 5656            uri.AppendRaw(url, false);
 5657            uri.AppendPath("/Tables", false);
 5658            if (queryOptions?.Format != null)
 59            {
 5660                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 61            }
 5662            if (queryOptions?.Top != null)
 63            {
 2464                uri.AppendQuery("$top", queryOptions.Top.Value, true);
 65            }
 5666            if (queryOptions?.Select != null)
 67            {
 068                uri.AppendQuery("$select", queryOptions.Select, true);
 69            }
 5670            if (queryOptions?.Filter != null)
 71            {
 2472                uri.AppendQuery("$filter", queryOptions.Filter, true);
 73            }
 5674            if (nextTableName != null)
 75            {
 1676                uri.AppendQuery("NextTableName", nextTableName, true);
 77            }
 5678            request.Uri = uri;
 5679            request.Headers.Add("x-ms-version", version);
 5680            if (requestId != null)
 81            {
 082                request.Headers.Add("x-ms-client-request-id", requestId);
 83            }
 5684            request.Headers.Add("DataServiceVersion", "3.0");
 5685            request.Headers.Add("Accept", "application/json");
 5686            return message;
 87        }
 88
 89        /// <summary> Queries tables under the given account. </summary>
 90        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 91        /// <param name="nextTableName"> A table query continuation token from a previous call. </param>
 92        /// <param name="queryOptions"> Parameter group. </param>
 93        /// <param name="cancellationToken"> The cancellation token to use. </param>
 94        public async Task<ResponseWithHeaders<TableQueryResponse, TableQueryHeaders>> QueryAsync(string requestId = null
 95        {
 2896            using var message = CreateQueryRequest(requestId, nextTableName, queryOptions);
 2897            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 2898            var headers = new TableQueryHeaders(message.Response);
 2899            switch (message.Response.Status)
 100            {
 101                case 200:
 102                    {
 103                        TableQueryResponse value = default;
 28104                        using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, canc
 28105                        value = TableQueryResponse.DeserializeTableQueryResponse(document.RootElement);
 28106                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 107                    }
 108                default:
 0109                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 110            }
 28111        }
 112
 113        /// <summary> Queries tables under the given account. </summary>
 114        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 115        /// <param name="nextTableName"> A table query continuation token from a previous call. </param>
 116        /// <param name="queryOptions"> Parameter group. </param>
 117        /// <param name="cancellationToken"> The cancellation token to use. </param>
 118        public ResponseWithHeaders<TableQueryResponse, TableQueryHeaders> Query(string requestId = null, string nextTabl
 119        {
 28120            using var message = CreateQueryRequest(requestId, nextTableName, queryOptions);
 28121            _pipeline.Send(message, cancellationToken);
 28122            var headers = new TableQueryHeaders(message.Response);
 28123            switch (message.Response.Status)
 124            {
 125                case 200:
 126                    {
 127                        TableQueryResponse value = default;
 28128                        using var document = JsonDocument.Parse(message.Response.ContentStream);
 28129                        value = TableQueryResponse.DeserializeTableQueryResponse(document.RootElement);
 28130                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 131                    }
 132                default:
 0133                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 134            }
 28135        }
 136
 137        internal HttpMessage CreateCreateRequest(TableProperties tableProperties, string requestId, ResponseFormat? resp
 138        {
 656139            var message = _pipeline.CreateMessage();
 656140            var request = message.Request;
 656141            request.Method = RequestMethod.Post;
 656142            var uri = new RawRequestUriBuilder();
 656143            uri.AppendRaw(url, false);
 656144            uri.AppendPath("/Tables", false);
 656145            if (queryOptions?.Format != null)
 146            {
 656147                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 148            }
 656149            request.Uri = uri;
 656150            request.Headers.Add("x-ms-version", version);
 656151            if (requestId != null)
 152            {
 0153                request.Headers.Add("x-ms-client-request-id", requestId);
 154            }
 656155            request.Headers.Add("DataServiceVersion", "3.0");
 656156            if (responsePreference != null)
 157            {
 0158                request.Headers.Add("Prefer", responsePreference.Value.ToString());
 159            }
 656160            request.Headers.Add("Accept", "application/json");
 656161            request.Headers.Add("Content-Type", "application/json;odata=nometadata");
 656162            var content = new Utf8JsonRequestContent();
 656163            content.JsonWriter.WriteObjectValue(tableProperties);
 656164            request.Content = content;
 656165            return message;
 166        }
 167
 168        /// <summary> Creates a new table under the given account. </summary>
 169        /// <param name="tableProperties"> The Table properties. </param>
 170        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 171        /// <param name="responsePreference"> Specifies whether the response should include the inserted entity in the p
 172        /// <param name="queryOptions"> Parameter group. </param>
 173        /// <param name="cancellationToken"> The cancellation token to use. </param>
 174        /// <exception cref="ArgumentNullException"> <paramref name="tableProperties"/> is null. </exception>
 175        public async Task<ResponseWithHeaders<TableResponse, TableCreateHeaders>> CreateAsync(TableProperties tablePrope
 176        {
 328177            if (tableProperties == null)
 178            {
 0179                throw new ArgumentNullException(nameof(tableProperties));
 180            }
 181
 328182            using var message = CreateCreateRequest(tableProperties, requestId, responsePreference, queryOptions);
 328183            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 328184            var headers = new TableCreateHeaders(message.Response);
 328185            switch (message.Response.Status)
 186            {
 187                case 201:
 188                    {
 189                        TableResponse value = default;
 320190                        using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, canc
 320191                        value = TableResponse.DeserializeTableResponse(document.RootElement);
 320192                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 193                    }
 194                case 204:
 0195                    return ResponseWithHeaders.FromValue<TableResponse, TableCreateHeaders>(null, headers, message.Respo
 196                default:
 8197                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 198            }
 320199        }
 200
 201        /// <summary> Creates a new table under the given account. </summary>
 202        /// <param name="tableProperties"> The Table properties. </param>
 203        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 204        /// <param name="responsePreference"> Specifies whether the response should include the inserted entity in the p
 205        /// <param name="queryOptions"> Parameter group. </param>
 206        /// <param name="cancellationToken"> The cancellation token to use. </param>
 207        /// <exception cref="ArgumentNullException"> <paramref name="tableProperties"/> is null. </exception>
 208        public ResponseWithHeaders<TableResponse, TableCreateHeaders> Create(TableProperties tableProperties, string req
 209        {
 328210            if (tableProperties == null)
 211            {
 0212                throw new ArgumentNullException(nameof(tableProperties));
 213            }
 214
 328215            using var message = CreateCreateRequest(tableProperties, requestId, responsePreference, queryOptions);
 328216            _pipeline.Send(message, cancellationToken);
 328217            var headers = new TableCreateHeaders(message.Response);
 328218            switch (message.Response.Status)
 219            {
 220                case 201:
 221                    {
 222                        TableResponse value = default;
 320223                        using var document = JsonDocument.Parse(message.Response.ContentStream);
 320224                        value = TableResponse.DeserializeTableResponse(document.RootElement);
 320225                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 226                    }
 227                case 204:
 0228                    return ResponseWithHeaders.FromValue<TableResponse, TableCreateHeaders>(null, headers, message.Respo
 229                default:
 8230                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 231            }
 320232        }
 233
 234        internal HttpMessage CreateDeleteRequest(string table, string requestId)
 235        {
 640236            var message = _pipeline.CreateMessage();
 640237            var request = message.Request;
 640238            request.Method = RequestMethod.Delete;
 640239            var uri = new RawRequestUriBuilder();
 640240            uri.AppendRaw(url, false);
 640241            uri.AppendPath("/Tables('", false);
 640242            uri.AppendPath(table, true);
 640243            uri.AppendPath("')", false);
 640244            request.Uri = uri;
 640245            request.Headers.Add("x-ms-version", version);
 640246            if (requestId != null)
 247            {
 0248                request.Headers.Add("x-ms-client-request-id", requestId);
 249            }
 640250            request.Headers.Add("Accept", "application/json");
 640251            return message;
 252        }
 253
 254        /// <summary> Operation permanently deletes the specified table. </summary>
 255        /// <param name="table"> The name of the table. </param>
 256        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 257        /// <param name="cancellationToken"> The cancellation token to use. </param>
 258        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 259        public async Task<ResponseWithHeaders<TableDeleteHeaders>> DeleteAsync(string table, string requestId = null, Ca
 260        {
 322261            if (table == null)
 262            {
 2263                throw new ArgumentNullException(nameof(table));
 264            }
 265
 320266            using var message = CreateDeleteRequest(table, requestId);
 320267            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 320268            var headers = new TableDeleteHeaders(message.Response);
 320269            switch (message.Response.Status)
 270            {
 271                case 204:
 320272                    return ResponseWithHeaders.FromValue(headers, message.Response);
 273                default:
 0274                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 275            }
 320276        }
 277
 278        /// <summary> Operation permanently deletes the specified table. </summary>
 279        /// <param name="table"> The name of the table. </param>
 280        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 281        /// <param name="cancellationToken"> The cancellation token to use. </param>
 282        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 283        public ResponseWithHeaders<TableDeleteHeaders> Delete(string table, string requestId = null, CancellationToken c
 284        {
 322285            if (table == null)
 286            {
 2287                throw new ArgumentNullException(nameof(table));
 288            }
 289
 320290            using var message = CreateDeleteRequest(table, requestId);
 320291            _pipeline.Send(message, cancellationToken);
 320292            var headers = new TableDeleteHeaders(message.Response);
 320293            switch (message.Response.Status)
 294            {
 295                case 204:
 320296                    return ResponseWithHeaders.FromValue(headers, message.Response);
 297                default:
 0298                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 299            }
 320300        }
 301
 302        internal HttpMessage CreateQueryEntitiesRequest(string table, int? timeout, string requestId, string nextPartiti
 303        {
 732304            var message = _pipeline.CreateMessage();
 732305            var request = message.Request;
 732306            request.Method = RequestMethod.Get;
 732307            var uri = new RawRequestUriBuilder();
 732308            uri.AppendRaw(url, false);
 732309            uri.AppendPath("/", false);
 732310            uri.AppendPath(table, true);
 732311            uri.AppendPath("()", false);
 732312            if (timeout != null)
 313            {
 0314                uri.AppendQuery("timeout", timeout.Value, true);
 315            }
 732316            if (queryOptions?.Format != null)
 317            {
 732318                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 319            }
 732320            if (queryOptions?.Top != null)
 321            {
 96322                uri.AppendQuery("$top", queryOptions.Top.Value, true);
 323            }
 732324            if (queryOptions?.Select != null)
 325            {
 0326                uri.AppendQuery("$select", queryOptions.Select, true);
 327            }
 732328            if (queryOptions?.Filter != null)
 329            {
 636330                uri.AppendQuery("$filter", queryOptions.Filter, true);
 331            }
 732332            if (nextPartitionKey != null)
 333            {
 64334                uri.AppendQuery("NextPartitionKey", nextPartitionKey, true);
 335            }
 732336            if (nextRowKey != null)
 337            {
 64338                uri.AppendQuery("NextRowKey", nextRowKey, true);
 339            }
 732340            request.Uri = uri;
 732341            request.Headers.Add("x-ms-version", version);
 732342            if (requestId != null)
 343            {
 0344                request.Headers.Add("x-ms-client-request-id", requestId);
 345            }
 732346            request.Headers.Add("DataServiceVersion", "3.0");
 732347            request.Headers.Add("Accept", "application/json");
 732348            return message;
 349        }
 350
 351        /// <summary> Queries entities in a table. </summary>
 352        /// <param name="table"> The name of the table. </param>
 353        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 354        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 355        /// <param name="nextPartitionKey"> An entity query continuation token from a previous call. </param>
 356        /// <param name="nextRowKey"> An entity query continuation token from a previous call. </param>
 357        /// <param name="queryOptions"> Parameter group. </param>
 358        /// <param name="cancellationToken"> The cancellation token to use. </param>
 359        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 360        public async Task<ResponseWithHeaders<TableEntityQueryResponse, TableQueryEntitiesHeaders>> QueryEntitiesAsync(s
 361        {
 366362            if (table == null)
 363            {
 0364                throw new ArgumentNullException(nameof(table));
 365            }
 366
 366367            using var message = CreateQueryEntitiesRequest(table, timeout, requestId, nextPartitionKey, nextRowKey, quer
 366368            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 366369            var headers = new TableQueryEntitiesHeaders(message.Response);
 366370            switch (message.Response.Status)
 371            {
 372                case 200:
 373                    {
 374                        TableEntityQueryResponse value = default;
 366375                        using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, canc
 366376                        value = TableEntityQueryResponse.DeserializeTableEntityQueryResponse(document.RootElement);
 366377                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 378                    }
 379                default:
 0380                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 381            }
 366382        }
 383
 384        /// <summary> Queries entities in a table. </summary>
 385        /// <param name="table"> The name of the table. </param>
 386        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 387        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 388        /// <param name="nextPartitionKey"> An entity query continuation token from a previous call. </param>
 389        /// <param name="nextRowKey"> An entity query continuation token from a previous call. </param>
 390        /// <param name="queryOptions"> Parameter group. </param>
 391        /// <param name="cancellationToken"> The cancellation token to use. </param>
 392        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 393        public ResponseWithHeaders<TableEntityQueryResponse, TableQueryEntitiesHeaders> QueryEntities(string table, int?
 394        {
 366395            if (table == null)
 396            {
 0397                throw new ArgumentNullException(nameof(table));
 398            }
 399
 366400            using var message = CreateQueryEntitiesRequest(table, timeout, requestId, nextPartitionKey, nextRowKey, quer
 366401            _pipeline.Send(message, cancellationToken);
 366402            var headers = new TableQueryEntitiesHeaders(message.Response);
 366403            switch (message.Response.Status)
 404            {
 405                case 200:
 406                    {
 407                        TableEntityQueryResponse value = default;
 366408                        using var document = JsonDocument.Parse(message.Response.ContentStream);
 366409                        value = TableEntityQueryResponse.DeserializeTableEntityQueryResponse(document.RootElement);
 366410                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 411                    }
 412                default:
 0413                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 414            }
 366415        }
 416
 417        internal HttpMessage CreateQueryEntitiesWithPartitionAndRowKeyRequest(string table, string partitionKey, string 
 418        {
 8419            var message = _pipeline.CreateMessage();
 8420            var request = message.Request;
 8421            request.Method = RequestMethod.Get;
 8422            var uri = new RawRequestUriBuilder();
 8423            uri.AppendRaw(url, false);
 8424            uri.AppendPath("/", false);
 8425            uri.AppendPath(table, true);
 8426            uri.AppendPath("(PartitionKey='", false);
 8427            uri.AppendPath(partitionKey, true);
 8428            uri.AppendPath("',RowKey='", false);
 8429            uri.AppendPath(rowKey, true);
 8430            uri.AppendPath("')", false);
 8431            if (timeout != null)
 432            {
 0433                uri.AppendQuery("timeout", timeout.Value, true);
 434            }
 8435            if (queryOptions?.Format != null)
 436            {
 8437                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 438            }
 8439            if (queryOptions?.Select != null)
 440            {
 0441                uri.AppendQuery("$select", queryOptions.Select, true);
 442            }
 8443            if (queryOptions?.Filter != null)
 444            {
 0445                uri.AppendQuery("$filter", queryOptions.Filter, true);
 446            }
 8447            request.Uri = uri;
 8448            request.Headers.Add("x-ms-version", version);
 8449            if (requestId != null)
 450            {
 0451                request.Headers.Add("x-ms-client-request-id", requestId);
 452            }
 8453            request.Headers.Add("DataServiceVersion", "3.0");
 8454            request.Headers.Add("Accept", "application/json");
 8455            return message;
 456        }
 457
 458        /// <summary> Queries entities in a table. </summary>
 459        /// <param name="table"> The name of the table. </param>
 460        /// <param name="partitionKey"> The partition key of the entity. </param>
 461        /// <param name="rowKey"> The row key of the entity. </param>
 462        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 463        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 464        /// <param name="queryOptions"> Parameter group. </param>
 465        /// <param name="cancellationToken"> The cancellation token to use. </param>
 466        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, or <para
 467        public async Task<ResponseWithHeaders<IReadOnlyDictionary<string, object>, TableQueryEntitiesWithPartitionAndRow
 468        {
 4469            if (table == null)
 470            {
 0471                throw new ArgumentNullException(nameof(table));
 472            }
 4473            if (partitionKey == null)
 474            {
 0475                throw new ArgumentNullException(nameof(partitionKey));
 476            }
 4477            if (rowKey == null)
 478            {
 0479                throw new ArgumentNullException(nameof(rowKey));
 480            }
 481
 4482            using var message = CreateQueryEntitiesWithPartitionAndRowKeyRequest(table, partitionKey, rowKey, timeout, r
 4483            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 4484            var headers = new TableQueryEntitiesWithPartitionAndRowKeyHeaders(message.Response);
 4485            switch (message.Response.Status)
 486            {
 487                case 200:
 488                    {
 489                        IReadOnlyDictionary<string, object> value = default;
 4490                        using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, canc
 4491                        Dictionary<string, object> dictionary = new Dictionary<string, object>();
 164492                        foreach (var property in document.RootElement.EnumerateObject())
 493                        {
 78494                            dictionary.Add(property.Name, property.Value.GetObject());
 495                        }
 4496                        value = dictionary;
 4497                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 498                    }
 499                default:
 0500                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 501            }
 4502        }
 503
 504        /// <summary> Queries entities in a table. </summary>
 505        /// <param name="table"> The name of the table. </param>
 506        /// <param name="partitionKey"> The partition key of the entity. </param>
 507        /// <param name="rowKey"> The row key of the entity. </param>
 508        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 509        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 510        /// <param name="queryOptions"> Parameter group. </param>
 511        /// <param name="cancellationToken"> The cancellation token to use. </param>
 512        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, or <para
 513        public ResponseWithHeaders<IReadOnlyDictionary<string, object>, TableQueryEntitiesWithPartitionAndRowKeyHeaders>
 514        {
 4515            if (table == null)
 516            {
 0517                throw new ArgumentNullException(nameof(table));
 518            }
 4519            if (partitionKey == null)
 520            {
 0521                throw new ArgumentNullException(nameof(partitionKey));
 522            }
 4523            if (rowKey == null)
 524            {
 0525                throw new ArgumentNullException(nameof(rowKey));
 526            }
 527
 4528            using var message = CreateQueryEntitiesWithPartitionAndRowKeyRequest(table, partitionKey, rowKey, timeout, r
 4529            _pipeline.Send(message, cancellationToken);
 4530            var headers = new TableQueryEntitiesWithPartitionAndRowKeyHeaders(message.Response);
 4531            switch (message.Response.Status)
 532            {
 533                case 200:
 534                    {
 535                        IReadOnlyDictionary<string, object> value = default;
 4536                        using var document = JsonDocument.Parse(message.Response.ContentStream);
 4537                        Dictionary<string, object> dictionary = new Dictionary<string, object>();
 164538                        foreach (var property in document.RootElement.EnumerateObject())
 539                        {
 78540                            dictionary.Add(property.Name, property.Value.GetObject());
 541                        }
 4542                        value = dictionary;
 4543                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 544                    }
 545                default:
 0546                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 547            }
 4548        }
 549
 550        internal HttpMessage CreateUpdateEntityRequest(string table, string partitionKey, string rowKey, int? timeout, s
 551        {
 172552            var message = _pipeline.CreateMessage();
 172553            var request = message.Request;
 172554            request.Method = RequestMethod.Put;
 172555            var uri = new RawRequestUriBuilder();
 172556            uri.AppendRaw(url, false);
 172557            uri.AppendPath("/", false);
 172558            uri.AppendPath(table, true);
 172559            uri.AppendPath("(PartitionKey='", false);
 172560            uri.AppendPath(partitionKey, true);
 172561            uri.AppendPath("',RowKey='", false);
 172562            uri.AppendPath(rowKey, true);
 172563            uri.AppendPath("')", false);
 172564            if (timeout != null)
 565            {
 0566                uri.AppendQuery("timeout", timeout.Value, true);
 567            }
 172568            if (queryOptions?.Format != null)
 569            {
 172570                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 571            }
 172572            request.Uri = uri;
 172573            request.Headers.Add("x-ms-version", version);
 172574            if (requestId != null)
 575            {
 0576                request.Headers.Add("x-ms-client-request-id", requestId);
 577            }
 172578            request.Headers.Add("DataServiceVersion", "3.0");
 172579            if (ifMatch != null)
 580            {
 48581                request.Headers.Add("If-Match", ifMatch);
 582            }
 172583            request.Headers.Add("Accept", "application/json");
 172584            request.Headers.Add("Content-Type", "application/json");
 172585            if (tableEntityProperties != null)
 586            {
 172587                var content = new Utf8JsonRequestContent();
 172588                content.JsonWriter.WriteStartObject();
 2992589                foreach (var item in tableEntityProperties)
 590                {
 1324591                    content.JsonWriter.WritePropertyName(item.Key);
 1324592                    content.JsonWriter.WriteObjectValue(item.Value);
 593                }
 172594                content.JsonWriter.WriteEndObject();
 172595                request.Content = content;
 596            }
 172597            return message;
 598        }
 599
 600        /// <summary> Update entity in a table. </summary>
 601        /// <param name="table"> The name of the table. </param>
 602        /// <param name="partitionKey"> The partition key of the entity. </param>
 603        /// <param name="rowKey"> The row key of the entity. </param>
 604        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 605        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 606        /// <param name="ifMatch"> Match condition for an entity to be updated. If specified and a matching entity is no
 607        /// <param name="tableEntityProperties"> The properties for the table entity. </param>
 608        /// <param name="queryOptions"> Parameter group. </param>
 609        /// <param name="cancellationToken"> The cancellation token to use. </param>
 610        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, or <para
 611        public async Task<ResponseWithHeaders<TableUpdateEntityHeaders>> UpdateEntityAsync(string table, string partitio
 612        {
 86613            if (table == null)
 614            {
 0615                throw new ArgumentNullException(nameof(table));
 616            }
 86617            if (partitionKey == null)
 618            {
 0619                throw new ArgumentNullException(nameof(partitionKey));
 620            }
 86621            if (rowKey == null)
 622            {
 0623                throw new ArgumentNullException(nameof(rowKey));
 624            }
 625
 86626            using var message = CreateUpdateEntityRequest(table, partitionKey, rowKey, timeout, requestId, ifMatch, tabl
 86627            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 86628            var headers = new TableUpdateEntityHeaders(message.Response);
 86629            switch (message.Response.Status)
 630            {
 631                case 204:
 74632                    return ResponseWithHeaders.FromValue(headers, message.Response);
 633                default:
 12634                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 635            }
 74636        }
 637
 638        /// <summary> Update entity in a table. </summary>
 639        /// <param name="table"> The name of the table. </param>
 640        /// <param name="partitionKey"> The partition key of the entity. </param>
 641        /// <param name="rowKey"> The row key of the entity. </param>
 642        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 643        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 644        /// <param name="ifMatch"> Match condition for an entity to be updated. If specified and a matching entity is no
 645        /// <param name="tableEntityProperties"> The properties for the table entity. </param>
 646        /// <param name="queryOptions"> Parameter group. </param>
 647        /// <param name="cancellationToken"> The cancellation token to use. </param>
 648        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, or <para
 649        public ResponseWithHeaders<TableUpdateEntityHeaders> UpdateEntity(string table, string partitionKey, string rowK
 650        {
 86651            if (table == null)
 652            {
 0653                throw new ArgumentNullException(nameof(table));
 654            }
 86655            if (partitionKey == null)
 656            {
 0657                throw new ArgumentNullException(nameof(partitionKey));
 658            }
 86659            if (rowKey == null)
 660            {
 0661                throw new ArgumentNullException(nameof(rowKey));
 662            }
 663
 86664            using var message = CreateUpdateEntityRequest(table, partitionKey, rowKey, timeout, requestId, ifMatch, tabl
 86665            _pipeline.Send(message, cancellationToken);
 86666            var headers = new TableUpdateEntityHeaders(message.Response);
 86667            switch (message.Response.Status)
 668            {
 669                case 204:
 74670                    return ResponseWithHeaders.FromValue(headers, message.Response);
 671                default:
 12672                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 673            }
 74674        }
 675
 676        internal HttpMessage CreateMergeEntityRequest(string table, string partitionKey, string rowKey, int? timeout, st
 677        {
 32678            var message = _pipeline.CreateMessage();
 32679            var request = message.Request;
 32680            request.Method = RequestMethod.Patch;
 32681            var uri = new RawRequestUriBuilder();
 32682            uri.AppendRaw(url, false);
 32683            uri.AppendPath("/", false);
 32684            uri.AppendPath(table, true);
 32685            uri.AppendPath("(PartitionKey='", false);
 32686            uri.AppendPath(partitionKey, true);
 32687            uri.AppendPath("',RowKey='", false);
 32688            uri.AppendPath(rowKey, true);
 32689            uri.AppendPath("')", false);
 32690            if (timeout != null)
 691            {
 0692                uri.AppendQuery("timeout", timeout.Value, true);
 693            }
 32694            if (queryOptions?.Format != null)
 695            {
 32696                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 697            }
 32698            request.Uri = uri;
 32699            request.Headers.Add("x-ms-version", version);
 32700            if (requestId != null)
 701            {
 0702                request.Headers.Add("x-ms-client-request-id", requestId);
 703            }
 32704            request.Headers.Add("DataServiceVersion", "3.0");
 32705            if (ifMatch != null)
 706            {
 24707                request.Headers.Add("If-Match", ifMatch);
 708            }
 32709            request.Headers.Add("Content-Type", "application/json");
 32710            if (tableEntityProperties != null)
 711            {
 32712                var content = new Utf8JsonRequestContent();
 32713                content.JsonWriter.WriteStartObject();
 568714                foreach (var item in tableEntityProperties)
 715                {
 252716                    content.JsonWriter.WritePropertyName(item.Key);
 252717                    content.JsonWriter.WriteObjectValue(item.Value);
 718                }
 32719                content.JsonWriter.WriteEndObject();
 32720                request.Content = content;
 721            }
 32722            return message;
 723        }
 724
 725        /// <summary> Merge entity in a table. </summary>
 726        /// <param name="table"> The name of the table. </param>
 727        /// <param name="partitionKey"> The partition key of the entity. </param>
 728        /// <param name="rowKey"> The row key of the entity. </param>
 729        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 730        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 731        /// <param name="ifMatch"> Match condition for an entity to be updated. If specified and a matching entity is no
 732        /// <param name="tableEntityProperties"> The properties for the table entity. </param>
 733        /// <param name="queryOptions"> Parameter group. </param>
 734        /// <param name="cancellationToken"> The cancellation token to use. </param>
 735        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, or <para
 736        public async Task<ResponseWithHeaders<TableMergeEntityHeaders>> MergeEntityAsync(string table, string partitionK
 737        {
 16738            if (table == null)
 739            {
 0740                throw new ArgumentNullException(nameof(table));
 741            }
 16742            if (partitionKey == null)
 743            {
 0744                throw new ArgumentNullException(nameof(partitionKey));
 745            }
 16746            if (rowKey == null)
 747            {
 0748                throw new ArgumentNullException(nameof(rowKey));
 749            }
 750
 16751            using var message = CreateMergeEntityRequest(table, partitionKey, rowKey, timeout, requestId, ifMatch, table
 16752            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 16753            var headers = new TableMergeEntityHeaders(message.Response);
 16754            switch (message.Response.Status)
 755            {
 756                case 204:
 12757                    return ResponseWithHeaders.FromValue(headers, message.Response);
 758                default:
 4759                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 760            }
 12761        }
 762
 763        /// <summary> Merge entity in a table. </summary>
 764        /// <param name="table"> The name of the table. </param>
 765        /// <param name="partitionKey"> The partition key of the entity. </param>
 766        /// <param name="rowKey"> The row key of the entity. </param>
 767        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 768        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 769        /// <param name="ifMatch"> Match condition for an entity to be updated. If specified and a matching entity is no
 770        /// <param name="tableEntityProperties"> The properties for the table entity. </param>
 771        /// <param name="queryOptions"> Parameter group. </param>
 772        /// <param name="cancellationToken"> The cancellation token to use. </param>
 773        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, or <para
 774        public ResponseWithHeaders<TableMergeEntityHeaders> MergeEntity(string table, string partitionKey, string rowKey
 775        {
 16776            if (table == null)
 777            {
 0778                throw new ArgumentNullException(nameof(table));
 779            }
 16780            if (partitionKey == null)
 781            {
 0782                throw new ArgumentNullException(nameof(partitionKey));
 783            }
 16784            if (rowKey == null)
 785            {
 0786                throw new ArgumentNullException(nameof(rowKey));
 787            }
 788
 16789            using var message = CreateMergeEntityRequest(table, partitionKey, rowKey, timeout, requestId, ifMatch, table
 16790            _pipeline.Send(message, cancellationToken);
 16791            var headers = new TableMergeEntityHeaders(message.Response);
 16792            switch (message.Response.Status)
 793            {
 794                case 204:
 12795                    return ResponseWithHeaders.FromValue(headers, message.Response);
 796                default:
 4797                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 798            }
 12799        }
 800
 801        internal HttpMessage CreateDeleteEntityRequest(string table, string partitionKey, string rowKey, string ifMatch,
 802        {
 48803            var message = _pipeline.CreateMessage();
 48804            var request = message.Request;
 48805            request.Method = RequestMethod.Delete;
 48806            var uri = new RawRequestUriBuilder();
 48807            uri.AppendRaw(url, false);
 48808            uri.AppendPath("/", false);
 48809            uri.AppendPath(table, true);
 48810            uri.AppendPath("(PartitionKey='", false);
 48811            uri.AppendPath(partitionKey, true);
 48812            uri.AppendPath("',RowKey='", false);
 48813            uri.AppendPath(rowKey, true);
 48814            uri.AppendPath("')", false);
 48815            if (timeout != null)
 816            {
 0817                uri.AppendQuery("timeout", timeout.Value, true);
 818            }
 48819            if (queryOptions?.Format != null)
 820            {
 48821                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 822            }
 48823            request.Uri = uri;
 48824            request.Headers.Add("x-ms-version", version);
 48825            if (requestId != null)
 826            {
 0827                request.Headers.Add("x-ms-client-request-id", requestId);
 828            }
 48829            request.Headers.Add("DataServiceVersion", "3.0");
 48830            request.Headers.Add("If-Match", ifMatch);
 48831            return message;
 832        }
 833
 834        /// <summary> Deletes the specified entity in a table. </summary>
 835        /// <param name="table"> The name of the table. </param>
 836        /// <param name="partitionKey"> The partition key of the entity. </param>
 837        /// <param name="rowKey"> The row key of the entity. </param>
 838        /// <param name="ifMatch"> Match condition for an entity to be deleted. If specified and a matching entity is no
 839        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 840        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 841        /// <param name="queryOptions"> Parameter group. </param>
 842        /// <param name="cancellationToken"> The cancellation token to use. </param>
 843        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, <paramre
 844        public async Task<ResponseWithHeaders<TableDeleteEntityHeaders>> DeleteEntityAsync(string table, string partitio
 845        {
 24846            if (table == null)
 847            {
 0848                throw new ArgumentNullException(nameof(table));
 849            }
 24850            if (partitionKey == null)
 851            {
 0852                throw new ArgumentNullException(nameof(partitionKey));
 853            }
 24854            if (rowKey == null)
 855            {
 0856                throw new ArgumentNullException(nameof(rowKey));
 857            }
 24858            if (ifMatch == null)
 859            {
 0860                throw new ArgumentNullException(nameof(ifMatch));
 861            }
 862
 24863            using var message = CreateDeleteEntityRequest(table, partitionKey, rowKey, ifMatch, timeout, requestId, quer
 24864            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 24865            var headers = new TableDeleteEntityHeaders(message.Response);
 24866            switch (message.Response.Status)
 867            {
 868                case 204:
 16869                    return ResponseWithHeaders.FromValue(headers, message.Response);
 870                default:
 8871                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 872            }
 16873        }
 874
 875        /// <summary> Deletes the specified entity in a table. </summary>
 876        /// <param name="table"> The name of the table. </param>
 877        /// <param name="partitionKey"> The partition key of the entity. </param>
 878        /// <param name="rowKey"> The row key of the entity. </param>
 879        /// <param name="ifMatch"> Match condition for an entity to be deleted. If specified and a matching entity is no
 880        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 881        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 882        /// <param name="queryOptions"> Parameter group. </param>
 883        /// <param name="cancellationToken"> The cancellation token to use. </param>
 884        /// <exception cref="ArgumentNullException"> <paramref name="table"/>, <paramref name="partitionKey"/>, <paramre
 885        public ResponseWithHeaders<TableDeleteEntityHeaders> DeleteEntity(string table, string partitionKey, string rowK
 886        {
 24887            if (table == null)
 888            {
 0889                throw new ArgumentNullException(nameof(table));
 890            }
 24891            if (partitionKey == null)
 892            {
 0893                throw new ArgumentNullException(nameof(partitionKey));
 894            }
 24895            if (rowKey == null)
 896            {
 0897                throw new ArgumentNullException(nameof(rowKey));
 898            }
 24899            if (ifMatch == null)
 900            {
 0901                throw new ArgumentNullException(nameof(ifMatch));
 902            }
 903
 24904            using var message = CreateDeleteEntityRequest(table, partitionKey, rowKey, ifMatch, timeout, requestId, quer
 24905            _pipeline.Send(message, cancellationToken);
 24906            var headers = new TableDeleteEntityHeaders(message.Response);
 24907            switch (message.Response.Status)
 908            {
 909                case 204:
 16910                    return ResponseWithHeaders.FromValue(headers, message.Response);
 911                default:
 8912                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 913            }
 16914        }
 915
 916        internal HttpMessage CreateInsertEntityRequest(string table, int? timeout, string requestId, ResponseFormat? res
 917        {
 1704918            var message = _pipeline.CreateMessage();
 1704919            var request = message.Request;
 1704920            request.Method = RequestMethod.Post;
 1704921            var uri = new RawRequestUriBuilder();
 1704922            uri.AppendRaw(url, false);
 1704923            uri.AppendPath("/", false);
 1704924            uri.AppendPath(table, true);
 1704925            if (timeout != null)
 926            {
 0927                uri.AppendQuery("timeout", timeout.Value, true);
 928            }
 1704929            if (queryOptions?.Format != null)
 930            {
 1704931                uri.AppendQuery("$format", queryOptions.Format.Value.ToString(), true);
 932            }
 1704933            request.Uri = uri;
 1704934            request.Headers.Add("x-ms-version", version);
 1704935            if (requestId != null)
 936            {
 0937                request.Headers.Add("x-ms-client-request-id", requestId);
 938            }
 1704939            request.Headers.Add("DataServiceVersion", "3.0");
 1704940            if (responsePreference != null)
 941            {
 0942                request.Headers.Add("Prefer", responsePreference.Value.ToString());
 943            }
 1704944            request.Headers.Add("Accept", "application/json");
 1704945            request.Headers.Add("Content-Type", "application/json;odata=nometadata");
 1704946            if (tableEntityProperties != null)
 947            {
 1704948                var content = new Utf8JsonRequestContent();
 1704949                content.JsonWriter.WriteStartObject();
 86256950                foreach (var item in tableEntityProperties)
 951                {
 41424952                    content.JsonWriter.WritePropertyName(item.Key);
 41424953                    content.JsonWriter.WriteObjectValue(item.Value);
 954                }
 1704955                content.JsonWriter.WriteEndObject();
 1704956                request.Content = content;
 957            }
 1704958            return message;
 959        }
 960
 961        /// <summary> Insert entity in a table. </summary>
 962        /// <param name="table"> The name of the table. </param>
 963        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 964        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 965        /// <param name="responsePreference"> Specifies whether the response should include the inserted entity in the p
 966        /// <param name="tableEntityProperties"> The properties for the table entity. </param>
 967        /// <param name="queryOptions"> Parameter group. </param>
 968        /// <param name="cancellationToken"> The cancellation token to use. </param>
 969        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 970        public async Task<ResponseWithHeaders<IReadOnlyDictionary<string, object>, TableInsertEntityHeaders>> InsertEnti
 971        {
 852972            if (table == null)
 973            {
 0974                throw new ArgumentNullException(nameof(table));
 975            }
 976
 852977            using var message = CreateInsertEntityRequest(table, timeout, requestId, responsePreference, tableEntityProp
 852978            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 852979            var headers = new TableInsertEntityHeaders(message.Response);
 852980            switch (message.Response.Status)
 981            {
 982                case 201:
 983                    {
 984                        IReadOnlyDictionary<string, object> value = default;
 852985                        using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, canc
 852986                        Dictionary<string, object> dictionary = new Dictionary<string, object>();
 43452987                        foreach (var property in document.RootElement.EnumerateObject())
 988                        {
 20874989                            dictionary.Add(property.Name, property.Value.GetObject());
 990                        }
 852991                        value = dictionary;
 852992                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 993                    }
 994                case 204:
 0995                    return ResponseWithHeaders.FromValue<IReadOnlyDictionary<string, object>, TableInsertEntityHeaders>(
 996                default:
 0997                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 998            }
 852999        }
 1000
 1001        /// <summary> Insert entity in a table. </summary>
 1002        /// <param name="table"> The name of the table. </param>
 1003        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 1004        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 1005        /// <param name="responsePreference"> Specifies whether the response should include the inserted entity in the p
 1006        /// <param name="tableEntityProperties"> The properties for the table entity. </param>
 1007        /// <param name="queryOptions"> Parameter group. </param>
 1008        /// <param name="cancellationToken"> The cancellation token to use. </param>
 1009        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 1010        public ResponseWithHeaders<IReadOnlyDictionary<string, object>, TableInsertEntityHeaders> InsertEntity(string ta
 1011        {
 8521012            if (table == null)
 1013            {
 01014                throw new ArgumentNullException(nameof(table));
 1015            }
 1016
 8521017            using var message = CreateInsertEntityRequest(table, timeout, requestId, responsePreference, tableEntityProp
 8521018            _pipeline.Send(message, cancellationToken);
 8521019            var headers = new TableInsertEntityHeaders(message.Response);
 8521020            switch (message.Response.Status)
 1021            {
 1022                case 201:
 1023                    {
 1024                        IReadOnlyDictionary<string, object> value = default;
 8521025                        using var document = JsonDocument.Parse(message.Response.ContentStream);
 8521026                        Dictionary<string, object> dictionary = new Dictionary<string, object>();
 434521027                        foreach (var property in document.RootElement.EnumerateObject())
 1028                        {
 208741029                            dictionary.Add(property.Name, property.Value.GetObject());
 1030                        }
 8521031                        value = dictionary;
 8521032                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 1033                    }
 1034                case 204:
 01035                    return ResponseWithHeaders.FromValue<IReadOnlyDictionary<string, object>, TableInsertEntityHeaders>(
 1036                default:
 01037                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 1038            }
 8521039        }
 1040
 1041        internal HttpMessage CreateGetAccessPolicyRequest(string table, int? timeout, string requestId)
 1042        {
 41043            var message = _pipeline.CreateMessage();
 41044            var request = message.Request;
 41045            request.Method = RequestMethod.Get;
 41046            var uri = new RawRequestUriBuilder();
 41047            uri.AppendRaw(url, false);
 41048            uri.AppendPath("/", false);
 41049            uri.AppendPath(table, true);
 41050            if (timeout != null)
 1051            {
 01052                uri.AppendQuery("timeout", timeout.Value, true);
 1053            }
 41054            uri.AppendQuery("comp", "acl", true);
 41055            request.Uri = uri;
 41056            request.Headers.Add("x-ms-version", version);
 41057            if (requestId != null)
 1058            {
 01059                request.Headers.Add("x-ms-client-request-id", requestId);
 1060            }
 41061            return message;
 1062        }
 1063
 1064        /// <summary> Retrieves details about any stored access policies specified on the table that may be used with Sh
 1065        /// <param name="table"> The name of the table. </param>
 1066        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 1067        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 1068        /// <param name="cancellationToken"> The cancellation token to use. </param>
 1069        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 1070        public async Task<ResponseWithHeaders<IReadOnlyList<SignedIdentifier>, TableGetAccessPolicyHeaders>> GetAccessPo
 1071        {
 21072            if (table == null)
 1073            {
 01074                throw new ArgumentNullException(nameof(table));
 1075            }
 1076
 21077            using var message = CreateGetAccessPolicyRequest(table, timeout, requestId);
 21078            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 21079            var headers = new TableGetAccessPolicyHeaders(message.Response);
 21080            switch (message.Response.Status)
 1081            {
 1082                case 200:
 1083                    {
 21084                        IReadOnlyList<SignedIdentifier> value = default;
 21085                        var document = XDocument.Load(message.Response.ContentStream, LoadOptions.PreserveWhitespace);
 21086                        if (document.Element("SignedIdentifiers") is XElement signedIdentifiersElement)
 1087                        {
 21088                            var array = new List<SignedIdentifier>();
 81089                            foreach (var e in signedIdentifiersElement.Elements("SignedIdentifier"))
 1090                            {
 21091                                array.Add(SignedIdentifier.DeserializeSignedIdentifier(e));
 1092                            }
 21093                            value = array;
 1094                        }
 21095                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 1096                    }
 1097                default:
 01098                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 1099            }
 21100        }
 1101
 1102        /// <summary> Retrieves details about any stored access policies specified on the table that may be used with Sh
 1103        /// <param name="table"> The name of the table. </param>
 1104        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 1105        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 1106        /// <param name="cancellationToken"> The cancellation token to use. </param>
 1107        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 1108        public ResponseWithHeaders<IReadOnlyList<SignedIdentifier>, TableGetAccessPolicyHeaders> GetAccessPolicy(string 
 1109        {
 21110            if (table == null)
 1111            {
 01112                throw new ArgumentNullException(nameof(table));
 1113            }
 1114
 21115            using var message = CreateGetAccessPolicyRequest(table, timeout, requestId);
 21116            _pipeline.Send(message, cancellationToken);
 21117            var headers = new TableGetAccessPolicyHeaders(message.Response);
 21118            switch (message.Response.Status)
 1119            {
 1120                case 200:
 1121                    {
 21122                        IReadOnlyList<SignedIdentifier> value = default;
 21123                        var document = XDocument.Load(message.Response.ContentStream, LoadOptions.PreserveWhitespace);
 21124                        if (document.Element("SignedIdentifiers") is XElement signedIdentifiersElement)
 1125                        {
 21126                            var array = new List<SignedIdentifier>();
 81127                            foreach (var e in signedIdentifiersElement.Elements("SignedIdentifier"))
 1128                            {
 21129                                array.Add(SignedIdentifier.DeserializeSignedIdentifier(e));
 1130                            }
 21131                            value = array;
 1132                        }
 21133                        return ResponseWithHeaders.FromValue(value, headers, message.Response);
 1134                    }
 1135                default:
 01136                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 1137            }
 21138        }
 1139
 1140        internal HttpMessage CreateSetAccessPolicyRequest(string table, int? timeout, string requestId, IEnumerable<Sign
 1141        {
 41142            var message = _pipeline.CreateMessage();
 41143            var request = message.Request;
 41144            request.Method = RequestMethod.Put;
 41145            var uri = new RawRequestUriBuilder();
 41146            uri.AppendRaw(url, false);
 41147            uri.AppendPath("/", false);
 41148            uri.AppendPath(table, true);
 41149            if (timeout != null)
 1150            {
 01151                uri.AppendQuery("timeout", timeout.Value, true);
 1152            }
 41153            uri.AppendQuery("comp", "acl", true);
 41154            request.Uri = uri;
 41155            request.Headers.Add("x-ms-version", version);
 41156            if (requestId != null)
 1157            {
 01158                request.Headers.Add("x-ms-client-request-id", requestId);
 1159            }
 41160            request.Headers.Add("Accept", "application/xml");
 41161            request.Headers.Add("Content-Type", "application/xml");
 41162            if (tableAcl != null)
 1163            {
 41164                var content = new XmlWriterContent();
 41165                content.XmlWriter.WriteStartElement("SignedIdentifiers");
 161166                foreach (var item in tableAcl)
 1167                {
 41168                    content.XmlWriter.WriteObjectValue(item, "SignedIdentifier");
 1169                }
 41170                content.XmlWriter.WriteEndElement();
 41171                request.Content = content;
 1172            }
 41173            return message;
 1174        }
 1175
 1176        /// <summary> Sets stored access policies for the table that may be used with Shared Access Signatures. </summar
 1177        /// <param name="table"> The name of the table. </param>
 1178        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 1179        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 1180        /// <param name="tableAcl"> The acls for the table. </param>
 1181        /// <param name="cancellationToken"> The cancellation token to use. </param>
 1182        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 1183        public async Task<ResponseWithHeaders<TableSetAccessPolicyHeaders>> SetAccessPolicyAsync(string table, int? time
 1184        {
 21185            if (table == null)
 1186            {
 01187                throw new ArgumentNullException(nameof(table));
 1188            }
 1189
 21190            using var message = CreateSetAccessPolicyRequest(table, timeout, requestId, tableAcl);
 21191            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
 21192            var headers = new TableSetAccessPolicyHeaders(message.Response);
 21193            switch (message.Response.Status)
 1194            {
 1195                case 204:
 21196                    return ResponseWithHeaders.FromValue(headers, message.Response);
 1197                default:
 01198                    throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(fa
 1199            }
 21200        }
 1201
 1202        /// <summary> Sets stored access policies for the table that may be used with Shared Access Signatures. </summar
 1203        /// <param name="table"> The name of the table. </param>
 1204        /// <param name="timeout"> The timeout parameter is expressed in seconds. </param>
 1205        /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recor
 1206        /// <param name="tableAcl"> The acls for the table. </param>
 1207        /// <param name="cancellationToken"> The cancellation token to use. </param>
 1208        /// <exception cref="ArgumentNullException"> <paramref name="table"/> is null. </exception>
 1209        public ResponseWithHeaders<TableSetAccessPolicyHeaders> SetAccessPolicy(string table, int? timeout = null, strin
 1210        {
 21211            if (table == null)
 1212            {
 01213                throw new ArgumentNullException(nameof(table));
 1214            }
 1215
 21216            using var message = CreateSetAccessPolicyRequest(table, timeout, requestId, tableAcl);
 21217            _pipeline.Send(message, cancellationToken);
 21218            var headers = new TableSetAccessPolicyHeaders(message.Response);
 21219            switch (message.Response.Status)
 1220            {
 1221                case 204:
 21222                    return ResponseWithHeaders.FromValue(headers, message.Response);
 1223                default:
 01224                    throw _clientDiagnostics.CreateRequestFailedException(message.Response);
 1225            }
 21226        }
 1227    }
 1228}