protected async Task <T> FirstOrDefaultImpl() { // Commit any pending changes before doing a query (auto-flush) await _query._session.CommitAsync(); _query.Page(1, 0); if (typeof(IIndex).IsAssignableFrom(typeof(T))) { _query._sqlBuilder.Selector("*"); var sql = _query._sqlBuilder.ToSqlString(_query._dialect); return((await _query._connection.QueryAsync <T>(sql, _query._sqlBuilder.Parameters, _query._transaction)).FirstOrDefault()); } else { _query._sqlBuilder.Selector(_query._documentTable, "Id"); var sql = _query._sqlBuilder.ToSqlString(_query._dialect); var ids = (await _query._connection.QueryAsync <int>(sql, _query._sqlBuilder.Parameters, _query._transaction)).ToArray(); if (ids.Length == 0) { return(default(T)); } return(await _query._session.GetAsync <T>(ids[0])); } }
protected async Task <T> FirstOrDefaultImpl() { // Commit any pending changes before doing a query (auto-flush) await _query._session.CommitAsync(); _query.Page(1, 0); if (typeof(IIndex).IsAssignableFrom(typeof(T))) { _query._sqlBuilder.Selector("*"); var sql = _query._sqlBuilder.ToSqlString(); var key = new WorkerQueryKey(sql, _query._sqlBuilder.Parameters); return((await _query._session._store.ProduceAsync(key, async() => { return await _query._connection.QueryAsync <T>(sql, _query._sqlBuilder.Parameters, _query._transaction); })).FirstOrDefault()); } else { _query._sqlBuilder.Selector(_query._documentTable, "*"); var sql = _query._sqlBuilder.ToSqlString(); var key = new WorkerQueryKey(sql, _query._sqlBuilder.Parameters); var documents = (await _query._session._store.ProduceAsync(key, async() => { return(await _query._connection.QueryAsync <Document>(sql, _query._sqlBuilder.Parameters, _query._transaction)); })).ToArray(); if (documents.Length == 0) { return(default(T)); } return(_query._session.Get <T>(documents).FirstOrDefault()); } }
protected async Task <T> FirstOrDefaultImpl() { // Flush any pending changes before doing a query (auto-flush) await _query._session.FlushAsync(); var transaction = await _query._session.DemandAsync(); if (_query._compiledQuery != null && _query._queryState._parameterBindings != null) { foreach (var binding in _query._queryState._parameterBindings) { binding(_query._compiledQuery, _query._queryState._sqlBuilder); } } _query.Page(1, 0); if (typeof(IIndex).IsAssignableFrom(typeof(T))) { _query._queryState._sqlBuilder.Selector("*"); var sql = _query._queryState._sqlBuilder.ToSqlString(); var key = new WorkerQueryKey(sql, _query._queryState._sqlBuilder.Parameters); return((await _query._session._store.ProduceAsync(key, () => { _query._session._store.Configuration.Logger.LogDebug(sql); return transaction.Connection.QueryAsync <T>(sql, _query._queryState._sqlBuilder.Parameters, transaction); })).FirstOrDefault()); } else { _query._queryState._sqlBuilder.Selector(_query._queryState._documentTable, "*"); var sql = _query._queryState._sqlBuilder.ToSqlString(); var key = new WorkerQueryKey(sql, _query._queryState._sqlBuilder.Parameters); var documents = (await _query._session._store.ProduceAsync(key, () => { _query._session._store.Configuration.Logger.LogDebug(sql); return(transaction.Connection.QueryAsync <Document>(sql, _query._queryState._sqlBuilder.Parameters, transaction)); })).ToArray(); if (documents.Length == 0) { return(default(T)); } return(_query._session.Get <T>(documents).FirstOrDefault()); } }