@@ -27,6 +27,7 @@ const (
2727 virtualXattrName = "$document"
2828 virtualXattrRevSeqNo = "revid"
2929 virtualXattrCAS = "CAS"
30+ virtualXattrExpiry = "exptime"
3031)
3132
3233// ////// SGBUCKET XATTR STORE INTERFACE
@@ -412,12 +413,13 @@ func (c *Collection) getRawXattrs(txn *sql.Tx, key string) ([]byte, error) {
412413// get doc's raw body and an xattr.
413414func (c * Collection ) getRawWithXattrs (key string , xattrKeys []string ) (sgbucket.BucketDocument , error ) {
414415 var revSeqNo int64
415- row := c .db ().QueryRow (`SELECT value, cas, xattrs, tombstone, revSeqNo FROM documents WHERE collection=?1 AND key=?2` , c .id , key )
416+ var exp Exp
417+ row := c .db ().QueryRow (`SELECT value, cas, xattrs, tombstone, revSeqNo, exp FROM documents WHERE collection=?1 AND key=?2` , c .id , key )
416418 rawDoc := sgbucket.BucketDocument {
417419 Xattrs : make (map [string ][]byte , len (xattrKeys )),
418420 }
419421 var xattrs []byte
420- err := scan (row , & rawDoc .Body , & rawDoc .Cas , & xattrs , & rawDoc .IsTombstone , & revSeqNo )
422+ err := scan (row , & rawDoc .Body , & rawDoc .Cas , & xattrs , & rawDoc .IsTombstone , & revSeqNo , & exp )
421423 if err != nil {
422424 return sgbucket.BucketDocument {}, remapKeyError (err , key )
423425 }
@@ -438,6 +440,9 @@ func (c *Collection) getRawWithXattrs(key string, xattrKeys []string) (sgbucket.
438440 } else if xattrKey == virtualXattrName + "." + virtualXattrCAS {
439441 rawDoc .Xattrs [xattrKey ] = []byte (fmt .Sprintf (`"0x%s"` , strconv .FormatUint (rawDoc .Cas , 16 )))
440442 continue
443+ } else if xattrKey == virtualXattrName + "." + virtualXattrExpiry {
444+ rawDoc .Xattrs [xattrKey ] = []byte (strconv .FormatUint (uint64 (exp ), 10 ))
445+ continue
441446 }
442447 val , ok := xattrMap [xattrKey ]
443448 if ! ok {
0 commit comments