1package ledis
2
3import (
4	"errors"
5)
6
7// Version is for version
8const Version = "0.5"
9
10// DataType is defined for the different types
11type DataType byte
12
13// for out use
14const (
15	KV DataType = iota
16	LIST
17	HASH
18	SET
19	ZSET
20)
21
22func (d DataType) String() string {
23	switch d {
24	case KV:
25		return KVName
26	case LIST:
27		return ListName
28	case HASH:
29		return HashName
30	case SET:
31		return SetName
32	case ZSET:
33		return ZSetName
34	default:
35		return "unknown"
36	}
37}
38
39// For different type name
40const (
41	KVName   = "KV"
42	ListName = "LIST"
43	HashName = "HASH"
44	SetName  = "SET"
45	ZSetName = "ZSET"
46)
47
48// for backend store
49const (
50	NoneType   byte = 0
51	KVType     byte = 1
52	HashType   byte = 2
53	HSizeType  byte = 3
54	ListType   byte = 4
55	LMetaType  byte = 5
56	ZSetType   byte = 6
57	ZSizeType  byte = 7
58	ZScoreType byte = 8
59	// BitType     byte = 9
60	// BitMetaType byte = 10
61	SetType   byte = 11
62	SSizeType byte = 12
63
64	maxDataType byte = 100
65
66	/*
67		I make a big mistake about TTL time key format and have to use a new one (change 101 to 103).
68		You must run the ledis-upgrade-ttl to upgrade db.
69	*/
70	ObsoleteExpTimeType byte = 101
71	ExpMetaType         byte = 102
72	ExpTimeType         byte = 103
73
74	MetaType byte = 201
75)
76
77// TypeName is the map of type -> name
78var TypeName = map[byte]string{
79	KVType:     "kv",
80	HashType:   "hash",
81	HSizeType:  "hsize",
82	ListType:   "list",
83	LMetaType:  "lmeta",
84	ZSetType:   "zset",
85	ZSizeType:  "zsize",
86	ZScoreType: "zscore",
87	// BitType:     "bit",
88	// BitMetaType: "bitmeta",
89	SetType:     "set",
90	SSizeType:   "ssize",
91	ExpTimeType: "exptime",
92	ExpMetaType: "expmeta",
93}
94
95const (
96	defaultScanCount int = 10
97)
98
99var (
100	errKeySize        = errors.New("invalid key size")
101	errValueSize      = errors.New("invalid value size")
102	errHashFieldSize  = errors.New("invalid hash field size")
103	errSetMemberSize  = errors.New("invalid set member size")
104	errZSetMemberSize = errors.New("invalid zset member size")
105	errExpireValue    = errors.New("invalid expire value")
106	errListIndex      = errors.New("invalid list index")
107)
108
109// For different const size configuration
110const (
111	// max allowed databases
112	MaxDatabases int = 10240
113
114	// max key size
115	MaxKeySize int = 1024
116
117	// max hash field size
118	MaxHashFieldSize int = 1024
119
120	// max zset member size
121	MaxZSetMemberSize int = 1024
122
123	// max set member size
124	MaxSetMemberSize int = 1024
125
126	// max value size
127	MaxValueSize int = 1024 * 1024 * 1024
128)
129
130// For different common errors
131var (
132	ErrScoreMiss     = errors.New("zset score miss")
133	ErrWriteInROnly  = errors.New("write not support in readonly mode")
134	ErrRplInRDWR     = errors.New("replication not support in read write mode")
135	ErrRplNotSupport = errors.New("replication not support")
136)
137
138// const (
139// 	DBAutoCommit    uint8 = 0x0
140// 	DBInTransaction uint8 = 0x1
141// 	DBInMulti       uint8 = 0x2
142// )
143
144// For bit operation
145const (
146	BitAND = "and"
147	BitOR  = "or"
148	BitXOR = "xor"
149	BitNot = "not"
150)
151