Skip to content

Commit 266918c

Browse files
committed
getRedisToYangKeys() needs to return an error object
1 parent d8fff76 commit 266918c

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

cvl/cvl.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,9 @@ func getRedisTblToYangList(tableName, key string) (yangList string) {
800800

801801
// Convert Redis key to Yang keys, if multiple key components are there,
802802
// they are separated based on Yang schema
803-
func getRedisToYangKeys(tableName string, redisKey string) []keyValuePairStruct {
803+
func getRedisToYangKeys(tableName string, redisKey string) ([]keyValuePairStruct, CVLErrorInfo) {
804+
var cvlErrObj CVLErrorInfo
805+
804806
keyNames := modelInfo.tableInfo[tableName].keys
805807
//First split all the keys components
806808
keyVals := strings.Split(redisKey, modelInfo.tableInfo[tableName].redisKeyDelim) //split by DB separator
@@ -809,7 +811,16 @@ func getRedisToYangKeys(tableName string, redisKey string) []keyValuePairStruct
809811
modelInfo.tableInfo[tableName].redisKeyDelim) //split by DB separator
810812

811813
if len(keyNames) != len(keyVals) {
812-
return nil //number key names and values does not match
814+
cvlErrObj.ErrCode = CVL_SEMANTIC_KEY_INVALID
815+
cvlErrObj.TableName = tableName
816+
cvlErrObj.Keys = keyNames
817+
if len(keyNames) < len(keyVals) {
818+
cvlErrObj.Msg = "Too many keys specified."
819+
} else {
820+
cvlErrObj.Msg = "Missing Key \"" + keyNames[len(keyVals)] + "\"."
821+
cvlErrObj.Field = keyNames[len(keyVals)]
822+
}
823+
return nil, cvlErrObj //number key names and values does not match
813824
}
814825

815826
mkeys := []keyValuePairStruct{}
@@ -829,7 +840,7 @@ func getRedisToYangKeys(tableName string, redisKey string) []keyValuePairStruct
829840
TRACE_LOG(TRACE_SYNTAX, "getRedisToYangKeys() returns %v "+
830841
"from Redis Table '%s', Key '%s'", mkeys, tableName, redisKey)
831842

832-
return mkeys
843+
return mkeys, cvlErrObj
833844
}
834845

835846
// Checks field map values and removes "NULL" entry, create array for leaf-list

cvl/cvl_semantics.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,10 @@ func (c *CVL) generateYangListData(jsonNode *jsonquery.Node,
281281
listConatinerNode = c.addYangNode(origTableName, topNode, origTableName, "")
282282
topNodesAdded = true
283283
}
284-
keyValuePair := getRedisToYangKeys(tableName, redisKey)
284+
keyValuePair, cvlErrObj := getRedisToYangKeys(tableName, redisKey)
285+
if cvlErrObj.ErrCode != CVL_SUCCESS {
286+
return nil, cvlErrObj
287+
}
285288
keyCompCount := len(keyValuePair)
286289
totalKeyComb := 1
287290
var keyIndices []int
@@ -1527,8 +1530,8 @@ func (c *CVL) checkDepDataCompatible(tblName, key, reftblName, refTblKey, leafRe
15271530
}
15281531

15291532
// Fetch key value pair for both current table and ref table
1530-
tblKeysKVP := getRedisToYangKeys(tblName, key)
1531-
refTblKeysKVP := getRedisToYangKeys(reftblName, refTblKey)
1533+
tblKeysKVP, _ := getRedisToYangKeys(tblName, key)
1534+
refTblKeysKVP, _ := getRedisToYangKeys(reftblName, refTblKey)
15321535

15331536
// Determine the leafref
15341537
leafRef := getLeafRefInfo(reftblName, leafRefField, tblName)

cvl/cvl_syntax.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,10 @@ func (c *CVL) generateTableData(config bool, jsonNode *jsonquery.Node) (*yparser
225225
}
226226
topNodesAdded = true
227227
}
228-
keyValuePair := getRedisToYangKeys(tableName, jsonNode.Data)
228+
keyValuePair, cvlErrObj := getRedisToYangKeys(tableName, jsonNode.Data)
229+
if cvlErrObj.ErrCode != CVL_SUCCESS {
230+
return nil, cvlErrObj
231+
}
229232
keyCompCount := len(keyValuePair)
230233
totalKeyComb := 1
231234
var keyIndices []int

0 commit comments

Comments
 (0)