code: func (l *LiteBackend) getInTransaction(ctx context.Context, key []byte, tx *sql.Tx, item *backend.Item) error {
  	now := l.clock.Now().UTC()
  	q, err := tx.PrepareContext(ctx,
  		"SELECT key, value, expires, modified FROM kv WHERE key = ? AND (expires IS NULL OR expires > ?) LIMIT 1")
  	if err != nil {
  		return trace.Wrap(err)
  	}
  	row := q.QueryRowContext(ctx, string(key), now)
  	var expires NullTime
  	if err := row.Scan(&item.Key, &item.Value, &expires, &item.ID); err != nil {
  		if err == sql.ErrNoRows {
  			return trace.NotFound("key %v is not found", string(key))
  		}
  		return trace.Wrap(err)
  	}
  	item.Expires = expires.Time
  	return nil
  }
docs: // getInTransaction returns an item, works in transaction