()
| 76 | } |
| 77 | |
| 78 | func (iter *multiQueriesChunkIter) nextRows() { |
| 79 | if iter.id >= len(iter.queries) { |
| 80 | iter.hasNext = false |
| 81 | return |
| 82 | } |
| 83 | var err error |
| 84 | defer func() { |
| 85 | if err != nil { |
| 86 | iter.hasNext = false |
| 87 | iter.err = errors.Trace(err) |
| 88 | } |
| 89 | }() |
| 90 | tctx, conn := iter.tctx, iter.conn |
| 91 | // avoid the empty chunk |
| 92 | for iter.id < len(iter.queries) { |
| 93 | rows := iter.rows |
| 94 | if rows != nil { |
| 95 | if err = rows.Close(); err != nil { |
| 96 | return |
| 97 | } |
| 98 | if err = rows.Err(); err != nil { |
| 99 | return |
| 100 | } |
| 101 | } |
| 102 | tctx.L().Debug("try to start nextRows", zap.String("query", iter.queries[iter.id])) |
| 103 | rows, err = conn.QueryContext(tctx, iter.queries[iter.id]) |
| 104 | if err != nil { |
| 105 | return |
| 106 | } |
| 107 | if err = rows.Err(); err != nil { |
| 108 | return |
| 109 | } |
| 110 | iter.id++ |
| 111 | iter.rows = rows |
| 112 | iter.hasNext = iter.rows.Next() |
| 113 | if iter.hasNext { |
| 114 | return |
| 115 | } |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | func (iter *multiQueriesChunkIter) Close() error { |
| 120 | if iter.err != nil { |
no test coverage detected