|
- package db
-
- import (
- "gitlink.org.cn/cloudream/jcs-pub/client/types"
- "gorm.io/gorm/clause"
- )
-
- type ObjectBlockDB struct {
- *DB
- }
-
- func (db *DB) ObjectBlock() *ObjectBlockDB {
- return &ObjectBlockDB{DB: db}
- }
-
- func (db *ObjectBlockDB) GetByUserSpaceID(ctx SQLContext, spaceID types.UserSpaceID) ([]types.ObjectBlock, error) {
- var rets []types.ObjectBlock
- err := ctx.Table("ObjectBlock").Where("UserSpaceID = ?", spaceID).Find(&rets).Error
- return rets, err
- }
-
- func (db *ObjectBlockDB) BatchGetByObjectID(ctx SQLContext, objectIDs []types.ObjectID) ([]types.ObjectBlock, error) {
- if len(objectIDs) == 0 {
- return nil, nil
- }
-
- var blocks []types.ObjectBlock
- err := ctx.Table("ObjectBlock").Where("ObjectID IN (?)", objectIDs).Order("ObjectID, `Index` ASC").Find(&blocks).Error
- return blocks, err
- }
-
- func (*ObjectBlockDB) GetInPackageID(ctx SQLContext, packageID types.PackageID) ([]types.ObjectBlock, error) {
- var rets []types.ObjectBlock
- err := ctx.Table("ObjectBlock").
- Joins("INNER JOIN Object ON ObjectBlock.ObjectID = Object.ObjectID").
- Where("Object.PackageID = ?", packageID).
- Order("ObjectBlock.ObjectID, ObjectBlock.`Index` ASC").
- Find(&rets).Error
- return rets, err
- }
-
- func (db *ObjectBlockDB) Create(ctx SQLContext, objectID types.ObjectID, index int, spaceID types.UserSpaceID, fileHash types.FileHash, size int64) error {
- block := types.ObjectBlock{ObjectID: objectID, Index: index, UserSpaceID: spaceID, FileHash: fileHash, Size: size}
- return ctx.Table("ObjectBlock").Create(&block).Error
- }
-
- func (db *ObjectBlockDB) BatchCreate(ctx SQLContext, blocks []types.ObjectBlock) error {
- if len(blocks) == 0 {
- return nil
- }
-
- return ctx.Clauses(clause.Insert{Modifier: "ignore"}).Create(&blocks).Error
- }
-
- func (db *ObjectBlockDB) DeleteByObjectID(ctx SQLContext, objectID types.ObjectID) error {
- return ctx.Table("ObjectBlock").Where("ObjectID = ?", objectID).Delete(&types.ObjectBlock{}).Error
- }
-
- func (db *ObjectBlockDB) DeleteByObjectIDIndex(ctx SQLContext, objectID types.ObjectID, index int) error {
- return ctx.Table("ObjectBlock").Where("ObjectID = ? AND `Index` = ?", objectID, index).Delete(&types.ObjectBlock{}).Error
- }
-
- func (db *ObjectBlockDB) BatchDeleteByObjectID(ctx SQLContext, objectIDs []types.ObjectID) error {
- if len(objectIDs) == 0 {
- return nil
- }
-
- return ctx.Table("ObjectBlock").Where("ObjectID IN (?)", objectIDs).Delete(&types.ObjectBlock{}).Error
- }
-
- func (db *ObjectBlockDB) DeleteInPackage(ctx SQLContext, packageID types.PackageID) error {
- return ctx.Table("ObjectBlock").Where("ObjectID IN (SELECT ObjectID FROM Object WHERE PackageID = ?)", packageID).Delete(&types.ObjectBlock{}).Error
- }
-
- func (db *ObjectBlockDB) BatchDeleteByFileHash(ctx SQLContext, spaceID types.UserSpaceID, fileHashes []types.FileHash) error {
- if len(fileHashes) == 0 {
- return nil
- }
-
- return ctx.Table("ObjectBlock").Where("UserSpaceID = ? AND FileHash IN (?)", spaceID, fileHashes).Delete(&types.ObjectBlock{}).Error
- }
-
- func (*ObjectBlockDB) DeleteByUserSpaceID(ctx SQLContext, spaceID types.UserSpaceID) error {
- return ctx.Table("ObjectBlock").Where("UserSpaceID = ?", spaceID).Delete(&types.ObjectBlock{}).Error
- }
-
- func (db *ObjectBlockDB) CountBlockWithHash(ctx SQLContext, fileHash string) (int, error) {
- var cnt int64
- err := ctx.Table("ObjectBlock").
- Select("COUNT(FileHash)").
- Joins("INNER JOIN Object ON ObjectBlock.ObjectID = Object.ObjectID").
- Joins("INNER JOIN Package ON Object.PackageID = Package.PackageID").
- Where("FileHash = ?", fileHash).
- Scan(&cnt).Error
-
- if err != nil {
- return 0, err
- }
-
- return int(cnt), nil
- }
|