<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Kudu C++ client API: Todo List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Kudu C++ client API
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">Todo List </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><dl class="reflist">
<dt>Module <a class="el" href="classkudu_1_1client_1_1KuduColumnSchema.html#amgrp145f08f9ead2d9b4bcd89c476cbe437f">Getters to expose column schema information.</a>  </dt>
<dd><a class="anchor" id="_todo000011"></a>Expose default column value and attributes? </dd>
<dt>Class <a class="el" href="classkudu_1_1client_1_1KuduClient.html">kudu::client::KuduClient</a>  </dt>
<dd><a class="anchor" id="_todo000001"></a>Cluster administration functions are likely to be in this class as well.  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduClient.html#aa82a09718ffe68d3255195e736aec8d7">kudu::client::KuduClient::OpenTable</a>  (const std::string &amp;table_name, sp::shared_ptr&lt; KuduTable &gt; *table)</dt>
<dd><p class="startdd"><a class="anchor" id="_todo000002"></a>Should we offer an async version of this as well? </p>
<p class="enddd">Probably should have a configurable timeout in <a class="el" href="classkudu_1_1client_1_1KuduClientBuilder.html" title="A &quot;factory&quot; for KuduClient objects.">KuduClientBuilder</a>?  </p>
</dd>
<dt>Class <a class="el" href="classkudu_1_1client_1_1KuduColumnSpec.html">kudu::client::KuduColumnSpec</a>  </dt>
<dd><a class="anchor" id="_todo000009"></a>KUDU-861: this API will also be used for an improved AlterTable API.  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduColumnSpec.html#a8502dd68c6743c7c66b2b6a02d41a4e6">kudu::client::KuduColumnSpec::BlockSize</a>  (int32_t block_size)</dt>
<dd><a class="anchor" id="_todo000012"></a>KUDU-1107: move above info to docs </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduColumnStorageAttributes.html#a2d6e5bec50a7305b3b4d75d21d000fab">kudu::client::KuduColumnStorageAttributes::KuduColumnStorageAttributes</a>  (EncodingType encoding=AUTO_ENCODING, CompressionType compression=DEFAULT_COMPRESSION, int32_t block_size=0) ATTRIBUTE_DEPRECATED("this const ructor will be private in a future release")</dt>
<dd><a class="anchor" id="_todo000010"></a>Make this constructor private. </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduScanner.html#af1db3f372fe3d0f30cd0b6a36b783cc8">kudu::client::KuduScanner::SetSelection</a>  (<a class="el" href="classkudu_1_1client_1_1KuduClient.html#aef70c7f3a596ecda4040f9d46514b11a" title="Policy with which to choose amongst multiple replicas.">KuduClient::ReplicaSelection</a> selection) WARN_UNUSED_RESULT</dt>
<dd><a class="anchor" id="_todo000007"></a>Kill this method in favor of a consistency-level-based API.  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduScanTokenBuilder.html#a168bfed43dcd754a17d4c82293dade88">kudu::client::KuduScanTokenBuilder::SetSelection</a>  (<a class="el" href="classkudu_1_1client_1_1KuduClient.html#aef70c7f3a596ecda4040f9d46514b11a" title="Policy with which to choose amongst multiple replicas.">KuduClient::ReplicaSelection</a> selection) WARN_UNUSED_RESULT</dt>
<dd><a class="anchor" id="_todo000008"></a>Kill this in favor of a consistency-level-based API.  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduSchema.html#a3f51ccf1a7e6f4a4fe4958073305dbab">kudu::client::KuduSchema::Reset</a>  (const std::vector&lt; KuduColumnSchema &gt; &amp;columns, int key_columns) WARN_UNUSED_RESULT</dt>
<dd><a class="anchor" id="_todo000013"></a>Remove <a class="el" href="classkudu_1_1client_1_1KuduSchema.html#a3f51ccf1a7e6f4a4fe4958073305dbab">KuduSchema::Reset()</a>. </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduSession.html#ad3f7324b27fca298c5ca3d07b4741943">kudu::client::KuduSession::Apply</a>  (<a class="el" href="classkudu_1_1client_1_1KuduWriteOperation.html" title="A single-row write operation to be sent to a Kudu table.">KuduWriteOperation</a> *write_op) WARN_UNUSED_RESULT</dt>
<dd><a class="anchor" id="_todo000004"></a> Add "doAs" ability here for proxy servers to be able to act on behalf of other users, assuming access rights.  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduSession.html#aaec3956e642610d703f3b83b78e24e19a520b8eef7ef0fd149b2757faf43972b1">kudu::client::KuduSession::AUTO_FLUSH_BACKGROUND</a>  </dt>
<dd><a class="anchor" id="_todo000006"></a>Provide an API for the user to specify a callback to do their own error reporting.  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduSession.html#a97a807a4f85220a0be72b2618f0bd578">kudu::client::KuduSession::HasPendingOperations</a>  () const</dt>
<dd><a class="anchor" id="_todo000005"></a>Maybe "incomplete" or "undelivered" is clearer?  </dd>
<dt>Member <a class="el" href="classkudu_1_1client_1_1KuduTableCreator.html#a15126b62437fc1741b41249080376f93">kudu::client::KuduTableCreator::table_name</a>  (const std::string &amp;name)</dt>
<dd><a class="anchor" id="_todo000003"></a>Should name of the table be a constructor's parameter instead? </dd>
</dl>
</div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
<hr class="footer"/>
<address class="footer">
  <small>Generated for Kudu version 1.14.0 on Thu Jan 28 2021 11:11:20 by Doxygen 1.9.1</small>
  <br>
  <small>Copyright © 2021 The Apache Software Foundation.</small>
</address>
</body>
</html>
