diff options
Diffstat (limited to 'lib/impure')
-rw-r--r-- | lib/impure/db_mysql.nim | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/impure/db_mysql.nim b/lib/impure/db_mysql.nim index 1b7f1de61..1b79b3543 100644 --- a/lib/impure/db_mysql.nim +++ b/lib/impure/db_mysql.nim @@ -173,17 +173,33 @@ iterator fastRows*(db: DbConn, query: SqlQuery, rawExec(db, query, args) var sqlres = mysql.useResult(db) if sqlres != nil: - var L = int(mysql.numFields(sqlres)) - var result = newRow(L) - var row: cstringArray + var + L = int(mysql.numFields(sqlres)) + row: cstringArray + result: Row + backup: Row + newSeq(result, L) while true: row = mysql.fetchRow(sqlres) if row == nil: break for i in 0..L-1: - setLen(result[i], 0) if row[i] == nil: + if backup == nil: + newSeq(backup, L) + if backup[i] == nil and result[i] != nil: + shallowCopy(backup[i], result[i]) result[i] = nil else: + if result[i] == nil: + if backup != nil: + if backup[i] == nil: + backup[i] = "" + shallowCopy(result[i], backup[i]) + setLen(result[i], 0) + else: + result[i] = "" + else: + setLen(result[i], 0) add(result[i], row[i]) yield result properFreeResult(sqlres, row) |