type
       TRow = seq[string]
       TRows = seq[TRow]
    
    proc dbGetRowsCb(arr: pointer; colCount: int32; values, columns: 
cstringArray): int32 {.cdecl.} =
       var cols:TRow
       for i in 0..<colCount:
          cols.add($values[i])
       var arr = cast[ptr TRows](arr)
       arr[].add(cols)
       return 0
    
    proc dbGetRows*(q:string): TRows =
       var err:cstring=""
       var arr: TRows
       discard db.exec(q, dbGetRowsCb, result.addr, err)
       if err != "":
          echo err
          free err
    
    
    Run

In the dbGetRowsCb proc if i change the lines
    
    
    var arr = cast[ptr TRows](arr)
    arr[].add(cols)
    
    
    Run

to
    
    
    var arr = cast[ptr TRows](arr)[]
    arr.add(cols)
    
    
    Run

The sequence returned by dbGetRows is empty. Why??? Is it because the original 
sequence, once dereferenced, is copied to "var arr", hence "cols" is not added 
to it but to a copy which is deleted once the proc returns?

Reply via email to