Skip to content

Commit eedb3ed

Browse files
committed
updated batch aggregator, fixed extractcommandvalue
1 parent 14bd6e1 commit eedb3ed

File tree

3 files changed

+386
-48
lines changed

3 files changed

+386
-48
lines changed

command.go

Lines changed: 251 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,33 @@ const (
9797
CmdTypeTSTimestampValueSlice
9898
)
9999

100+
type (
101+
CmdTypeXAutoClaimValue struct {
102+
messages []XMessage
103+
start string
104+
}
105+
106+
CmdTypeXAutoClaimJustIDValue struct {
107+
ids []string
108+
start string
109+
}
110+
111+
CmdTypeScanValue struct {
112+
keys []string
113+
cursor uint64
114+
}
115+
116+
CmdTypeKeyValuesValue struct {
117+
key string
118+
values []string
119+
}
120+
121+
CmdTypeZSliceWithKeyValue struct {
122+
key string
123+
zSlice []Z
124+
}
125+
)
126+
100127
type Cmder interface {
101128
// command name.
102129
// e.g. "set k v ex 10" -> "set", "cluster info" -> "cluster".
@@ -6846,6 +6873,10 @@ func ExtractCommandValue(cmd interface{}) interface{} {
68466873

68476874
// Use fast type-based extraction
68486875
switch cmdType {
6876+
case CmdTypeGeneric:
6877+
if genericCmd, ok := cmd.(interface{ Val() interface{} }); ok {
6878+
return genericCmd.Val()
6879+
}
68496880
case CmdTypeString:
68506881
if stringCmd, ok := cmd.(interface{ Val() string }); ok {
68516882
return stringCmd.Val()
@@ -6866,21 +6897,217 @@ func ExtractCommandValue(cmd interface{}) interface{} {
68666897
if statusCmd, ok := cmd.(interface{ Val() string }); ok {
68676898
return statusCmd.Val()
68686899
}
6869-
case CmdTypeDuration, CmdTypeTime, CmdTypeStringStructMap, CmdTypeXMessageSlice,
6870-
CmdTypeXStreamSlice, CmdTypeXPending, CmdTypeXPendingExt, CmdTypeXAutoClaim,
6871-
CmdTypeXAutoClaimJustID, CmdTypeXInfoConsumers, CmdTypeXInfoGroups, CmdTypeXInfoStream,
6872-
CmdTypeXInfoStreamFull, CmdTypeZSlice, CmdTypeZWithKey, CmdTypeScan, CmdTypeClusterSlots,
6873-
CmdTypeGeoSearchLocation, CmdTypeGeoPos, CmdTypeCommandsInfo, CmdTypeSlowLog,
6874-
CmdTypeKeyValues, CmdTypeZSliceWithKey, CmdTypeFunctionList, CmdTypeFunctionStats,
6875-
CmdTypeLCS, CmdTypeKeyFlags, CmdTypeClusterLinks, CmdTypeClusterShards,
6876-
CmdTypeRankWithScore, CmdTypeClientInfo, CmdTypeACLLog, CmdTypeInfo, CmdTypeMonitor,
6877-
CmdTypeJSON, CmdTypeJSONSlice, CmdTypeIntPointerSlice, CmdTypeScanDump, CmdTypeBFInfo,
6878-
CmdTypeCFInfo, CmdTypeCMSInfo, CmdTypeTopKInfo, CmdTypeTDigestInfo, CmdTypeFTSearch,
6879-
CmdTypeFTInfo, CmdTypeFTSpellCheck, CmdTypeFTSynDump, CmdTypeAggregate,
6880-
CmdTypeTSTimestampValue, CmdTypeTSTimestampValueSlice:
6881-
if durationCmd, ok := cmd.(interface{ Val() interface{} }); ok {
6900+
case CmdTypeDuration:
6901+
if durationCmd, ok := cmd.(interface{ Val() time.Duration }); ok {
68826902
return durationCmd.Val()
68836903
}
6904+
case CmdTypeTime:
6905+
if timeCmd, ok := cmd.(interface{ Val() time.Time }); ok {
6906+
return timeCmd.Val()
6907+
}
6908+
case CmdTypeStringStructMap:
6909+
if structMapCmd, ok := cmd.(interface{ Val() map[string]struct{} }); ok {
6910+
return structMapCmd.Val()
6911+
}
6912+
case CmdTypeXMessageSlice:
6913+
if xMessageSliceCmd, ok := cmd.(interface{ Val() []XMessage }); ok {
6914+
return xMessageSliceCmd.Val()
6915+
}
6916+
case CmdTypeXStreamSlice:
6917+
if xStreamSliceCmd, ok := cmd.(interface{ Val() []XStream }); ok {
6918+
return xStreamSliceCmd.Val()
6919+
}
6920+
case CmdTypeXPending:
6921+
if xPendingCmd, ok := cmd.(interface{ Val() *XPending }); ok {
6922+
return xPendingCmd.Val()
6923+
}
6924+
case CmdTypeXPendingExt:
6925+
if xPendingExtCmd, ok := cmd.(interface{ Val() []XPendingExt }); ok {
6926+
return xPendingExtCmd.Val()
6927+
}
6928+
case CmdTypeXAutoClaim:
6929+
if xAutoClaimCmd, ok := cmd.(interface{ Val() ([]XMessage, string) }); ok {
6930+
messages, start := xAutoClaimCmd.Val()
6931+
return CmdTypeXAutoClaimValue{messages: messages, start: start}
6932+
}
6933+
case CmdTypeXAutoClaimJustID:
6934+
if xAutoClaimJustIDCmd, ok := cmd.(interface{ Val() ([]string, string) }); ok {
6935+
ids, start := xAutoClaimJustIDCmd.Val()
6936+
return CmdTypeXAutoClaimJustIDValue{ids: ids, start: start}
6937+
}
6938+
case CmdTypeXInfoConsumers:
6939+
if xInfoConsumersCmd, ok := cmd.(interface{ Val() []XInfoConsumer }); ok {
6940+
return xInfoConsumersCmd.Val()
6941+
}
6942+
case CmdTypeXInfoGroups:
6943+
if xInfoGroupsCmd, ok := cmd.(interface{ Val() []XInfoGroup }); ok {
6944+
return xInfoGroupsCmd.Val()
6945+
}
6946+
case CmdTypeXInfoStream:
6947+
if xInfoStreamCmd, ok := cmd.(interface{ Val() *XInfoStream }); ok {
6948+
return xInfoStreamCmd.Val()
6949+
}
6950+
case CmdTypeXInfoStreamFull:
6951+
if xInfoStreamFullCmd, ok := cmd.(interface{ Val() *XInfoStreamFull }); ok {
6952+
return xInfoStreamFullCmd.Val()
6953+
}
6954+
case CmdTypeZSlice:
6955+
if zSliceCmd, ok := cmd.(interface{ Val() []Z }); ok {
6956+
return zSliceCmd.Val()
6957+
}
6958+
case CmdTypeZWithKey:
6959+
if zWithKeyCmd, ok := cmd.(interface{ Val() *ZWithKey }); ok {
6960+
return zWithKeyCmd.Val()
6961+
}
6962+
case CmdTypeScan:
6963+
if scanCmd, ok := cmd.(interface{ Val() ([]string, uint64) }); ok {
6964+
keys, cursor := scanCmd.Val()
6965+
return CmdTypeScanValue{keys: keys, cursor: cursor}
6966+
}
6967+
case CmdTypeClusterSlots:
6968+
if clusterSlotsCmd, ok := cmd.(interface{ Val() []ClusterSlot }); ok {
6969+
return clusterSlotsCmd.Val()
6970+
}
6971+
case CmdTypeGeoLocation:
6972+
if geoLocationCmd, ok := cmd.(interface{ Val() []GeoLocation }); ok {
6973+
return geoLocationCmd.Val()
6974+
}
6975+
case CmdTypeGeoSearchLocation:
6976+
if geoSearchLocationCmd, ok := cmd.(interface{ Val() []GeoLocation }); ok {
6977+
return geoSearchLocationCmd.Val()
6978+
}
6979+
case CmdTypeGeoPos:
6980+
if geoPosCmd, ok := cmd.(interface{ Val() []*GeoPos }); ok {
6981+
return geoPosCmd.Val()
6982+
}
6983+
case CmdTypeCommandsInfo:
6984+
if commandsInfoCmd, ok := cmd.(interface {
6985+
Val() map[string]*CommandInfo
6986+
}); ok {
6987+
return commandsInfoCmd.Val()
6988+
}
6989+
case CmdTypeSlowLog:
6990+
if slowLogCmd, ok := cmd.(interface{ Val() []SlowLog }); ok {
6991+
return slowLogCmd.Val()
6992+
}
6993+
case CmdTypeKeyValues:
6994+
if keyValuesCmd, ok := cmd.(interface{ Val() (string, []string) }); ok {
6995+
key, values := keyValuesCmd.Val()
6996+
return CmdTypeKeyValuesValue{key: key, values: values}
6997+
}
6998+
case CmdTypeZSliceWithKey:
6999+
if zSliceWithKeyCmd, ok := cmd.(interface{ Val() (string, []Z) }); ok {
7000+
key, zSlice := zSliceWithKeyCmd.Val()
7001+
return CmdTypeZSliceWithKeyValue{key: key, zSlice: zSlice}
7002+
}
7003+
case CmdTypeFunctionList:
7004+
if functionListCmd, ok := cmd.(interface{ Val() []Library }); ok {
7005+
return functionListCmd.Val()
7006+
}
7007+
case CmdTypeFunctionStats:
7008+
if functionStatsCmd, ok := cmd.(interface{ Val() FunctionStats }); ok {
7009+
return functionStatsCmd.Val()
7010+
}
7011+
case CmdTypeLCS:
7012+
if lcsCmd, ok := cmd.(interface{ Val() *LCSMatch }); ok {
7013+
return lcsCmd.Val()
7014+
}
7015+
case CmdTypeKeyFlags:
7016+
if keyFlagsCmd, ok := cmd.(interface{ Val() []KeyFlags }); ok {
7017+
return keyFlagsCmd.Val()
7018+
}
7019+
case CmdTypeClusterLinks:
7020+
if clusterLinksCmd, ok := cmd.(interface{ Val() []ClusterLink }); ok {
7021+
return clusterLinksCmd.Val()
7022+
}
7023+
case CmdTypeClusterShards:
7024+
if clusterShardsCmd, ok := cmd.(interface{ Val() []ClusterShard }); ok {
7025+
return clusterShardsCmd.Val()
7026+
}
7027+
case CmdTypeRankWithScore:
7028+
if rankWithScoreCmd, ok := cmd.(interface{ Val() RankScore }); ok {
7029+
return rankWithScoreCmd.Val()
7030+
}
7031+
case CmdTypeClientInfo:
7032+
if clientInfoCmd, ok := cmd.(interface{ Val() *ClientInfo }); ok {
7033+
return clientInfoCmd.Val()
7034+
}
7035+
case CmdTypeACLLog:
7036+
if aclLogCmd, ok := cmd.(interface{ Val() []*ACLLogEntry }); ok {
7037+
return aclLogCmd.Val()
7038+
}
7039+
case CmdTypeInfo:
7040+
if infoCmd, ok := cmd.(interface{ Val() string }); ok {
7041+
return infoCmd.Val()
7042+
}
7043+
case CmdTypeMonitor:
7044+
if monitorCmd, ok := cmd.(interface{ Val() string }); ok {
7045+
return monitorCmd.Val()
7046+
}
7047+
case CmdTypeJSON:
7048+
if jsonCmd, ok := cmd.(interface{ Val() string }); ok {
7049+
return jsonCmd.Val()
7050+
}
7051+
case CmdTypeJSONSlice:
7052+
if jsonSliceCmd, ok := cmd.(interface{ Val() []interface{} }); ok {
7053+
return jsonSliceCmd.Val()
7054+
}
7055+
case CmdTypeIntPointerSlice:
7056+
if intPointerSliceCmd, ok := cmd.(interface{ Val() []*int64 }); ok {
7057+
return intPointerSliceCmd.Val()
7058+
}
7059+
case CmdTypeScanDump:
7060+
if scanDumpCmd, ok := cmd.(interface{ Val() ScanDump }); ok {
7061+
return scanDumpCmd.Val()
7062+
}
7063+
case CmdTypeBFInfo:
7064+
if bfInfoCmd, ok := cmd.(interface{ Val() BFInfo }); ok {
7065+
return bfInfoCmd.Val()
7066+
}
7067+
case CmdTypeCFInfo:
7068+
if cfInfoCmd, ok := cmd.(interface{ Val() CFInfo }); ok {
7069+
return cfInfoCmd.Val()
7070+
}
7071+
case CmdTypeCMSInfo:
7072+
if cmsInfoCmd, ok := cmd.(interface{ Val() CMSInfo }); ok {
7073+
return cmsInfoCmd.Val()
7074+
}
7075+
case CmdTypeTopKInfo:
7076+
if topKInfoCmd, ok := cmd.(interface{ Val() TopKInfo }); ok {
7077+
return topKInfoCmd.Val()
7078+
}
7079+
case CmdTypeTDigestInfo:
7080+
if tDigestInfoCmd, ok := cmd.(interface{ Val() TDigestInfo }); ok {
7081+
return tDigestInfoCmd.Val()
7082+
}
7083+
case CmdTypeFTSearch:
7084+
if ftSearchCmd, ok := cmd.(interface{ Val() FTSearchResult }); ok {
7085+
return ftSearchCmd.Val()
7086+
}
7087+
case CmdTypeFTInfo:
7088+
if ftInfoCmd, ok := cmd.(interface{ Val() FTInfoResult }); ok {
7089+
return ftInfoCmd.Val()
7090+
}
7091+
case CmdTypeFTSpellCheck:
7092+
if ftSpellCheckCmd, ok := cmd.(interface{ Val() []SpellCheckResult }); ok {
7093+
return ftSpellCheckCmd.Val()
7094+
}
7095+
case CmdTypeFTSynDump:
7096+
if ftSynDumpCmd, ok := cmd.(interface{ Val() []FTSynDumpResult }); ok {
7097+
return ftSynDumpCmd.Val()
7098+
}
7099+
case CmdTypeAggregate:
7100+
if aggregateCmd, ok := cmd.(interface{ Val() *FTAggregateResult }); ok {
7101+
return aggregateCmd.Val()
7102+
}
7103+
case CmdTypeTSTimestampValue:
7104+
if tsTimestampValueCmd, ok := cmd.(interface{ Val() TSTimestampValue }); ok {
7105+
return tsTimestampValueCmd.Val()
7106+
}
7107+
case CmdTypeTSTimestampValueSlice:
7108+
if tsTimestampValueSliceCmd, ok := cmd.(interface{ Val() []TSTimestampValue }); ok {
7109+
return tsTimestampValueSliceCmd.Val()
7110+
}
68847111
case CmdTypeStringSlice:
68857112
if stringSliceCmd, ok := cmd.(interface{ Val() []string }); ok {
68867113
return stringSliceCmd.Val()
@@ -6897,6 +7124,14 @@ func ExtractCommandValue(cmd interface{}) interface{} {
68977124
if floatSliceCmd, ok := cmd.(interface{ Val() []float64 }); ok {
68987125
return floatSliceCmd.Val()
68997126
}
7127+
case CmdTypeSlice:
7128+
if sliceCmd, ok := cmd.(interface{ Val() []interface{} }); ok {
7129+
return sliceCmd.Val()
7130+
}
7131+
case CmdTypeKeyValueSlice:
7132+
if keyValueSliceCmd, ok := cmd.(interface{ Val() []KeyValue }); ok {
7133+
return keyValueSliceCmd.Val()
7134+
}
69007135
case CmdTypeMapStringString:
69017136
if mapCmd, ok := cmd.(interface{ Val() map[string]string }); ok {
69027137
return mapCmd.Val()
@@ -6907,7 +7142,7 @@ func ExtractCommandValue(cmd interface{}) interface{} {
69077142
}
69087143
case CmdTypeMapStringInterfaceSlice:
69097144
if mapCmd, ok := cmd.(interface {
6910-
Val() map[string][]interface{}
7145+
Val() []map[string]interface{}
69117146
}); ok {
69127147
return mapCmd.Val()
69137148
}
@@ -6916,12 +7151,12 @@ func ExtractCommandValue(cmd interface{}) interface{} {
69167151
return mapCmd.Val()
69177152
}
69187153
case CmdTypeMapStringStringSlice:
6919-
if mapCmd, ok := cmd.(interface{ Val() map[string][]string }); ok {
7154+
if mapCmd, ok := cmd.(interface{ Val() []map[string]string }); ok {
69207155
return mapCmd.Val()
69217156
}
69227157
case CmdTypeMapMapStringInterface:
69237158
if mapCmd, ok := cmd.(interface {
6924-
Val() map[string][]interface{}
7159+
Val() map[string]interface{}
69257160
}); ok {
69267161
return mapCmd.Val()
69277162
}

0 commit comments

Comments
 (0)