summary refs log tree commit diff stats
path: root/lib/impure
diff options
context:
space:
mode:
Diffstat (limited to 'lib/impure')
-rw-r--r--lib/impure/db_mysql.nim24
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)