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 }