blob: 2f740876288312955464c1c22700ff7b33f232be [file]
<!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>Apache GraphAr C++ Library: src/graphar/filesystem.cc Source File</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">Apache GraphAr C++ Library
</div>
<div id="projectbrief">The C++ Library for Apache GraphAr</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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_360ef3ae5e4df5878fa0b8837112e0b7.html">graphar</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">filesystem.cc</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * KIND, either express or implied. See the License for the</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * under the License.</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;graphar/writer_util.h&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef ARROW_ORC</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;arrow/adapters/orc/adapter.h&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;arrow/compute/api.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;arrow/api.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;arrow/csv/api.h&quot;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;arrow/dataset/api.h&quot;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;parquet/arrow/reader.h&quot;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &lt;= 12000000</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;arrow/dataset/file_json.h&quot;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;arrow/filesystem/api.h&quot;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;arrow/filesystem/s3fs.h&quot;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;arrow/ipc/writer.h&quot;</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;parquet/arrow/writer.h&quot;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;simple-uri-parser/uri_parser.h&quot;</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;graphar/expression.h&quot;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;graphar/filesystem.h&quot;</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;graphar/fwd.h&quot;</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;graphar/general_params.h&quot;</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">namespace </span>graphar::detail {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> Status CastToLargeOffsetArray(</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Array&gt;&amp; in,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::DataType&gt;&amp; to_type,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::shared_ptr&lt;arrow::Array&gt;&amp; out) { <span class="comment">// NOLINT(runtime/references)</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">auto</span> array_data = in-&gt;data()-&gt;Copy();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">auto</span> offset = array_data-&gt;buffers[1];</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">using</span> from_offset_type = <span class="keyword">typename</span> U::offset_type;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">using</span> to_string_offset_type = <span class="keyword">typename</span> T::offset_type;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">auto</span> raw_value_offsets_ =</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; offset == NULLPTR</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; ? NULLPTR</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; : <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>from_offset_type*<span class="keyword">&gt;</span>(offset-&gt;data());</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::vector&lt;to_string_offset_type&gt; to_offset(offset-&gt;size() /</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">sizeof</span>(from_offset_type));</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; to_offset.size(); ++i) {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; to_offset[i] = raw_value_offsets_[i];</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::shared_ptr&lt;arrow::Buffer&gt; buffer;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; arrow::TypedBufferBuilder&lt;to_string_offset_type&gt; buffer_builder;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; RETURN_NOT_ARROW_OK(</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; buffer_builder.Append(to_offset.data(), to_offset.size()));</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; RETURN_NOT_ARROW_OK(buffer_builder.Finish(&amp;buffer));</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; array_data-&gt;type = to_type;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; array_data-&gt;buffers[1] = buffer;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; out = arrow::MakeArray(array_data);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; RETURN_NOT_ARROW_OK(out-&gt;ValidateFull());</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">static</span> Status CastToLargeOffsetArray(</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::ChunkedArray&gt;&amp; in,</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::DataType&gt;&amp; to_type,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; std::shared_ptr&lt;arrow::ChunkedArray&gt;&amp; out) { <span class="comment">// NOLINT(runtime/references)</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; std::vector&lt;std::shared_ptr&lt;arrow::Array&gt;&gt; chunks;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; chunk : in-&gt;chunks()) {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; std::shared_ptr&lt;arrow::Array&gt; array;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">auto</span> status = CastToLargeOffsetArray&lt;U, T&gt;(chunk, to_type, array);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; GAR_RETURN_NOT_OK(status);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; chunks.emplace_back(array);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(out, arrow::ChunkedArray::Make(chunks));</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;} <span class="comment">// namespace graphar::detail</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="keyword">namespace </span>graphar {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">namespace </span>ds = arrow::dataset;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;std::shared_ptr&lt;ds::FileFormat&gt; FileSystem::GetFileFormat(</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">const</span> FileType type)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">switch</span> (type) {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">case</span> CSV:</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;ds::CsvFileFormat&gt;();</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">case</span> PARQUET:</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;ds::ParquetFileFormat&gt;();</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">case</span> JSON:</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;ds::JsonFileFormat&gt;();</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#ifdef ARROW_ORC</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">case</span> ORC:</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;ds::OrcFileFormat&gt;();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; <a class="code" href="classgraphar_1_1_file_system.html#acfd1a7452cf5d89826ac119b90949956">FileSystem::ReadFileToTable</a>(</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> std::string&amp; path, FileType file_type,</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; column_indices) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; parquet::arrow::FileReaderBuilder builder;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">auto</span> open_file_status = builder.OpenFile(path);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (!open_file_status.ok()) {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Failed to open file: &quot;</span>, path, <span class="stringliteral">&quot; - &quot;</span>,</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; open_file_status.ToString());</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; builder.memory_pool(arrow::default_memory_pool());</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> reader, builder.Build());</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; std::shared_ptr&lt;arrow::Table&gt; table;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">if</span> (column_indices.empty()) {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; arrow::Status read_status = reader-&gt;ReadTable(&amp;table);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (!read_status.ok()) {</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Failed to read table from file: &quot;</span>, path, <span class="stringliteral">&quot; - &quot;</span>,</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; read_status.ToString());</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; arrow::Status read_status = reader-&gt;ReadTable(column_indices, &amp;table);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (!read_status.ok()) {</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Failed to read table from file: &quot;</span>, path, <span class="stringliteral">&quot; - &quot;</span>,</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; read_status.ToString());</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> table;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#acfd1a7452cf5d89826ac119b90949956"> 142</a></span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; <a class="code" href="classgraphar_1_1_file_system.html#acfd1a7452cf5d89826ac119b90949956">FileSystem::ReadFileToTable</a>(</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">const</span> std::string&amp; path, FileType file_type,</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">const</span> <a class="code" href="structgraphar_1_1util_1_1_filter_options.html">util::FilterOptions</a>&amp; options) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; std::shared_ptr&lt;ds::FileFormat&gt; format = GetFileFormat(file_type);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">auto</span> factory, arrow::dataset::FileSystemDatasetFactory::Make(</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; arrow_fs_, {path}, format,</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; arrow::dataset::FileSystemFactoryOptions()));</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> dataset, factory-&gt;Finish());</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> scan_builder, dataset-&gt;NewScan());</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#if ARROW_VERSION &gt;= 21000000</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; RETURN_NOT_ARROW_OK(arrow::compute::Initialize());</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// Apply the row filter and select the specified columns</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (options.filter) {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> filter, options.filter-&gt;Evaluate());</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; RETURN_NOT_ARROW_OK(scan_builder-&gt;Filter(filter));</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (options.columns) {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; RETURN_NOT_ARROW_OK(scan_builder-&gt;Project(*options.columns));</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> scanner, scan_builder-&gt;Finish());</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> table, scanner-&gt;ToTable());</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// cast string array to large string array as we need concatenate chunks in</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// some places, e.g., in vineyard</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; table-&gt;num_columns(); ++i) {</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; std::shared_ptr&lt;arrow::DataType&gt; type = table-&gt;column(i)-&gt;type();</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span> (type-&gt;id() == arrow::Type::STRING) {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; type = arrow::large_utf8();</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type-&gt;id() == arrow::Type::BINARY) {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; type = arrow::large_binary();</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (type-&gt;Equals(table-&gt;column(i)-&gt;type())) {</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// do casting</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">auto</span> field = table-&gt;field(i)-&gt;WithType(type);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; std::shared_ptr&lt;arrow::ChunkedArray&gt; chunked_array;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (table-&gt;num_rows() == 0) {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; chunked_array, arrow::ChunkedArray::MakeEmpty(type));</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type-&gt;Equals(arrow::large_utf8())) {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">auto</span> status = detail::CastToLargeOffsetArray&lt;arrow::StringArray,</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; arrow::LargeStringArray&gt;(</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; table-&gt;column(i), type, chunked_array);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; GAR_RETURN_NOT_OK(status);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type-&gt;Equals(arrow::large_binary())) {</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">auto</span> status = detail::CastToLargeOffsetArray&lt;arrow::BinaryArray,</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; arrow::LargeBinaryArray&gt;(</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; table-&gt;column(i), type, chunked_array);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; GAR_RETURN_NOT_OK(status);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// noop</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; chunked_array = table-&gt;column(i);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(table, table-&gt;RemoveColumn(i));</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; table, table-&gt;AddColumn(i, field, chunked_array));</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> table;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;}</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#aa014a28119399836283a573c9abd97b7"> 207</a></span>&#160;Result&lt;T&gt; <a class="code" href="classgraphar_1_1_file_system.html#aa014a28119399836283a573c9abd97b7">FileSystem::ReadFileToValue</a>(<span class="keyword">const</span> std::string&amp; path) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; T ret;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> input,</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; arrow_fs_-&gt;OpenInputStream(path));</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> bytes,</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; input-&gt;Read(<span class="keyword">sizeof</span>(T), &amp;ret));</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; ARROW_UNUSED(bytes);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;}</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="keyword">template</span> &lt;&gt;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;Result&lt;std::string&gt; <a class="code" href="classgraphar_1_1_file_system.html#aa014a28119399836283a573c9abd97b7">FileSystem::ReadFileToValue</a>(<span class="keyword">const</span> std::string&amp; path) <span class="keyword">const</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; noexcept {</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> access_file,</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; arrow_fs_-&gt;OpenInputFile(path));</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> bytes, access_file-&gt;GetSize());</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> buffer,</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; access_file-&gt;ReadAt(0, bytes));</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> buffer-&gt;ToString();</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#a474b6e6ba28a0114a1d84f4eb06a211b"> 229</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_file_system.html#a474b6e6ba28a0114a1d84f4eb06a211b">FileSystem::WriteValueToFile</a>(<span class="keyword">const</span> T&amp; value,</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">const</span> std::string&amp; path) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// try to create the directory, oss filesystem may not support this, ignore</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; ARROW_UNUSED(arrow_fs_-&gt;CreateDir(path.substr(0, path.find_last_of(<span class="stringliteral">&quot;/&quot;</span>))));</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> ofstream,</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; arrow_fs_-&gt;OpenOutputStream(path));</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; RETURN_NOT_ARROW_OK(ofstream-&gt;Write(&amp;value, <span class="keyword">sizeof</span>(T)));</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; RETURN_NOT_ARROW_OK(ofstream-&gt;Close());</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;}</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="keyword">template</span> &lt;&gt;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_file_system.html#a474b6e6ba28a0114a1d84f4eb06a211b">FileSystem::WriteValueToFile</a>(<span class="keyword">const</span> std::string&amp; value,</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">const</span> std::string&amp; path) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// try to create the directory, oss filesystem may not support this, ignore</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; ARROW_UNUSED(arrow_fs_-&gt;CreateDir(path.substr(0, path.find_last_of(<span class="stringliteral">&quot;/&quot;</span>))));</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> ofstream,</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; arrow_fs_-&gt;OpenOutputStream(path));</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; RETURN_NOT_ARROW_OK(ofstream-&gt;Write(value.c_str(), value.size()));</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; RETURN_NOT_ARROW_OK(ofstream-&gt;Close());</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#af5c15ca6b858f7df89eea3e77319decf"> 252</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_file_system.html#af5c15ca6b858f7df89eea3e77319decf">FileSystem::WriteTableToFile</a>(</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; table, FileType file_type,</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">const</span> std::string&amp; path,</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// try to create the directory, oss filesystem may not support this, ignore</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; ARROW_UNUSED(arrow_fs_-&gt;CreateDir(path.substr(0, path.find_last_of(<span class="stringliteral">&quot;/&quot;</span>))));</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> output_stream,</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; arrow_fs_-&gt;OpenOutputStream(path));</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">switch</span> (file_type) {</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">case</span> FileType::CSV: {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">auto</span> writer,</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; arrow::csv::MakeCSVWriter(output_stream.get(), table-&gt;schema(),</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; options-&gt;getCsvOption()));</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; RETURN_NOT_ARROW_OK(writer-&gt;WriteTable(*table));</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; RETURN_NOT_ARROW_OK(writer-&gt;Close());</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">case</span> FileType::PARQUET: {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">auto</span> schema = table-&gt;schema();</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; RETURN_NOT_ARROW_OK(parquet::arrow::WriteTable(</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; *table, arrow::default_memory_pool(), output_stream, 64 * 1024 * 1024,</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; options-&gt;getParquetWriterProperties(),</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; options-&gt;getArrowWriterProperties()));</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor">#ifdef ARROW_ORC</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">case</span> FileType::ORC: {</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">auto</span> writer, arrow::adapters::orc::ORCFileWriter::Open(</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; output_stream.get(), options-&gt;getOrcOption()));</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; RETURN_NOT_ARROW_OK(writer-&gt;Write(*table));</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; RETURN_NOT_ARROW_OK(writer-&gt;Close());</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="stringliteral">&quot;Unsupported file type: &quot;</span>, FileTypeToString(file_type), <span class="stringliteral">&quot; for wrting.&quot;</span>);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#ad48927d2fd542cc737cb16b7e529c0b6"> 295</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_file_system.html#ad48927d2fd542cc737cb16b7e529c0b6">FileSystem::WriteLabelTableToFile</a>(</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; table, <span class="keyword">const</span> std::string&amp; path) <span class="keyword">const</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; noexcept {</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// try to create the directory, oss filesystem may not support this, ignore</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; ARROW_UNUSED(arrow_fs_-&gt;CreateDir(path.substr(0, path.find_last_of(<span class="stringliteral">&quot;/&quot;</span>))));</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> output_stream,</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; arrow_fs_-&gt;OpenOutputStream(path));</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">auto</span> schema = table-&gt;schema();</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">auto</span> column_num = schema-&gt;num_fields();</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; parquet::WriterProperties::Builder builder;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; builder.compression(arrow::Compression::type::ZSTD); <span class="comment">// enable compression</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; builder.encoding(parquet::Encoding::RLE);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; RETURN_NOT_ARROW_OK(parquet::arrow::WriteTable(</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; *table, arrow::default_memory_pool(), output_stream, 64 * 1024 * 1024,</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; builder.build(), parquet::default_arrow_writer_properties()));</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; </div>
<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#aab2ff41d0c13cf27b24ec1612817b110"> 313</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_file_system.html#aab2ff41d0c13cf27b24ec1612817b110">FileSystem::CopyFile</a>(<span class="keyword">const</span> std::string&amp; src_path,</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">const</span> std::string&amp; dst_path) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// try to create the directory, oss filesystem may not support this, ignore</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; ARROW_UNUSED(</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; arrow_fs_-&gt;CreateDir(dst_path.substr(0, dst_path.find_last_of(<span class="stringliteral">&quot;/&quot;</span>))));</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; RETURN_NOT_ARROW_OK(arrow_fs_-&gt;CopyFile(src_path, dst_path));</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; </div>
<div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classgraphar_1_1_file_system.html#a293c0415cb3b72795e034f2a08510524"> 322</a></span>&#160;Result&lt;IdType&gt; <a class="code" href="classgraphar_1_1_file_system.html#a293c0415cb3b72795e034f2a08510524">FileSystem::GetFileNumOfDir</a>(<span class="keyword">const</span> std::string&amp; dir_path,</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">bool</span> recursive) <span class="keyword">const</span> noexcept {</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; arrow::fs::FileSelector file_selector;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; file_selector.base_dir = dir_path;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; file_selector.allow_not_found = <span class="keyword">false</span>; <span class="comment">// if dir_path not exist, return error</span></div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; file_selector.recursive = recursive;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; arrow::fs::FileInfoVector file_infos;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(file_infos,</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; arrow_fs_-&gt;GetFileInfo(file_selector));</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>IdType<span class="keyword">&gt;</span>(file_infos.size());</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;}</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; </div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;FileSystem::~FileSystem() {}</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; </div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;Result&lt;std::shared_ptr&lt;FileSystem&gt;&gt; FileSystemFromUriOrPath(</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">const</span> std::string&amp; uri_string, std::string* out_path) {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (uri_string.length() &gt;= 1 &amp;&amp; uri_string[0] == <span class="charliteral">&#39;/&#39;</span>) {</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// if the uri_string is an absolute path, we need to create a local file</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">auto</span> arrow_fs,</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; arrow::fs::FileSystemFromUriOrPath(uri_string, out_path));</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// arrow would delete the last slash, so use uri string</span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (out_path != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; *out_path = uri_string;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;FileSystem&gt;(arrow_fs);</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; </div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">auto</span> arrow_fs, arrow::fs::FileSystemFromUriOrPath(uri_string));</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">auto</span> uri = uri::parse_uri(uri_string);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">if</span> (uri.error != uri::Error::None) {</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Failed to parse URI: &quot;</span>, uri_string);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">if</span> (out_path != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (uri.scheme == <span class="stringliteral">&quot;file&quot;</span> || uri.scheme == <span class="stringliteral">&quot;hdfs&quot;</span> || uri.scheme.empty()) {</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; *out_path = uri.path;</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (uri.scheme == <span class="stringliteral">&quot;s3&quot;</span> || uri.scheme == <span class="stringliteral">&quot;gs&quot;</span>) {</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// bucket name is the host, path is the path</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; *out_path = uri.authority.host + uri.path;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Unrecognized filesystem type in URI: &quot;</span>,</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; uri_string);</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;FileSystem&gt;(arrow_fs);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment">// arrow::fs::InitializeS3 and arrow::fs::FinalizeS3 need arrow_version &gt;= 15</span></div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;Status InitializeS3() {</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt; 14000000</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="preprocessor">#if defined(ARROW_S3)</span></div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">auto</span> options = arrow::fs::S3GlobalOptions::Defaults();</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; arrow::fs::S3GlobalOptions options;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; options.log_level = arrow::fs::S3LogLevel::Fatal;</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt;= 15000000</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="preprocessor">#if defined(ARROW_S3)</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; RETURN_NOT_ARROW_OK(arrow::fs::InitializeS3(options));</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;}</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;Status FinalizeS3() {</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt;= 15000000</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="preprocessor">#if defined(ARROW_S3)</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; RETURN_NOT_ARROW_OK(arrow::fs::FinalizeS3());</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="keyword">template</span> Result&lt;IdType&gt; FileSystem::ReadFileToValue&lt;IdType&gt;(</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">const</span> std::string&amp;) <span class="keyword">const</span> noexcept;</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="keyword">template</span> Status FileSystem::WriteValueToFile&lt;IdType&gt;(<span class="keyword">const</span> IdType&amp;,</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> std::string&amp;) <span class="keyword">const</span></div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; noexcept;</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;} <span class="comment">// namespace graphar</span></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_a293c0415cb3b72795e034f2a08510524"><div class="ttname"><a href="classgraphar_1_1_file_system.html#a293c0415cb3b72795e034f2a08510524">graphar::FileSystem::GetFileNumOfDir</a></div><div class="ttdeci">Result&lt; IdType &gt; GetFileNumOfDir(const std::string &amp;dir_path, bool recursive=false) const noexcept</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00322">filesystem.cc:322</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_a474b6e6ba28a0114a1d84f4eb06a211b"><div class="ttname"><a href="classgraphar_1_1_file_system.html#a474b6e6ba28a0114a1d84f4eb06a211b">graphar::FileSystem::WriteValueToFile</a></div><div class="ttdeci">Status WriteValueToFile(const T &amp;value, const std::string &amp;path) const noexcept</div><div class="ttdoc">Write a value of type T to a file.</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00229">filesystem.cc:229</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_aa014a28119399836283a573c9abd97b7"><div class="ttname"><a href="classgraphar_1_1_file_system.html#aa014a28119399836283a573c9abd97b7">graphar::FileSystem::ReadFileToValue</a></div><div class="ttdeci">Result&lt; T &gt; ReadFileToValue(const std::string &amp;path) const noexcept</div><div class="ttdoc">Read a file and convert its bytes to a value of type T.</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00207">filesystem.cc:207</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_aab2ff41d0c13cf27b24ec1612817b110"><div class="ttname"><a href="classgraphar_1_1_file_system.html#aab2ff41d0c13cf27b24ec1612817b110">graphar::FileSystem::CopyFile</a></div><div class="ttdeci">Status CopyFile(const std::string &amp;src_path, const std::string &amp;dst_path) const noexcept</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00313">filesystem.cc:313</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_acfd1a7452cf5d89826ac119b90949956"><div class="ttname"><a href="classgraphar_1_1_file_system.html#acfd1a7452cf5d89826ac119b90949956">graphar::FileSystem::ReadFileToTable</a></div><div class="ttdeci">Result&lt; std::shared_ptr&lt; arrow::Table &gt; &gt; ReadFileToTable(const std::string &amp;path, FileType file_type, const util::FilterOptions &amp;options={}) const noexcept</div><div class="ttdoc">Read and filter a file as an arrow::Table.</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00142">filesystem.cc:142</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_ad48927d2fd542cc737cb16b7e529c0b6"><div class="ttname"><a href="classgraphar_1_1_file_system.html#ad48927d2fd542cc737cb16b7e529c0b6">graphar::FileSystem::WriteLabelTableToFile</a></div><div class="ttdeci">Status WriteLabelTableToFile(const std::shared_ptr&lt; arrow::Table &gt; &amp;table, const std::string &amp;path) const noexcept</div><div class="ttdoc">Write a label table to a file with parquet type.</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00295">filesystem.cc:295</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_file_system_html_af5c15ca6b858f7df89eea3e77319decf"><div class="ttname"><a href="classgraphar_1_1_file_system.html#af5c15ca6b858f7df89eea3e77319decf">graphar::FileSystem::WriteTableToFile</a></div><div class="ttdeci">Status WriteTableToFile(const std::shared_ptr&lt; arrow::Table &gt; &amp;table, FileType file_type, const std::string &amp;path, const std::shared_ptr&lt; WriterOptions &gt; &amp;options) const noexcept</div><div class="ttdoc">Write a table to a file with a specific type.</div><div class="ttdef"><b>Definition:</b> <a href="filesystem_8cc_source.html#l00252">filesystem.cc:252</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_status_html"><div class="ttname"><a href="classgraphar_1_1_status.html">graphar::Status</a></div><div class="ttdoc">Status outcome object (success or error)</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00123">status.h:123</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_status_html_a9ca4be37aae8dfea7e6ef54920e0073f"><div class="ttname"><a href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">graphar::Status::Invalid</a></div><div class="ttdeci">static Status Invalid(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00188">status.h:188</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_status_html_ad92f5c41a661d4f468390e39da90f881"><div class="ttname"><a href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">graphar::Status::OK</a></div><div class="ttdeci">static Status OK()</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00157">status.h:157</a></div></div>
<div class="ttc" id="astructgraphar_1_1util_1_1_filter_options_html"><div class="ttname"><a href="structgraphar_1_1util_1_1_filter_options.html">graphar::util::FilterOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="reader__util_8h_source.html#l00030">reader_util.h:30</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!-- disclaimer_footer.html -->
<footer style="text-align: center; font-size: 12px;">
<div>
<p>
Apache GraphAr is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</p>
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/>
Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
</p>
</div>
</footer>