public void TestEmptyUpdateRow() { var primaryKey = new PrimaryKey { { "PK0", new ColumnValue(0) } }; var updateOfAttribute = new UpdateOfAttribute(); var request = new UpdateRowRequest(TestTableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, updateOfAttribute); try { OTSClient.UpdateRow(request); Assert.Fail(); } catch (OTSServerException e) { AssertOTSServerException(e, new OTSServerException( "/UpdateRow", HttpStatusCode.BadRequest, "OTSParameterInvalid", "Attribute column is missing." )); } }
public bool UpdateRow(String tableName, Int64 pk, String colName, ColumnValue colValue, ColumnCondition cond) { bool success = true; var primaryKey = new PrimaryKey(); primaryKey.Add("PK0", new ColumnValue(pk)); Condition rowCond = new Condition(RowExistenceExpectation.IGNORE); rowCond.ColumnCondition = cond; UpdateOfAttribute updateOfAttributeForPut = new UpdateOfAttribute(); updateOfAttributeForPut.AddAttributeColumnToPut(colName, colValue); var request = new UpdateRowRequest(tableName, rowCond, primaryKey, updateOfAttributeForPut); try { OTSClient.UpdateRow(request); } catch (OTSServerException e) { Console.WriteLine("UpdateRow fail: {0}", e.ErrorMessage); success = false; } return(success); }
public void Test1000PutAnd1000DeleteInUpdateRow() { var pk = new PrimaryKey(); pk.Add("PK0", new ColumnValue("123")); pk.Add("PK1", new ColumnValue(123)); var updateOfAttribute = new UpdateOfAttribute(); for (int i = 0; i < 1000; i++) { updateOfAttribute.AddAttributeColumnToPut("Put" + i, new ColumnValue("blah")); updateOfAttribute.AddAttributeColumnToDelete("Delete" + i); } var request = new UpdateRowRequest( TestTableName, new Condition(RowExistenceExpectation.IGNORE), pk, updateOfAttribute); try { var response = OTSClient.UpdateRow(request); } catch (OTSServerException e) { AssertOTSServerException(e, new OTSServerException( "/UpdateRow", HttpStatusCode.BadRequest, "OTSParameterInvalid", "The number of columns from the request exceeded the limit." )); } }
public void TestDuplicateDeleteInUpdateRow() { var pk = new PrimaryKey(); pk.Add("PK0", new ColumnValue("123")); pk.Add("PK1", new ColumnValue(123)); var updateOfAttribute = new UpdateOfAttribute(); updateOfAttribute.AddAttributeColumnToDelete("Col0"); updateOfAttribute.AddAttributeColumnToDelete("Col0"); var request = new UpdateRowRequest( TestTableName, new Condition(RowExistenceExpectation.IGNORE), pk, updateOfAttribute); try { var response = OTSClient.UpdateRow(request); Assert.Fail(); } catch (OTSServerException e) { AssertOTSServerException(e, new OTSServerException( "/UpdateRow", HttpStatusCode.BadRequest, "OTSParameterInvalid", "Duplicated attribute column name: 'Col0' while updating row." )); } }
public void Test4PutAnd4DeleteInUpdateRow() { CreateTestTableWith2PK(); var pk = new PrimaryKey { { "PK0", new ColumnValue("123") }, { "PK1", new ColumnValue(123) } }; var attribute = new AttributeColumns { { "Col0", new ColumnValue("0") }, { "Col1", new ColumnValue("1") }, { "Col2", new ColumnValue("2") }, { "Col3", new ColumnValue("3") }, { "Col4", new ColumnValue("4") } }; PutSingleRow(TestTableName, pk, attribute); var updateOfAttribute = new UpdateOfAttribute(); updateOfAttribute.AddAttributeColumnToPut("Col3", new ColumnValue("5")); updateOfAttribute.AddAttributeColumnToPut("Col4", new ColumnValue("6")); updateOfAttribute.AddAttributeColumnToPut("Col5", new ColumnValue("7")); updateOfAttribute.AddAttributeColumnToPut("Col6", new ColumnValue("8")); updateOfAttribute.AddAttributeColumnToDelete("Col1"); updateOfAttribute.AddAttributeColumnToDelete("Col2"); updateOfAttribute.AddAttributeColumnToDelete("Col7"); updateOfAttribute.AddAttributeColumnToDelete("Col8"); var request = new UpdateRowRequest( TestTableName, new Condition(RowExistenceExpectation.IGNORE), pk, updateOfAttribute); var response = OTSClient.UpdateRow(request); AssertCapacityUnit(new CapacityUnit(0, 1), response.ConsumedCapacityUnit); var expectAttribute = new AttributeColumns { { "Col0", new ColumnValue("0") }, { "Col3", new ColumnValue("5") }, { "Col4", new ColumnValue("6") }, { "Col5", new ColumnValue("7") }, { "Col6", new ColumnValue("8") } }; CheckSingleRow(TestTableName, pk, expectAttribute); }
private void UpdateRow(OTSClient client, String tableName, IColumnCondition cond) { var primaryKey = new PrimaryKey { { COLUMN_GID_NAME, new ColumnValue(1) }, { COLUMN_UID_NAME, new ColumnValue(101) } }; UpdateOfAttribute updateOfAttributeForPut = new UpdateOfAttribute(); updateOfAttributeForPut.AddAttributeColumnToPut(COLUMN_NAME_NAME, new ColumnValue("张三")); updateOfAttributeForPut.AddAttributeColumnToPut(COLUMN_ADDRESS_NAME, new ColumnValue("中国B地")); updateOfAttributeForPut.AddAttributeColumnToDelete(COLUMN_MOBILE_NAME); updateOfAttributeForPut.AddAttributeColumnToDelete(COLUMN_AGE_NAME); Condition condition = new Condition(RowExistenceExpectation.IGNORE) { ColumnCondition = cond }; var request = new UpdateRowRequest(tableName, condition, primaryKey, updateOfAttributeForPut); try { client.UpdateRow(request); Console.WriteLine("UpdateRow success"); } catch (OTSServerException e) { //服务端异常 Console.WriteLine("操作失败:{0}", e.ErrorMessage); Console.WriteLine("请求ID:{0}", e.RequestID); } catch (OTSClientException e) { //可能是网络不好或者返回结果有问题 Console.WriteLine("请求失败:{0}", e.ErrorMessage); } }
private void Run() { for (int i = 0; i < round; ++i) { Console.WriteLine("Thread:" + i); var primaryKey = new PrimaryKey { { "PK0", new ColumnValue(pk) } }; var request = new GetRowRequest(tableName, primaryKey); var response = OTSClient.GetRow(request); var attr = response.Attribute["Col1"]; long oldIntValue = attr.IntegerValue; ColumnValue oldValue = new ColumnValue(oldIntValue); ColumnValue newValue = new ColumnValue(oldIntValue + 1); RelationalCondition cc = new RelationalCondition("Col1", CompareOperator.EQUAL, oldValue); Condition cond = new Condition(RowExistenceExpectation.IGNORE) { ColumnCondition = cc }; UpdateOfAttribute updateOfAttributeForPut = new UpdateOfAttribute(); updateOfAttributeForPut.AddAttributeColumnToPut("Col1", newValue); UpdateRowRequest updateReq = new UpdateRowRequest(tableName, cond, primaryKey, updateOfAttributeForPut); bool success = true; try { OTSClient.UpdateRow(updateReq); } catch (OTSServerException) { success = false; } if (success) { ++count; } } }
public static void UpdateRow() { Console.WriteLine("Start update row..."); PrepareTable(); OTSClient otsClient = Config.GetClient(); // 定义行的主键,必须与创建表时的TableMeta中定义的一致 PrimaryKey primaryKey = new PrimaryKey(); primaryKey.Add("pk0", new ColumnValue(0)); primaryKey.Add("pk1", new ColumnValue("abc")); // 定义要写入改行的属性列 UpdateOfAttribute attribute = new UpdateOfAttribute(); attribute.AddAttributeColumnToPut("col0", new ColumnValue(0)); attribute.AddAttributeColumnToPut("col1", new ColumnValue("b")); // 将原先的值'a'改为'b' attribute.AddAttributeColumnToPut("col2", new ColumnValue(true)); UpdateRowRequest request = new UpdateRowRequest(TableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute); otsClient.UpdateRow(request); Console.WriteLine("Update row succeed."); }
public void TestAPIWithParameter(string apiName) { var tableName = TestContext.tableName; var pkSchema = TestContext.pkSchema; var reservedThroughput = TestContext.reservedThroughput; var primaryKey = TestContext.primaryKey; var attribute = TestContext.attribute; var condition = TestContext.condition; var startPrimaryKey = TestContext.startPrimaryKey; var endPrimaryKey = TestContext.endPrimaryKey; var putRowConsumed = TestContext.putRowConsumed; var getRowConsumed = TestContext.getRowConsumed; var updateRowConsumed = TestContext.updateRowConsumed; var deleteRowConsumed = TestContext.deleteRowConsumed; var getRangeConsumed = TestContext.getRangeConsumed; var updateOfAttributeForPut = TestContext.updateOfAttributeForPut; var updateOfAttributeForDelete = TestContext.updateOfAttributeForDelete; var columnsToGet = TestContext.columnsToGet; var limit = TestContext.limit; var direction = TestContext.direction; var tableMeta = new TableMeta(tableName, pkSchema); switch (apiName) { case "CreateTable": var request0 = new CreateTableRequest(tableMeta, reservedThroughput); OTSClient.CreateTable(request0); return; case "ListTable": var request1 = new ListTableRequest(); var response1 = OTSClient.ListTable(request1); Assert.AreEqual(new List <string>() { tableName }, response1.TableNames); return; case "UpdateTable": var request2 = new UpdateTableRequest(tableName, reservedThroughput); var response2 = OTSClient.UpdateTable(request2); if (reservedThroughput.Read.HasValue && reservedThroughput.Write.HasValue) { AssertCapacityUnit( reservedThroughput, response2.ReservedThroughputDetails.CapacityUnit); } Assert.IsTrue(response2.ReservedThroughputDetails.LastDecreaseTime >= 0); Assert.IsTrue(response2.ReservedThroughputDetails.LastIncreaseTime >= 0); Assert.IsTrue(response2.ReservedThroughputDetails.NumberOfDecreasesToday >= 0); return; case "DeleteTable": var request3 = new DeleteTableRequest(tableName); OTSClient.DeleteTable(request3); var request31 = new ListTableRequest(); var response31 = OTSClient.ListTable(request31); Assert.AreEqual(new List <string>() { }, response31.TableNames); return; case "DescribeTable": var request4 = new DescribeTableRequest(tableName); var response4 = OTSClient.DescribeTable(request4); Assert.AreEqual(tableName, response4.TableMeta.TableName); AssertPrimaryKeySchema(pkSchema, response4.TableMeta.PrimaryKeySchema); AssertCapacityUnit(reservedThroughput, response4.ReservedThroughputDetails.CapacityUnit); Assert.IsTrue(response4.ReservedThroughputDetails.LastDecreaseTime >= 0); Assert.IsTrue(response4.ReservedThroughputDetails.LastIncreaseTime >= 0); Assert.IsTrue(response4.ReservedThroughputDetails.NumberOfDecreasesToday >= 0); return; case "PutRow": var request5 = new PutRowRequest(tableName, condition, primaryKey, attribute); var response5 = OTSClient.PutRow(request5); AssertCapacityUnit(putRowConsumed, response5.ConsumedCapacityUnit); return; case "GetRow": var request6 = new GetRowRequest(tableName, primaryKey, columnsToGet); var response6 = OTSClient.GetRow(request6); AssertPrimaryKey(primaryKey, response6.PrimaryKey, columnsToGet); AssertAttribute(attribute, response6.Attribute, columnsToGet); AssertCapacityUnit(getRowConsumed, response6.ConsumedCapacityUnit); return; case "DeleteRow": var request7 = new DeleteRowRequest(tableName, condition, primaryKey); var response7 = OTSClient.DeleteRow(request7); AssertCapacityUnit(deleteRowConsumed, response7.ConsumedCapacityUnit); var request71 = new GetRowRequest(tableName, primaryKey); var response71 = OTSClient.GetRow(request71); AssertPrimaryKey(new PrimaryKey(), response71.PrimaryKey); AssertAttribute(new AttributeColumns(), response71.Attribute); return; case "UpdateRow_Put": var request8 = new UpdateRowRequest(tableName, condition, primaryKey, updateOfAttributeForPut); var response8 = OTSClient.UpdateRow(request8); AssertCapacityUnit(updateRowConsumed, response8.ConsumedCapacityUnit); var request81 = new GetRowRequest(tableName, primaryKey); var response81 = OTSClient.GetRow(request81); AssertPrimaryKey(primaryKey, response81.PrimaryKey); AssertAttribute(attribute, response81.Attribute); AssertCapacityUnit(getRowConsumed, response81.ConsumedCapacityUnit); return; case "UpdateRow_Delete": var request9 = new UpdateRowRequest(tableName, condition, primaryKey, updateOfAttributeForDelete); var response9 = OTSClient.UpdateRow(request9); AssertCapacityUnit(deleteRowConsumed, response9.ConsumedCapacityUnit); var request91 = new GetRowRequest(tableName, primaryKey); var response91 = OTSClient.GetRow(request91); // Don't assert primary key AssertAttribute(new AttributeColumns(), response91.Attribute); return; case "BatchGetRow": var request11 = new BatchGetRowRequest(); request11.Add(tableName, new List <PrimaryKey>() { primaryKey }, columnsToGet); var response11 = OTSClient.BatchGetRow(request11); Assert.AreEqual(1, response11.RowDataGroupByTable.Count); Assert.IsTrue(response11.RowDataGroupByTable.ContainsKey(tableName)); Assert.AreEqual(1, response11.RowDataGroupByTable[tableName].Count); if (!response11.RowDataGroupByTable[tableName][0].IsOK) { throw new OTSServerException(apiName, HttpStatusCode.OK, response11.RowDataGroupByTable[tableName][0].ErrorCode, response11.RowDataGroupByTable[tableName][0].ErrorMessage); } AssertPrimaryKey(primaryKey, response11.RowDataGroupByTable[tableName][0].PrimaryKey); AssertAttribute(attribute, response11.RowDataGroupByTable[tableName][0].Attribute); AssertCapacityUnit(getRowConsumed, response11.RowDataGroupByTable[tableName][0].Consumed); return; case "BatchWriteRow_Put": var request12 = new BatchWriteRowRequest(); var rowChanges = new RowChanges(); rowChanges.AddPut(condition, primaryKey, attribute); request12.Add(tableName, rowChanges); var response12 = OTSClient.BatchWriteRow(request12); Assert.AreEqual(1, response12.TableRespones.Count); Assert.IsTrue(response12.TableRespones.ContainsKey(tableName)); Assert.AreEqual(1, response12.TableRespones[tableName].PutResponses.Count); Assert.AreEqual(0, response12.TableRespones[tableName].UpdateResponses.Count); Assert.AreEqual(0, response12.TableRespones[tableName].DeleteResponses.Count); if (response12.TableRespones[tableName].PutResponses[0].IsOK) { AssertCapacityUnit(putRowConsumed, response12.TableRespones[tableName].PutResponses[0].Consumed); } else { throw new OTSServerException("/BatchWriteRow", HttpStatusCode.OK, response12.TableRespones[tableName].PutResponses[0].ErrorCode, response12.TableRespones[tableName].PutResponses[0].ErrorMessage); } var request121 = new GetRowRequest(tableName, primaryKey); var response121 = OTSClient.GetRow(request121); AssertPrimaryKey(primaryKey, response121.PrimaryKey); AssertAttribute(attribute, response121.Attribute); AssertCapacityUnit(getRowConsumed, response121.ConsumedCapacityUnit); return; case "BatchWriteRow_Update": var request13 = new BatchWriteRowRequest(); var rowChanges2 = new RowChanges(); rowChanges2.AddUpdate(condition, primaryKey, updateOfAttributeForPut); request13.Add(tableName, rowChanges2); var response13 = OTSClient.BatchWriteRow(request13); Assert.AreEqual(1, response13.TableRespones.Count); Assert.IsTrue(response13.TableRespones.ContainsKey(tableName)); Assert.AreEqual(0, response13.TableRespones[tableName].PutResponses.Count); Assert.AreEqual(1, response13.TableRespones[tableName].UpdateResponses.Count); Assert.AreEqual(0, response13.TableRespones[tableName].DeleteResponses.Count); if (response13.TableRespones[tableName].UpdateResponses[0].IsOK) { AssertCapacityUnit(updateRowConsumed, response13.TableRespones[tableName].UpdateResponses[0].Consumed); } else { throw new OTSServerException("/BatchWriteRow", HttpStatusCode.OK, response13.TableRespones[tableName].UpdateResponses[0].ErrorCode, response13.TableRespones[tableName].UpdateResponses[0].ErrorMessage); } var request131 = new GetRowRequest(tableName, primaryKey); var response131 = OTSClient.GetRow(request131); AssertPrimaryKey(primaryKey, response131.PrimaryKey); AssertAttribute(attribute, response131.Attribute); AssertCapacityUnit(getRowConsumed, response131.ConsumedCapacityUnit); return; case "BatchWriteRow_Delete": var request14 = new BatchWriteRowRequest(); var rowChanges3 = new RowChanges(); rowChanges3.AddDelete(condition, primaryKey); request14.Add(tableName, rowChanges3); var response14 = OTSClient.BatchWriteRow(request14); Assert.AreEqual(1, response14.TableRespones.Count); Assert.IsTrue(response14.TableRespones.ContainsKey(tableName)); Assert.AreEqual(0, response14.TableRespones[tableName].PutResponses.Count); Assert.AreEqual(0, response14.TableRespones[tableName].UpdateResponses.Count); Assert.AreEqual(1, response14.TableRespones[tableName].DeleteResponses.Count); if (response14.TableRespones[tableName].DeleteResponses[0].IsOK) { AssertCapacityUnit(deleteRowConsumed, response14.TableRespones[tableName].DeleteResponses[0].Consumed); } else { throw new OTSServerException("/BatchWriteRow", HttpStatusCode.OK, response14.TableRespones[tableName].DeleteResponses[0].ErrorCode, response14.TableRespones[tableName].DeleteResponses[0].ErrorMessage); } var request141 = new GetRowRequest(tableName, primaryKey); var response141 = OTSClient.GetRow(request141); AssertPrimaryKey(new PrimaryKey(), response141.PrimaryKey); AssertAttribute(new AttributeColumns(), response141.Attribute); return; case "GetRange": var request15 = new GetRangeRequest(tableName, direction, startPrimaryKey, endPrimaryKey, columnsToGet, limit); var response15 = OTSClient.GetRange(request15); Assert.AreEqual(1, response15.RowDataList.Count); Assert.AreEqual(null, response15.NextPrimaryKey); AssertCapacityUnit(getRangeConsumed, response15.ConsumedCapacityUnit); AssertPrimaryKey(primaryKey, response15.RowDataList[0].PrimaryKey, columnsToGet); AssertAttribute(attribute, response15.RowDataList[0].Attribute, columnsToGet); return; default: throw new Exception(String.Format("invalid api name: {0}", apiName)); } }