github.com/nutsdb/nutsdb@v1.0.4/metadata.go (about)

     1  package nutsdb
     2  
     3  // DataStructure represents the data structure we have already supported
     4  type DataStructure = uint16
     5  
     6  // DataFlag means the data operations have done by users.
     7  type DataFlag = uint16
     8  
     9  // DataStatus means the status of data
    10  type DataStatus = uint16
    11  
    12  const (
    13  	// DataStructureSet represents the data structure set flag
    14  	DataStructureSet DataStructure = 0
    15  
    16  	// DataStructureSortedSet represents the data structure sorted set flag
    17  	DataStructureSortedSet DataStructure = 1
    18  
    19  	// DataStructureBTree represents the data structure b tree flag
    20  	DataStructureBTree DataStructure = 2
    21  
    22  	// DataStructureList represents the data structure list flag
    23  	DataStructureList DataStructure = 3
    24  )
    25  
    26  const (
    27  	// DataDeleteFlag represents the data delete flag
    28  	DataDeleteFlag DataFlag = 0
    29  
    30  	// DataSetFlag represents the data set flag
    31  	DataSetFlag DataFlag = 1
    32  
    33  	// DataLPushFlag represents the data LPush flag
    34  	DataLPushFlag DataFlag = 2
    35  
    36  	// DataRPushFlag represents the data RPush flag
    37  	DataRPushFlag DataFlag = 3
    38  
    39  	// DataLRemFlag represents the data LRem flag
    40  	DataLRemFlag DataFlag = 4
    41  
    42  	// DataLPopFlag represents the data LPop flag
    43  	DataLPopFlag DataFlag = 5
    44  
    45  	// DataRPopFlag represents the data RPop flag
    46  	DataRPopFlag DataFlag = 6
    47  
    48  	// DataLTrimFlag represents the data LTrim flag
    49  	DataLTrimFlag DataFlag = 8
    50  
    51  	// DataZAddFlag represents the data ZAdd flag
    52  	DataZAddFlag DataFlag = 9
    53  
    54  	// DataZRemFlag represents the data ZRem flag
    55  	DataZRemFlag DataFlag = 10
    56  
    57  	// DataZRemRangeByRankFlag represents the data ZRemRangeByRank flag
    58  	DataZRemRangeByRankFlag DataFlag = 11
    59  
    60  	// DataZPopMaxFlag represents the data ZPopMax flag
    61  	DataZPopMaxFlag DataFlag = 12
    62  
    63  	// DataZPopMinFlag represents the data aZPopMin flag
    64  	DataZPopMinFlag DataFlag = 13
    65  
    66  	// DataSetBucketDeleteFlag represents the delete Set bucket flag
    67  	DataSetBucketDeleteFlag DataFlag = 14
    68  
    69  	// DataSortedSetBucketDeleteFlag represents the delete Sorted Set bucket flag
    70  	DataSortedSetBucketDeleteFlag DataFlag = 15
    71  
    72  	// DataBTreeBucketDeleteFlag represents the delete BTree bucket flag
    73  	DataBTreeBucketDeleteFlag DataFlag = 16
    74  
    75  	// DataListBucketDeleteFlag represents the delete List bucket flag
    76  	DataListBucketDeleteFlag DataFlag = 17
    77  
    78  	// DataLRemByIndex represents the data LRemByIndex flag
    79  	DataLRemByIndex DataFlag = 18
    80  
    81  	// DataExpireListFlag represents that set ttl for the list
    82  	DataExpireListFlag DataFlag = 19
    83  )
    84  
    85  const (
    86  	// UnCommitted represents the tx unCommitted status
    87  	UnCommitted uint16 = 0
    88  
    89  	// Committed represents the tx committed status
    90  	Committed uint16 = 1
    91  )
    92  
    93  // Persistent represents the data persistent flag
    94  const Persistent uint32 = 0
    95  
    96  type MetaData struct {
    97  	KeySize    uint32
    98  	ValueSize  uint32
    99  	Timestamp  uint64
   100  	TTL        uint32
   101  	Flag       DataFlag // delete / set
   102  	BucketSize uint32
   103  	TxID       uint64
   104  	Status     DataStatus    // committed / uncommitted
   105  	Ds         DataStructure // data structure
   106  	Crc        uint32
   107  	BucketId   BucketId
   108  }
   109  
   110  func (meta *MetaData) Size() int64 {
   111  	// CRC
   112  	size := 4
   113  
   114  	size += UvarintSize(uint64(meta.KeySize))
   115  	size += UvarintSize(uint64(meta.ValueSize))
   116  	size += UvarintSize(meta.Timestamp)
   117  	size += UvarintSize(uint64(meta.TTL))
   118  	size += UvarintSize(uint64(meta.Flag))
   119  	size += UvarintSize(meta.TxID)
   120  	size += UvarintSize(uint64(meta.Status))
   121  	size += UvarintSize(uint64(meta.Ds))
   122  	size += UvarintSize(meta.BucketId)
   123  
   124  	return int64(size)
   125  }
   126  
   127  func (meta *MetaData) PayloadSize() int64 {
   128  	return int64(meta.BucketSize) + int64(meta.KeySize) + int64(meta.ValueSize)
   129  }
   130  
   131  func NewMetaData() *MetaData {
   132  	return new(MetaData)
   133  }
   134  
   135  func (meta *MetaData) WithKeySize(keySize uint32) *MetaData {
   136  	meta.KeySize = keySize
   137  	return meta
   138  }
   139  
   140  func (meta *MetaData) WithValueSize(valueSize uint32) *MetaData {
   141  	meta.ValueSize = valueSize
   142  	return meta
   143  }
   144  
   145  func (meta *MetaData) WithTimeStamp(timestamp uint64) *MetaData {
   146  	meta.Timestamp = timestamp
   147  	return meta
   148  }
   149  
   150  func (meta *MetaData) WithTTL(ttl uint32) *MetaData {
   151  	meta.TTL = ttl
   152  	return meta
   153  }
   154  
   155  func (meta *MetaData) WithFlag(flag uint16) *MetaData {
   156  	meta.Flag = flag
   157  	return meta
   158  }
   159  
   160  func (meta *MetaData) WithBucketSize(bucketSize uint32) *MetaData {
   161  	meta.BucketSize = bucketSize
   162  	return meta
   163  }
   164  
   165  func (meta *MetaData) WithTxID(txID uint64) *MetaData {
   166  	meta.TxID = txID
   167  	return meta
   168  }
   169  
   170  func (meta *MetaData) WithStatus(status uint16) *MetaData {
   171  	meta.Status = status
   172  	return meta
   173  }
   174  
   175  func (meta *MetaData) WithDs(ds uint16) *MetaData {
   176  	meta.Ds = ds
   177  	return meta
   178  }
   179  
   180  func (meta *MetaData) WithCrc(crc uint32) *MetaData {
   181  	meta.Crc = crc
   182  	return meta
   183  }
   184  
   185  func (meta *MetaData) WithBucketId(bucketID uint64) *MetaData {
   186  	meta.BucketId = bucketID
   187  	return meta
   188  }
   189  
   190  func (meta *MetaData) IsBPlusTree() bool {
   191  	return meta.Ds == DataStructureBTree
   192  }
   193  
   194  func (meta *MetaData) IsSet() bool {
   195  	return meta.Ds == DataStructureSet
   196  }
   197  
   198  func (meta *MetaData) IsSortSet() bool {
   199  	return meta.Ds == DataStructureSortedSet
   200  }
   201  
   202  func (meta *MetaData) IsList() bool {
   203  	return meta.Ds == DataStructureList
   204  }