예제 #1
0
파일: store.go 프로젝트: zhuharev/tago
func removeTag(tx *bolt.Tx, tagName string, objPrefix []byte, objId int64) error {
	tagoBucket := tx.Bucket(TagoBucket)
	tagoTagsBucket := tagoBucket.Bucket(TagoTagsBucket)

	objBucket, e := tagoTagsBucket.CreateBucketIfNotExists(objPrefix)
	if e != nil {
		return e
	}

	arr, e := getItemsFromBucket(objBucket, tagName)
	if e != nil {
		return e
	}

	sl := intarr.New(arr)
	if sl.In(int32(objId)) {
		sl = sl.Remove(int32(objId))
	}

	bts, e := sl.Encode()
	if e != nil {
		return e
	}
	e = objBucket.Put([]byte(tagName), bts)

	return e
}
예제 #2
0
파일: store.go 프로젝트: zhuharev/tago
func setTag(tx *bolt.Tx, tagName string, objPrefix []byte, objId int64) error {
	tagoBucket := tx.Bucket(TagoBucket)
	tagoTagsBucket := tagoBucket.Bucket(TagoTagsBucket)

	objBucket, e := tagoTagsBucket.CreateBucketIfNotExists(objPrefix)
	if e != nil {
		return e
	}

	sl, e := getItemsFromBucket(objBucket, tagName)
	if e != nil {
		return e
	}

	// todo overflow int32
	sl = append(sl, objId)

	bts, e := intarr.New(sl).Encode()
	if e != nil {
		return e
	}
	e = objBucket.Put([]byte(tagName), bts)

	return e
}