public void TestGetRowWithFilterAndLogicOrAllNotHit()
        {
            CreateTestTableWith4PK();

            var pk = new PrimaryKey
            {
                { "PK0", new ColumnValue("a") },
                { "PK1", new ColumnValue("a") },
                { "PK2", new ColumnValue(10) },
                { "PK3", new ColumnValue(20) }
            };

            var attribute = new AttributeColumns
            {
                { "Col0", new ColumnValue(10) },
                { "Col1", new ColumnValue(2) },
                { "Col2", new ColumnValue(3) }
            };

            PutSingleRow(TestTableName, pk, attribute);

            var columnsToGet = new HashSet <string>();
            var filter1      = new RelationalCondition("Col0", CompareOperator.LESS_EQUAL, new ColumnValue(5));
            var filter2      = new RelationalCondition("Col1", CompareOperator.NOT_EQUAL, new ColumnValue(2));
            var filter       = new CompositeCondition(Aliyun.OTS.DataModel.LogicOperator.OR);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            CheckSingleRow(TestTableName, pk, attribute, new CapacityUnit(1, 0), columnsToGet, isEmpty: true, condition: filter);
        }
        public void TestGetRowWithFilterAndLogicAndPartHit()
        {
            CreateTestTableWith4PK();

            var pk = new PrimaryKey
            {
                { "PK0", new ColumnValue("a") },
                { "PK1", new ColumnValue("a") },
                { "PK2", new ColumnValue(10) },
                { "PK3", new ColumnValue(20) }
            };

            var attribute = new AttributeColumns
            {
                { "Col0", new ColumnValue(10) },
                { "Col1", new ColumnValue(2) },
                { "Col2", new ColumnValue(3) }
            };

            PutSingleRow(TestTableName, pk, attribute);

            var columnsToGet = new HashSet <string>();
            var filter1      = new RelationalCondition("Col0", CompareOperator.GREATER_THAN, new ColumnValue(5));
            var filter2      = new RelationalCondition("Col1", CompareOperator.NOT_EQUAL, new ColumnValue(2));
            var filter       = new CompositeCondition(LogicOperator.AND);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            CheckSingleRow(TestTableName, pk, attribute, new CapacityUnit(1, 0), columnsToGet, true, filter);
        }
Exemple #3
0
        public void TestGetRowWithFilterAndLogicOrAllHit()
        {
            CreateTestTableWith4PK();

            var pk = new PrimaryKey();

            pk.Add("PK0", new ColumnValue("a"));
            pk.Add("PK1", new ColumnValue("a"));
            pk.Add("PK2", new ColumnValue(10));
            pk.Add("PK3", new ColumnValue(20));

            var attribute = new AttributeColumns();

            attribute.Add("Col0", new ColumnValue(10));
            attribute.Add("Col1", new ColumnValue(2));
            attribute.Add("Col2", new ColumnValue(3));

            PutSingleRow(TestTableName, pk, attribute);

            var columnsToGet = new HashSet <string>();
            var filter1      = new RelationalCondition("Col0", RelationalCondition.CompareOperator.GREATER_THAN, new ColumnValue(5));
            var filter2      = new RelationalCondition("Col1", RelationalCondition.CompareOperator.EQUAL, new ColumnValue(2));
            var filter       = new CompositeCondition(CompositeCondition.LogicOperator.OR);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            CheckSingleRow(TestTableName, pk, attribute, new CapacityUnit(1, 0), columnsToGet, condition: filter);
        }
