Differences From
Artifact [5d4cebec04]:
1587 1587 for i=0,res.sz do
1588 1588 var id = res:int(uint64,i,0)
1589 1589 var idbuf: int8[lib.math.shorthand.maxlen]
1590 1590 var idlen = lib.math.shorthand.gen(id, &idbuf[0])
1591 1591 var desc = res:_string(i,2)
1592 1592 var folder = res:_string(i,3)
1593 1593 var mime = res:_string(i,4)
1594 - var url = lib.str.acc{}:init(48):lpush('/media/a/'):push(&idbuf[0],idlen):finalize() defer url:free()
1595 1594 m.ptr[i] = [ lib.str.encapsulate(lib.store.artifact, {
1596 1595 desc = {`desc.ptr, `desc.ct + 1};
1597 1596 folder = {`folder.ptr, `folder.ct + 1};
1598 1597 mime = {`mime.ptr, `mime.ct + 1};
1599 - url = {`url.ptr, `url.ct + 1};
1598 + url = {`&idbuf[0], `idlen + 1};
1600 1599 }) ]
1601 1600 m(i).ptr.rid = id
1602 1601 m(i).ptr.owner = uid
1603 1602 end
1604 1603 return m
1605 1604 else return [lib.mem.lstptr(lib.store.artifact)].null() end
1606 1605 end];
1606 +
1607 + artifact_load = [terra(
1608 + src: &lib.store.source,
1609 + rid: uint64
1610 + ): {binblob, pstring}
1611 + var r = queries.artifact_load.exec(src,rid)
1612 + if r.sz == 0 then return binblob.null(), pstring.null() end
1613 +
1614 + var mime = r:String(0,1)
1615 + var mbin = r:bin(0,0)
1616 + var bin = lib.mem.heapa(uint8,mbin.ct)
1617 + lib.mem.cpy(bin.ptr, mbin.ptr, bin.ct)
1618 +
1619 + r:free()
1620 + return bin, mime
1621 + end];
1607 1622
1608 1623 post_attach_ctl = [terra(
1609 1624 src: &lib.store.source,
1610 1625 post: uint64,
1611 1626 artifact: uint64,
1612 1627 detach: bool
1613 1628 ): {}