blob: b3bffde7b49fec6c30ceeede494ee99deadd6320 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase.client, class: TestCheckAndMutate">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements. See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership. The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License. You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> * http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.client;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import static org.hamcrest.CoreMatchers.instanceOf;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.hamcrest.MatcherAssert.assertThat;</span>
<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertEquals;</span>
<span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertFalse;</span>
<span class="source-line-no">024</span><span id="line-24">import static org.junit.Assert.assertNull;</span>
<span class="source-line-no">025</span><span id="line-25">import static org.junit.Assert.assertTrue;</span>
<span class="source-line-no">026</span><span id="line-26">import static org.junit.Assert.fail;</span>
<span class="source-line-no">027</span><span id="line-27"></span>
<span class="source-line-no">028</span><span id="line-28">import java.io.IOException;</span>
<span class="source-line-no">029</span><span id="line-29">import java.util.Arrays;</span>
<span class="source-line-no">030</span><span id="line-30">import java.util.Collections;</span>
<span class="source-line-no">031</span><span id="line-31">import java.util.List;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.CompareOperator;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.TableName;</span>
<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.filter.BinaryComparator;</span>
<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.filter.FamilyFilter;</span>
<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.filter.FilterList;</span>
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.filter.QualifierFilter;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.filter.TimestampsFilter;</span>
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.io.TimeRange;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException;</span>
<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">046</span><span id="line-46">import org.junit.AfterClass;</span>
<span class="source-line-no">047</span><span id="line-47">import org.junit.BeforeClass;</span>
<span class="source-line-no">048</span><span id="line-48">import org.junit.ClassRule;</span>
<span class="source-line-no">049</span><span id="line-49">import org.junit.Rule;</span>
<span class="source-line-no">050</span><span id="line-50">import org.junit.Test;</span>
<span class="source-line-no">051</span><span id="line-51">import org.junit.experimental.categories.Category;</span>
<span class="source-line-no">052</span><span id="line-52">import org.junit.rules.TestName;</span>
<span class="source-line-no">053</span><span id="line-53"></span>
<span class="source-line-no">054</span><span id="line-54">@Category(MediumTests.class)</span>
<span class="source-line-no">055</span><span id="line-55">public class TestCheckAndMutate {</span>
<span class="source-line-no">056</span><span id="line-56"></span>
<span class="source-line-no">057</span><span id="line-57"> @ClassRule</span>
<span class="source-line-no">058</span><span id="line-58"> public static final HBaseClassTestRule CLASS_RULE =</span>
<span class="source-line-no">059</span><span id="line-59"> HBaseClassTestRule.forClass(TestCheckAndMutate.class);</span>
<span class="source-line-no">060</span><span id="line-60"></span>
<span class="source-line-no">061</span><span id="line-61"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
<span class="source-line-no">062</span><span id="line-62"> private static final byte[] ROWKEY = Bytes.toBytes("12345");</span>
<span class="source-line-no">063</span><span id="line-63"> private static final byte[] ROWKEY2 = Bytes.toBytes("67890");</span>
<span class="source-line-no">064</span><span id="line-64"> private static final byte[] ROWKEY3 = Bytes.toBytes("abcde");</span>
<span class="source-line-no">065</span><span id="line-65"> private static final byte[] ROWKEY4 = Bytes.toBytes("fghij");</span>
<span class="source-line-no">066</span><span id="line-66"> private static final byte[] FAMILY = Bytes.toBytes("cf");</span>
<span class="source-line-no">067</span><span id="line-67"></span>
<span class="source-line-no">068</span><span id="line-68"> @Rule</span>
<span class="source-line-no">069</span><span id="line-69"> public TestName name = new TestName();</span>
<span class="source-line-no">070</span><span id="line-70"></span>
<span class="source-line-no">071</span><span id="line-71"> @BeforeClass</span>
<span class="source-line-no">072</span><span id="line-72"> public static void setUpBeforeClass() throws Exception {</span>
<span class="source-line-no">073</span><span id="line-73"> TEST_UTIL.startMiniCluster();</span>
<span class="source-line-no">074</span><span id="line-74"> }</span>
<span class="source-line-no">075</span><span id="line-75"></span>
<span class="source-line-no">076</span><span id="line-76"> @AfterClass</span>
<span class="source-line-no">077</span><span id="line-77"> public static void tearDownAfterClass() throws Exception {</span>
<span class="source-line-no">078</span><span id="line-78"> TEST_UTIL.shutdownMiniCluster();</span>
<span class="source-line-no">079</span><span id="line-79"> }</span>
<span class="source-line-no">080</span><span id="line-80"></span>
<span class="source-line-no">081</span><span id="line-81"> private Table createTable() throws IOException, InterruptedException {</span>
<span class="source-line-no">082</span><span id="line-82"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
<span class="source-line-no">083</span><span id="line-83"> Table table = TEST_UTIL.createTable(tableName, FAMILY);</span>
<span class="source-line-no">084</span><span id="line-84"> TEST_UTIL.waitTableAvailable(tableName.getName(), 5000);</span>
<span class="source-line-no">085</span><span id="line-85"> return table;</span>
<span class="source-line-no">086</span><span id="line-86"> }</span>
<span class="source-line-no">087</span><span id="line-87"></span>
<span class="source-line-no">088</span><span id="line-88"> private void putOneRow(Table table) throws IOException {</span>
<span class="source-line-no">089</span><span id="line-89"> Put put = new Put(ROWKEY);</span>
<span class="source-line-no">090</span><span id="line-90"> put.addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"));</span>
<span class="source-line-no">091</span><span id="line-91"> put.addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"));</span>
<span class="source-line-no">092</span><span id="line-92"> put.addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c"));</span>
<span class="source-line-no">093</span><span id="line-93"> table.put(put);</span>
<span class="source-line-no">094</span><span id="line-94"> }</span>
<span class="source-line-no">095</span><span id="line-95"></span>
<span class="source-line-no">096</span><span id="line-96"> private void getOneRowAndAssertAllExist(final Table table) throws IOException {</span>
<span class="source-line-no">097</span><span id="line-97"> Get get = new Get(ROWKEY);</span>
<span class="source-line-no">098</span><span id="line-98"> Result result = table.get(get);</span>
<span class="source-line-no">099</span><span id="line-99"> assertTrue("Column A value should be a",</span>
<span class="source-line-no">100</span><span id="line-100"> Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A"))).equals("a"));</span>
<span class="source-line-no">101</span><span id="line-101"> assertTrue("Column B value should be b",</span>
<span class="source-line-no">102</span><span id="line-102"> Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))).equals("b"));</span>
<span class="source-line-no">103</span><span id="line-103"> assertTrue("Column C value should be c",</span>
<span class="source-line-no">104</span><span id="line-104"> Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C"))).equals("c"));</span>
<span class="source-line-no">105</span><span id="line-105"> }</span>
<span class="source-line-no">106</span><span id="line-106"></span>
<span class="source-line-no">107</span><span id="line-107"> private void getOneRowAndAssertAllButCExist(final Table table) throws IOException {</span>
<span class="source-line-no">108</span><span id="line-108"> Get get = new Get(ROWKEY);</span>
<span class="source-line-no">109</span><span id="line-109"> Result result = table.get(get);</span>
<span class="source-line-no">110</span><span id="line-110"> assertTrue("Column A value should be a",</span>
<span class="source-line-no">111</span><span id="line-111"> Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A"))).equals("a"));</span>
<span class="source-line-no">112</span><span id="line-112"> assertTrue("Column B value should be b",</span>
<span class="source-line-no">113</span><span id="line-113"> Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))).equals("b"));</span>
<span class="source-line-no">114</span><span id="line-114"> assertTrue("Column C should not exist", result.getValue(FAMILY, Bytes.toBytes("C")) == null);</span>
<span class="source-line-no">115</span><span id="line-115"> }</span>
<span class="source-line-no">116</span><span id="line-116"></span>
<span class="source-line-no">117</span><span id="line-117"> private RowMutations makeRowMutationsWithColumnCDeleted() throws IOException {</span>
<span class="source-line-no">118</span><span id="line-118"> RowMutations rm = new RowMutations(ROWKEY, 2);</span>
<span class="source-line-no">119</span><span id="line-119"> Put put = new Put(ROWKEY);</span>
<span class="source-line-no">120</span><span id="line-120"> put.addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"));</span>
<span class="source-line-no">121</span><span id="line-121"> put.addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"));</span>
<span class="source-line-no">122</span><span id="line-122"> rm.add(put);</span>
<span class="source-line-no">123</span><span id="line-123"> Delete del = new Delete(ROWKEY);</span>
<span class="source-line-no">124</span><span id="line-124"> del.addColumn(FAMILY, Bytes.toBytes("C"));</span>
<span class="source-line-no">125</span><span id="line-125"> rm.add(del);</span>
<span class="source-line-no">126</span><span id="line-126"> return rm;</span>
<span class="source-line-no">127</span><span id="line-127"> }</span>
<span class="source-line-no">128</span><span id="line-128"></span>
<span class="source-line-no">129</span><span id="line-129"> private RowMutations getBogusRowMutations() throws IOException {</span>
<span class="source-line-no">130</span><span id="line-130"> Put p = new Put(ROWKEY);</span>
<span class="source-line-no">131</span><span id="line-131"> byte[] value = new byte[0];</span>
<span class="source-line-no">132</span><span id="line-132"> p.addColumn(new byte[] { 'b', 'o', 'g', 'u', 's' }, new byte[] { 'A' }, value);</span>
<span class="source-line-no">133</span><span id="line-133"> RowMutations rm = new RowMutations(ROWKEY);</span>
<span class="source-line-no">134</span><span id="line-134"> rm.add(p);</span>
<span class="source-line-no">135</span><span id="line-135"> return rm;</span>
<span class="source-line-no">136</span><span id="line-136"> }</span>
<span class="source-line-no">137</span><span id="line-137"></span>
<span class="source-line-no">138</span><span id="line-138"> // Tests for old checkAndMutate API</span>
<span class="source-line-no">139</span><span id="line-139"></span>
<span class="source-line-no">140</span><span id="line-140"> @Test</span>
<span class="source-line-no">141</span><span id="line-141"> @Deprecated</span>
<span class="source-line-no">142</span><span id="line-142"> public void testCheckAndMutateForOldApi() throws Throwable {</span>
<span class="source-line-no">143</span><span id="line-143"> try (Table table = createTable()) {</span>
<span class="source-line-no">144</span><span id="line-144"> // put one row</span>
<span class="source-line-no">145</span><span id="line-145"> putOneRow(table);</span>
<span class="source-line-no">146</span><span id="line-146"> // get row back and assert the values</span>
<span class="source-line-no">147</span><span id="line-147"> getOneRowAndAssertAllExist(table);</span>
<span class="source-line-no">148</span><span id="line-148"></span>
<span class="source-line-no">149</span><span id="line-149"> // put the same row again with C column deleted</span>
<span class="source-line-no">150</span><span id="line-150"> RowMutations rm = makeRowMutationsWithColumnCDeleted();</span>
<span class="source-line-no">151</span><span id="line-151"> boolean res = table.checkAndMutate(ROWKEY, FAMILY).qualifier(Bytes.toBytes("A"))</span>
<span class="source-line-no">152</span><span id="line-152"> .ifEquals(Bytes.toBytes("a")).thenMutate(rm);</span>
<span class="source-line-no">153</span><span id="line-153"> assertTrue(res);</span>
<span class="source-line-no">154</span><span id="line-154"></span>
<span class="source-line-no">155</span><span id="line-155"> // get row back and assert the values</span>
<span class="source-line-no">156</span><span id="line-156"> getOneRowAndAssertAllButCExist(table);</span>
<span class="source-line-no">157</span><span id="line-157"></span>
<span class="source-line-no">158</span><span id="line-158"> // Test that we get a region level exception</span>
<span class="source-line-no">159</span><span id="line-159"> try {</span>
<span class="source-line-no">160</span><span id="line-160"> rm = getBogusRowMutations();</span>
<span class="source-line-no">161</span><span id="line-161"> table.checkAndMutate(ROWKEY, FAMILY).qualifier(Bytes.toBytes("A"))</span>
<span class="source-line-no">162</span><span id="line-162"> .ifEquals(Bytes.toBytes("a")).thenMutate(rm);</span>
<span class="source-line-no">163</span><span id="line-163"> fail("Expected NoSuchColumnFamilyException");</span>
<span class="source-line-no">164</span><span id="line-164"> } catch (NoSuchColumnFamilyException e) {</span>
<span class="source-line-no">165</span><span id="line-165"> // expected</span>
<span class="source-line-no">166</span><span id="line-166"> } catch (RetriesExhaustedException e) {</span>
<span class="source-line-no">167</span><span id="line-167"> assertThat(e.getCause(), instanceOf(NoSuchColumnFamilyException.class));</span>
<span class="source-line-no">168</span><span id="line-168"> }</span>
<span class="source-line-no">169</span><span id="line-169"> }</span>
<span class="source-line-no">170</span><span id="line-170"> }</span>
<span class="source-line-no">171</span><span id="line-171"></span>
<span class="source-line-no">172</span><span id="line-172"> @Test</span>
<span class="source-line-no">173</span><span id="line-173"> @Deprecated</span>
<span class="source-line-no">174</span><span id="line-174"> public void testCheckAndMutateWithSingleFilterForOldApi() throws Throwable {</span>
<span class="source-line-no">175</span><span id="line-175"> try (Table table = createTable()) {</span>
<span class="source-line-no">176</span><span id="line-176"> // put one row</span>
<span class="source-line-no">177</span><span id="line-177"> putOneRow(table);</span>
<span class="source-line-no">178</span><span id="line-178"> // get row back and assert the values</span>
<span class="source-line-no">179</span><span id="line-179"> getOneRowAndAssertAllExist(table);</span>
<span class="source-line-no">180</span><span id="line-180"></span>
<span class="source-line-no">181</span><span id="line-181"> // Put with success</span>
<span class="source-line-no">182</span><span id="line-182"> boolean ok = table</span>
<span class="source-line-no">183</span><span id="line-183"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">184</span><span id="line-184"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">185</span><span id="line-185"> Bytes.toBytes("a")))</span>
<span class="source-line-no">186</span><span id="line-186"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")));</span>
<span class="source-line-no">187</span><span id="line-187"> assertTrue(ok);</span>
<span class="source-line-no">188</span><span id="line-188"></span>
<span class="source-line-no">189</span><span id="line-189"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">190</span><span id="line-190"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">191</span><span id="line-191"></span>
<span class="source-line-no">192</span><span id="line-192"> // Put with failure</span>
<span class="source-line-no">193</span><span id="line-193"> ok = table</span>
<span class="source-line-no">194</span><span id="line-194"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">195</span><span id="line-195"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">196</span><span id="line-196"> Bytes.toBytes("b")))</span>
<span class="source-line-no">197</span><span id="line-197"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")));</span>
<span class="source-line-no">198</span><span id="line-198"> assertFalse(ok);</span>
<span class="source-line-no">199</span><span id="line-199"></span>
<span class="source-line-no">200</span><span id="line-200"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"))));</span>
<span class="source-line-no">201</span><span id="line-201"></span>
<span class="source-line-no">202</span><span id="line-202"> // Delete with success</span>
<span class="source-line-no">203</span><span id="line-203"> ok = table</span>
<span class="source-line-no">204</span><span id="line-204"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">205</span><span id="line-205"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">206</span><span id="line-206"> Bytes.toBytes("a")))</span>
<span class="source-line-no">207</span><span id="line-207"> .thenDelete(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">208</span><span id="line-208"> assertTrue(ok);</span>
<span class="source-line-no">209</span><span id="line-209"></span>
<span class="source-line-no">210</span><span id="line-210"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">211</span><span id="line-211"></span>
<span class="source-line-no">212</span><span id="line-212"> // Mutate with success</span>
<span class="source-line-no">213</span><span id="line-213"> ok = table</span>
<span class="source-line-no">214</span><span id="line-214"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">215</span><span id="line-215"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">216</span><span id="line-216"> Bytes.toBytes("b")))</span>
<span class="source-line-no">217</span><span id="line-217"> .thenMutate(new RowMutations(ROWKEY)</span>
<span class="source-line-no">218</span><span id="line-218"> .add((Mutation) new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))</span>
<span class="source-line-no">219</span><span id="line-219"> .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">220</span><span id="line-220"> assertTrue(ok);</span>
<span class="source-line-no">221</span><span id="line-221"></span>
<span class="source-line-no">222</span><span id="line-222"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">223</span><span id="line-223"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">224</span><span id="line-224"></span>
<span class="source-line-no">225</span><span id="line-225"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">226</span><span id="line-226"> }</span>
<span class="source-line-no">227</span><span id="line-227"> }</span>
<span class="source-line-no">228</span><span id="line-228"></span>
<span class="source-line-no">229</span><span id="line-229"> @Test</span>
<span class="source-line-no">230</span><span id="line-230"> @Deprecated</span>
<span class="source-line-no">231</span><span id="line-231"> public void testCheckAndMutateWithMultipleFiltersForOldApi() throws Throwable {</span>
<span class="source-line-no">232</span><span id="line-232"> try (Table table = createTable()) {</span>
<span class="source-line-no">233</span><span id="line-233"> // put one row</span>
<span class="source-line-no">234</span><span id="line-234"> putOneRow(table);</span>
<span class="source-line-no">235</span><span id="line-235"> // get row back and assert the values</span>
<span class="source-line-no">236</span><span id="line-236"> getOneRowAndAssertAllExist(table);</span>
<span class="source-line-no">237</span><span id="line-237"></span>
<span class="source-line-no">238</span><span id="line-238"> // Put with success</span>
<span class="source-line-no">239</span><span id="line-239"> boolean ok = table</span>
<span class="source-line-no">240</span><span id="line-240"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">241</span><span id="line-241"> new FilterList(</span>
<span class="source-line-no">242</span><span id="line-242"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">243</span><span id="line-243"> Bytes.toBytes("a")),</span>
<span class="source-line-no">244</span><span id="line-244"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">245</span><span id="line-245"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">246</span><span id="line-246"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")));</span>
<span class="source-line-no">247</span><span id="line-247"> assertTrue(ok);</span>
<span class="source-line-no">248</span><span id="line-248"></span>
<span class="source-line-no">249</span><span id="line-249"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">250</span><span id="line-250"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">251</span><span id="line-251"></span>
<span class="source-line-no">252</span><span id="line-252"> // Put with failure</span>
<span class="source-line-no">253</span><span id="line-253"> ok = table</span>
<span class="source-line-no">254</span><span id="line-254"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">255</span><span id="line-255"> new FilterList(</span>
<span class="source-line-no">256</span><span id="line-256"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">257</span><span id="line-257"> Bytes.toBytes("a")),</span>
<span class="source-line-no">258</span><span id="line-258"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">259</span><span id="line-259"> Bytes.toBytes("c"))))</span>
<span class="source-line-no">260</span><span id="line-260"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")));</span>
<span class="source-line-no">261</span><span id="line-261"> assertFalse(ok);</span>
<span class="source-line-no">262</span><span id="line-262"></span>
<span class="source-line-no">263</span><span id="line-263"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"))));</span>
<span class="source-line-no">264</span><span id="line-264"></span>
<span class="source-line-no">265</span><span id="line-265"> // Delete with success</span>
<span class="source-line-no">266</span><span id="line-266"> ok = table</span>
<span class="source-line-no">267</span><span id="line-267"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">268</span><span id="line-268"> new FilterList(</span>
<span class="source-line-no">269</span><span id="line-269"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">270</span><span id="line-270"> Bytes.toBytes("a")),</span>
<span class="source-line-no">271</span><span id="line-271"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">272</span><span id="line-272"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">273</span><span id="line-273"> .thenDelete(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">274</span><span id="line-274"> assertTrue(ok);</span>
<span class="source-line-no">275</span><span id="line-275"></span>
<span class="source-line-no">276</span><span id="line-276"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">277</span><span id="line-277"></span>
<span class="source-line-no">278</span><span id="line-278"> // Mutate with success</span>
<span class="source-line-no">279</span><span id="line-279"> ok = table</span>
<span class="source-line-no">280</span><span id="line-280"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">281</span><span id="line-281"> new FilterList(</span>
<span class="source-line-no">282</span><span id="line-282"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">283</span><span id="line-283"> Bytes.toBytes("a")),</span>
<span class="source-line-no">284</span><span id="line-284"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">285</span><span id="line-285"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">286</span><span id="line-286"> .thenMutate(new RowMutations(ROWKEY)</span>
<span class="source-line-no">287</span><span id="line-287"> .add((Mutation) new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))</span>
<span class="source-line-no">288</span><span id="line-288"> .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">289</span><span id="line-289"> assertTrue(ok);</span>
<span class="source-line-no">290</span><span id="line-290"></span>
<span class="source-line-no">291</span><span id="line-291"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">292</span><span id="line-292"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">293</span><span id="line-293"></span>
<span class="source-line-no">294</span><span id="line-294"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">295</span><span id="line-295"> }</span>
<span class="source-line-no">296</span><span id="line-296"> }</span>
<span class="source-line-no">297</span><span id="line-297"></span>
<span class="source-line-no">298</span><span id="line-298"> @Test</span>
<span class="source-line-no">299</span><span id="line-299"> @Deprecated</span>
<span class="source-line-no">300</span><span id="line-300"> public void testCheckAndMutateWithTimestampFilterForOldApi() throws Throwable {</span>
<span class="source-line-no">301</span><span id="line-301"> try (Table table = createTable()) {</span>
<span class="source-line-no">302</span><span id="line-302"> // Put with specifying the timestamp</span>
<span class="source-line-no">303</span><span id="line-303"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a")));</span>
<span class="source-line-no">304</span><span id="line-304"></span>
<span class="source-line-no">305</span><span id="line-305"> // Put with success</span>
<span class="source-line-no">306</span><span id="line-306"> boolean ok = table</span>
<span class="source-line-no">307</span><span id="line-307"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">308</span><span id="line-308"> new FilterList(new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)),</span>
<span class="source-line-no">309</span><span id="line-309"> new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))),</span>
<span class="source-line-no">310</span><span id="line-310"> new TimestampsFilter(Collections.singletonList(100L))))</span>
<span class="source-line-no">311</span><span id="line-311"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")));</span>
<span class="source-line-no">312</span><span id="line-312"> assertTrue(ok);</span>
<span class="source-line-no">313</span><span id="line-313"></span>
<span class="source-line-no">314</span><span id="line-314"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">315</span><span id="line-315"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">316</span><span id="line-316"></span>
<span class="source-line-no">317</span><span id="line-317"> // Put with failure</span>
<span class="source-line-no">318</span><span id="line-318"> ok = table</span>
<span class="source-line-no">319</span><span id="line-319"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">320</span><span id="line-320"> new FilterList(new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)),</span>
<span class="source-line-no">321</span><span id="line-321"> new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))),</span>
<span class="source-line-no">322</span><span id="line-322"> new TimestampsFilter(Collections.singletonList(101L))))</span>
<span class="source-line-no">323</span><span id="line-323"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")));</span>
<span class="source-line-no">324</span><span id="line-324"> assertFalse(ok);</span>
<span class="source-line-no">325</span><span id="line-325"></span>
<span class="source-line-no">326</span><span id="line-326"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">327</span><span id="line-327"> }</span>
<span class="source-line-no">328</span><span id="line-328"> }</span>
<span class="source-line-no">329</span><span id="line-329"></span>
<span class="source-line-no">330</span><span id="line-330"> @Test</span>
<span class="source-line-no">331</span><span id="line-331"> @Deprecated</span>
<span class="source-line-no">332</span><span id="line-332"> public void testCheckAndMutateWithFilterAndTimeRangeForOldApi() throws Throwable {</span>
<span class="source-line-no">333</span><span id="line-333"> try (Table table = createTable()) {</span>
<span class="source-line-no">334</span><span id="line-334"> // Put with specifying the timestamp</span>
<span class="source-line-no">335</span><span id="line-335"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a")));</span>
<span class="source-line-no">336</span><span id="line-336"></span>
<span class="source-line-no">337</span><span id="line-337"> // Put with success</span>
<span class="source-line-no">338</span><span id="line-338"> boolean ok = table</span>
<span class="source-line-no">339</span><span id="line-339"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">340</span><span id="line-340"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">341</span><span id="line-341"> Bytes.toBytes("a")))</span>
<span class="source-line-no">342</span><span id="line-342"> .timeRange(TimeRange.between(0, 101))</span>
<span class="source-line-no">343</span><span id="line-343"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")));</span>
<span class="source-line-no">344</span><span id="line-344"> assertTrue(ok);</span>
<span class="source-line-no">345</span><span id="line-345"></span>
<span class="source-line-no">346</span><span id="line-346"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">347</span><span id="line-347"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">348</span><span id="line-348"></span>
<span class="source-line-no">349</span><span id="line-349"> // Put with failure</span>
<span class="source-line-no">350</span><span id="line-350"> ok = table</span>
<span class="source-line-no">351</span><span id="line-351"> .checkAndMutate(ROWKEY,</span>
<span class="source-line-no">352</span><span id="line-352"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">353</span><span id="line-353"> Bytes.toBytes("a")))</span>
<span class="source-line-no">354</span><span id="line-354"> .timeRange(TimeRange.between(0, 100))</span>
<span class="source-line-no">355</span><span id="line-355"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")));</span>
<span class="source-line-no">356</span><span id="line-356"> assertFalse(ok);</span>
<span class="source-line-no">357</span><span id="line-357"></span>
<span class="source-line-no">358</span><span id="line-358"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">359</span><span id="line-359"> }</span>
<span class="source-line-no">360</span><span id="line-360"> }</span>
<span class="source-line-no">361</span><span id="line-361"></span>
<span class="source-line-no">362</span><span id="line-362"> @Test(expected = NullPointerException.class)</span>
<span class="source-line-no">363</span><span id="line-363"> @Deprecated</span>
<span class="source-line-no">364</span><span id="line-364"> public void testCheckAndMutateWithoutConditionForOldApi() throws Throwable {</span>
<span class="source-line-no">365</span><span id="line-365"> try (Table table = createTable()) {</span>
<span class="source-line-no">366</span><span id="line-366"> table.checkAndMutate(ROWKEY, FAMILY)</span>
<span class="source-line-no">367</span><span id="line-367"> .thenPut(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")));</span>
<span class="source-line-no">368</span><span id="line-368"> }</span>
<span class="source-line-no">369</span><span id="line-369"> }</span>
<span class="source-line-no">370</span><span id="line-370"></span>
<span class="source-line-no">371</span><span id="line-371"> // Tests for new CheckAndMutate API</span>
<span class="source-line-no">372</span><span id="line-372"></span>
<span class="source-line-no">373</span><span id="line-373"> @Test</span>
<span class="source-line-no">374</span><span id="line-374"> public void testCheckAndMutate() throws Throwable {</span>
<span class="source-line-no">375</span><span id="line-375"> try (Table table = createTable()) {</span>
<span class="source-line-no">376</span><span id="line-376"> // put one row</span>
<span class="source-line-no">377</span><span id="line-377"> putOneRow(table);</span>
<span class="source-line-no">378</span><span id="line-378"> // get row back and assert the values</span>
<span class="source-line-no">379</span><span id="line-379"> getOneRowAndAssertAllExist(table);</span>
<span class="source-line-no">380</span><span id="line-380"></span>
<span class="source-line-no">381</span><span id="line-381"> // put the same row again with C column deleted</span>
<span class="source-line-no">382</span><span id="line-382"> RowMutations rm = makeRowMutationsWithColumnCDeleted();</span>
<span class="source-line-no">383</span><span id="line-383"> CheckAndMutateResult res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">384</span><span id="line-384"> .ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")).build(rm));</span>
<span class="source-line-no">385</span><span id="line-385"> assertTrue(res.isSuccess());</span>
<span class="source-line-no">386</span><span id="line-386"> assertNull(res.getResult());</span>
<span class="source-line-no">387</span><span id="line-387"></span>
<span class="source-line-no">388</span><span id="line-388"> // get row back and assert the values</span>
<span class="source-line-no">389</span><span id="line-389"> getOneRowAndAssertAllButCExist(table);</span>
<span class="source-line-no">390</span><span id="line-390"></span>
<span class="source-line-no">391</span><span id="line-391"> // Test that we get a region level exception</span>
<span class="source-line-no">392</span><span id="line-392"> try {</span>
<span class="source-line-no">393</span><span id="line-393"> rm = getBogusRowMutations();</span>
<span class="source-line-no">394</span><span id="line-394"> table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">395</span><span id="line-395"> .ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")).build(rm));</span>
<span class="source-line-no">396</span><span id="line-396"> fail("Expected NoSuchColumnFamilyException");</span>
<span class="source-line-no">397</span><span id="line-397"> } catch (NoSuchColumnFamilyException e) {</span>
<span class="source-line-no">398</span><span id="line-398"> // expected</span>
<span class="source-line-no">399</span><span id="line-399"> } catch (RetriesExhaustedException e) {</span>
<span class="source-line-no">400</span><span id="line-400"> assertThat(e.getCause(), instanceOf(NoSuchColumnFamilyException.class));</span>
<span class="source-line-no">401</span><span id="line-401"> }</span>
<span class="source-line-no">402</span><span id="line-402"> }</span>
<span class="source-line-no">403</span><span id="line-403"> }</span>
<span class="source-line-no">404</span><span id="line-404"></span>
<span class="source-line-no">405</span><span id="line-405"> @Test</span>
<span class="source-line-no">406</span><span id="line-406"> public void testCheckAndMutateWithSingleFilter() throws Throwable {</span>
<span class="source-line-no">407</span><span id="line-407"> try (Table table = createTable()) {</span>
<span class="source-line-no">408</span><span id="line-408"> // put one row</span>
<span class="source-line-no">409</span><span id="line-409"> putOneRow(table);</span>
<span class="source-line-no">410</span><span id="line-410"> // get row back and assert the values</span>
<span class="source-line-no">411</span><span id="line-411"> getOneRowAndAssertAllExist(table);</span>
<span class="source-line-no">412</span><span id="line-412"></span>
<span class="source-line-no">413</span><span id="line-413"> // Put with success</span>
<span class="source-line-no">414</span><span id="line-414"> CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">415</span><span id="line-415"> .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">416</span><span id="line-416"> Bytes.toBytes("a")))</span>
<span class="source-line-no">417</span><span id="line-417"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))));</span>
<span class="source-line-no">418</span><span id="line-418"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">419</span><span id="line-419"> assertNull(result.getResult());</span>
<span class="source-line-no">420</span><span id="line-420"></span>
<span class="source-line-no">421</span><span id="line-421"> Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">422</span><span id="line-422"> assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">423</span><span id="line-423"></span>
<span class="source-line-no">424</span><span id="line-424"> // Put with failure</span>
<span class="source-line-no">425</span><span id="line-425"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">426</span><span id="line-426"> .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">427</span><span id="line-427"> Bytes.toBytes("b")))</span>
<span class="source-line-no">428</span><span id="line-428"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e"))));</span>
<span class="source-line-no">429</span><span id="line-429"> assertFalse(result.isSuccess());</span>
<span class="source-line-no">430</span><span id="line-430"> assertNull(result.getResult());</span>
<span class="source-line-no">431</span><span id="line-431"></span>
<span class="source-line-no">432</span><span id="line-432"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"))));</span>
<span class="source-line-no">433</span><span id="line-433"></span>
<span class="source-line-no">434</span><span id="line-434"> // Delete with success</span>
<span class="source-line-no">435</span><span id="line-435"> result = table.checkAndMutate(CheckAndMutate</span>
<span class="source-line-no">436</span><span id="line-436"> .newBuilder(ROWKEY).ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"),</span>
<span class="source-line-no">437</span><span id="line-437"> CompareOperator.EQUAL, Bytes.toBytes("a")))</span>
<span class="source-line-no">438</span><span id="line-438"> .build(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">439</span><span id="line-439"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">440</span><span id="line-440"> assertNull(result.getResult());</span>
<span class="source-line-no">441</span><span id="line-441"></span>
<span class="source-line-no">442</span><span id="line-442"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">443</span><span id="line-443"></span>
<span class="source-line-no">444</span><span id="line-444"> // Mutate with success</span>
<span class="source-line-no">445</span><span id="line-445"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">446</span><span id="line-446"> .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">447</span><span id="line-447"> Bytes.toBytes("b")))</span>
<span class="source-line-no">448</span><span id="line-448"> .build(new RowMutations(ROWKEY)</span>
<span class="source-line-no">449</span><span id="line-449"> .add((Mutation) new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))</span>
<span class="source-line-no">450</span><span id="line-450"> .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A")))));</span>
<span class="source-line-no">451</span><span id="line-451"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">452</span><span id="line-452"> assertNull(result.getResult());</span>
<span class="source-line-no">453</span><span id="line-453"></span>
<span class="source-line-no">454</span><span id="line-454"> r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">455</span><span id="line-455"> assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">456</span><span id="line-456"></span>
<span class="source-line-no">457</span><span id="line-457"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">458</span><span id="line-458"> }</span>
<span class="source-line-no">459</span><span id="line-459"> }</span>
<span class="source-line-no">460</span><span id="line-460"></span>
<span class="source-line-no">461</span><span id="line-461"> @Test</span>
<span class="source-line-no">462</span><span id="line-462"> public void testCheckAndMutateWithMultipleFilters() throws Throwable {</span>
<span class="source-line-no">463</span><span id="line-463"> try (Table table = createTable()) {</span>
<span class="source-line-no">464</span><span id="line-464"> // put one row</span>
<span class="source-line-no">465</span><span id="line-465"> putOneRow(table);</span>
<span class="source-line-no">466</span><span id="line-466"> // get row back and assert the values</span>
<span class="source-line-no">467</span><span id="line-467"> getOneRowAndAssertAllExist(table);</span>
<span class="source-line-no">468</span><span id="line-468"></span>
<span class="source-line-no">469</span><span id="line-469"> // Put with success</span>
<span class="source-line-no">470</span><span id="line-470"> CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">471</span><span id="line-471"> .ifMatches(new FilterList(</span>
<span class="source-line-no">472</span><span id="line-472"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">473</span><span id="line-473"> Bytes.toBytes("a")),</span>
<span class="source-line-no">474</span><span id="line-474"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">475</span><span id="line-475"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">476</span><span id="line-476"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))));</span>
<span class="source-line-no">477</span><span id="line-477"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">478</span><span id="line-478"> assertNull(result.getResult());</span>
<span class="source-line-no">479</span><span id="line-479"></span>
<span class="source-line-no">480</span><span id="line-480"> Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">481</span><span id="line-481"> assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">482</span><span id="line-482"></span>
<span class="source-line-no">483</span><span id="line-483"> // Put with failure</span>
<span class="source-line-no">484</span><span id="line-484"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">485</span><span id="line-485"> .ifMatches(new FilterList(</span>
<span class="source-line-no">486</span><span id="line-486"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">487</span><span id="line-487"> Bytes.toBytes("a")),</span>
<span class="source-line-no">488</span><span id="line-488"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">489</span><span id="line-489"> Bytes.toBytes("c"))))</span>
<span class="source-line-no">490</span><span id="line-490"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e"))));</span>
<span class="source-line-no">491</span><span id="line-491"> assertFalse(result.isSuccess());</span>
<span class="source-line-no">492</span><span id="line-492"> assertNull(result.getResult());</span>
<span class="source-line-no">493</span><span id="line-493"></span>
<span class="source-line-no">494</span><span id="line-494"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"))));</span>
<span class="source-line-no">495</span><span id="line-495"></span>
<span class="source-line-no">496</span><span id="line-496"> // Delete with success</span>
<span class="source-line-no">497</span><span id="line-497"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">498</span><span id="line-498"> .ifMatches(new FilterList(</span>
<span class="source-line-no">499</span><span id="line-499"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">500</span><span id="line-500"> Bytes.toBytes("a")),</span>
<span class="source-line-no">501</span><span id="line-501"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">502</span><span id="line-502"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">503</span><span id="line-503"> .build(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">504</span><span id="line-504"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">505</span><span id="line-505"> assertNull(result.getResult());</span>
<span class="source-line-no">506</span><span id="line-506"></span>
<span class="source-line-no">507</span><span id="line-507"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">508</span><span id="line-508"></span>
<span class="source-line-no">509</span><span id="line-509"> // Mutate with success</span>
<span class="source-line-no">510</span><span id="line-510"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">511</span><span id="line-511"> .ifMatches(new FilterList(</span>
<span class="source-line-no">512</span><span id="line-512"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">513</span><span id="line-513"> Bytes.toBytes("a")),</span>
<span class="source-line-no">514</span><span id="line-514"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">515</span><span id="line-515"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">516</span><span id="line-516"> .build(new RowMutations(ROWKEY)</span>
<span class="source-line-no">517</span><span id="line-517"> .add((Mutation) new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))</span>
<span class="source-line-no">518</span><span id="line-518"> .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A")))));</span>
<span class="source-line-no">519</span><span id="line-519"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">520</span><span id="line-520"> assertNull(result.getResult());</span>
<span class="source-line-no">521</span><span id="line-521"></span>
<span class="source-line-no">522</span><span id="line-522"> r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">523</span><span id="line-523"> assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">524</span><span id="line-524"></span>
<span class="source-line-no">525</span><span id="line-525"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">526</span><span id="line-526"> }</span>
<span class="source-line-no">527</span><span id="line-527"> }</span>
<span class="source-line-no">528</span><span id="line-528"></span>
<span class="source-line-no">529</span><span id="line-529"> @Test</span>
<span class="source-line-no">530</span><span id="line-530"> public void testCheckAndMutateWithTimestampFilter() throws Throwable {</span>
<span class="source-line-no">531</span><span id="line-531"> try (Table table = createTable()) {</span>
<span class="source-line-no">532</span><span id="line-532"> // Put with specifying the timestamp</span>
<span class="source-line-no">533</span><span id="line-533"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a")));</span>
<span class="source-line-no">534</span><span id="line-534"></span>
<span class="source-line-no">535</span><span id="line-535"> // Put with success</span>
<span class="source-line-no">536</span><span id="line-536"> CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">537</span><span id="line-537"> .ifMatches(</span>
<span class="source-line-no">538</span><span id="line-538"> new FilterList(new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)),</span>
<span class="source-line-no">539</span><span id="line-539"> new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))),</span>
<span class="source-line-no">540</span><span id="line-540"> new TimestampsFilter(Collections.singletonList(100L))))</span>
<span class="source-line-no">541</span><span id="line-541"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))));</span>
<span class="source-line-no">542</span><span id="line-542"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">543</span><span id="line-543"> assertNull(result.getResult());</span>
<span class="source-line-no">544</span><span id="line-544"></span>
<span class="source-line-no">545</span><span id="line-545"> Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">546</span><span id="line-546"> assertEquals("b", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">547</span><span id="line-547"></span>
<span class="source-line-no">548</span><span id="line-548"> // Put with failure</span>
<span class="source-line-no">549</span><span id="line-549"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">550</span><span id="line-550"> .ifMatches(</span>
<span class="source-line-no">551</span><span id="line-551"> new FilterList(new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)),</span>
<span class="source-line-no">552</span><span id="line-552"> new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))),</span>
<span class="source-line-no">553</span><span id="line-553"> new TimestampsFilter(Collections.singletonList(101L))))</span>
<span class="source-line-no">554</span><span id="line-554"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c"))));</span>
<span class="source-line-no">555</span><span id="line-555"> assertFalse(result.isSuccess());</span>
<span class="source-line-no">556</span><span id="line-556"> assertNull(result.getResult());</span>
<span class="source-line-no">557</span><span id="line-557"></span>
<span class="source-line-no">558</span><span id="line-558"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">559</span><span id="line-559"> }</span>
<span class="source-line-no">560</span><span id="line-560"> }</span>
<span class="source-line-no">561</span><span id="line-561"></span>
<span class="source-line-no">562</span><span id="line-562"> @Test</span>
<span class="source-line-no">563</span><span id="line-563"> public void testCheckAndMutateWithFilterAndTimeRange() throws Throwable {</span>
<span class="source-line-no">564</span><span id="line-564"> try (Table table = createTable()) {</span>
<span class="source-line-no">565</span><span id="line-565"> // Put with specifying the timestamp</span>
<span class="source-line-no">566</span><span id="line-566"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a")));</span>
<span class="source-line-no">567</span><span id="line-567"></span>
<span class="source-line-no">568</span><span id="line-568"> // Put with success</span>
<span class="source-line-no">569</span><span id="line-569"> CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">570</span><span id="line-570"> .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">571</span><span id="line-571"> Bytes.toBytes("a")))</span>
<span class="source-line-no">572</span><span id="line-572"> .timeRange(TimeRange.between(0, 101))</span>
<span class="source-line-no">573</span><span id="line-573"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))));</span>
<span class="source-line-no">574</span><span id="line-574"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">575</span><span id="line-575"> assertNull(result.getResult());</span>
<span class="source-line-no">576</span><span id="line-576"></span>
<span class="source-line-no">577</span><span id="line-577"> Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">578</span><span id="line-578"> assertEquals("b", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">579</span><span id="line-579"></span>
<span class="source-line-no">580</span><span id="line-580"> // Put with failure</span>
<span class="source-line-no">581</span><span id="line-581"> result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">582</span><span id="line-582"> .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">583</span><span id="line-583"> Bytes.toBytes("a")))</span>
<span class="source-line-no">584</span><span id="line-584"> .timeRange(TimeRange.between(0, 100))</span>
<span class="source-line-no">585</span><span id="line-585"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c"))));</span>
<span class="source-line-no">586</span><span id="line-586"> assertFalse(result.isSuccess());</span>
<span class="source-line-no">587</span><span id="line-587"> assertNull(result.getResult());</span>
<span class="source-line-no">588</span><span id="line-588"></span>
<span class="source-line-no">589</span><span id="line-589"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">590</span><span id="line-590"> }</span>
<span class="source-line-no">591</span><span id="line-591"> }</span>
<span class="source-line-no">592</span><span id="line-592"></span>
<span class="source-line-no">593</span><span id="line-593"> @Test(expected = IllegalStateException.class)</span>
<span class="source-line-no">594</span><span id="line-594"> public void testCheckAndMutateBuilderWithoutCondition() {</span>
<span class="source-line-no">595</span><span id="line-595"> CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">596</span><span id="line-596"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")));</span>
<span class="source-line-no">597</span><span id="line-597"> }</span>
<span class="source-line-no">598</span><span id="line-598"></span>
<span class="source-line-no">599</span><span id="line-599"> @Test</span>
<span class="source-line-no">600</span><span id="line-600"> public void testCheckAndIncrement() throws Throwable {</span>
<span class="source-line-no">601</span><span id="line-601"> try (Table table = createTable()) {</span>
<span class="source-line-no">602</span><span id="line-602"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")));</span>
<span class="source-line-no">603</span><span id="line-603"></span>
<span class="source-line-no">604</span><span id="line-604"> // CheckAndIncrement with correct value</span>
<span class="source-line-no">605</span><span id="line-605"> CheckAndMutateResult res = table.checkAndMutate(</span>
<span class="source-line-no">606</span><span id="line-606"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"))</span>
<span class="source-line-no">607</span><span id="line-607"> .build(new Increment(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), 1)));</span>
<span class="source-line-no">608</span><span id="line-608"> assertTrue(res.isSuccess());</span>
<span class="source-line-no">609</span><span id="line-609"> assertEquals(1, Bytes.toLong(res.getResult().getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">610</span><span id="line-610"></span>
<span class="source-line-no">611</span><span id="line-611"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">612</span><span id="line-612"> assertEquals(1, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">613</span><span id="line-613"></span>
<span class="source-line-no">614</span><span id="line-614"> // CheckAndIncrement with wrong value</span>
<span class="source-line-no">615</span><span id="line-615"> res = table.checkAndMutate(</span>
<span class="source-line-no">616</span><span id="line-616"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("b"))</span>
<span class="source-line-no">617</span><span id="line-617"> .build(new Increment(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), 1)));</span>
<span class="source-line-no">618</span><span id="line-618"> assertFalse(res.isSuccess());</span>
<span class="source-line-no">619</span><span id="line-619"> assertNull(res.getResult());</span>
<span class="source-line-no">620</span><span id="line-620"></span>
<span class="source-line-no">621</span><span id="line-621"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">622</span><span id="line-622"> assertEquals(1, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">623</span><span id="line-623"></span>
<span class="source-line-no">624</span><span id="line-624"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")));</span>
<span class="source-line-no">625</span><span id="line-625"></span>
<span class="source-line-no">626</span><span id="line-626"> // CheckAndIncrement with a filter and correct value</span>
<span class="source-line-no">627</span><span id="line-627"> res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">628</span><span id="line-628"> .ifMatches(new FilterList(</span>
<span class="source-line-no">629</span><span id="line-629"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">630</span><span id="line-630"> Bytes.toBytes("a")),</span>
<span class="source-line-no">631</span><span id="line-631"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("C"), CompareOperator.EQUAL,</span>
<span class="source-line-no">632</span><span id="line-632"> Bytes.toBytes("c"))))</span>
<span class="source-line-no">633</span><span id="line-633"> .build(new Increment(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), 2)));</span>
<span class="source-line-no">634</span><span id="line-634"> assertTrue(res.isSuccess());</span>
<span class="source-line-no">635</span><span id="line-635"> assertEquals(3, Bytes.toLong(res.getResult().getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">636</span><span id="line-636"></span>
<span class="source-line-no">637</span><span id="line-637"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">638</span><span id="line-638"> assertEquals(3, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">639</span><span id="line-639"></span>
<span class="source-line-no">640</span><span id="line-640"> // CheckAndIncrement with a filter and correct value</span>
<span class="source-line-no">641</span><span id="line-641"> res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">642</span><span id="line-642"> .ifMatches(new FilterList(</span>
<span class="source-line-no">643</span><span id="line-643"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">644</span><span id="line-644"> Bytes.toBytes("b")),</span>
<span class="source-line-no">645</span><span id="line-645"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("C"), CompareOperator.EQUAL,</span>
<span class="source-line-no">646</span><span id="line-646"> Bytes.toBytes("d"))))</span>
<span class="source-line-no">647</span><span id="line-647"> .build(new Increment(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), 2)));</span>
<span class="source-line-no">648</span><span id="line-648"> assertFalse(res.isSuccess());</span>
<span class="source-line-no">649</span><span id="line-649"> assertNull(res.getResult());</span>
<span class="source-line-no">650</span><span id="line-650"></span>
<span class="source-line-no">651</span><span id="line-651"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">652</span><span id="line-652"> assertEquals(3, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">653</span><span id="line-653"> }</span>
<span class="source-line-no">654</span><span id="line-654"> }</span>
<span class="source-line-no">655</span><span id="line-655"></span>
<span class="source-line-no">656</span><span id="line-656"> @Test</span>
<span class="source-line-no">657</span><span id="line-657"> public void testCheckAndAppend() throws Throwable {</span>
<span class="source-line-no">658</span><span id="line-658"> try (Table table = createTable()) {</span>
<span class="source-line-no">659</span><span id="line-659"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")));</span>
<span class="source-line-no">660</span><span id="line-660"></span>
<span class="source-line-no">661</span><span id="line-661"> // CheckAndAppend with correct value</span>
<span class="source-line-no">662</span><span id="line-662"> CheckAndMutateResult res = table.checkAndMutate(</span>
<span class="source-line-no">663</span><span id="line-663"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"))</span>
<span class="source-line-no">664</span><span id="line-664"> .build(new Append(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))));</span>
<span class="source-line-no">665</span><span id="line-665"> assertTrue(res.isSuccess());</span>
<span class="source-line-no">666</span><span id="line-666"> assertEquals("b", Bytes.toString(res.getResult().getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">667</span><span id="line-667"></span>
<span class="source-line-no">668</span><span id="line-668"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">669</span><span id="line-669"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">670</span><span id="line-670"></span>
<span class="source-line-no">671</span><span id="line-671"> // CheckAndAppend with correct value</span>
<span class="source-line-no">672</span><span id="line-672"> res = table.checkAndMutate(</span>
<span class="source-line-no">673</span><span id="line-673"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("b"))</span>
<span class="source-line-no">674</span><span id="line-674"> .build(new Append(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))));</span>
<span class="source-line-no">675</span><span id="line-675"> assertFalse(res.isSuccess());</span>
<span class="source-line-no">676</span><span id="line-676"> assertNull(res.getResult());</span>
<span class="source-line-no">677</span><span id="line-677"></span>
<span class="source-line-no">678</span><span id="line-678"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">679</span><span id="line-679"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">680</span><span id="line-680"></span>
<span class="source-line-no">681</span><span id="line-681"> table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")));</span>
<span class="source-line-no">682</span><span id="line-682"></span>
<span class="source-line-no">683</span><span id="line-683"> // CheckAndAppend with a filter and correct value</span>
<span class="source-line-no">684</span><span id="line-684"> res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">685</span><span id="line-685"> .ifMatches(new FilterList(</span>
<span class="source-line-no">686</span><span id="line-686"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">687</span><span id="line-687"> Bytes.toBytes("a")),</span>
<span class="source-line-no">688</span><span id="line-688"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("C"), CompareOperator.EQUAL,</span>
<span class="source-line-no">689</span><span id="line-689"> Bytes.toBytes("c"))))</span>
<span class="source-line-no">690</span><span id="line-690"> .build(new Append(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("bb"))));</span>
<span class="source-line-no">691</span><span id="line-691"> assertTrue(res.isSuccess());</span>
<span class="source-line-no">692</span><span id="line-692"> assertEquals("bbb", Bytes.toString(res.getResult().getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">693</span><span id="line-693"></span>
<span class="source-line-no">694</span><span id="line-694"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">695</span><span id="line-695"> assertEquals("bbb", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">696</span><span id="line-696"></span>
<span class="source-line-no">697</span><span id="line-697"> // CheckAndAppend with a filter and wrong value</span>
<span class="source-line-no">698</span><span id="line-698"> res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">699</span><span id="line-699"> .ifMatches(new FilterList(</span>
<span class="source-line-no">700</span><span id="line-700"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">701</span><span id="line-701"> Bytes.toBytes("b")),</span>
<span class="source-line-no">702</span><span id="line-702"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("C"), CompareOperator.EQUAL,</span>
<span class="source-line-no">703</span><span id="line-703"> Bytes.toBytes("d"))))</span>
<span class="source-line-no">704</span><span id="line-704"> .build(new Append(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("bb"))));</span>
<span class="source-line-no">705</span><span id="line-705"> assertFalse(res.isSuccess());</span>
<span class="source-line-no">706</span><span id="line-706"> assertNull(res.getResult());</span>
<span class="source-line-no">707</span><span id="line-707"></span>
<span class="source-line-no">708</span><span id="line-708"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">709</span><span id="line-709"> assertEquals("bbb", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">710</span><span id="line-710"> }</span>
<span class="source-line-no">711</span><span id="line-711"> }</span>
<span class="source-line-no">712</span><span id="line-712"></span>
<span class="source-line-no">713</span><span id="line-713"> @Test</span>
<span class="source-line-no">714</span><span id="line-714"> public void testCheckAndRowMutations() throws Throwable {</span>
<span class="source-line-no">715</span><span id="line-715"> final byte[] q1 = Bytes.toBytes("q1");</span>
<span class="source-line-no">716</span><span id="line-716"> final byte[] q2 = Bytes.toBytes("q2");</span>
<span class="source-line-no">717</span><span id="line-717"> final byte[] q3 = Bytes.toBytes("q3");</span>
<span class="source-line-no">718</span><span id="line-718"> final byte[] q4 = Bytes.toBytes("q4");</span>
<span class="source-line-no">719</span><span id="line-719"> final String v1 = "v1";</span>
<span class="source-line-no">720</span><span id="line-720"></span>
<span class="source-line-no">721</span><span id="line-721"> try (Table table = createTable()) {</span>
<span class="source-line-no">722</span><span id="line-722"> // Initial values</span>
<span class="source-line-no">723</span><span id="line-723"> table.put(Arrays.asList(new Put(ROWKEY).addColumn(FAMILY, q2, Bytes.toBytes("toBeDeleted")),</span>
<span class="source-line-no">724</span><span id="line-724"> new Put(ROWKEY).addColumn(FAMILY, q3, Bytes.toBytes(5L)),</span>
<span class="source-line-no">725</span><span id="line-725"> new Put(ROWKEY).addColumn(FAMILY, q4, Bytes.toBytes("a"))));</span>
<span class="source-line-no">726</span><span id="line-726"></span>
<span class="source-line-no">727</span><span id="line-727"> // Do CheckAndRowMutations</span>
<span class="source-line-no">728</span><span id="line-728"> CheckAndMutate checkAndMutate = CheckAndMutate.newBuilder(ROWKEY).ifNotExists(FAMILY, q1)</span>
<span class="source-line-no">729</span><span id="line-729"> .build(new RowMutations(ROWKEY).add(Arrays.asList(</span>
<span class="source-line-no">730</span><span id="line-730"> new Put(ROWKEY).addColumn(FAMILY, q1, Bytes.toBytes(v1)),</span>
<span class="source-line-no">731</span><span id="line-731"> new Delete(ROWKEY).addColumns(FAMILY, q2), new Increment(ROWKEY).addColumn(FAMILY, q3, 1),</span>
<span class="source-line-no">732</span><span id="line-732"> new Append(ROWKEY).addColumn(FAMILY, q4, Bytes.toBytes("b")))));</span>
<span class="source-line-no">733</span><span id="line-733"></span>
<span class="source-line-no">734</span><span id="line-734"> CheckAndMutateResult result = table.checkAndMutate(checkAndMutate);</span>
<span class="source-line-no">735</span><span id="line-735"> assertTrue(result.isSuccess());</span>
<span class="source-line-no">736</span><span id="line-736"> assertEquals(6L, Bytes.toLong(result.getResult().getValue(FAMILY, q3)));</span>
<span class="source-line-no">737</span><span id="line-737"> assertEquals("ab", Bytes.toString(result.getResult().getValue(FAMILY, q4)));</span>
<span class="source-line-no">738</span><span id="line-738"></span>
<span class="source-line-no">739</span><span id="line-739"> // Verify the value</span>
<span class="source-line-no">740</span><span id="line-740"> Result r = table.get(new Get(ROWKEY));</span>
<span class="source-line-no">741</span><span id="line-741"> assertEquals(v1, Bytes.toString(r.getValue(FAMILY, q1)));</span>
<span class="source-line-no">742</span><span id="line-742"> assertNull(r.getValue(FAMILY, q2));</span>
<span class="source-line-no">743</span><span id="line-743"> assertEquals(6L, Bytes.toLong(r.getValue(FAMILY, q3)));</span>
<span class="source-line-no">744</span><span id="line-744"> assertEquals("ab", Bytes.toString(r.getValue(FAMILY, q4)));</span>
<span class="source-line-no">745</span><span id="line-745"></span>
<span class="source-line-no">746</span><span id="line-746"> // Do CheckAndRowMutations again</span>
<span class="source-line-no">747</span><span id="line-747"> checkAndMutate = CheckAndMutate.newBuilder(ROWKEY).ifNotExists(FAMILY, q1)</span>
<span class="source-line-no">748</span><span id="line-748"> .build(new RowMutations(ROWKEY).add(Arrays.asList(new Delete(ROWKEY).addColumns(FAMILY, q1),</span>
<span class="source-line-no">749</span><span id="line-749"> new Put(ROWKEY).addColumn(FAMILY, q2, Bytes.toBytes(v1)),</span>
<span class="source-line-no">750</span><span id="line-750"> new Increment(ROWKEY).addColumn(FAMILY, q3, 1),</span>
<span class="source-line-no">751</span><span id="line-751"> new Append(ROWKEY).addColumn(FAMILY, q4, Bytes.toBytes("b")))));</span>
<span class="source-line-no">752</span><span id="line-752"></span>
<span class="source-line-no">753</span><span id="line-753"> result = table.checkAndMutate(checkAndMutate);</span>
<span class="source-line-no">754</span><span id="line-754"> assertFalse(result.isSuccess());</span>
<span class="source-line-no">755</span><span id="line-755"> assertNull(result.getResult());</span>
<span class="source-line-no">756</span><span id="line-756"></span>
<span class="source-line-no">757</span><span id="line-757"> // Verify the value</span>
<span class="source-line-no">758</span><span id="line-758"> r = table.get(new Get(ROWKEY));</span>
<span class="source-line-no">759</span><span id="line-759"> assertEquals(v1, Bytes.toString(r.getValue(FAMILY, q1)));</span>
<span class="source-line-no">760</span><span id="line-760"> assertNull(r.getValue(FAMILY, q2));</span>
<span class="source-line-no">761</span><span id="line-761"> assertEquals(6L, Bytes.toLong(r.getValue(FAMILY, q3)));</span>
<span class="source-line-no">762</span><span id="line-762"> assertEquals("ab", Bytes.toString(r.getValue(FAMILY, q4)));</span>
<span class="source-line-no">763</span><span id="line-763"> }</span>
<span class="source-line-no">764</span><span id="line-764"> }</span>
<span class="source-line-no">765</span><span id="line-765"></span>
<span class="source-line-no">766</span><span id="line-766"> // Tests for batch version of checkAndMutate</span>
<span class="source-line-no">767</span><span id="line-767"></span>
<span class="source-line-no">768</span><span id="line-768"> @Test</span>
<span class="source-line-no">769</span><span id="line-769"> public void testCheckAndMutateBatch() throws Throwable {</span>
<span class="source-line-no">770</span><span id="line-770"> try (Table table = createTable()) {</span>
<span class="source-line-no">771</span><span id="line-771"> table.put(</span>
<span class="source-line-no">772</span><span id="line-772"> Arrays.asList(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")),</span>
<span class="source-line-no">773</span><span id="line-773"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")),</span>
<span class="source-line-no">774</span><span id="line-774"> new Put(ROWKEY3).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")),</span>
<span class="source-line-no">775</span><span id="line-775"> new Put(ROWKEY4).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))));</span>
<span class="source-line-no">776</span><span id="line-776"></span>
<span class="source-line-no">777</span><span id="line-777"> // Test for Put</span>
<span class="source-line-no">778</span><span id="line-778"> CheckAndMutate checkAndMutate1 =</span>
<span class="source-line-no">779</span><span id="line-779"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"))</span>
<span class="source-line-no">780</span><span id="line-780"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("e")));</span>
<span class="source-line-no">781</span><span id="line-781"></span>
<span class="source-line-no">782</span><span id="line-782"> CheckAndMutate checkAndMutate2 =</span>
<span class="source-line-no">783</span><span id="line-783"> CheckAndMutate.newBuilder(ROWKEY2).ifEquals(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("a"))</span>
<span class="source-line-no">784</span><span id="line-784"> .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f")));</span>
<span class="source-line-no">785</span><span id="line-785"></span>
<span class="source-line-no">786</span><span id="line-786"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">787</span><span id="line-787"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">788</span><span id="line-788"></span>
<span class="source-line-no">789</span><span id="line-789"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">790</span><span id="line-790"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">791</span><span id="line-791"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">792</span><span id="line-792"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">793</span><span id="line-793"></span>
<span class="source-line-no">794</span><span id="line-794"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A")));</span>
<span class="source-line-no">795</span><span id="line-795"> assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">796</span><span id="line-796"></span>
<span class="source-line-no">797</span><span id="line-797"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">798</span><span id="line-798"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">799</span><span id="line-799"></span>
<span class="source-line-no">800</span><span id="line-800"> // Test for Delete</span>
<span class="source-line-no">801</span><span id="line-801"> checkAndMutate1 = CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">802</span><span id="line-802"> .ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("e")).build(new Delete(ROWKEY));</span>
<span class="source-line-no">803</span><span id="line-803"></span>
<span class="source-line-no">804</span><span id="line-804"> checkAndMutate2 = CheckAndMutate.newBuilder(ROWKEY2)</span>
<span class="source-line-no">805</span><span id="line-805"> .ifEquals(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("a")).build(new Delete(ROWKEY2));</span>
<span class="source-line-no">806</span><span id="line-806"></span>
<span class="source-line-no">807</span><span id="line-807"> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">808</span><span id="line-808"></span>
<span class="source-line-no">809</span><span id="line-809"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">810</span><span id="line-810"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">811</span><span id="line-811"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">812</span><span id="line-812"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">813</span><span id="line-813"></span>
<span class="source-line-no">814</span><span id="line-814"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">815</span><span id="line-815"></span>
<span class="source-line-no">816</span><span id="line-816"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">817</span><span id="line-817"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">818</span><span id="line-818"></span>
<span class="source-line-no">819</span><span id="line-819"> // Test for RowMutations</span>
<span class="source-line-no">820</span><span id="line-820"> checkAndMutate1 =</span>
<span class="source-line-no">821</span><span id="line-821"> CheckAndMutate.newBuilder(ROWKEY3).ifEquals(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c"))</span>
<span class="source-line-no">822</span><span id="line-822"> .build(new RowMutations(ROWKEY3)</span>
<span class="source-line-no">823</span><span id="line-823"> .add(</span>
<span class="source-line-no">824</span><span id="line-824"> (Mutation) new Put(ROWKEY3).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("f")))</span>
<span class="source-line-no">825</span><span id="line-825"> .add((Mutation) new Delete(ROWKEY3).addColumns(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">826</span><span id="line-826"></span>
<span class="source-line-no">827</span><span id="line-827"> checkAndMutate2 =</span>
<span class="source-line-no">828</span><span id="line-828"> CheckAndMutate.newBuilder(ROWKEY4).ifEquals(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("f"))</span>
<span class="source-line-no">829</span><span id="line-829"> .build(new RowMutations(ROWKEY4)</span>
<span class="source-line-no">830</span><span id="line-830"> .add(</span>
<span class="source-line-no">831</span><span id="line-831"> (Mutation) new Put(ROWKEY4).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("f")))</span>
<span class="source-line-no">832</span><span id="line-832"> .add((Mutation) new Delete(ROWKEY4).addColumns(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">833</span><span id="line-833"></span>
<span class="source-line-no">834</span><span id="line-834"> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">835</span><span id="line-835"></span>
<span class="source-line-no">836</span><span id="line-836"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">837</span><span id="line-837"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">838</span><span id="line-838"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">839</span><span id="line-839"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">840</span><span id="line-840"></span>
<span class="source-line-no">841</span><span id="line-841"> result = table.get(new Get(ROWKEY3));</span>
<span class="source-line-no">842</span><span id="line-842"> assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F"))));</span>
<span class="source-line-no">843</span><span id="line-843"> assertNull(result.getValue(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">844</span><span id="line-844"></span>
<span class="source-line-no">845</span><span id="line-845"> result = table.get(new Get(ROWKEY4));</span>
<span class="source-line-no">846</span><span id="line-846"> assertNull(result.getValue(FAMILY, Bytes.toBytes("F")));</span>
<span class="source-line-no">847</span><span id="line-847"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">848</span><span id="line-848"> }</span>
<span class="source-line-no">849</span><span id="line-849"> }</span>
<span class="source-line-no">850</span><span id="line-850"></span>
<span class="source-line-no">851</span><span id="line-851"> @Test</span>
<span class="source-line-no">852</span><span id="line-852"> public void testCheckAndMutateBatch2() throws Throwable {</span>
<span class="source-line-no">853</span><span id="line-853"> try (Table table = createTable()) {</span>
<span class="source-line-no">854</span><span id="line-854"> table.put(</span>
<span class="source-line-no">855</span><span id="line-855"> Arrays.asList(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")),</span>
<span class="source-line-no">856</span><span id="line-856"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")),</span>
<span class="source-line-no">857</span><span id="line-857"> new Put(ROWKEY3).addColumn(FAMILY, Bytes.toBytes("C"), 100, Bytes.toBytes("c")),</span>
<span class="source-line-no">858</span><span id="line-858"> new Put(ROWKEY4).addColumn(FAMILY, Bytes.toBytes("D"), 100, Bytes.toBytes("d"))));</span>
<span class="source-line-no">859</span><span id="line-859"></span>
<span class="source-line-no">860</span><span id="line-860"> // Test for ifNotExists()</span>
<span class="source-line-no">861</span><span id="line-861"> CheckAndMutate checkAndMutate1 =</span>
<span class="source-line-no">862</span><span id="line-862"> CheckAndMutate.newBuilder(ROWKEY).ifNotExists(FAMILY, Bytes.toBytes("B"))</span>
<span class="source-line-no">863</span><span id="line-863"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("e")));</span>
<span class="source-line-no">864</span><span id="line-864"></span>
<span class="source-line-no">865</span><span id="line-865"> CheckAndMutate checkAndMutate2 =</span>
<span class="source-line-no">866</span><span id="line-866"> CheckAndMutate.newBuilder(ROWKEY2).ifNotExists(FAMILY, Bytes.toBytes("B"))</span>
<span class="source-line-no">867</span><span id="line-867"> .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f")));</span>
<span class="source-line-no">868</span><span id="line-868"></span>
<span class="source-line-no">869</span><span id="line-869"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">870</span><span id="line-870"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">871</span><span id="line-871"></span>
<span class="source-line-no">872</span><span id="line-872"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">873</span><span id="line-873"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">874</span><span id="line-874"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">875</span><span id="line-875"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">876</span><span id="line-876"></span>
<span class="source-line-no">877</span><span id="line-877"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A")));</span>
<span class="source-line-no">878</span><span id="line-878"> assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">879</span><span id="line-879"></span>
<span class="source-line-no">880</span><span id="line-880"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">881</span><span id="line-881"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">882</span><span id="line-882"></span>
<span class="source-line-no">883</span><span id="line-883"> // Test for ifMatches()</span>
<span class="source-line-no">884</span><span id="line-884"> checkAndMutate1 = CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">885</span><span id="line-885"> .ifMatches(FAMILY, Bytes.toBytes("A"), CompareOperator.NOT_EQUAL, Bytes.toBytes("a"))</span>
<span class="source-line-no">886</span><span id="line-886"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")));</span>
<span class="source-line-no">887</span><span id="line-887"></span>
<span class="source-line-no">888</span><span id="line-888"> checkAndMutate2 = CheckAndMutate.newBuilder(ROWKEY2)</span>
<span class="source-line-no">889</span><span id="line-889"> .ifMatches(FAMILY, Bytes.toBytes("B"), CompareOperator.GREATER, Bytes.toBytes("b"))</span>
<span class="source-line-no">890</span><span id="line-890"> .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f")));</span>
<span class="source-line-no">891</span><span id="line-891"></span>
<span class="source-line-no">892</span><span id="line-892"> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">893</span><span id="line-893"></span>
<span class="source-line-no">894</span><span id="line-894"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">895</span><span id="line-895"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">896</span><span id="line-896"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">897</span><span id="line-897"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">898</span><span id="line-898"></span>
<span class="source-line-no">899</span><span id="line-899"> result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A")));</span>
<span class="source-line-no">900</span><span id="line-900"> assertEquals("a", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">901</span><span id="line-901"></span>
<span class="source-line-no">902</span><span id="line-902"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">903</span><span id="line-903"> assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">904</span><span id="line-904"></span>
<span class="source-line-no">905</span><span id="line-905"> // Test for timeRange()</span>
<span class="source-line-no">906</span><span id="line-906"> checkAndMutate1 =</span>
<span class="source-line-no">907</span><span id="line-907"> CheckAndMutate.newBuilder(ROWKEY3).ifEquals(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c"))</span>
<span class="source-line-no">908</span><span id="line-908"> .timeRange(TimeRange.between(0, 101))</span>
<span class="source-line-no">909</span><span id="line-909"> .build(new Put(ROWKEY3).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("e")));</span>
<span class="source-line-no">910</span><span id="line-910"></span>
<span class="source-line-no">911</span><span id="line-911"> checkAndMutate2 =</span>
<span class="source-line-no">912</span><span id="line-912"> CheckAndMutate.newBuilder(ROWKEY4).ifEquals(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))</span>
<span class="source-line-no">913</span><span id="line-913"> .timeRange(TimeRange.between(0, 100))</span>
<span class="source-line-no">914</span><span id="line-914"> .build(new Put(ROWKEY4).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("f")));</span>
<span class="source-line-no">915</span><span id="line-915"></span>
<span class="source-line-no">916</span><span id="line-916"> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">917</span><span id="line-917"></span>
<span class="source-line-no">918</span><span id="line-918"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">919</span><span id="line-919"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">920</span><span id="line-920"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">921</span><span id="line-921"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">922</span><span id="line-922"></span>
<span class="source-line-no">923</span><span id="line-923"> result = table.get(new Get(ROWKEY3).addColumn(FAMILY, Bytes.toBytes("C")));</span>
<span class="source-line-no">924</span><span id="line-924"> assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">925</span><span id="line-925"></span>
<span class="source-line-no">926</span><span id="line-926"> result = table.get(new Get(ROWKEY4).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">927</span><span id="line-927"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">928</span><span id="line-928"> }</span>
<span class="source-line-no">929</span><span id="line-929"> }</span>
<span class="source-line-no">930</span><span id="line-930"></span>
<span class="source-line-no">931</span><span id="line-931"> @Test</span>
<span class="source-line-no">932</span><span id="line-932"> public void testCheckAndMutateBatchWithFilter() throws Throwable {</span>
<span class="source-line-no">933</span><span id="line-933"> try (Table table = createTable()) {</span>
<span class="source-line-no">934</span><span id="line-934"> table.put(Arrays.asList(</span>
<span class="source-line-no">935</span><span id="line-935"> new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"))</span>
<span class="source-line-no">936</span><span id="line-936"> .addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))</span>
<span class="source-line-no">937</span><span id="line-937"> .addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")),</span>
<span class="source-line-no">938</span><span id="line-938"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))</span>
<span class="source-line-no">939</span><span id="line-939"> .addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e"))</span>
<span class="source-line-no">940</span><span id="line-940"> .addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("f"))));</span>
<span class="source-line-no">941</span><span id="line-941"></span>
<span class="source-line-no">942</span><span id="line-942"> // Test for Put</span>
<span class="source-line-no">943</span><span id="line-943"> CheckAndMutate checkAndMutate1 = CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">944</span><span id="line-944"> .ifMatches(new FilterList(</span>
<span class="source-line-no">945</span><span id="line-945"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">946</span><span id="line-946"> Bytes.toBytes("a")),</span>
<span class="source-line-no">947</span><span id="line-947"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">948</span><span id="line-948"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">949</span><span id="line-949"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("g")));</span>
<span class="source-line-no">950</span><span id="line-950"></span>
<span class="source-line-no">951</span><span id="line-951"> CheckAndMutate checkAndMutate2 = CheckAndMutate.newBuilder(ROWKEY2)</span>
<span class="source-line-no">952</span><span id="line-952"> .ifMatches(new FilterList(</span>
<span class="source-line-no">953</span><span id="line-953"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("D"), CompareOperator.EQUAL,</span>
<span class="source-line-no">954</span><span id="line-954"> Bytes.toBytes("a")),</span>
<span class="source-line-no">955</span><span id="line-955"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("E"), CompareOperator.EQUAL,</span>
<span class="source-line-no">956</span><span id="line-956"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">957</span><span id="line-957"> .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("h")));</span>
<span class="source-line-no">958</span><span id="line-958"></span>
<span class="source-line-no">959</span><span id="line-959"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">960</span><span id="line-960"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">961</span><span id="line-961"></span>
<span class="source-line-no">962</span><span id="line-962"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">963</span><span id="line-963"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">964</span><span id="line-964"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">965</span><span id="line-965"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">966</span><span id="line-966"></span>
<span class="source-line-no">967</span><span id="line-967"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C")));</span>
<span class="source-line-no">968</span><span id="line-968"> assertEquals("g", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">969</span><span id="line-969"></span>
<span class="source-line-no">970</span><span id="line-970"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F")));</span>
<span class="source-line-no">971</span><span id="line-971"> assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F"))));</span>
<span class="source-line-no">972</span><span id="line-972"></span>
<span class="source-line-no">973</span><span id="line-973"> // Test for Delete</span>
<span class="source-line-no">974</span><span id="line-974"> checkAndMutate1 = CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">975</span><span id="line-975"> .ifMatches(new FilterList(</span>
<span class="source-line-no">976</span><span id="line-976"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">977</span><span id="line-977"> Bytes.toBytes("a")),</span>
<span class="source-line-no">978</span><span id="line-978"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">979</span><span id="line-979"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">980</span><span id="line-980"> .build(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("C")));</span>
<span class="source-line-no">981</span><span id="line-981"></span>
<span class="source-line-no">982</span><span id="line-982"> checkAndMutate2 = CheckAndMutate.newBuilder(ROWKEY2)</span>
<span class="source-line-no">983</span><span id="line-983"> .ifMatches(new FilterList(</span>
<span class="source-line-no">984</span><span id="line-984"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("D"), CompareOperator.EQUAL,</span>
<span class="source-line-no">985</span><span id="line-985"> Bytes.toBytes("a")),</span>
<span class="source-line-no">986</span><span id="line-986"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("E"), CompareOperator.EQUAL,</span>
<span class="source-line-no">987</span><span id="line-987"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">988</span><span id="line-988"> .build(new Delete(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F")));</span>
<span class="source-line-no">989</span><span id="line-989"></span>
<span class="source-line-no">990</span><span id="line-990"> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">991</span><span id="line-991"></span>
<span class="source-line-no">992</span><span id="line-992"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">993</span><span id="line-993"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">994</span><span id="line-994"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">995</span><span id="line-995"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">996</span><span id="line-996"></span>
<span class="source-line-no">997</span><span id="line-997"> assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">998</span><span id="line-998"></span>
<span class="source-line-no">999</span><span id="line-999"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F")));</span>
<span class="source-line-no">1000</span><span id="line-1000"> assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F"))));</span>
<span class="source-line-no">1001</span><span id="line-1001"></span>
<span class="source-line-no">1002</span><span id="line-1002"> // Test for RowMutations</span>
<span class="source-line-no">1003</span><span id="line-1003"> checkAndMutate1 = CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">1004</span><span id="line-1004"> .ifMatches(new FilterList(</span>
<span class="source-line-no">1005</span><span id="line-1005"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1006</span><span id="line-1006"> Bytes.toBytes("a")),</span>
<span class="source-line-no">1007</span><span id="line-1007"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1008</span><span id="line-1008"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">1009</span><span id="line-1009"> .build(new RowMutations(ROWKEY)</span>
<span class="source-line-no">1010</span><span id="line-1010"> .add((Mutation) new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")))</span>
<span class="source-line-no">1011</span><span id="line-1011"> .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">1012</span><span id="line-1012"></span>
<span class="source-line-no">1013</span><span id="line-1013"> checkAndMutate2 = CheckAndMutate.newBuilder(ROWKEY2)</span>
<span class="source-line-no">1014</span><span id="line-1014"> .ifMatches(new FilterList(</span>
<span class="source-line-no">1015</span><span id="line-1015"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("D"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1016</span><span id="line-1016"> Bytes.toBytes("a")),</span>
<span class="source-line-no">1017</span><span id="line-1017"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("E"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1018</span><span id="line-1018"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">1019</span><span id="line-1019"> .build(new RowMutations(ROWKEY2)</span>
<span class="source-line-no">1020</span><span id="line-1020"> .add(</span>
<span class="source-line-no">1021</span><span id="line-1021"> (Mutation) new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("g")))</span>
<span class="source-line-no">1022</span><span id="line-1022"> .add((Mutation) new Delete(ROWKEY2).addColumns(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">1023</span><span id="line-1023"></span>
<span class="source-line-no">1024</span><span id="line-1024"> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">1025</span><span id="line-1025"></span>
<span class="source-line-no">1026</span><span id="line-1026"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">1027</span><span id="line-1027"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">1028</span><span id="line-1028"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">1029</span><span id="line-1029"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">1030</span><span id="line-1030"></span>
<span class="source-line-no">1031</span><span id="line-1031"> result = table.get(new Get(ROWKEY));</span>
<span class="source-line-no">1032</span><span id="line-1032"> assertNull(result.getValue(FAMILY, Bytes.toBytes("A")));</span>
<span class="source-line-no">1033</span><span id="line-1033"> assertEquals("c", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">1034</span><span id="line-1034"></span>
<span class="source-line-no">1035</span><span id="line-1035"> result = table.get(new Get(ROWKEY2));</span>
<span class="source-line-no">1036</span><span id="line-1036"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">1037</span><span id="line-1037"> assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F"))));</span>
<span class="source-line-no">1038</span><span id="line-1038"> }</span>
<span class="source-line-no">1039</span><span id="line-1039"> }</span>
<span class="source-line-no">1040</span><span id="line-1040"></span>
<span class="source-line-no">1041</span><span id="line-1041"> @Test</span>
<span class="source-line-no">1042</span><span id="line-1042"> public void testCheckAndMutateBatchWithFilterAndTimeRange() throws Throwable {</span>
<span class="source-line-no">1043</span><span id="line-1043"> try (Table table = createTable()) {</span>
<span class="source-line-no">1044</span><span id="line-1044"> table.put(Arrays.asList(</span>
<span class="source-line-no">1045</span><span id="line-1045"> new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a"))</span>
<span class="source-line-no">1046</span><span id="line-1046"> .addColumn(FAMILY, Bytes.toBytes("B"), 100, Bytes.toBytes("b"))</span>
<span class="source-line-no">1047</span><span id="line-1047"> .addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")),</span>
<span class="source-line-no">1048</span><span id="line-1048"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("D"), 100, Bytes.toBytes("d"))</span>
<span class="source-line-no">1049</span><span id="line-1049"> .addColumn(FAMILY, Bytes.toBytes("E"), 100, Bytes.toBytes("e"))</span>
<span class="source-line-no">1050</span><span id="line-1050"> .addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("f"))));</span>
<span class="source-line-no">1051</span><span id="line-1051"></span>
<span class="source-line-no">1052</span><span id="line-1052"> CheckAndMutate checkAndMutate1 = CheckAndMutate.newBuilder(ROWKEY)</span>
<span class="source-line-no">1053</span><span id="line-1053"> .ifMatches(new FilterList(</span>
<span class="source-line-no">1054</span><span id="line-1054"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1055</span><span id="line-1055"> Bytes.toBytes("a")),</span>
<span class="source-line-no">1056</span><span id="line-1056"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1057</span><span id="line-1057"> Bytes.toBytes("b"))))</span>
<span class="source-line-no">1058</span><span id="line-1058"> .timeRange(TimeRange.between(0, 101))</span>
<span class="source-line-no">1059</span><span id="line-1059"> .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("g")));</span>
<span class="source-line-no">1060</span><span id="line-1060"></span>
<span class="source-line-no">1061</span><span id="line-1061"> CheckAndMutate checkAndMutate2 = CheckAndMutate.newBuilder(ROWKEY2)</span>
<span class="source-line-no">1062</span><span id="line-1062"> .ifMatches(new FilterList(</span>
<span class="source-line-no">1063</span><span id="line-1063"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("D"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1064</span><span id="line-1064"> Bytes.toBytes("d")),</span>
<span class="source-line-no">1065</span><span id="line-1065"> new SingleColumnValueFilter(FAMILY, Bytes.toBytes("E"), CompareOperator.EQUAL,</span>
<span class="source-line-no">1066</span><span id="line-1066"> Bytes.toBytes("e"))))</span>
<span class="source-line-no">1067</span><span id="line-1067"> .timeRange(TimeRange.between(0, 100))</span>
<span class="source-line-no">1068</span><span id="line-1068"> .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("h")));</span>
<span class="source-line-no">1069</span><span id="line-1069"></span>
<span class="source-line-no">1070</span><span id="line-1070"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">1071</span><span id="line-1071"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">1072</span><span id="line-1072"></span>
<span class="source-line-no">1073</span><span id="line-1073"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">1074</span><span id="line-1074"> assertNull(results.get(0).getResult());</span>
<span class="source-line-no">1075</span><span id="line-1075"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">1076</span><span id="line-1076"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">1077</span><span id="line-1077"></span>
<span class="source-line-no">1078</span><span id="line-1078"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C")));</span>
<span class="source-line-no">1079</span><span id="line-1079"> assertEquals("g", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">1080</span><span id="line-1080"></span>
<span class="source-line-no">1081</span><span id="line-1081"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F")));</span>
<span class="source-line-no">1082</span><span id="line-1082"> assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F"))));</span>
<span class="source-line-no">1083</span><span id="line-1083"> }</span>
<span class="source-line-no">1084</span><span id="line-1084"> }</span>
<span class="source-line-no">1085</span><span id="line-1085"></span>
<span class="source-line-no">1086</span><span id="line-1086"> @Test</span>
<span class="source-line-no">1087</span><span id="line-1087"> public void testCheckAndIncrementBatch() throws Throwable {</span>
<span class="source-line-no">1088</span><span id="line-1088"> try (Table table = createTable()) {</span>
<span class="source-line-no">1089</span><span id="line-1089"> table.put(Arrays.asList(</span>
<span class="source-line-no">1090</span><span id="line-1090"> new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")).addColumn(FAMILY,</span>
<span class="source-line-no">1091</span><span id="line-1091"> Bytes.toBytes("B"), Bytes.toBytes(0L)),</span>
<span class="source-line-no">1092</span><span id="line-1092"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")).addColumn(FAMILY,</span>
<span class="source-line-no">1093</span><span id="line-1093"> Bytes.toBytes("D"), Bytes.toBytes(0L))));</span>
<span class="source-line-no">1094</span><span id="line-1094"></span>
<span class="source-line-no">1095</span><span id="line-1095"> // CheckAndIncrement with correct value</span>
<span class="source-line-no">1096</span><span id="line-1096"> CheckAndMutate checkAndMutate1 =</span>
<span class="source-line-no">1097</span><span id="line-1097"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"))</span>
<span class="source-line-no">1098</span><span id="line-1098"> .build(new Increment(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), 1));</span>
<span class="source-line-no">1099</span><span id="line-1099"></span>
<span class="source-line-no">1100</span><span id="line-1100"> // CheckAndIncrement with wrong value</span>
<span class="source-line-no">1101</span><span id="line-1101"> CheckAndMutate checkAndMutate2 =</span>
<span class="source-line-no">1102</span><span id="line-1102"> CheckAndMutate.newBuilder(ROWKEY2).ifEquals(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("d"))</span>
<span class="source-line-no">1103</span><span id="line-1103"> .build(new Increment(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("D"), 1));</span>
<span class="source-line-no">1104</span><span id="line-1104"></span>
<span class="source-line-no">1105</span><span id="line-1105"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">1106</span><span id="line-1106"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">1107</span><span id="line-1107"></span>
<span class="source-line-no">1108</span><span id="line-1108"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">1109</span><span id="line-1109"> assertEquals(1,</span>
<span class="source-line-no">1110</span><span id="line-1110"> Bytes.toLong(results.get(0).getResult().getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">1111</span><span id="line-1111"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">1112</span><span id="line-1112"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">1113</span><span id="line-1113"></span>
<span class="source-line-no">1114</span><span id="line-1114"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">1115</span><span id="line-1115"> assertEquals(1, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">1116</span><span id="line-1116"></span>
<span class="source-line-no">1117</span><span id="line-1117"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">1118</span><span id="line-1118"> assertEquals(0, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">1119</span><span id="line-1119"> }</span>
<span class="source-line-no">1120</span><span id="line-1120"> }</span>
<span class="source-line-no">1121</span><span id="line-1121"></span>
<span class="source-line-no">1122</span><span id="line-1122"> @Test</span>
<span class="source-line-no">1123</span><span id="line-1123"> public void testCheckAndAppendBatch() throws Throwable {</span>
<span class="source-line-no">1124</span><span id="line-1124"> try (Table table = createTable()) {</span>
<span class="source-line-no">1125</span><span id="line-1125"> table.put(Arrays.asList(</span>
<span class="source-line-no">1126</span><span id="line-1126"> new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")).addColumn(FAMILY,</span>
<span class="source-line-no">1127</span><span id="line-1127"> Bytes.toBytes("B"), Bytes.toBytes("b")),</span>
<span class="source-line-no">1128</span><span id="line-1128"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")).addColumn(FAMILY,</span>
<span class="source-line-no">1129</span><span id="line-1129"> Bytes.toBytes("D"), Bytes.toBytes("d"))));</span>
<span class="source-line-no">1130</span><span id="line-1130"></span>
<span class="source-line-no">1131</span><span id="line-1131"> // CheckAndAppend with correct value</span>
<span class="source-line-no">1132</span><span id="line-1132"> CheckAndMutate checkAndMutate1 =</span>
<span class="source-line-no">1133</span><span id="line-1133"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a"))</span>
<span class="source-line-no">1134</span><span id="line-1134"> .build(new Append(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")));</span>
<span class="source-line-no">1135</span><span id="line-1135"></span>
<span class="source-line-no">1136</span><span id="line-1136"> // CheckAndAppend with wrong value</span>
<span class="source-line-no">1137</span><span id="line-1137"> CheckAndMutate checkAndMutate2 =</span>
<span class="source-line-no">1138</span><span id="line-1138"> CheckAndMutate.newBuilder(ROWKEY2).ifEquals(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("d"))</span>
<span class="source-line-no">1139</span><span id="line-1139"> .build(new Append(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")));</span>
<span class="source-line-no">1140</span><span id="line-1140"></span>
<span class="source-line-no">1141</span><span id="line-1141"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">1142</span><span id="line-1142"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">1143</span><span id="line-1143"></span>
<span class="source-line-no">1144</span><span id="line-1144"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">1145</span><span id="line-1145"> assertEquals("bb",</span>
<span class="source-line-no">1146</span><span id="line-1146"> Bytes.toString(results.get(0).getResult().getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">1147</span><span id="line-1147"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">1148</span><span id="line-1148"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">1149</span><span id="line-1149"></span>
<span class="source-line-no">1150</span><span id="line-1150"> Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">1151</span><span id="line-1151"> assertEquals("bb", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B"))));</span>
<span class="source-line-no">1152</span><span id="line-1152"></span>
<span class="source-line-no">1153</span><span id="line-1153"> result = table.get(new Get(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("D")));</span>
<span class="source-line-no">1154</span><span id="line-1154"> assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">1155</span><span id="line-1155"> }</span>
<span class="source-line-no">1156</span><span id="line-1156"> }</span>
<span class="source-line-no">1157</span><span id="line-1157"></span>
<span class="source-line-no">1158</span><span id="line-1158"> @Test</span>
<span class="source-line-no">1159</span><span id="line-1159"> public void testCheckAndRowMutationsBatch() throws Throwable {</span>
<span class="source-line-no">1160</span><span id="line-1160"> try (Table table = createTable()) {</span>
<span class="source-line-no">1161</span><span id="line-1161"> table.put(Arrays.asList(</span>
<span class="source-line-no">1162</span><span id="line-1162"> new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))</span>
<span class="source-line-no">1163</span><span id="line-1163"> .addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes(1L))</span>
<span class="source-line-no">1164</span><span id="line-1164"> .addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")),</span>
<span class="source-line-no">1165</span><span id="line-1165"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("f"))</span>
<span class="source-line-no">1166</span><span id="line-1166"> .addColumn(FAMILY, Bytes.toBytes("G"), Bytes.toBytes(1L))</span>
<span class="source-line-no">1167</span><span id="line-1167"> .addColumn(FAMILY, Bytes.toBytes("H"), Bytes.toBytes("h"))));</span>
<span class="source-line-no">1168</span><span id="line-1168"></span>
<span class="source-line-no">1169</span><span id="line-1169"> // CheckAndIncrement with correct value</span>
<span class="source-line-no">1170</span><span id="line-1170"> CheckAndMutate checkAndMutate1 =</span>
<span class="source-line-no">1171</span><span id="line-1171"> CheckAndMutate.newBuilder(ROWKEY).ifEquals(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b"))</span>
<span class="source-line-no">1172</span><span id="line-1172"> .build(new RowMutations(ROWKEY).add(</span>
<span class="source-line-no">1173</span><span id="line-1173"> Arrays.asList(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")),</span>
<span class="source-line-no">1174</span><span id="line-1174"> new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("B")),</span>
<span class="source-line-no">1175</span><span id="line-1175"> new Increment(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), 1L),</span>
<span class="source-line-no">1176</span><span id="line-1176"> new Append(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))));</span>
<span class="source-line-no">1177</span><span id="line-1177"></span>
<span class="source-line-no">1178</span><span id="line-1178"> // CheckAndIncrement with wrong value</span>
<span class="source-line-no">1179</span><span id="line-1179"> CheckAndMutate checkAndMutate2 =</span>
<span class="source-line-no">1180</span><span id="line-1180"> CheckAndMutate.newBuilder(ROWKEY2).ifEquals(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("a"))</span>
<span class="source-line-no">1181</span><span id="line-1181"> .build(new RowMutations(ROWKEY2).add(Arrays.asList(</span>
<span class="source-line-no">1182</span><span id="line-1182"> new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")),</span>
<span class="source-line-no">1183</span><span id="line-1183"> new Delete(ROWKEY2).addColumns(FAMILY, Bytes.toBytes("F")),</span>
<span class="source-line-no">1184</span><span id="line-1184"> new Increment(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("G"), 1L),</span>
<span class="source-line-no">1185</span><span id="line-1185"> new Append(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("H"), Bytes.toBytes("h")))));</span>
<span class="source-line-no">1186</span><span id="line-1186"></span>
<span class="source-line-no">1187</span><span id="line-1187"> List&lt;CheckAndMutateResult&gt; results =</span>
<span class="source-line-no">1188</span><span id="line-1188"> table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2));</span>
<span class="source-line-no">1189</span><span id="line-1189"></span>
<span class="source-line-no">1190</span><span id="line-1190"> assertTrue(results.get(0).isSuccess());</span>
<span class="source-line-no">1191</span><span id="line-1191"> assertEquals(2,</span>
<span class="source-line-no">1192</span><span id="line-1192"> Bytes.toLong(results.get(0).getResult().getValue(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">1193</span><span id="line-1193"> assertEquals("dd",</span>
<span class="source-line-no">1194</span><span id="line-1194"> Bytes.toString(results.get(0).getResult().getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">1195</span><span id="line-1195"></span>
<span class="source-line-no">1196</span><span id="line-1196"> assertFalse(results.get(1).isSuccess());</span>
<span class="source-line-no">1197</span><span id="line-1197"> assertNull(results.get(1).getResult());</span>
<span class="source-line-no">1198</span><span id="line-1198"></span>
<span class="source-line-no">1199</span><span id="line-1199"> Result result = table.get(new Get(ROWKEY));</span>
<span class="source-line-no">1200</span><span id="line-1200"> assertEquals("a", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A"))));</span>
<span class="source-line-no">1201</span><span id="line-1201"> assertNull(result.getValue(FAMILY, Bytes.toBytes("B")));</span>
<span class="source-line-no">1202</span><span id="line-1202"> assertEquals(2, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("C"))));</span>
<span class="source-line-no">1203</span><span id="line-1203"> assertEquals("dd", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D"))));</span>
<span class="source-line-no">1204</span><span id="line-1204"></span>
<span class="source-line-no">1205</span><span id="line-1205"> result = table.get(new Get(ROWKEY2));</span>
<span class="source-line-no">1206</span><span id="line-1206"> assertNull(result.getValue(FAMILY, Bytes.toBytes("E")));</span>
<span class="source-line-no">1207</span><span id="line-1207"> assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F"))));</span>
<span class="source-line-no">1208</span><span id="line-1208"> assertEquals(1, Bytes.toLong(result.getValue(FAMILY, Bytes.toBytes("G"))));</span>
<span class="source-line-no">1209</span><span id="line-1209"> assertEquals("h", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("H"))));</span>
<span class="source-line-no">1210</span><span id="line-1210"> }</span>
<span class="source-line-no">1211</span><span id="line-1211"> }</span>
<span class="source-line-no">1212</span><span id="line-1212"></span>
<span class="source-line-no">1213</span><span id="line-1213"> @Test</span>
<span class="source-line-no">1214</span><span id="line-1214"> public void testCheckAndMutateForNull() throws Exception {</span>
<span class="source-line-no">1215</span><span id="line-1215"> byte[] qualifier = Bytes.toBytes("Q");</span>
<span class="source-line-no">1216</span><span id="line-1216"> try (Table table = createTable()) {</span>
<span class="source-line-no">1217</span><span id="line-1217"> byte[] row1 = Bytes.toBytes("testRow1");</span>
<span class="source-line-no">1218</span><span id="line-1218"> Put put = new Put(row1);</span>
<span class="source-line-no">1219</span><span id="line-1219"> put.addColumn(FAMILY, qualifier, Bytes.toBytes("v0"));</span>
<span class="source-line-no">1220</span><span id="line-1220"> table.put(put);</span>
<span class="source-line-no">1221</span><span id="line-1221"> assertEquals("v0", Bytes.toString(</span>
<span class="source-line-no">1222</span><span id="line-1222"> table.get(new Get(row1).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier)));</span>
<span class="source-line-no">1223</span><span id="line-1223"></span>
<span class="source-line-no">1224</span><span id="line-1224"> CheckAndMutate checkAndMutate1 = CheckAndMutate.newBuilder(row1)</span>
<span class="source-line-no">1225</span><span id="line-1225"> .ifMatches(FAMILY, qualifier, CompareOperator.NOT_EQUAL, new byte[] {})</span>
<span class="source-line-no">1226</span><span id="line-1226"> .build(new Put(row1).addColumn(FAMILY, qualifier, Bytes.toBytes("v1")));</span>
<span class="source-line-no">1227</span><span id="line-1227"> table.checkAndMutate(checkAndMutate1);</span>
<span class="source-line-no">1228</span><span id="line-1228"> assertEquals("v1", Bytes.toString(</span>
<span class="source-line-no">1229</span><span id="line-1229"> table.get(new Get(row1).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier)));</span>
<span class="source-line-no">1230</span><span id="line-1230"></span>
<span class="source-line-no">1231</span><span id="line-1231"> byte[] row2 = Bytes.toBytes("testRow2");</span>
<span class="source-line-no">1232</span><span id="line-1232"> put = new Put(row2);</span>
<span class="source-line-no">1233</span><span id="line-1233"> put.addColumn(FAMILY, qualifier, new byte[] {});</span>
<span class="source-line-no">1234</span><span id="line-1234"> table.put(put);</span>
<span class="source-line-no">1235</span><span id="line-1235"> assertEquals(0,</span>
<span class="source-line-no">1236</span><span id="line-1236"> table.get(new Get(row2).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier).length);</span>
<span class="source-line-no">1237</span><span id="line-1237"></span>
<span class="source-line-no">1238</span><span id="line-1238"> CheckAndMutate checkAndMutate2 = CheckAndMutate.newBuilder(row2)</span>
<span class="source-line-no">1239</span><span id="line-1239"> .ifMatches(FAMILY, qualifier, CompareOperator.EQUAL, new byte[] {})</span>
<span class="source-line-no">1240</span><span id="line-1240"> .build(new Put(row2).addColumn(FAMILY, qualifier, Bytes.toBytes("v2")));</span>
<span class="source-line-no">1241</span><span id="line-1241"> table.checkAndMutate(checkAndMutate2);</span>
<span class="source-line-no">1242</span><span id="line-1242"> assertEquals("v2", Bytes.toString(</span>
<span class="source-line-no">1243</span><span id="line-1243"> table.get(new Get(row2).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier)));</span>
<span class="source-line-no">1244</span><span id="line-1244"></span>
<span class="source-line-no">1245</span><span id="line-1245"> byte[] row3 = Bytes.toBytes("testRow3");</span>
<span class="source-line-no">1246</span><span id="line-1246"> put = new Put(row3).addColumn(FAMILY, qualifier, Bytes.toBytes("v0"));</span>
<span class="source-line-no">1247</span><span id="line-1247"> assertNull(table.get(new Get(row3).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier));</span>
<span class="source-line-no">1248</span><span id="line-1248"> CheckAndMutate checkAndMutate3 = CheckAndMutate.newBuilder(row3)</span>
<span class="source-line-no">1249</span><span id="line-1249"> .ifMatches(FAMILY, qualifier, CompareOperator.NOT_EQUAL, new byte[] {}).build(put);</span>
<span class="source-line-no">1250</span><span id="line-1250"> table.checkAndMutate(checkAndMutate3);</span>
<span class="source-line-no">1251</span><span id="line-1251"> assertNull(table.get(new Get(row3).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier));</span>
<span class="source-line-no">1252</span><span id="line-1252"></span>
<span class="source-line-no">1253</span><span id="line-1253"> CheckAndMutate checkAndMutate4 = CheckAndMutate.newBuilder(row3)</span>
<span class="source-line-no">1254</span><span id="line-1254"> .ifMatches(FAMILY, qualifier, CompareOperator.EQUAL, new byte[] {}).build(put);</span>
<span class="source-line-no">1255</span><span id="line-1255"> table.checkAndMutate(checkAndMutate4);</span>
<span class="source-line-no">1256</span><span id="line-1256"> assertEquals("v0", Bytes.toString(</span>
<span class="source-line-no">1257</span><span id="line-1257"> table.get(new Get(row3).addColumn(FAMILY, qualifier)).getValue(FAMILY, qualifier)));</span>
<span class="source-line-no">1258</span><span id="line-1258"> }</span>
<span class="source-line-no">1259</span><span id="line-1259"> }</span>
<span class="source-line-no">1260</span><span id="line-1260">}</span>
</pre>
</div>
</main>
</body>
</html>