public static IAnalyticsResult <T> AnalyticsQuery <T>(this ICluster cluster, string statement, AnalyticsOptions options = default) { return(cluster.AnalyticsQueryAsync <T>(statement, options) .ConfigureAwait(false) .GetAwaiter() .GetResult()); }
public static Task<IAnalyticsResult<T>> AnalyticsQueryAsync<T>(this ICluster cluster, string statement, Action<AnalyticsOptions> configureOptions) { var options = new AnalyticsOptions(); configureOptions(options); return cluster.AnalyticsQueryAsync<T>(statement, options); }
public static IAnalyticsResult<T> AnalyticsQuery<T>(this ICluster cluster, string statement, Action<AnalyticsOptions> configureOptions) { var options = new AnalyticsOptions(); configureOptions(options); return cluster.AnalyticsQueryAsync<T>(statement, options) .ConfigureAwait(false) .GetAwaiter() .GetResult(); }
/// <summary> /// Executes a query and ingests the results as documents into Couchbase server for further analytics. /// <para> /// NOTE: This is an experimental API and may change in the future. /// </para> /// </summary> /// <typeparam name="T"></typeparam> /// <param name="cluster"></param> /// <param name="collection"></param> /// <param name="statement"></param> /// <param name="ingestOptions"></param> /// <returns></returns> public static async Task <IEnumerable <IMutationResult> > IngestAsync <T>(this ICluster cluster, string statement, ICollection collection, IngestOptions ingestOptions = null) { //use defaults if not options not explicitly passed ingestOptions = ingestOptions ?? new IngestOptions(); if (ingestOptions.TokenValue.IsCancellationRequested) { ingestOptions.TokenValue.ThrowIfCancellationRequested(); } //execute the analytics query var result = await cluster.AnalyticsQueryAsync <T>( statement, options => options.CancellationToken(ingestOptions.TokenValue) ).ConfigureAwait(false); // ingest result into collection var results = new ConcurrentBag <Task <IMutationResult> >(); await foreach (var row in result.WithCancellation(ingestOptions.TokenValue).ConfigureAwait(false)) { Task <IMutationResult> op; switch (ingestOptions.IngestMethodValue) { case IngestMethod.Insert: op = collection.InsertAsync( ingestOptions.IdGeneratorValue(row), row, options => { options.Expiry(ingestOptions.ExpiryValue); options.Timeout(ingestOptions.TimeoutValue); }); break; case IngestMethod.Upsert: op = collection.UpsertAsync( ingestOptions.IdGeneratorValue(row), row, options => { options.Expiry(ingestOptions.ExpiryValue); options.Timeout(ingestOptions.TimeoutValue); }); break; case IngestMethod.Replace: op = collection.ReplaceAsync( ingestOptions.IdGeneratorValue(row), row, options => { options.Expiry(ingestOptions.ExpiryValue); options.Timeout(ingestOptions.TimeoutValue); }); break; default: throw new ArgumentOutOfRangeException(); } results.Add(op); } return(await Task.WhenAll(results).ConfigureAwait(false)); }