public async Task CreateDataverseAsync(string dataverseName, CreateAnalyticsDataverseOptions?options = null)
        {
            options ??= new CreateAnalyticsDataverseOptions();

            _logger.LogInformation("Attempting to create dataverse with name {dataverseName}",
                                   _redactor.MetaData(dataverseName));

            try
            {
                dataverseName = UncompoundName(dataverseName);
                var ignoreStr = options.IgnoreIfExistsValue ? " IF NOT EXISTS" : string.Empty;
                var statement = $"CREATE DATAVERSE {dataverseName}{ignoreStr}";

                await _client
                .QueryAsync <dynamic>(statement, options.CreateAnalyticsOptions())
                .ConfigureAwait(false);
            }
            catch (DataverseExistsException)
            {
                _logger.LogError("Failed to create dataverse with name {dataverseName} because it already exists.",
                                 _redactor.MetaData(dataverseName));
                throw;
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "Failed to create dataverse with name {dataverseName}",
                                 _redactor.MetaData(dataverseName));
                throw;
            }
        }
Example #2
0
        public Task <IAnalyticsResult <T> > AnalyticsQueryAsync <T>(string statement, AnalyticsOptions options = default)
        {
            if (options == default)
            {
                options = new AnalyticsOptions();
            }

            var query = new AnalyticsRequest(statement);

            query.ClientContextId(options.ClientContextId);
            query.Pretty(options.Pretty);
            query.IncludeMetrics(options.IncludeMetrics);
            query.NamedParameters     = options.NamedParameters;
            query.PositionalArguments = options.PositionalParameters;

            if (options.Timeout.HasValue)
            {
                query.Timeout(options.Timeout.Value);
            }

            query.Priority(options.Priority);
            query.Deferred(options.Deferred);

            query.ConfigureLifespan(30); //TODO: use configuration.AnalyticsTimeout

            if (_analyticsClient == null)
            {
                _analyticsClient = new AnalyticsClient(_configuration);
            }
            return(_analyticsClient.QueryAsync <T>(query, options.CancellationToken));
        }
Example #3
0
        /// <summary>
        /// Asynchronously sends an analytics request to the server.
        /// </summary>
        /// <typeparam name="T">The <see cref="Type" /> T of the body for each row (or document) result.</typeparam>
        /// <param name="analyticsRequest">The analytics request.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public Task <IAnalyticsResult <T> > SendAsync <T>(IAnalyticsRequest analyticsRequest, CancellationToken cancellationToken)
        {
            Task <IAnalyticsResult <T> > result;

            if (_isDown)
            {
                result = Task.FromResult(HandleNodeUnavailable <T>(analyticsRequest));
            }
            else
            {
                try
                {
                    result = _analyticsClient.QueryAsync <T>(analyticsRequest, cancellationToken);
                }
                catch (Exception exception)
                {
                    result = Task.FromResult <IAnalyticsResult <T> >(new AnalyticsResult <T>
                    {
                        Exception = exception,
                        Message   = exception.Message,
                        Success   = false,
                    });
                }
            }
            return(result);
        }