@@ -60,13 +60,11 @@ internal class CollectRequestBody {
6060 ) -> [ String : Any ] ? {
6161 var tableMap : [ String : Int ] = [ : ]
6262 var payload : [ [ String : Any ] ] = [ ]
63- // var updateSkyflowIdMap: [String: Int] = [:]
6463 var updatePayload : [ String : Any ] = [ : ]
6564 self . callback = callback
6665 self . breakFlag = false
6766 self . tableSet = Set < String > ( )
6867 var index : Int = 0
69- // var updateIndex: Int = 0
7068 var inputPayload : [ [ String : Any ] ] = [ ]
7169
7270 if additionalFields != nil {
@@ -79,14 +77,16 @@ internal class CollectRequestBody {
7977 // add to update payload
8078 let skyflowID = entryDict [ " skyflowID " ] as! String
8179 if updatePayload [ skyflowID] != nil {
82- var temp = updatePayload [ skyflowID] as! [ String : Any ]
80+ let temp = updatePayload [ skyflowID] as! [ String : Any ]
8381 // merge existing fields with new field
8482 var existingFields = temp [ " fields " ] as! [ String : Any ]
8583 for (key, val) in fields {
84+ // CHECK IF KEY ALREADY PRESENTS
8685 existingFields [ key] = val
8786 }
88- temp [ " fields " ] = existingFields
89- updatePayload [ skyflowID] = temp
87+ var updatedTemp = temp
88+ updatedTemp [ " fields " ] = existingFields
89+ updatePayload [ skyflowID] = updatedTemp
9090 } else {
9191 var temp : [ String : Any ] = [
9292 " table " : tableName,
@@ -133,7 +133,23 @@ internal class CollectRequestBody {
133133 var temp = updatePayload [ skyflowID] as! [ String : Any ]
134134 // merge existing fields with new field
135135 var existingFields = temp [ " fields " ] as! [ String : Any ]
136- existingFields [ columnName] = value
136+ if existingFields [ columnName] != nil {
137+ var hasElementValueMatchRule : Bool = false
138+ for validation in element. userValidationRules. rules {
139+ if validation is ElementValueMatchRule {
140+ hasElementValueMatchRule = true
141+ break ;
142+ }
143+ }
144+ if ( !hasElementValueMatchRule)
145+ {
146+ self . callback? . onFailure ( ErrorCodes . DUPLICATE_ELEMENT_FOUND ( values: [ element. columnName, element. tableName!] ) . getErrorObject ( contextOptions: contextOptions) )
147+ return nil
148+ }
149+ continue ;
150+ } else {
151+ existingFields [ columnName] = value
152+ }
137153 temp [ " fields " ] = existingFields
138154 updatePayload [ skyflowID] = temp
139155 } else {
0 commit comments