Skip to content

Commit a6b1c2a

Browse files
authored
Merge pull request #586 from v3io/development
dev
2 parents 06af687 + 7301ae1 commit a6b1c2a

File tree

5 files changed

+102
-6
lines changed

5 files changed

+102
-6
lines changed

backends/kv/writer.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ type Appender struct {
5252

5353
const (
5454
errorCodeString = "ErrorCode"
55-
falseConditionOuterErrorCode = "16777244"
56-
falseConditionInnerErrorCode = "16777245"
55+
falseConditionErrorCode = "16777244"
5756
createNewItemOnlyExistingItemErrorCode = "369098809"
5857

5958
maximumAttributeNameLength = 256
@@ -571,9 +570,8 @@ func (a *Appender) updateItemWorker(doneChan chan<- struct{}) {
571570
func isFalseConditionError(err error) bool {
572571
errString := err.Error()
573572

574-
if strings.Count(errString, errorCodeString) == 2 &&
575-
strings.Contains(errString, falseConditionOuterErrorCode) &&
576-
strings.Contains(errString, falseConditionInnerErrorCode) {
573+
if strings.Count(errString, errorCodeString) == 1 &&
574+
strings.Contains(errString, falseConditionErrorCode) {
577575
return true
578576
}
579577

grpc/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ func (c *Client) Write(request *frames.WriteRequest) (frames.FrameAppender, erro
125125
More: request.HaveMore,
126126
SaveMode: request.SaveMode.String(),
127127
PartitionKeys: request.PartitionKeys,
128+
Condition: request.Condition,
128129
}
129130

130131
req := &pb.WriteRequest{

http/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ func pbWriteReq(req *frames.WriteRequest) (*pb.InitialWriteRequest, error) {
437437
More: req.HaveMore,
438438
SaveMode: req.SaveMode.String(),
439439
PartitionKeys: req.PartitionKeys,
440+
Condition: req.Condition,
440441
}
441442

442443
return msg, nil

test/kv_integration_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

test/kv_save_mode_integration_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func (kvSuite *KvTestSuite) TestSaveModeOverwriteTableExists() {
8181
err = appender.Add(frame2)
8282
kvSuite.Require().NoError(err, "failed to write frame")
8383

84-
err = appender.WaitForComplete(time.Second)
84+
err = appender.WaitForComplete(2 * time.Second)
8585
kvSuite.Require().NoError(err)
8686

8787
rreq := &pb.ReadRequest{

0 commit comments

Comments
 (0)