Exemple #4
0
        public void TestCompositeCondition()
        {
            String tableName = "condition_update_test_table";

            CreateTable(tableName);

            bool success = PutRow(tableName, 3, "Col1", new ColumnValue("Value1"), null);

            Assert.IsTrue(success);

            success = UpdateRow(tableName, 3, "Col2", new ColumnValue("Value2"), null);
            Assert.IsTrue(success);

            // update with condition:
            // col1 == value2 OR col2 == value1
            CompositeCondition cond = new CompositeCondition(LogicOperator.OR);

            cond.AddCondition(new RelationalCondition(
                                  "Col1",
                                  CompareOperator.EQUAL,
                                  new ColumnValue("Value2")))
            .AddCondition(new RelationalCondition(
                              "Col2",
                              CompareOperator.EQUAL,
                              new ColumnValue("Value1")));
            success = UpdateRow(tableName, 3, "Col3", new ColumnValue("Value3"), cond);
            Assert.IsFalse(success);

            // update with condition
            // Not col1 == value2
            cond = new CompositeCondition(LogicOperator.NOT);
            cond.AddCondition(new RelationalCondition(
                                  "Col1",
                                  CompareOperator.EQUAL,
                                  new ColumnValue("Value2")));
            success = UpdateRow(tableName, 3, "Col3", new ColumnValue("Value3"), cond);
            Assert.IsTrue(success);

            // delete with condition
            // col1 == valueX  OR  (col2 == value2 AND col3 == value3)
            cond = new CompositeCondition(LogicOperator.OR);
            cond.AddCondition(new RelationalCondition(
                                  "Col1",
                                  CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")));
            CompositeCondition cond2 = new CompositeCondition(LogicOperator.AND);

            cond2.AddCondition(new RelationalCondition(
                                   "Col2",
                                   CompareOperator.EQUAL,
                                   new ColumnValue("Value2")))
            .AddCondition(new RelationalCondition(
                              "Col3",
                              CompareOperator.EQUAL,
                              new ColumnValue("Value3")));
            cond.AddCondition(cond2);
            success = DeleteRow(tableName, 3, cond);
            Assert.IsTrue(success);
        }
Exemple #5
0
        public static void GetRowWithFilter()
        {
            Console.WriteLine("Start get row with filter ...");
            PrepareTable();
            OTSClient otsClient = Config.GetClient();

            // 定义行的主键,必须与创建表时的TableMeta中定义的一致
            PrimaryKey primaryKey = new PrimaryKey
            {
                { "pk0", new ColumnValue(0) },
                { "pk1", new ColumnValue("abc") }
            };

            var rowQueryCriteria = new SingleRowQueryCriteria(TableName)
            {
                RowPrimaryKey = primaryKey
            };

            // 只返回col0的值等于5的行或者col1不等于ff的行
            var filter1 = new RelationalCondition("col0",
                                                  CompareOperator.EQUAL,
                                                  new ColumnValue(5));

            var filter2 = new RelationalCondition("col1", CompareOperator.NOT_EQUAL, new ColumnValue("ff"));

            var filter = new CompositeCondition(LogicOperator.OR);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            rowQueryCriteria.Filter = filter.ToFilter();
            rowQueryCriteria.AddColumnsToGet("col0");
            rowQueryCriteria.AddColumnsToGet("col1");

            GetRowRequest request = new GetRowRequest(rowQueryCriteria);

            // 查询
            GetRowResponse   response       = otsClient.GetRow(request);
            PrimaryKey       primaryKeyRead = response.PrimaryKey;
            AttributeColumns attributesRead = response.Attribute;

            Console.WriteLine("Primary key read: ");
            foreach (KeyValuePair <string, ColumnValue> entry in primaryKeyRead)
            {
                Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
            }

            Console.WriteLine("Attributes read: ");
            foreach (KeyValuePair <string, ColumnValue> entry in attributesRead)
            {
                Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
            }

            Console.WriteLine("Get row with filter succeed.");
        }
Exemple #6
0
        public void TestLimits()
        {
            String tableName = "condition_update_test_table";

            CreateTable(tableName);
            // column condition count <= 10
            CompositeCondition cond = new CompositeCondition(LogicOperator.OR);

            cond.AddCondition(new RelationalCondition(
                                  "ColX1", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX2", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX3", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX4", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX5", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX6", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX7", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX8", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX9", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")));
            bool success = PutRow(tableName, 4, "Col1", new ColumnValue("Value1"), cond);

            Assert.IsTrue(success);

            cond.AddCondition(new RelationalCondition(
                                  "ColX10", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")));
            success = PutRow(tableName, 4, "Col1", new ColumnValue("Value1"), cond);
            Assert.IsFalse(success);

            // invalid column name in column condition
            cond = new CompositeCondition(LogicOperator.AND);
            cond.AddCondition(new RelationalCondition(
                                  "#Col", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX9", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")));
            success = PutRow(tableName, 4, "Col1", new ColumnValue("Value1"), cond);
            Assert.IsFalse(success);

            // invalid column value in column condition
            cond = new CompositeCondition(LogicOperator.AND);
            cond.AddCondition(new RelationalCondition(
                                  "ColX9", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX9", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")));
            Assert.IsFalse(success);
        }
        public static void ConditionUpdateRow()
        {
            Console.WriteLine("Start update row...");

            PrepareTable();
            var otsClient = Config.GetClient();

            // 定义行的主键,必须与创建表时的TableMeta中定义的一致
            var primaryKey = new PrimaryKey();

            primaryKey.Add("pk0", new ColumnValue(1));
            primaryKey.Add("pk1", new ColumnValue("abc"));

            // 定义要写入改行的属性列
            var attribute = new AttributeColumns();

            attribute.Add("col0", new ColumnValue(1));
            attribute.Add("col1", new ColumnValue("a"));
            attribute.Add("col2", new ColumnValue(true));

            var request = new PutRowRequest(tableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);

            // 新创建一行数据
            try
            {
                otsClient.PutRow(request);

                Console.WriteLine("Put row succeeded.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Put row failed. error:{0}", ex.Message);
            }


            // 当col0不等于5,且col1等于'a'时,允许修改,否则不允许修改
            try
            {
                // 构造condition
                var cond1 = new RelationalCondition("col0",
                                                    CompareOperator.NOT_EQUAL,
                                                    new ColumnValue(5));
                var cond2 = new RelationalCondition("col1", CompareOperator.EQUAL,
                                                    new ColumnValue("a"));
                var columenCondition = new CompositeCondition(LogicOperator.AND);
                columenCondition.AddCondition(cond1);
                columenCondition.AddCondition(cond2);

                var condition = new Condition(RowExistenceExpectation.IGNORE);
                condition.ColumnCondition = columenCondition;

                // 构造更新请求
                var updateOfAttribute = new UpdateOfAttribute();
                updateOfAttribute.AddAttributeColumnToPut("col2", new ColumnValue(false));
                var updateRowRequest = new UpdateRowRequest(tableName, condition, primaryKey, updateOfAttribute);

                // 更新数据
                otsClient.UpdateRow(updateRowRequest);

                // 更新成功
                Console.WriteLine("Update row succeeded.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Update row failed. error:{0}", ex.Message);
            }
        }