|
@@ -32,73 +32,7 @@ namespace HTEXCosmosDB
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- //public static async IAsyncEnumerable<(List<T> list, double RU, string? continuationToken)> GetItemQueryIterator<T>(this Container container, QueryDefinition queryDefinition, QueryRequestOptions requestOptions,string? continuationToken = null, int? pageSize = null)
|
|
|
|
- //{
|
|
|
|
- // List<T> list = new List<T>();
|
|
|
|
- // double RU = 0;
|
|
|
|
- // //if (string.IsNullOrWhiteSpace(partitionkey))
|
|
|
|
- // //{
|
|
|
|
- // // return (list, RU, continuationToken);
|
|
|
|
- // //}
|
|
|
|
- // FeedIterator<T> iterator = container.GetItemQueryIterator<T>(queryDefinition: queryDefinition, continuationToken: continuationToken, requestOptions: requestOptions);
|
|
|
|
- // while (iterator.HasMoreResults)
|
|
|
|
- // {
|
|
|
|
- // FeedResponse<T> currentResultSet = await iterator.ReadNextAsync();
|
|
|
|
- // list.AddRange(currentResultSet);
|
|
|
|
- // RU += currentResultSet.RequestCharge;
|
|
|
|
- // //此处需要优化 ,检查相关的 关键字 用正则
|
|
|
|
- // if (queryDefinition.QueryText.Contains(" distinct ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- // || (queryDefinition.QueryText.Contains("order ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- // && !queryDefinition.QueryText.Contains(".order ", StringComparison.OrdinalIgnoreCase)))
|
|
|
|
- // {
|
|
|
|
- // continuationToken = null;
|
|
|
|
- // }
|
|
|
|
- // else
|
|
|
|
- // {
|
|
|
|
- // continuationToken = currentResultSet.ContinuationToken;
|
|
|
|
- // }
|
|
|
|
- // if (pageSize.HasValue && pageSize.Value >= 0 && list.Count >= pageSize)
|
|
|
|
- // {
|
|
|
|
- // break;
|
|
|
|
- // }
|
|
|
|
- // yield return (list, RU, continuationToken);
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
- //}
|
|
|
|
-
|
|
|
|
- //public static async Task<(List<T> list, double RU, string? continuationToken)> GetList<T>(this Container container, QueryDefinition queryDefinition, string? partitionkey = null , string? continuationToken = null, int? pageSize = null)
|
|
|
|
- //{
|
|
|
|
- // List<T> list = new List<T>();
|
|
|
|
- // double RU = 0;
|
|
|
|
- // //if (string.IsNullOrWhiteSpace(partitionkey))
|
|
|
|
- // //{
|
|
|
|
- // // return (list, RU, continuationToken);
|
|
|
|
- // //}
|
|
|
|
- // FeedIterator<T> iterator = container.GetItemQueryIterator<T>(queryDefinition: queryDefinition, continuationToken: continuationToken, requestOptions: new QueryRequestOptions { MaxItemCount = pageSize, PartitionKey =!string.IsNullOrWhiteSpace(partitionkey) ? new PartitionKey(partitionkey) : null });
|
|
|
|
- // while (iterator.HasMoreResults)
|
|
|
|
- // {
|
|
|
|
- // FeedResponse<T> currentResultSet = await iterator.ReadNextAsync();
|
|
|
|
- // list.AddRange(currentResultSet);
|
|
|
|
- // RU += currentResultSet.RequestCharge;
|
|
|
|
- // //此处需要优化 ,检查相关的 关键字 用正则
|
|
|
|
- // if (queryDefinition.QueryText.Contains(" distinct ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- // || (queryDefinition.QueryText.Contains("order ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- // && !queryDefinition.QueryText.Contains(".order ", StringComparison.OrdinalIgnoreCase)))
|
|
|
|
- // {
|
|
|
|
- // continuationToken = null;
|
|
|
|
- // }
|
|
|
|
- // else
|
|
|
|
- // {
|
|
|
|
- // continuationToken = currentResultSet.ContinuationToken;
|
|
|
|
- // }
|
|
|
|
- // if (pageSize.HasValue && pageSize.Value >= 0 && list.Count >= pageSize)
|
|
|
|
- // {
|
|
|
|
- // break;
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // return (list, RU, continuationToken);
|
|
|
|
- //}
|
|
|
|
|
|
+
|
|
public static async Task<T?> GetOne<T>(this Container container, QueryDefinition queryDefinition, string? partitionkey = null)
|
|
public static async Task<T?> GetOne<T>(this Container container, QueryDefinition queryDefinition, string? partitionkey = null)
|
|
{
|
|
{
|
|
List<T?> list = new List<T?>();
|
|
List<T?> list = new List<T?>();
|
|
@@ -154,25 +88,22 @@ namespace HTEXCosmosDB
|
|
return list.First();
|
|
return list.First();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- public static async IAsyncEnumerable<CosmosDBResult<T>> GetItemQueryIteratorList<T>(this Container container, string queryText, QueryRequestOptions? requestOptions= null, string? continuationToken = null, int? pageSize = null)
|
|
|
|
|
|
+
|
|
|
|
+ public static async Task<CosmosDBResult<T>> GetList<T>(this Container container, QueryDefinition queryDefinition, string? partitionkey = null, string? continuationToken = null, int? pageSize = null)
|
|
{
|
|
{
|
|
-
|
|
|
|
- //if (string.IsNullOrWhiteSpace(partitionkey))
|
|
|
|
- //{
|
|
|
|
- // return (new CosmosDBResult<T> { list = list, ru=RU, continuationToken=continuationToken });
|
|
|
|
- //}
|
|
|
|
- FeedIterator<T> iterator = container.GetItemQueryIterator<T>(queryText: queryText, continuationToken: continuationToken, requestOptions: requestOptions);
|
|
|
|
|
|
+ List<T> list = new List<T>();
|
|
|
|
+ double RU = 0;
|
|
|
|
+
|
|
|
|
+ FeedIterator<T> iterator = container.GetItemQueryIterator<T>(queryDefinition: queryDefinition, continuationToken: continuationToken, requestOptions: new QueryRequestOptions { MaxItemCount=pageSize, PartitionKey =!string.IsNullOrWhiteSpace(partitionkey) ? new PartitionKey(partitionkey) : null });
|
|
while (iterator.HasMoreResults)
|
|
while (iterator.HasMoreResults)
|
|
{
|
|
{
|
|
- List<T> list = new List<T>();
|
|
|
|
- double RU = 0;
|
|
|
|
FeedResponse<T> currentResultSet = await iterator.ReadNextAsync();
|
|
FeedResponse<T> currentResultSet = await iterator.ReadNextAsync();
|
|
list.AddRange(currentResultSet);
|
|
list.AddRange(currentResultSet);
|
|
RU += currentResultSet.RequestCharge;
|
|
RU += currentResultSet.RequestCharge;
|
|
//此处需要优化 ,检查相关的 关键字 用正则
|
|
//此处需要优化 ,检查相关的 关键字 用正则
|
|
- if (queryText.Contains(" distinct ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- || (queryText.Contains("order ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- && !queryText.Contains(".order ", StringComparison.OrdinalIgnoreCase)))
|
|
|
|
|
|
+ if (queryDefinition.QueryText.Contains(" distinct ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
+ || (queryDefinition.QueryText.Contains("order ", StringComparison.OrdinalIgnoreCase)
|
|
|
|
+ && !queryDefinition.QueryText.Contains(".order ", StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
{
|
|
continuationToken = null;
|
|
continuationToken = null;
|
|
}
|
|
}
|
|
@@ -180,23 +111,19 @@ namespace HTEXCosmosDB
|
|
{
|
|
{
|
|
continuationToken = currentResultSet.ContinuationToken;
|
|
continuationToken = currentResultSet.ContinuationToken;
|
|
}
|
|
}
|
|
- if (pageSize.HasValue && pageSize.Value >=0 && list.Count>=pageSize)
|
|
|
|
|
|
+ if (pageSize.HasValue && pageSize.Value >= 0 && list.Count >= pageSize)
|
|
{
|
|
{
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- //记录日志,RU开销大于400(开发测试),1000(正式)
|
|
|
|
- yield return (new CosmosDBResult<T> { list = list, ru = RU, continuationToken = continuationToken });
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ return (new CosmosDBResult<T> { list = list, ru = RU, continuationToken = continuationToken });
|
|
}
|
|
}
|
|
|
|
+
|
|
public static async Task<CosmosDBResult<T>> GetList<T>(this Container container, string sql, string? partitionkey = null, string? continuationToken = null, int? pageSize = null)
|
|
public static async Task<CosmosDBResult<T>> GetList<T>(this Container container, string sql, string? partitionkey = null, string? continuationToken = null, int? pageSize = null)
|
|
{
|
|
{
|
|
List<T> list = new List<T>();
|
|
List<T> list = new List<T>();
|
|
double RU = 0;
|
|
double RU = 0;
|
|
- //if (string.IsNullOrWhiteSpace(partitionkey))
|
|
|
|
- //{
|
|
|
|
- // return (new CosmosDBResult<T> { list = list, ru=RU, continuationToken=continuationToken });
|
|
|
|
- //}
|
|
|
|
|
|
+
|
|
FeedIterator<T> iterator = container.GetItemQueryIterator<T>(queryText: sql, continuationToken: continuationToken, requestOptions: new QueryRequestOptions { MaxItemCount=pageSize, PartitionKey =!string.IsNullOrWhiteSpace(partitionkey) ? new PartitionKey(partitionkey) : null });
|
|
FeedIterator<T> iterator = container.GetItemQueryIterator<T>(queryText: sql, continuationToken: continuationToken, requestOptions: new QueryRequestOptions { MaxItemCount=pageSize, PartitionKey =!string.IsNullOrWhiteSpace(partitionkey) ? new PartitionKey(partitionkey) : null });
|
|
while (iterator.HasMoreResults)
|
|
while (iterator.HasMoreResults)
|
|
{
|
|
{
|
|
@@ -229,7 +156,7 @@ namespace HTEXCosmosDB
|
|
/// <param name="partitionkey"></param>
|
|
/// <param name="partitionkey"></param>
|
|
/// <param name="queryWhere"></param>
|
|
/// <param name="queryWhere"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- public static async Task<int> GetCount(this Container container, string queryWhere = "WHERE 1=1", string? partitionkey = null)
|
|
|
|
|
|
+ public static async Task<int> GetCount(this Container container, string? partitionkey = null, string queryWhere = "WHERE 1=1")
|
|
{
|
|
{
|
|
int totalCount = 0;
|
|
int totalCount = 0;
|
|
var items = container.GetItemQueryStreamIterator(
|
|
var items = container.GetItemQueryStreamIterator(
|
|
@@ -247,7 +174,6 @@ namespace HTEXCosmosDB
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
return totalCount;
|
|
return totalCount;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -293,7 +219,7 @@ namespace HTEXCosmosDB
|
|
return response;
|
|
return response;
|
|
}
|
|
}
|
|
|
|
|
|
- public static async IAsyncEnumerable<ResponseMessage> GetItemQueryStreamIteratorSql(this Microsoft.Azure.Cosmos.Container container, string queryText = null, string continuationToken = null, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null)
|
|
|
|
|
|
+ public static async IAsyncEnumerable<ResponseMessage> GetItemQueryStreamIteratorSql(this Microsoft.Azure.Cosmos.Container container, string queryText = null, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null, string continuationToken = null)
|
|
{
|
|
{
|
|
var items = container.GetItemQueryStreamIterator(
|
|
var items = container.GetItemQueryStreamIterator(
|
|
queryText: queryText, continuationToken: continuationToken,
|
|
queryText: queryText, continuationToken: continuationToken,
|
|
@@ -311,7 +237,7 @@ namespace HTEXCosmosDB
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- public static async IAsyncEnumerable<ResponseMessage> GetItemQueryStreamIteratorQuery(this Microsoft.Azure.Cosmos.Container container, Microsoft.Azure.Cosmos.QueryDefinition queryDefinition, string continuationToken = null, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null)
|
|
|
|
|
|
+ public static async IAsyncEnumerable<ResponseMessage> GetItemQueryStreamIteratorQuery(this Microsoft.Azure.Cosmos.Container container, Microsoft.Azure.Cosmos.QueryDefinition queryDefinition, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null, string continuationToken = null)
|
|
{
|
|
{
|
|
var items = container.GetItemQueryStreamIterator(
|
|
var items = container.GetItemQueryStreamIterator(
|
|
queryDefinition: queryDefinition, continuationToken: continuationToken,
|
|
queryDefinition: queryDefinition, continuationToken: continuationToken,
|
|
@@ -330,7 +256,7 @@ namespace HTEXCosmosDB
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public static async IAsyncEnumerable<T> GetItemQueryIteratorQuery<T>(this Microsoft.Azure.Cosmos.Container container, Microsoft.Azure.Cosmos.QueryDefinition queryDefinition, string continuationToken = null, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null)
|
|
|
|
|
|
+ public static async IAsyncEnumerable<T> GetItemQueryIteratorQuery<T>(this Microsoft.Azure.Cosmos.Container container, Microsoft.Azure.Cosmos.QueryDefinition queryDefinition, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null, string continuationToken = null)
|
|
{
|
|
{
|
|
var items = container.GetItemQueryIterator<T>(
|
|
var items = container.GetItemQueryIterator<T>(
|
|
queryDefinition: queryDefinition, continuationToken: continuationToken,
|
|
queryDefinition: queryDefinition, continuationToken: continuationToken,
|
|
@@ -351,7 +277,7 @@ namespace HTEXCosmosDB
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- public static async IAsyncEnumerable<T> GetItemQueryIteratorSql<T>(this Microsoft.Azure.Cosmos.Container container, string queryText, string continuationToken = null, Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null)
|
|
|
|
|
|
+ public static async IAsyncEnumerable<T> GetItemQueryIteratorSql<T>(this Microsoft.Azure.Cosmos.Container container, string queryText,Microsoft.Azure.Cosmos.QueryRequestOptions requestOptions = null, string continuationToken = null )
|
|
{
|
|
{
|
|
var items = container.GetItemQueryIterator<T>(
|
|
var items = container.GetItemQueryIterator<T>(
|
|
queryText: queryText, continuationToken: continuationToken,
|
|
queryText: queryText, continuationToken: continuationToken,
|