151 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package ledis
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
)
 | 
						|
 | 
						|
// Version is for version
 | 
						|
const Version = "0.5"
 | 
						|
 | 
						|
// DataType is defined for the different types
 | 
						|
type DataType byte
 | 
						|
 | 
						|
// for out use
 | 
						|
const (
 | 
						|
	KV DataType = iota
 | 
						|
	LIST
 | 
						|
	HASH
 | 
						|
	SET
 | 
						|
	ZSET
 | 
						|
)
 | 
						|
 | 
						|
func (d DataType) String() string {
 | 
						|
	switch d {
 | 
						|
	case KV:
 | 
						|
		return KVName
 | 
						|
	case LIST:
 | 
						|
		return ListName
 | 
						|
	case HASH:
 | 
						|
		return HashName
 | 
						|
	case SET:
 | 
						|
		return SetName
 | 
						|
	case ZSET:
 | 
						|
		return ZSetName
 | 
						|
	default:
 | 
						|
		return "unknown"
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// For different type name
 | 
						|
const (
 | 
						|
	KVName   = "KV"
 | 
						|
	ListName = "LIST"
 | 
						|
	HashName = "HASH"
 | 
						|
	SetName  = "SET"
 | 
						|
	ZSetName = "ZSET"
 | 
						|
)
 | 
						|
 | 
						|
// for backend store
 | 
						|
const (
 | 
						|
	NoneType   byte = 0
 | 
						|
	KVType     byte = 1
 | 
						|
	HashType   byte = 2
 | 
						|
	HSizeType  byte = 3
 | 
						|
	ListType   byte = 4
 | 
						|
	LMetaType  byte = 5
 | 
						|
	ZSetType   byte = 6
 | 
						|
	ZSizeType  byte = 7
 | 
						|
	ZScoreType byte = 8
 | 
						|
	// BitType     byte = 9
 | 
						|
	// BitMetaType byte = 10
 | 
						|
	SetType   byte = 11
 | 
						|
	SSizeType byte = 12
 | 
						|
 | 
						|
	maxDataType byte = 100
 | 
						|
 | 
						|
	/*
 | 
						|
		I make a big mistake about TTL time key format and have to use a new one (change 101 to 103).
 | 
						|
		You must run the ledis-upgrade-ttl to upgrade db.
 | 
						|
	*/
 | 
						|
	ObsoleteExpTimeType byte = 101
 | 
						|
	ExpMetaType         byte = 102
 | 
						|
	ExpTimeType         byte = 103
 | 
						|
 | 
						|
	MetaType byte = 201
 | 
						|
)
 | 
						|
 | 
						|
// TypeName is the map of type -> name
 | 
						|
var TypeName = map[byte]string{
 | 
						|
	KVType:     "kv",
 | 
						|
	HashType:   "hash",
 | 
						|
	HSizeType:  "hsize",
 | 
						|
	ListType:   "list",
 | 
						|
	LMetaType:  "lmeta",
 | 
						|
	ZSetType:   "zset",
 | 
						|
	ZSizeType:  "zsize",
 | 
						|
	ZScoreType: "zscore",
 | 
						|
	// BitType:     "bit",
 | 
						|
	// BitMetaType: "bitmeta",
 | 
						|
	SetType:     "set",
 | 
						|
	SSizeType:   "ssize",
 | 
						|
	ExpTimeType: "exptime",
 | 
						|
	ExpMetaType: "expmeta",
 | 
						|
}
 | 
						|
 | 
						|
const (
 | 
						|
	defaultScanCount int = 10
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	errKeySize        = errors.New("invalid key size")
 | 
						|
	errValueSize      = errors.New("invalid value size")
 | 
						|
	errHashFieldSize  = errors.New("invalid hash field size")
 | 
						|
	errSetMemberSize  = errors.New("invalid set member size")
 | 
						|
	errZSetMemberSize = errors.New("invalid zset member size")
 | 
						|
	errExpireValue    = errors.New("invalid expire value")
 | 
						|
	errListIndex      = errors.New("invalid list index")
 | 
						|
)
 | 
						|
 | 
						|
// For different const size configuration
 | 
						|
const (
 | 
						|
	// max allowed databases
 | 
						|
	MaxDatabases int = 10240
 | 
						|
 | 
						|
	// max key size
 | 
						|
	MaxKeySize int = 1024
 | 
						|
 | 
						|
	// max hash field size
 | 
						|
	MaxHashFieldSize int = 1024
 | 
						|
 | 
						|
	// max zset member size
 | 
						|
	MaxZSetMemberSize int = 1024
 | 
						|
 | 
						|
	// max set member size
 | 
						|
	MaxSetMemberSize int = 1024
 | 
						|
 | 
						|
	// max value size
 | 
						|
	MaxValueSize int = 1024 * 1024 * 1024
 | 
						|
)
 | 
						|
 | 
						|
// For different common errors
 | 
						|
var (
 | 
						|
	ErrScoreMiss     = errors.New("zset score miss")
 | 
						|
	ErrWriteInROnly  = errors.New("write not support in readonly mode")
 | 
						|
	ErrRplInRDWR     = errors.New("replication not support in read write mode")
 | 
						|
	ErrRplNotSupport = errors.New("replication not support")
 | 
						|
)
 | 
						|
 | 
						|
// const (
 | 
						|
// 	DBAutoCommit    uint8 = 0x0
 | 
						|
// 	DBInTransaction uint8 = 0x1
 | 
						|
// 	DBInMulti       uint8 = 0x2
 | 
						|
// )
 | 
						|
 | 
						|
// For bit operation
 | 
						|
const (
 | 
						|
	BitAND = "and"
 | 
						|
	BitOR  = "or"
 | 
						|
	BitXOR = "xor"
 | 
						|
	BitNot = "not"
 | 
						|
)
 |