diff --git a/ElCamino.AspNetCore.Identity.AzureTable.sln b/ElCamino.AspNetCore.Identity.AzureTable.sln index 86ed090..8953596 100644 --- a/ElCamino.AspNetCore.Identity.AzureTable.sln +++ b/ElCamino.AspNetCore.Identity.AzureTable.sln @@ -21,6 +21,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElCamino.AspNetCore.Identit EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElCamino.AspNetCore.Identity.AzureTable.Model", "src\ElCamino.AspNetCore.Identity.AzureTable.Model\ElCamino.AspNetCore.Identity.AzureTable.Model.csproj", "{C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElCamino.Azure.Data.Tables", "src\ElCamino.Azure.Data.Tables\ElCamino.Azure.Data.Tables.csproj", "{DAF57676-8534-4A62-BC7B-317753F2A275}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -58,6 +60,12 @@ Global {C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}.Release|Any CPU.Build.0 = Release|Any CPU {C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}.Signed|Any CPU.ActiveCfg = Debug|Any CPU {C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}.Signed|Any CPU.Build.0 = Debug|Any CPU + {DAF57676-8534-4A62-BC7B-317753F2A275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DAF57676-8534-4A62-BC7B-317753F2A275}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DAF57676-8534-4A62-BC7B-317753F2A275}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DAF57676-8534-4A62-BC7B-317753F2A275}.Release|Any CPU.Build.0 = Release|Any CPU + {DAF57676-8534-4A62-BC7B-317753F2A275}.Signed|Any CPU.ActiveCfg = Debug|Any CPU + {DAF57676-8534-4A62-BC7B-317753F2A275}.Signed|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index 66def15..288d2d0 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,9 @@ -identityazuretable +ElCamino.Azure.Data.Tables ================== -This project provides a high performance cloud solution for ASP.NET Identity Core using Azure Table storage replacing the Entity Framework / MSSQL provider. +Azure Table Storage odata query building and operators from the older Azure Storage SDKs and some other async, mapping, and batch helpers and/or extensions. [![Build Status](https://dev.azure.com/elcamino/Azure%20OpenSource/_apis/build/status/IdentityAzureTableCore?branchName=master)](https://dev.azure.com/elcamino/Azure%20OpenSource/_build/latest?definitionId=4&branchName=master) -[![NuGet Badge](https://buildstats.info/nuget/ElCamino.AspNetCore.Identity.AzureTable)](https://www.nuget.org/packages/ElCamino.AspNetCore.Identity.AzureTable/) -[![NuGet Badge](https://buildstats.info/nuget/ElCamino.AspNet.Identity.AzureTable)](https://www.nuget.org/packages/ElCamino.AspNet.Identity.AzureTable/) +[![NuGet Badge](https://buildstats.info/nuget/ElCamino.Azure.Data.Tables)](https://www.nuget.org/packages/ElCamino.Azure.Data.Tables/) Project site at https://dlmelendez.github.io/identityazuretable/. - -Identity Core latest template -``` -dotnet new --install ElCamino.AspNetCore.Identity.AzureTable.Templates - -#MVC Template -dotnet new mvc-id-azure-tables - -#Razor Pages Template -dotnet new rzp-id-azure-tables -``` - -Identity Core 3.x (uses PageModel - latest) - Use ElCamino.AspNetCore.Identity.AzureTable, sample mvc app: https://github.com/dlmelendez/identityazuretable/tree/master/sample/samplemvccore4 - -Identity Core 2.x (uses PageModel - latest) - Use ElCamino.AspNetCore.Identity.AzureTable, sample mvc app: https://github.com/dlmelendez/identityazuretable/tree/master/sample/samplemvccore3 - -Identity Core 2.x (uses MVC - older) - Use ElCamino.AspNetCore.Identity.AzureTable, sample mvc app: https://github.com/dlmelendez/identityazuretable/tree/master/sample/samplemvccore2 diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj b/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj index 94b2213..cfe84ec 100644 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj +++ b/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj @@ -6,7 +6,7 @@ Azure Table Storage Provider for ASP.NET Identity Core David Melendez netstandard2.0;net6.0 - 9.0 + 10.0 ElCamino.AspNetCore.Identity.AzureTable ../../tools/Key.snk true @@ -57,6 +57,7 @@ + diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/AzureSdkHelper.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/AzureSdkHelper.cs deleted file mode 100644 index cf68dc1..0000000 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/AzureSdkHelper.cs +++ /dev/null @@ -1,37 +0,0 @@ -// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information. - -using ElCamino.AspNetCore.Identity.AzureTable.Helpers; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Threading.Tasks; - -namespace Azure.Data.Tables -{ - public static class AzureSdkHelper - { - //Azure SDK changes, you are still killing me. - public static async IAsyncEnumerable ExecuteQueryAsync(this TableClient ct, TableQuery tq) - where T : class, ITableEntity, new() - { -#if DEBUG - int iCounter = 0; -#endif - - AsyncPageable segment = ct.QueryAsync(tq.FilterString, tq.TakeCount, tq.SelectColumns); - await foreach (T result in segment.ConfigureAwait(false)) - { -#if DEBUG - iCounter++; -#endif - yield return result; - } - -#if DEBUG - Debug.WriteLine("ExecuteQueryAsync: (Count): {0}", iCounter); - Debug.WriteLine("ExecuteQueryAsync (Query): " + tq.FilterString); -#endif - } - - } -} diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/EdmType.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/EdmType.cs deleted file mode 100644 index 1a0acbe..0000000 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/EdmType.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers -{ - public enum EdmType - { - Binary, - Boolean, - DateTime, - Double, - Guid, - Int32, - Int64, - String - - } -} diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/QueryComparisons.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/QueryComparisons.cs deleted file mode 100644 index 0b83e20..0000000 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/QueryComparisons.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers -{ - public static class QueryComparisons - { - /// - /// Represents the Equal operator. - /// - public const string Equal = "eq"; - - /// - /// Represents the Not Equal operator. - /// - public const string NotEqual = "ne"; - - /// - /// Represents the Greater Than operator. - /// - public const string GreaterThan = "gt"; - - /// - /// Represents the Greater Than or Equal operator. - /// - public const string GreaterThanOrEqual = "ge"; - - /// - /// Represents the Less Than operator. - /// - public const string LessThan = "lt"; - - /// - /// Represents the Less Than or Equal operator. - /// - public const string LessThanOrEqual = "le"; - } -} diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableOperators.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableOperators.cs deleted file mode 100644 index d6c30e2..0000000 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableOperators.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers -{ - /// - /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/TableOperators.cs - /// - public static class TableOperators - { - public const string And = "and"; - - /// - /// Represents the Not operator. - /// - public const string Not = "not"; - - /// - /// Represents the Or operator. - /// - public const string Or = "or"; - } -} diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs index 15838b3..d8a8ba2 100644 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs +++ b/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs @@ -1,7 +1,7 @@ // MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information. using System; -using ElCamino.AspNetCore.Identity.AzureTable.Model; using Azure.Data.Tables; +using ElCamino.AspNetCore.Identity.AzureTable.Model; namespace ElCamino.AspNetCore.Identity.AzureTable { diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/BatchOperationHelper.cs b/src/ElCamino.Azure.Data.Tables/BatchOperationHelper.cs similarity index 92% rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/BatchOperationHelper.cs rename to src/ElCamino.Azure.Data.Tables/BatchOperationHelper.cs index 49ff5e7..36bdd96 100644 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/BatchOperationHelper.cs +++ b/src/ElCamino.Azure.Data.Tables/BatchOperationHelper.cs @@ -1,89 +1,83 @@ -// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information. - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Azure; -using Azure.Data.Tables; - -namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers -{ - /// - /// Used to instantiate multiple TableBatchOperations when the - /// TableOperation maximum is reached on a single TableBatchOperation - /// - public class BatchOperationHelper - { - - private readonly Dictionary> _batches = new(); - - private readonly TableClient _table; - public BatchOperationHelper(TableClient table) - { - _table = table; - } - - public virtual void AddEntities(IEnumerable entities) where T : class, ITableEntity, new() - { - foreach(T entity in entities) - { - AddEntity(entity); - } - } - public virtual void AddEntity(T entity) where T : class, ITableEntity, new() - { - GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(TableTransactionActionType.Add, entity)); - } - public virtual void DeleteEntity(string partitionKey, string rowKey, ETag ifMatch = default) - { - GetCurrent(partitionKey).Add(new TableTransactionAction(TableTransactionActionType.Delete, new TableEntity(partitionKey, rowKey),ifMatch)); - } - - public virtual async Task> SubmitBatchAsync(CancellationToken cancellationToken = default) - { - ConcurrentBag bag = new ConcurrentBag(); - List batches = new List(_batches.Count); - foreach(KeyValuePair> kv in _batches) - { - batches.Add(_table.SubmitTransactionAsync(kv.Value, cancellationToken) - .ContinueWith((result) => - { - foreach (var r in result.Result.Value) - { - bag.Add(r); - } - }, cancellationToken)); - } - await Task.WhenAll(batches).ConfigureAwait(false); - Clear(); - return bag; - } - - public virtual void UpdateEntity(T entity, ETag ifMatch, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new() - { - GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge? TableTransactionActionType.UpdateMerge : TableTransactionActionType.UpdateReplace, entity, ifMatch)); - } - - public virtual void UpsertEntity(T entity, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new() - { - GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge ? TableTransactionActionType.UpsertMerge : TableTransactionActionType.UpsertReplace, entity)); - } - - public void Clear() - { - _batches.Clear(); - } - - private List GetCurrent(string partitionKey) - { - if(!_batches.ContainsKey(partitionKey)) - { - _batches.Add(partitionKey, new List()); - } - - return _batches[partitionKey]; - } - } -} +// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information. + +using System.Collections.Concurrent; + +namespace Azure.Data.Tables +{ + /// + /// Used to instantiate multiple TableBatchOperations when the + /// TableOperation maximum is reached on a single TableBatchOperation + /// + public class BatchOperationHelper + { + private readonly Dictionary> _batches = new(); + + private readonly TableClient _table; + + public BatchOperationHelper(TableClient table) + { + _table = table; + } + + public virtual void AddEntities(IEnumerable entities) where T : class, ITableEntity, new() + { + foreach(T entity in entities) + { + AddEntity(entity); + } + } + public virtual void AddEntity(T entity) where T : class, ITableEntity, new() + { + GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(TableTransactionActionType.Add, entity)); + } + public virtual void DeleteEntity(string partitionKey, string rowKey, ETag ifMatch = default) + { + GetCurrent(partitionKey).Add(new TableTransactionAction(TableTransactionActionType.Delete, new TableEntity(partitionKey, rowKey),ifMatch)); + } + + public virtual async Task> SubmitBatchAsync(CancellationToken cancellationToken = default) + { + ConcurrentBag bag = new ConcurrentBag(); + List batches = new List(_batches.Count); + foreach(KeyValuePair> kv in _batches) + { + batches.Add(_table.SubmitTransactionAsync(kv.Value, cancellationToken) + .ContinueWith((result) => + { + foreach (var r in result.Result.Value) + { + bag.Add(r); + } + }, cancellationToken)); + } + await Task.WhenAll(batches).ConfigureAwait(false); + Clear(); + return bag; + } + + public virtual void UpdateEntity(T entity, ETag ifMatch, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new() + { + GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge? TableTransactionActionType.UpdateMerge : TableTransactionActionType.UpdateReplace, entity, ifMatch)); + } + + public virtual void UpsertEntity(T entity, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new() + { + GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge ? TableTransactionActionType.UpsertMerge : TableTransactionActionType.UpsertReplace, entity)); + } + + public void Clear() + { + _batches.Clear(); + } + + private List GetCurrent(string partitionKey) + { + if(!_batches.ContainsKey(partitionKey)) + { + _batches.Add(partitionKey, new List()); + } + + return _batches[partitionKey]; + } + } +} diff --git a/src/ElCamino.Azure.Data.Tables/EdmType.cs b/src/ElCamino.Azure.Data.Tables/EdmType.cs new file mode 100644 index 0000000..9204e94 --- /dev/null +++ b/src/ElCamino.Azure.Data.Tables/EdmType.cs @@ -0,0 +1,36 @@ +// ----------------------------------------------------------------------------------------- +// +// Copyright 2013 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------------------- + + +namespace Azure.Data.Tables +{ + /// + /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/EdmType.cs + /// + public enum EdmType + { + Binary, + Boolean, + DateTime, + Double, + Guid, + Int32, + Int64, + String + + } +} diff --git a/src/ElCamino.Azure.Data.Tables/ElCamino.Azure.Data.Tables.csproj b/src/ElCamino.Azure.Data.Tables/ElCamino.Azure.Data.Tables.csproj new file mode 100644 index 0000000..df8ca97 --- /dev/null +++ b/src/ElCamino.Azure.Data.Tables/ElCamino.Azure.Data.Tables.csproj @@ -0,0 +1,51 @@ + + + + Azure Table Storage odata query building and operators from the older Azure Storage SDKs and some other async, mapping, and batch helpers and/or extensions. + Copyright © 2022 David Melendez, MIT License + Azure Table Storage Extensions + David Melendez + netstandard2.0;net6.0 + 10.0 + ElCamino.Azure.Data.Tables + ../../tools/Key.snk + true + true + ElCamino.Azure.Data.Tables + ASP.NET;Azure;Table Storage;Azure.Data.Tables + Check https://github.com/dlmelendez/identityazuretable/releases for the latest release information. + projectNugetPic.png + + true + git + https://github.com/dlmelendez/identityazuretable.git + True + 6.1 + https://dlmelendez.github.io/identityazuretable + + + MIT + true + snupkg + README.md + en-US + enable + disable + + + + + \ + True + + + + + + + + + + + + diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/EntityMapHelper.cs b/src/ElCamino.Azure.Data.Tables/EntityMapExtensions.cs similarity index 85% rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/EntityMapHelper.cs rename to src/ElCamino.Azure.Data.Tables/EntityMapExtensions.cs index f8a3115..8b14f5a 100644 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/EntityMapHelper.cs +++ b/src/ElCamino.Azure.Data.Tables/EntityMapExtensions.cs @@ -1,18 +1,12 @@ // MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information. -using Azure.Data.Tables; -using System; using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; using System.Reflection; using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers +namespace Azure.Data.Tables { - public static class EntityMapHelper + public static class EntityMapExtensions { private static readonly ConcurrentDictionary TypeProperties = new(); diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/IAsyncEnumerableExtensions.cs b/src/ElCamino.Azure.Data.Tables/IAsyncEnumerableExtensions.cs similarity index 73% rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/IAsyncEnumerableExtensions.cs rename to src/ElCamino.Azure.Data.Tables/IAsyncEnumerableExtensions.cs index b86702f..62a1510 100644 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/IAsyncEnumerableExtensions.cs +++ b/src/ElCamino.Azure.Data.Tables/IAsyncEnumerableExtensions.cs @@ -1,11 +1,8 @@ // MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; +using System.Diagnostics; -namespace ElCamino.AspNetCore.Identity.AzureTable +namespace Azure.Data.Tables { public static class IAsyncEnumerableExtensions { @@ -53,5 +50,27 @@ public static async Task AnyAsync( await using var enumerator = asyncEnumerable.GetAsyncEnumerator(cancellationToken); return await enumerator.MoveNextAsync().ConfigureAwait(false); } + + public static async IAsyncEnumerable ExecuteQueryAsync(this TableClient ct, TableQuery tq) + where T : class, ITableEntity, new() + { +#if DEBUG + int iCounter = 0; +#endif + + AsyncPageable segment = ct.QueryAsync(tq.FilterString, tq.TakeCount, tq.SelectColumns); + await foreach (T result in segment.ConfigureAwait(false)) + { +#if DEBUG + iCounter++; +#endif + yield return result; + } + +#if DEBUG + Debug.WriteLine("ExecuteQueryAsync: (Count): {0}", iCounter); + Debug.WriteLine("ExecuteQueryAsync (Query): " + tq.FilterString); +#endif + } } } diff --git a/src/ElCamino.Azure.Data.Tables/QueryComparisons.cs b/src/ElCamino.Azure.Data.Tables/QueryComparisons.cs new file mode 100644 index 0000000..14acf48 --- /dev/null +++ b/src/ElCamino.Azure.Data.Tables/QueryComparisons.cs @@ -0,0 +1,56 @@ +// ----------------------------------------------------------------------------------------- +// +// Copyright 2013 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------------------- + + +namespace Azure.Data.Tables +{ + /// + /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/QueryComparisons.cs + /// + public static class QueryComparisons + { + /// + /// Represents the Equal operator. + /// + public const string Equal = "eq"; + + /// + /// Represents the Not Equal operator. + /// + public const string NotEqual = "ne"; + + /// + /// Represents the Greater Than operator. + /// + public const string GreaterThan = "gt"; + + /// + /// Represents the Greater Than or Equal operator. + /// + public const string GreaterThanOrEqual = "ge"; + + /// + /// Represents the Less Than operator. + /// + public const string LessThan = "lt"; + + /// + /// Represents the Less Than or Equal operator. + /// + public const string LessThanOrEqual = "le"; + } +} diff --git a/src/ElCamino.Azure.Data.Tables/TableOperators.cs b/src/ElCamino.Azure.Data.Tables/TableOperators.cs new file mode 100644 index 0000000..34d52f4 --- /dev/null +++ b/src/ElCamino.Azure.Data.Tables/TableOperators.cs @@ -0,0 +1,37 @@ +// ----------------------------------------------------------------------------------------- +// +// Copyright 2013 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------------------- + +namespace Azure.Data.Tables +{ + /// + /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/TableOperators.cs + /// + public static class TableOperators + { + public const string And = "and"; + + /// + /// Represents the Not operator. + /// + public const string Not = "not"; + + /// + /// Represents the Or operator. + /// + public const string Or = "or"; + } +} diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableQuery.cs b/src/ElCamino.Azure.Data.Tables/TableQuery.cs similarity index 90% rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableQuery.cs rename to src/ElCamino.Azure.Data.Tables/TableQuery.cs index 183eb61..3d779fc 100644 --- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableQuery.cs +++ b/src/ElCamino.Azure.Data.Tables/TableQuery.cs @@ -1,11 +1,31 @@ -using System; +// ----------------------------------------------------------------------------------------- +// +// Copyright 2013 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------------------- + +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Text; -namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers +namespace Azure.Data.Tables { + /// + /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/TableQuery.cs + /// public class TableQuery { public int? TakeCount { get; set; } diff --git a/src/ElCamino.Azure.Data.Tables/projectNugetPic.png b/src/ElCamino.Azure.Data.Tables/projectNugetPic.png new file mode 100644 index 0000000..223ba4a Binary files /dev/null and b/src/ElCamino.Azure.Data.Tables/projectNugetPic.png differ