@@ -35,26 +35,24 @@ class Query extends Object with _ConnectionHelpers {
35
35
return _pool._getConnection ();
36
36
}
37
37
38
- Future <_PreparedQuery > _prepare (bool retainConnection) {
38
+ Future <_PreparedQuery > _prepare (bool retainConnection) async {
39
39
_log.fine ("Getting prepared query for: $sql " );
40
40
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;
58
56
}
59
57
60
58
/**
@@ -71,21 +69,20 @@ class Query extends Object with _ConnectionHelpers {
71
69
return true ;
72
70
}
73
71
74
- void _prepareAndCacheQuery (_Connection cnx, Completer c, retainConnection) {
72
+ _prepareAndCacheQuery (_Connection cnx, Completer c, retainConnection) async {
75
73
_log.fine ("Preparing new query in cnx#${cnx .number } for: $sql " );
76
74
var handler = new _PrepareHandler (sql);
77
75
cnx.use ();
78
76
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
+ }
89
86
}
90
87
91
88
/// Closes this query and removes it from all connections in the pool.
@@ -96,33 +93,28 @@ class Query extends Object with _ConnectionHelpers {
96
93
/**
97
94
* Executes the query, returning a future [Results] object.
98
95
*/
99
- Future <Results > execute ([List values]) {
96
+ Future <Results > execute ([List values]) async {
100
97
_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;
110
103
}
111
104
112
105
Future <Results > _execute (_PreparedQuery preparedQuery, List values,
113
- {bool retainConnection: false }) {
106
+ {bool retainConnection: false }) async {
114
107
_log.finest ("About to execute" );
115
108
var c = new Completer <Results >();
116
109
var handler = new _ExecuteQueryHandler (preparedQuery, _executed, values);
117
110
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
+ }
126
118
return c.future;
127
119
}
128
120
@@ -134,37 +126,31 @@ class Query extends Object with _ConnectionHelpers {
134
126
* can move onto the next query, it ends up keeping all the results in memory, rather than
135
127
* streaming them, which can be less efficient.
136
128
*/
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 ();
163
146
}
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;
168
154
}
169
155
170
156
_removeConnection (_Connection cnx) {
0 commit comments