<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.8.14"/>
<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.8.14 -->
<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');
/* @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="header">
  <div class="headertitle">
<div class="title">Todo List </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><dl class="reflist">
<dt><a class="anchor" id="_todo000011"></a>Module <a class="el" href="classkudu_1_1client_1_1_kudu_column_schema.html#amgrp145f08f9ead2d9b4bcd89c476cbe437f">Getters to expose column schema information.</a>  </dt>
<dd>Expose default column value and attributes? </dd>
<dt><a class="anchor" id="_todo000001"></a>Class <a class="el" href="classkudu_1_1client_1_1_kudu_client.html">kudu::client::KuduClient</a>  </dt>
<dd>Cluster administration functions are likely to be in this class as well.  </dd>
<dt><a class="anchor" id="_todo000002"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_client.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">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_1_kudu_client_builder.html" title="A &quot;factory&quot; for KuduClient objects. ">KuduClientBuilder</a>?  </p>
</dd>
<dt><a class="anchor" id="_todo000009"></a>Class <a class="el" href="classkudu_1_1client_1_1_kudu_column_spec.html">kudu::client::KuduColumnSpec</a>  </dt>
<dd>KUDU-861: this API will also be used for an improved AlterTable API.  </dd>
<dt><a class="anchor" id="_todo000012"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_column_spec.html#a8502dd68c6743c7c66b2b6a02d41a4e6">kudu::client::KuduColumnSpec::BlockSize</a>  (int32_t block_size)</dt>
<dd>KUDU-1107: move above info to docs </dd>
<dt><a class="anchor" id="_todo000010"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_column_storage_attributes.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>Make this constructor private. </dd>
<dt><a class="anchor" id="_todo000007"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_scanner.html#af1db3f372fe3d0f30cd0b6a36b783cc8">kudu::client::KuduScanner::SetSelection</a>  (<a class="el" href="classkudu_1_1client_1_1_kudu_client.html#aef70c7f3a596ecda4040f9d46514b11a" title="Policy with which to choose amongst multiple replicas. ">KuduClient::ReplicaSelection</a> selection) WARN_UNUSED_RESULT</dt>
<dd>Kill this method in favor of a consistency-level-based API.  </dd>
<dt><a class="anchor" id="_todo000008"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_scan_token_builder.html#a168bfed43dcd754a17d4c82293dade88">kudu::client::KuduScanTokenBuilder::SetSelection</a>  (<a class="el" href="classkudu_1_1client_1_1_kudu_client.html#aef70c7f3a596ecda4040f9d46514b11a" title="Policy with which to choose amongst multiple replicas. ">KuduClient::ReplicaSelection</a> selection) WARN_UNUSED_RESULT</dt>
<dd>Kill this in favor of a consistency-level-based API.  </dd>
<dt><a class="anchor" id="_todo000013"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_schema.html#a3f51ccf1a7e6f4a4fe4958073305dbab">kudu::client::KuduSchema::Reset</a>  (const std::vector&lt; KuduColumnSchema &gt; &amp;columns, int key_columns) WARN_UNUSED_RESULT</dt>
<dd>Remove <a class="el" href="classkudu_1_1client_1_1_kudu_schema.html#a3f51ccf1a7e6f4a4fe4958073305dbab">KuduSchema::Reset()</a>. </dd>
<dt><a class="anchor" id="_todo000004"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_session.html#ad3f7324b27fca298c5ca3d07b4741943">kudu::client::KuduSession::Apply</a>  (<a class="el" href="classkudu_1_1client_1_1_kudu_write_operation.html" title="A single-row write operation to be sent to a Kudu table. ">KuduWriteOperation</a> *write_op) WARN_UNUSED_RESULT</dt>
<dd>Add "doAs" ability here for proxy servers to be able to act on behalf of other users, assuming access rights.  </dd>
<dt><a class="anchor" id="_todo000006"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_session.html#aaec3956e642610d703f3b83b78e24e19a520b8eef7ef0fd149b2757faf43972b1">kudu::client::KuduSession::AUTO_FLUSH_BACKGROUND</a>  </dt>
<dd>Provide an API for the user to specify a callback to do their own error reporting.  </dd>
<dt><a class="anchor" id="_todo000005"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_session.html#a97a807a4f85220a0be72b2618f0bd578">kudu::client::KuduSession::HasPendingOperations</a>  () const</dt>
<dd>Maybe "incomplete" or "undelivered" is clearer?  </dd>
<dt><a class="anchor" id="_todo000003"></a>Member <a class="el" href="classkudu_1_1client_1_1_kudu_table_creator.html#a15126b62437fc1741b41249080376f93">kudu::client::KuduTableCreator::table_name</a>  (const std::string &amp;name)</dt>
<dd>Should name of the table be a constructor's parameter instead? </dd>
</dl>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/>
<address class="footer">
  <small>Generated for Kudu version 1.7.0 on Thu Mar 22 2018 13:30:02 by Doxygen 1.8.14</small>
  <br>
  <small>Copyright © 2018 The Apache Software Foundation.</small>
</address>
</body>
</html>
