Пример #1
0
        /// <summary>
        ///   Executes the query async.
        /// </summary>
        /// <typeparam name="T"> class representing the rows returned </typeparam>
        /// <returns> </returns>
        public async Task <CqlDataReader <T> > ExecuteReaderAsync <T>() where T : class, new()
        {
            var logger = _connection.LoggerManager.GetLogger("CqlSharp.CqlCommand.ExecuteReader");

            logger.LogVerbose("Waiting on Throttle");

            //wait until allowed
            _connection.Throttle.Wait();

            try
            {
                //capture current command state
                QueryExecutionState state = CaptureState();

                logger.LogVerbose("State captured, start executing query");

                ResultFrame result = await RunWithRetry(ExecuteInternalAsync, state, logger).ConfigureAwait(false);

                if (result.ResultOpcode != ResultOpcode.Rows)
                {
                    var ex = new CqlException("Can not create a DataReader for non-select query.");
                    logger.LogError("Error executing reader: {0}", ex);
                    throw ex;
                }
                var reader = new CqlDataReader <T>(result);

                logger.LogQuery("Query {0} returned {1} results", _cql, reader.Count);

                return(reader);
            }
            finally
            {
                _connection.Throttle.Release();
            }
        }
Пример #2
0
        /// <summary>
        ///   Executes the non-query async.
        /// </summary>
        /// <returns> A ICqlQueryResult of type rows, Void, SchemaChange or SetKeySpace </returns>
        /// <exception cref="CqlException">Unexpected type of result received</exception>
        public async Task <ICqlQueryResult> ExecuteNonQueryAsync()
        {
            var logger = _connection.LoggerManager.GetLogger("CqlSharp.CqlCommand.ExecuteNonQuery");

            logger.LogVerbose("Waiting on Throttle");

            //wait until allowed
            _connection.Throttle.Wait();

            try
            {
                //capture current command state
                QueryExecutionState state = CaptureState();

                logger.LogVerbose("State captured, start executing query");

                ResultFrame result = await RunWithRetry(ExecuteInternalAsync, state, logger).ConfigureAwait(false);

                switch (result.ResultOpcode)
                {
                case ResultOpcode.Rows:
                    var reader = new CqlDataReader(result);
                    logger.LogQuery("Query {0} returned {1} results", _cql, reader.Count);
                    return(reader);

                case ResultOpcode.Void:
                    logger.LogQuery("Query {0} executed succesfully", _cql);
                    return(new CqlVoid {
                        TracingId = result.TracingId
                    });

                case ResultOpcode.SchemaChange:
                    logger.LogQuery("Query {0} resulted in {1}.{2} {3}", _cql, result.Keyspace, result.Table, result.Change);
                    return(new CqlSchemaChange
                    {
                        TracingId = result.TracingId,
                        Keyspace = result.Keyspace,
                        Table = result.Table,
                        Change = result.Change
                    });

                case ResultOpcode.SetKeyspace:
                    logger.LogQuery("Query {0} resulted in keyspace set to {1}", _cql, result.Keyspace);
                    return(new CqlSetKeyspace
                    {
                        TracingId = result.TracingId,
                        Keyspace = result.Keyspace
                    });

                default:
                    throw new CqlException("Unexpected type of result received");
                }
            }
            finally
            {
                _connection.Throttle.Release();
            }
        }