(query string, args []driver.NamedValue, queryType types.QueryType)
| 132 | } |
| 133 | |
| 134 | func (d *impersonatedDB) sendQuery(query string, args []driver.NamedValue, queryType types.QueryType) ( |
| 135 | resp *types.Response, err error) { |
| 136 | var ( |
| 137 | connID, seqNo = allocateConnAndSeq() |
| 138 | dArgs []types.NamedArg |
| 139 | ) |
| 140 | |
| 141 | defer putBackConn(connID) |
| 142 | |
| 143 | for _, arg := range args { |
| 144 | dArgs = append(dArgs, types.NamedArg{ |
| 145 | Name: arg.Name, |
| 146 | Value: arg.Value, |
| 147 | }) |
| 148 | } |
| 149 | |
| 150 | req := &types.Request{ |
| 151 | Header: types.SignedRequestHeader{ |
| 152 | RequestHeader: types.RequestHeader{ |
| 153 | QueryType: queryType, |
| 154 | NodeID: d.nodeID, |
| 155 | DatabaseID: d.db, |
| 156 | ConnectionID: connID, |
| 157 | SeqNo: seqNo, |
| 158 | Timestamp: time.Now().UTC(), |
| 159 | }, |
| 160 | }, |
| 161 | Payload: types.RequestPayload{ |
| 162 | Queries: []types.Query{ |
| 163 | { |
| 164 | Pattern: query, |
| 165 | Args: dArgs, |
| 166 | }, |
| 167 | }, |
| 168 | }, |
| 169 | } |
| 170 | resp = &types.Response{} |
| 171 | |
| 172 | if err = req.Sign(d.key); err != nil { |
| 173 | err = errors.Wrapf(err, "sign query failed") |
| 174 | return |
| 175 | } |
| 176 | |
| 177 | err = d.rpc.Call(route.DBSQuery.String(), req, resp) |
| 178 | if err != nil { |
| 179 | err = errors.Wrapf(err, "send query rpc failed") |
| 180 | return |
| 181 | } |
| 182 | |
| 183 | // add ack |
| 184 | go d.sendAck(&types.Ack{ |
| 185 | Header: types.SignedAckHeader{ |
| 186 | AckHeader: types.AckHeader{ |
| 187 | Response: resp.Header.ResponseHeader, |
| 188 | ResponseHash: resp.Header.Hash(), |
| 189 | NodeID: d.nodeID, |
| 190 | Timestamp: time.Now().UTC(), |
| 191 | }, |
no test coverage detected