@@ -1125,3 +1125,99 @@ func (kvSuite *KvTestSuite) TestWritePartitionedTableWithNullValues() {
11251125 kvSuite .Require ().NoError (err , "item %v was not found" , subPath )
11261126 }
11271127}
1128+
1129+ func (kvSuite * KvTestSuite ) TestUpdateExpressionWithCondition () {
1130+ table := fmt .Sprintf ("kv_test_update_with_condition_%d" , time .Now ().UnixNano ())
1131+
1132+ index := []string {"mike" , "joe" , "jim" , "nil" }
1133+ icol , err := frames .NewSliceColumn ("idx" , index )
1134+ kvSuite .Require ().NoError (err )
1135+
1136+ //boolCol
1137+ bools := []bool {true , true , false , false }
1138+ boolCol , err := frames .NewSliceColumn ("bools" , bools )
1139+ if err != nil {
1140+ kvSuite .Require ().NoError (err )
1141+ }
1142+
1143+ numbers := []int {1 , 1 , 1 , 1 }
1144+ numbersCol , err := frames .NewSliceColumn ("nums" , numbers )
1145+ if err != nil {
1146+ kvSuite .Require ().NoError (err )
1147+ }
1148+
1149+ columns := []frames.Column {numbersCol , boolCol }
1150+
1151+ frame , err := frames .NewFrame (columns , []frames.Column {icol }, nil )
1152+ kvSuite .Require ().NoError (err )
1153+
1154+ kvSuite .T ().Log ("write: prepare" )
1155+ wreq := & frames.WriteRequest {
1156+ Backend : kvSuite .backendName ,
1157+ Table : table ,
1158+ }
1159+
1160+ appender , err := kvSuite .client .Write (wreq )
1161+ kvSuite .Require ().NoError (err )
1162+
1163+ err = appender .Add (frame )
1164+ kvSuite .Require ().NoError (err )
1165+
1166+ err = appender .WaitForComplete (3 * time .Second )
1167+ kvSuite .Require ().NoError (err )
1168+
1169+ // Second Phase: Update existing rows with condition
1170+ kvSuite .T ().Log ("write: update with condition" )
1171+ wreq = & frames.WriteRequest {
1172+ Backend : kvSuite .backendName ,
1173+ Table : table ,
1174+ SaveMode : frames .UpdateItem ,
1175+ Condition : "bools==True" ,
1176+ }
1177+
1178+ appender , err = kvSuite .client .Write (wreq )
1179+ kvSuite .Require ().NoError (err )
1180+
1181+ newNumbers := []int {9 , 9 , 9 , 9 }
1182+ newNumbersCol , err := frames .NewSliceColumn ("nums" , newNumbers )
1183+ if err != nil {
1184+ kvSuite .Require ().NoError (err )
1185+ }
1186+
1187+ newColumns := []frames.Column {newNumbersCol }
1188+
1189+ frame , err = frames .NewFrame (newColumns , []frames.Column {icol }, nil )
1190+ kvSuite .Require ().NoError (err )
1191+
1192+ err = appender .Add (frame )
1193+ kvSuite .Require ().NoError (err )
1194+
1195+ err = appender .WaitForComplete (3 * time .Second )
1196+ kvSuite .Require ().NoError (err )
1197+
1198+ input := v3io.GetItemsInput {AttributeNames : []string {"__name" , "nums" , "bools" }}
1199+
1200+ iter , err := v3ioutils .NewAsyncItemsCursor (
1201+ kvSuite .v3ioContainer , & input , 1 ,
1202+ nil , kvSuite .internalLogger ,
1203+ 0 , []string {table + "/" },
1204+ "" , "" )
1205+
1206+ for iter .Next () {
1207+ currentRow := iter .GetItem ()
1208+ key , _ := currentRow .GetFieldString ("__name" )
1209+ if key == ".#schema" {
1210+ continue
1211+ }
1212+ num , _ := currentRow .GetFieldInt ("nums" )
1213+ b := currentRow .GetField ("bools" ).(bool )
1214+
1215+ if b {
1216+ kvSuite .Require ().Equal (9 , num )
1217+ } else {
1218+ kvSuite .Require ().Equal (1 , num )
1219+ }
1220+ }
1221+
1222+ kvSuite .Require ().NoError (iter .Err ())
1223+ }
0 commit comments