Skip to content

Commit 23d7d08

Browse files
committed
Use async/await in a bunch more places
1 parent ecf59e2 commit 23d7d08

File tree

1 file changed

+64
-78
lines changed

1 file changed

+64
-78
lines changed

lib/src/query.dart

Lines changed: 64 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,24 @@ class Query extends Object with _ConnectionHelpers {
3535
return _pool._getConnection();
3636
}
3737

38-
Future<_PreparedQuery> _prepare(bool retainConnection) {
38+
Future<_PreparedQuery> _prepare(bool retainConnection) async {
3939
_log.fine("Getting prepared query for: $sql");
4040

41-
return _getConnection()
42-
.then((cnx) {
43-
cnx.autoRelease = !retainConnection;
44-
var c = new Completer<_PreparedQuery>();
45-
_log.fine("Got cnx#${cnx.number}");
46-
if (_useCachedQuery(cnx, c)) {
47-
if (!retainConnection) {
48-
// didn't actually use the connection, so the auto-release
49-
// mechanism will never get fired, so we'd better give up
50-
// on the connection now
51-
cnx.release();
52-
}
53-
} else {
54-
_prepareAndCacheQuery(cnx, c, retainConnection);
55-
}
56-
return c.future;
57-
});
41+
var cnx = await _getConnection();
42+
cnx.autoRelease = !retainConnection;
43+
var c = new Completer<_PreparedQuery>();
44+
_log.fine("Got cnx#${cnx.number}");
45+
if (_useCachedQuery(cnx, c)) {
46+
if (!retainConnection) {
47+
// didn't actually use the connection, so the auto-release
48+
// mechanism will never get fired, so we'd better give up
49+
// on the connection now
50+
cnx.release();
51+
}
52+
} else {
53+
_prepareAndCacheQuery(cnx, c, retainConnection);
54+
}
55+
return c.future;
5856
}
5957

6058
/**
@@ -71,21 +69,20 @@ class Query extends Object with _ConnectionHelpers {
7169
return true;
7270
}
7371

74-
void _prepareAndCacheQuery(_Connection cnx, Completer c, retainConnection) {
72+
_prepareAndCacheQuery(_Connection cnx, Completer c, retainConnection) async {
7573
_log.fine("Preparing new query in cnx#${cnx.number} for: $sql");
7674
var handler = new _PrepareHandler(sql);
7775
cnx.use();
7876
cnx.autoRelease = !retainConnection;
79-
cnx.processHandler(handler)
80-
.then((preparedQuery) {
81-
_log.fine("Prepared new query in cnx#${cnx.number} for: $sql");
82-
preparedQuery.cnx = cnx;
83-
cnx.putPreparedQueryInCache(sql, preparedQuery);
84-
c.complete(preparedQuery);
85-
})
86-
.catchError((e) {
87-
_releaseReuseCompleteError(cnx, c, e);
88-
});
77+
var preparedQuery = await cnx.processHandler(handler);
78+
try {
79+
_log.fine("Prepared new query in cnx#${cnx.number} for: $sql");
80+
preparedQuery.cnx = cnx;
81+
cnx.putPreparedQueryInCache(sql, preparedQuery);
82+
c.complete(preparedQuery);
83+
} catch (e) {
84+
_releaseReuseCompleteError(cnx, c, e);
85+
}
8986
}
9087

9188
/// Closes this query and removes it from all connections in the pool.
@@ -96,33 +93,28 @@ class Query extends Object with _ConnectionHelpers {
9693
/**
9794
* Executes the query, returning a future [Results] object.
9895
*/
99-
Future<Results> execute([List values]) {
96+
Future<Results> execute([List values]) async {
10097
_log.fine("Prepare...");
101-
return _prepare(true)
102-
.then((preparedQuery) {
103-
_log.fine("Prepared, now to execute");
104-
return _execute(preparedQuery, values == null ? [] : values)
105-
.then((Results results) {
106-
_log.fine("Got prepared query results on #${preparedQuery.cnx.number} for: ${sql}");
107-
return results;
108-
});
109-
});
98+
var preparedQuery = await _prepare(true);
99+
_log.fine("Prepared, now to execute");
100+
Results results = await _execute(preparedQuery, values == null ? [] : values);
101+
_log.fine("Got prepared query results on #${preparedQuery.cnx.number} for: ${sql}");
102+
return results;
110103
}
111104

112105
Future<Results> _execute(_PreparedQuery preparedQuery, List values,
113-
{bool retainConnection: false}) {
106+
{bool retainConnection: false}) async {
114107
_log.finest("About to execute");
115108
var c = new Completer<Results>();
116109
var handler = new _ExecuteQueryHandler(preparedQuery, _executed, values);
117110
preparedQuery.cnx.autoRelease = !retainConnection;
118-
preparedQuery.cnx.processHandler(handler)
119-
.then((Results results) {
120-
_log.finest("Prepared query got results");
121-
c.complete(results);
122-
})
123-
.catchError((e) {
124-
_releaseReuseCompleteError(preparedQuery.cnx, c, e);
125-
});
111+
Results results = await preparedQuery.cnx.processHandler(handler);
112+
try {
113+
_log.finest("Prepared query got results");
114+
c.complete(results);
115+
} catch (e) {
116+
_releaseReuseCompleteError(preparedQuery.cnx, c, e);
117+
}
126118
return c.future;
127119
}
128120

@@ -134,37 +126,31 @@ class Query extends Object with _ConnectionHelpers {
134126
* can move onto the next query, it ends up keeping all the results in memory, rather than
135127
* streaming them, which can be less efficient.
136128
*/
137-
Future<List<Results>> executeMulti(List<List> parameters) {
138-
return _prepare(true)
139-
.then((preparedQuery) {
140-
var c = new Completer<List<Results>>();
141-
_log.fine("Prepared query for multi execution. Number of values: ${parameters.length}");
142-
var resultList = new List<Results>();
143-
144-
executeQuery(int i) {
145-
_log.fine("Executing query, loop $i");
146-
_execute(preparedQuery, parameters[i], retainConnection: true)
147-
.then((Results results) {
148-
_log.fine("Got results, loop $i");
149-
return _ResultsImpl.destream(results);
150-
})
151-
.then((Results deStreamedResults) {
152-
resultList.add(deStreamedResults);
153-
if (i < parameters.length - 1) {
154-
executeQuery(i + 1);
155-
} else {
156-
preparedQuery.cnx.release();
157-
c.complete(resultList);
158-
}
159-
})
160-
.catchError((e) {
161-
_releaseReuseCompleteError(preparedQuery.cnx, c, e);
162-
});
129+
Future<List<Results>> executeMulti(List<List> parameters) async {
130+
var preparedQuery = await _prepare(true);
131+
var c = new Completer<List<Results>>();
132+
_log.fine("Prepared query for multi execution. Number of values: ${parameters.length}");
133+
var resultList = new List<Results>();
134+
135+
executeQuery(int i) async {
136+
try {
137+
_log.fine("Executing query, loop $i");
138+
Results results = await _execute(preparedQuery, parameters[i], retainConnection: true);
139+
_log.fine("Got results, loop $i");
140+
Results deStreamedResults = await _ResultsImpl.destream(results);
141+
resultList.add(deStreamedResults);
142+
if (i < parameters.length - 1) {
143+
await executeQuery(i + 1);
144+
} else {
145+
preparedQuery.cnx.release();
163146
}
164-
165-
executeQuery(0);
166-
return c.future;
167-
});
147+
} catch (e) {
148+
_releaseReuseCompleteError(preparedQuery.cnx, c, e);
149+
}
150+
}
151+
152+
await executeQuery(0);
153+
return resultList;
168154
}
169155

170156
_removeConnection(_Connection cnx) {

0 commit comments

Comments
 (0)