@@ -40,36 +40,35 @@ class Query extends Object with _ConnectionHelpers {
40
40
41
41
var cnx = await _getConnection ();
42
42
cnx.autoRelease = ! retainConnection;
43
- var c = new Completer <_PreparedQuery >();
44
43
_log.fine ("Got cnx#${cnx .number }" );
45
- if (_useCachedQuery (cnx, c)) {
44
+ var preparedQuery = _useCachedQuery (cnx);
45
+ if (preparedQuery != null ) {
46
46
if (! retainConnection) {
47
47
// didn't actually use the connection, so the auto-release
48
48
// mechanism will never get fired, so we'd better give up
49
49
// on the connection now
50
50
cnx.release ();
51
51
}
52
+ return preparedQuery;
52
53
} else {
53
- _prepareAndCacheQuery (cnx, c , retainConnection);
54
+ return await _prepareAndCacheQuery (cnx, retainConnection);
54
55
}
55
- return c.future;
56
56
}
57
57
58
58
/**
59
59
* Returns true if there was already a cached query which has been used.
60
60
*/
61
- bool _useCachedQuery (_Connection cnx, Completer c ) {
61
+ _PreparedQuery _useCachedQuery (_Connection cnx) {
62
62
var preparedQuery = cnx.getPreparedQueryFromCache (sql);
63
63
if (preparedQuery == null ) {
64
- return false ;
64
+ return null ;
65
65
}
66
66
67
67
_log.fine ("Got prepared query from cache in cnx#${cnx .number } for: $sql " );
68
- c.complete (preparedQuery);
69
- return true ;
68
+ return preparedQuery;
70
69
}
71
70
72
- _prepareAndCacheQuery (_Connection cnx, Completer c, retainConnection) async {
71
+ _prepareAndCacheQuery (_Connection cnx, retainConnection) async {
73
72
_log.fine ("Preparing new query in cnx#${cnx .number } for: $sql " );
74
73
var handler = new _PrepareHandler (sql);
75
74
cnx.use ();
@@ -79,9 +78,9 @@ class Query extends Object with _ConnectionHelpers {
79
78
_log.fine ("Prepared new query in cnx#${cnx .number } for: $sql " );
80
79
preparedQuery.cnx = cnx;
81
80
cnx.putPreparedQueryInCache (sql, preparedQuery);
82
- c. complete ( preparedQuery) ;
81
+ return preparedQuery;
83
82
} catch (e) {
84
- _releaseReuseCompleteError (cnx, c , e);
83
+ _releaseReuseThrow (cnx, e);
85
84
}
86
85
}
87
86
@@ -108,14 +107,13 @@ class Query extends Object with _ConnectionHelpers {
108
107
var c = new Completer <Results >();
109
108
var handler = new _ExecuteQueryHandler (preparedQuery, _executed, values);
110
109
preparedQuery.cnx.autoRelease = ! retainConnection;
111
- Results results = await preparedQuery.cnx.processHandler (handler);
112
110
try {
111
+ Results results = await preparedQuery.cnx.processHandler (handler);
113
112
_log.finest ("Prepared query got results" );
114
- c. complete ( results) ;
113
+ return results;
115
114
} catch (e) {
116
- _releaseReuseCompleteError (preparedQuery.cnx, c , e);
115
+ _releaseReuseThrow (preparedQuery.cnx, e);
117
116
}
118
- return c.future;
119
117
}
120
118
121
119
/**
@@ -132,24 +130,18 @@ class Query extends Object with _ConnectionHelpers {
132
130
_log.fine ("Prepared query for multi execution. Number of values: ${parameters .length }" );
133
131
var resultList = new List <Results >();
134
132
135
- executeQuery (int i) async {
133
+ for (int i = 0 ; i < parameters.length; i ++ ) {
136
134
try {
137
135
_log.fine ("Executing query, loop $i " );
138
136
Results results = await _execute (preparedQuery, parameters[i], retainConnection: true );
139
137
_log.fine ("Got results, loop $i " );
140
138
Results deStreamedResults = await _ResultsImpl .destream (results);
141
139
resultList.add (deStreamedResults);
142
- if (i < parameters.length - 1 ) {
143
- await executeQuery (i + 1 );
144
- } else {
145
- preparedQuery.cnx.release ();
146
- }
147
140
} catch (e) {
148
- _releaseReuseCompleteError (preparedQuery.cnx, c , e);
141
+ _releaseReuseThrow (preparedQuery.cnx, e);
149
142
}
150
143
}
151
-
152
- await executeQuery (0 );
144
+ preparedQuery.cnx.release ();
153
145
return resultList;
154
146
}
155
147
0 commit comments