blob: 156a45d9cbc13c591c22fd74f841a52158267057 [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/arrow/chunk_writer.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><li class="navelem"><a class="el" href="dir_8eab286ef154dc33b7755fb8706324e6.html">arrow</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">chunk_writer.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;arrow/acero/api.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;arrow/api.h&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;arrow/compute/api.h&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;graphar/fwd.h&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;graphar/writer_util.h&quot;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt;= 12000000</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;arrow/acero/exec_plan.h&quot;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;arrow/compute/exec/exec_plan.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/dataset/dataset.h&quot;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;arrow/dataset/file_base.h&quot;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;arrow/dataset/file_parquet.h&quot;</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;arrow/dataset/plan.h&quot;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;arrow/dataset/scanner.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/arrow/chunk_writer.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/general_params.h&quot;</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;graphar/graph_info.h&quot;</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &quot;graphar/result.h&quot;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;graphar/status.h&quot;</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;graphar/types.h&quot;</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;graphar/util.h&quot;</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">namespace </span>graphar {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// common methods</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt;= 12000000</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">namespace </span>arrow_acero_namespace = arrow::acero;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">namespace </span>arrow_acero_namespace = arrow::compute;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt;= 10000000</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">using</span> AsyncGeneratorType =</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; arrow::AsyncGenerator&lt;std::optional&lt;arrow::compute::ExecBatch&gt;&gt;;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">using</span> AsyncGeneratorType =</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; arrow::AsyncGenerator&lt;arrow::util::optional&lt;arrow::compute::ExecBatch&gt;&gt;;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; ExecutePlanAndCollectAsTable(</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">const</span> arrow::compute::ExecContext&amp; exec_context,</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; std::shared_ptr&lt;arrow_acero_namespace::ExecPlan&gt; plan,</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; std::shared_ptr&lt;arrow::Schema&gt; schema, AsyncGeneratorType sink_gen) {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// translate sink_gen (async) to sink_reader (sync)</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; std::shared_ptr&lt;arrow::RecordBatchReader&gt; sink_reader =</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; arrow_acero_namespace::MakeGeneratorReader(schema, std::move(sink_gen),</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; exec_context.memory_pool());</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// validate the ExecPlan</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; RETURN_NOT_ARROW_OK(plan-&gt;Validate());</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// start the ExecPlan</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#if defined(ARROW_VERSION) &amp;&amp; ARROW_VERSION &gt;= 12000000</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; plan-&gt;StartProducing(); <span class="comment">// arrow 12.0.0 or later return void, not Status</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; RETURN_NOT_ARROW_OK(plan-&gt;StartProducing());</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// collect sink_reader into a Table</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; std::shared_ptr&lt;arrow::Table&gt; response_table;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; response_table, arrow::Table::FromRecordBatchReader(sink_reader.get()));</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// stop producing</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; plan-&gt;StopProducing();</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// plan mark finished</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; RETURN_NOT_ARROW_OK(plan-&gt;finished().status());</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> response_table;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">// implementations for VertexPropertyChunkWriter</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#a47e13b7e46a9c1dacc069ca4f789b74f"> 106</a></span>&#160;<a class="code" href="classgraphar_1_1_vertex_property_writer.html#a47e13b7e46a9c1dacc069ca4f789b74f">VertexPropertyWriter::VertexPropertyWriter</a>(</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;VertexInfo&gt;&amp; vertex_info, <span class="keyword">const</span> std::string&amp; prefix,</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options,</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; : vertex_info_(vertex_info),</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; prefix_(prefix),</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; validate_level_(validate_level),</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; options_(options) {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span> (!options) {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; options_ = WriterOptions::DefaultWriterOption();</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (validate_level_ == ValidateLevel::default_validate) {</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="stringliteral">&quot;default_validate is not allowed to be set as the global validate &quot;</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="stringliteral">&quot;level for VertexPropertyWriter&quot;</span>);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; GAR_ASSIGN_OR_RAISE_ERROR(fs_, FileSystemFromUriOrPath(prefix, &amp;prefix_));</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment">// Check if the operation of writing vertices number is allowed.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> VertexPropertyWriter::validate(<span class="keyword">const</span> IdType&amp; count,</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</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="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// weak &amp; strong validate</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (count &lt; 0) {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The number of vertices is negative.&quot;</span>);</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; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#ad92f5c41a661d4f468390e39da90f881">Status::OK</a>();</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;}</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;<span class="comment">// Check if the operation of copying a file as a chunk is allowed.</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;Status VertexPropertyWriter::validate(</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group, IdType chunk_index,</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</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="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// weak &amp; strong validate</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span> (!vertex_info_-&gt;HasPropertyGroup(property_group)) {</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a4ee4924ddadfc2c1effc055572084d71">Status::KeyError</a>(<span class="stringliteral">&quot;The property group&quot;</span>, <span class="stringliteral">&quot; does not exist in &quot;</span>,</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; vertex_info_-&gt;GetType(), <span class="stringliteral">&quot; vertex info.&quot;</span>);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (chunk_index &lt; 0) {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a1f9b2120c7a6b3e66f9f2e31021df67f">Status::IndexError</a>(<span class="stringliteral">&quot;Negative chunk index &quot;</span>, chunk_index, <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</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="l00160"></a><span class="lineno"> 160</span>&#160;}</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">// Check if the operation of writing a table as a chunk is allowed.</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;Status VertexPropertyWriter::validate(</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group, IdType chunk_index,</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate) {</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate) {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</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="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// validate property_group &amp; chunk_index</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; GAR_RETURN_NOT_OK(validate(property_group, chunk_index, validate_level));</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// weak validate for the input_table</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span> (input_table-&gt;num_rows() &gt; vertex_info_-&gt;GetChunkSize()) {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The number of rows of input table is &quot;</span>,</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; input_table-&gt;num_rows(),</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="stringliteral">&quot; which is larger than the vertex chunk size&quot;</span>,</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; vertex_info_-&gt;GetChunkSize(), <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// strong validate for the input_table</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::strong_validate) {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// validate the input table</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; RETURN_NOT_ARROW_OK(input_table-&gt;Validate());</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// validate the schema</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property : property_group-&gt;GetProperties()) {</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(property.name);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (indice == -1) {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Column named &quot;</span>, property.name,</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="stringliteral">&quot; of property group &quot;</span>, property_group,</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="stringliteral">&quot; does not exist in the input table.&quot;</span>);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">auto</span> field = schema-&gt;field(indice);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">auto</span> schema_data_type = DataType::DataTypeToArrowDataType(property.type);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (property.cardinality != Cardinality::SINGLE) {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; schema_data_type = arrow::list(schema_data_type);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (!DataType::ArrowDataTypeToDataType(field-&gt;type())</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; -&gt;Equals(DataType::ArrowDataTypeToDataType(schema_data_type))) {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a3335cf4bf5cd222d5e29b01fe95e919a">Status::TypeError</a>(</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="stringliteral">&quot;The data type of property: &quot;</span>, property.name, <span class="stringliteral">&quot; is &quot;</span>,</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; DataType::ArrowDataTypeToDataType(schema_data_type)-&gt;ToTypeName(),</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="stringliteral">&quot;, but got &quot;</span>,</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; DataType::ArrowDataTypeToDataType(field-&gt;type())-&gt;ToTypeName(),</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</span>&#160;}</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"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#addf40fb82fe987af091278e01995b87a"> 216</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#addf40fb82fe987af091278e01995b87a">VertexPropertyWriter::WriteVerticesNum</a>(</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">const</span> IdType&amp; count, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; GAR_RETURN_NOT_OK(validate(count, validate_level));</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> suffix, vertex_info_-&gt;GetVerticesNumFilePath());</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteValueToFile&lt;IdType&gt;(count, path);</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#a5bad3bb184de34c951b1dea21cb1dcd5"> 224</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a5bad3bb184de34c951b1dea21cb1dcd5">VertexPropertyWriter::WriteChunk</a>(</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group, IdType chunk_index,</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; validate(input_table, property_group, chunk_index, validate_level));</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">auto</span> file_type = property_group-&gt;GetFileType();</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(GeneralParams::kVertexIndexCol);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (indice == -1) {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The internal id Column named &quot;</span>,</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; GeneralParams::kVertexIndexCol,</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="stringliteral">&quot; does not exist in the input table.&quot;</span>);</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</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; std::vector&lt;int&gt; indices({indice});</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property : property_group-&gt;GetProperties()) {</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(property.name);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (indice == -1) {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Column named &quot;</span>, property.name,</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="stringliteral">&quot; of property group &quot;</span>, property_group,</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="stringliteral">&quot; of vertex &quot;</span>, vertex_info_-&gt;GetType(),</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="stringliteral">&quot; does not exist in the input table.&quot;</span>);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; indices.push_back(indice);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> in_table,</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; input_table-&gt;SelectColumns(indices));</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> suffix,</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; vertex_info_-&gt;GetFilePath(property_group, chunk_index));</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteTableToFile(in_table, file_type, path, options_);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#a51de0fd2b7444c6a25ae36389b74bfd3"> 258</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a5bad3bb184de34c951b1dea21cb1dcd5">VertexPropertyWriter::WriteChunk</a>(</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType chunk_index,</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">auto</span> property_groups = vertex_info_-&gt;GetPropertyGroups();</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property_group : property_groups) {</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a5bad3bb184de34c951b1dea21cb1dcd5">WriteChunk</a>(input_table, property_group, chunk_index, validate_level));</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</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="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#acc8026d1d2eaaf86f9c2d8d49c207f99"> 269</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#acc8026d1d2eaaf86f9c2d8d49c207f99">VertexPropertyWriter::WriteLabelChunk</a>(</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType chunk_index,</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; FileType file_type, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; std::vector&lt;int&gt; indices;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; schema-&gt;num_fields(); i++) {</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; indices.push_back(i);</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</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; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> in_table,</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; input_table-&gt;SelectColumns(indices));</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; std::string suffix =</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; vertex_info_-&gt;GetPrefix() + <span class="stringliteral">&quot;labels/chunk&quot;</span> + std::to_string(chunk_index);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteLabelTableToFile(input_table, path);</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#adea3f0326fad64bc061bc5b01790ab47"> 286</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#adea3f0326fad64bc061bc5b01790ab47">VertexPropertyWriter::WriteTable</a>(</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group,</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(GeneralParams::kVertexIndexCol);</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">auto</span> table_with_index = input_table;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (indice == -1) {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// add index column</span></div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; GAR_ASSIGN_OR_RAISE(table_with_index,</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; AddIndexColumn(input_table, start_chunk_index,</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; vertex_info_-&gt;GetChunkSize()));</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; IdType chunk_size = vertex_info_-&gt;GetChunkSize();</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; int64_t length = table_with_index-&gt;num_rows();</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; IdType chunk_index = start_chunk_index;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (int64_t offset = 0; offset &lt; length;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; offset += chunk_size, chunk_index++) {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">auto</span> in_chunk = table_with_index-&gt;Slice(offset, chunk_size);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a5bad3bb184de34c951b1dea21cb1dcd5">WriteChunk</a>(in_chunk, property_group, chunk_index, validate_level));</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</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="l00309"></a><span class="lineno"> 309</span>&#160;}</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#aaa3107eb66941ceeb782280e3038ee4f"> 311</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#adea3f0326fad64bc061bc5b01790ab47">VertexPropertyWriter::WriteTable</a>(</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType start_chunk_index,</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">auto</span> property_groups = vertex_info_-&gt;GetPropertyGroups();</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> table_with_index,</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; AddIndexColumn(input_table, start_chunk_index,</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; vertex_info_-&gt;GetChunkSize()));</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property_group : property_groups) {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_vertex_property_writer.html#adea3f0326fad64bc061bc5b01790ab47">WriteTable</a>(table_with_index, property_group,</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; start_chunk_index, validate_level));</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"> 322</span>&#160; <span class="keyword">auto</span> labels = vertex_info_-&gt;GetLabels();</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (!labels.empty()) {</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> label_table, <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a66aaa3cb378175cd0addee461191c180">GetLabelTable</a>(input_table, labels))</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_vertex_property_writer.html#a001d330977bb6830bc78c42219f8c8a0">WriteLabelTable</a>(label_table, start_chunk_index,</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; FileType::PARQUET, validate_level));</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</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="l00330"></a><span class="lineno"> 330</span>&#160;}</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#a001d330977bb6830bc78c42219f8c8a0"> 332</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a001d330977bb6830bc78c42219f8c8a0">VertexPropertyWriter::WriteLabelTable</a>(</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType start_chunk_index,</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; FileType file_type, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(GeneralParams::kVertexIndexCol);</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; IdType chunk_size = vertex_info_-&gt;GetChunkSize();</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; int64_t length = input_table-&gt;num_rows();</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; IdType chunk_index = start_chunk_index;</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">for</span> (int64_t offset = 0; offset &lt; length;</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; offset += chunk_size, chunk_index++) {</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">auto</span> in_chunk = input_table-&gt;Slice(offset, chunk_size);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#acc8026d1d2eaaf86f9c2d8d49c207f99">WriteLabelChunk</a>(in_chunk, chunk_index, file_type, validate_level));</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</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="l00347"></a><span class="lineno"> 347</span>&#160;}</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"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#a66aaa3cb378175cd0addee461191c180"> 349</a></span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#a66aaa3cb378175cd0addee461191c180">VertexPropertyWriter::GetLabelTable</a>(</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; labels)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// Find the label column index</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">auto</span> label_col_idx =</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; input_table-&gt;schema()-&gt;GetFieldIndex(GeneralParams::kLabelCol);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (label_col_idx == -1) {</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a4ee4924ddadfc2c1effc055572084d71">Status::KeyError</a>(<span class="stringliteral">&quot;label column not found in the input table.&quot;</span>);</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// Create a matrix of booleans with dimensions [number of rows, number of</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// labels]</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; std::vector&lt;std::vector&lt;bool&gt;&gt; bool_matrix(</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; input_table-&gt;num_rows(), std::vector&lt;bool&gt;(labels.size(), <span class="keyword">false</span>));</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">// Create a map for labels to column indices</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; std::unordered_map&lt;std::string, int&gt; label_to_index;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; labels.size(); ++i) {</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; label_to_index[labels[i]] = i;</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="keywordtype">int</span> row_offset = 0; <span class="comment">// Offset for where to fill the bool_matrix</span></div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// Iterate through each chunk of the :LABEL column</span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">for</span> (int64_t chunk_idx = 0;</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; chunk_idx &lt; input_table-&gt;column(label_col_idx)-&gt;num_chunks();</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; ++chunk_idx) {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">auto</span> chunk = input_table-&gt;column(label_col_idx)-&gt;chunk(chunk_idx);</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keyword">auto</span> label_column = std::static_pointer_cast&lt;arrow::StringArray&gt;(chunk);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// Populate the matrix based on :LABEL column values</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// TODO(@yangxk): store array in the label_column, split the string when</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// reading file</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">for</span> (int64_t row = 0; row &lt; label_column-&gt;length(); ++row) {</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (label_column-&gt;IsValid(row)) {</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; std::string labels_string = label_column-&gt;GetString(row);</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">auto</span> row_labels = SplitString(labels_string, <span class="charliteral">&#39;;&#39;</span>);</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; lbl : row_labels) {</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (label_to_index.find(lbl) != label_to_index.end()) {</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; bool_matrix[row_offset + row][label_to_index[lbl]] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; row_offset +=</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; label_column-&gt;length(); <span class="comment">// Update the row offset for the next chunk</span></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="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// Create Arrow arrays for each label column</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; arrow::FieldVector fields;</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; arrow::ArrayVector arrays;</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; </div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; label : labels) {</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; arrow::BooleanBuilder builder;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; row : bool_matrix) {</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; RETURN_NOT_ARROW_OK(builder.Append(row[label_to_index[label]]));</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; </div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; std::shared_ptr&lt;arrow::Array&gt; array;</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; RETURN_NOT_ARROW_OK(builder.Finish(&amp;array));</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; fields.push_back(arrow::field(label, arrow::boolean()));</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; arrays.push_back(array);</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// Create the Arrow Table with the boolean columns</span></div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">auto</span> schema = std::make_shared&lt;arrow::Schema&gt;(fields);</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">auto</span> result_table = arrow::Table::Make(schema, arrays);</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">return</span> result_table;</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;}</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
<div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf"> 420</a></span>&#160;Result&lt;std::shared_ptr&lt;VertexPropertyWriter&gt;&gt; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">VertexPropertyWriter::Make</a>(</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;VertexInfo&gt;&amp; vertex_info, <span class="keyword">const</span> std::string&amp; prefix,</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options,</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;VertexPropertyWriter&gt;(vertex_info, prefix, options,</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; validate_level);</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;}</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; </div>
<div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classgraphar_1_1_vertex_property_writer.html#ad3248d518579a570367fa1b46a85c7fe"> 428</a></span>&#160;Result&lt;std::shared_ptr&lt;VertexPropertyWriter&gt;&gt; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">VertexPropertyWriter::Make</a>(</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;GraphInfo&gt;&amp; graph_info, <span class="keyword">const</span> std::string&amp; type,</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options,</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">auto</span> vertex_info = graph_info-&gt;GetVertexInfo(type);</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">if</span> (!vertex_info) {</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a4ee4924ddadfc2c1effc055572084d71">Status::KeyError</a>(<span class="stringliteral">&quot;The vertex &quot;</span>, type, <span class="stringliteral">&quot; doesn&#39;t exist.&quot;</span>);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">Make</a>(vertex_info, graph_info-&gt;GetPrefix(), options, validate_level);</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;}</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; </div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;Result&lt;std::shared_ptr&lt;VertexPropertyWriter&gt;&gt; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">VertexPropertyWriter::Make</a>(</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;VertexInfo&gt;&amp; vertex_info, <span class="keyword">const</span> std::string&amp; prefix,</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">Make</a>(vertex_info, prefix, WriterOptions::DefaultWriterOption(),</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; validate_level);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;}</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; </div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;Result&lt;std::shared_ptr&lt;VertexPropertyWriter&gt;&gt; <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">VertexPropertyWriter::Make</a>(</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;GraphInfo&gt;&amp; graph_info, <span class="keyword">const</span> std::string&amp; type,</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">Make</a>(graph_info, type, WriterOptions::DefaultWriterOption(),</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; validate_level);</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;}</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; </div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; VertexPropertyWriter::AddIndexColumn(</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; table, IdType chunk_index,</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; IdType chunk_size)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; arrow::Int64Builder array_builder;</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; RETURN_NOT_ARROW_OK(array_builder.Reserve(chunk_size));</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; int64_t length = table-&gt;num_rows();</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">for</span> (IdType i = 0; i &lt; length; i++) {</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; RETURN_NOT_ARROW_OK(array_builder.Append(chunk_index * chunk_size + i));</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; std::shared_ptr&lt;arrow::Array&gt; array;</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; RETURN_NOT_ARROW_OK(array_builder.Finish(&amp;array));</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; std::shared_ptr&lt;arrow::ChunkedArray&gt; chunked_array =</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; std::make_shared&lt;arrow::ChunkedArray&gt;(array);</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keyword">auto</span> ret, table-&gt;AddColumn(0,</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; arrow::field(GeneralParams::kVertexIndexCol,</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; arrow::int64(), <span class="keyword">false</span>),</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; chunked_array));</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;}</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; </div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="comment">// implementations for EdgeChunkWriter</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; </div>
<div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#ad0d49b05093477ee5bd4c59a1a181ad4"> 476</a></span>&#160;<a class="code" href="classgraphar_1_1_edge_chunk_writer.html#ad0d49b05093477ee5bd4c59a1a181ad4">EdgeChunkWriter::EdgeChunkWriter</a>(<span class="keyword">const</span> std::shared_ptr&lt;EdgeInfo&gt;&amp; edge_info,</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keyword">const</span> std::string&amp; prefix,</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; AdjListType adj_list_type,</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options,</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level)</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; : edge_info_(edge_info),</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; adj_list_type_(adj_list_type),</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; validate_level_(validate_level),</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; options_(options) {</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span> (!options) {</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; options_ = WriterOptions::DefaultWriterOption();</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; }</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span> (validate_level_ == ValidateLevel::default_validate) {</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="stringliteral">&quot;default_validate is not allowed to be set as the global validate &quot;</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="stringliteral">&quot;level for EdgeChunkWriter&quot;</span>);</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; GAR_ASSIGN_OR_RAISE_ERROR(fs_, FileSystemFromUriOrPath(prefix, &amp;prefix_));</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; chunk_size_ = edge_info_-&gt;GetChunkSize();</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">switch</span> (adj_list_type) {</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">case</span> AdjListType::unordered_by_source:</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; vertex_chunk_size_ = edge_info_-&gt;GetSrcChunkSize();</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">case</span> AdjListType::ordered_by_source:</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; vertex_chunk_size_ = edge_info_-&gt;GetSrcChunkSize();</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">case</span> AdjListType::unordered_by_dest:</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; vertex_chunk_size_ = edge_info_-&gt;GetDstChunkSize();</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">case</span> AdjListType::ordered_by_dest:</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; vertex_chunk_size_ = edge_info_-&gt;GetDstChunkSize();</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; vertex_chunk_size_ = edge_info_-&gt;GetSrcChunkSize();</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;}</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="comment">// Check if the operation of writing number or copying a file is allowed.</span></div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> EdgeChunkWriter::validate(IdType count_or_index1, IdType count_or_index2,</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</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="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// weak &amp; strong validate for adj list type</span></div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span> (!edge_info_-&gt;HasAdjacentListType(adj_list_type_)) {</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a4ee4924ddadfc2c1effc055572084d71">Status::KeyError</a>(</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="stringliteral">&quot;Adj list type &quot;</span>, AdjListTypeToString(adj_list_type_),</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="stringliteral">&quot; does not exist in the &quot;</span>, edge_info_-&gt;GetEdgeType(), <span class="stringliteral">&quot; edge info.&quot;</span>);</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// weak &amp; strong validate for count or index</span></div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">if</span> (count_or_index1 &lt; 0 || count_or_index2 &lt; 0) {</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a1f9b2120c7a6b3e66f9f2e31021df67f">Status::IndexError</a>(</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="stringliteral">&quot;The count or index must be non-negative, but got &quot;</span>, count_or_index1,</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="stringliteral">&quot; and &quot;</span>, count_or_index2, <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</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="l00534"></a><span class="lineno"> 534</span>&#160;}</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; </div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">// Check if the operation of copying a file as a property chunk is allowed.</span></div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;Status EdgeChunkWriter::validate(</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group,</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; IdType vertex_chunk_index, IdType chunk_index,</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</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="l00547"></a><span class="lineno"> 547</span>&#160; <span class="comment">// validate for adj list type &amp; index</span></div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; GAR_RETURN_NOT_OK(validate(vertex_chunk_index, chunk_index, validate_level));</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="comment">// weak &amp; strong validate for property group</span></div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">if</span> (!edge_info_-&gt;HasPropertyGroup(property_group)) {</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a4ee4924ddadfc2c1effc055572084d71">Status::KeyError</a>(<span class="stringliteral">&quot;Property group&quot;</span>, <span class="stringliteral">&quot; does not exist in the &quot;</span>,</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; edge_info_-&gt;GetEdgeType(), <span class="stringliteral">&quot; edge info.&quot;</span>);</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</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="l00555"></a><span class="lineno"> 555</span>&#160;}</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; </div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">// Check if the operation of writing a table as an offset chunk is allowed.</span></div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;Status EdgeChunkWriter::validate(</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">// validate for adj list type &amp; index</span></div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; GAR_RETURN_NOT_OK(validate(vertex_chunk_index, 0, validate_level));</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="comment">// weak validate for the input table</span></div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (adj_list_type_ != AdjListType::ordered_by_source &amp;&amp;</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; adj_list_type_ != AdjListType::ordered_by_dest) {</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</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="l00573"></a><span class="lineno"> 573</span>&#160; <span class="stringliteral">&quot;The adj list type has to be ordered_by_source or ordered_by_dest, but &quot;</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="stringliteral">&quot;got &quot;</span> +</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; std::string(AdjListTypeToString(adj_list_type_)));</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">if</span> (adj_list_type_ == AdjListType::ordered_by_source &amp;&amp;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; input_table-&gt;num_rows() &gt; edge_info_-&gt;GetSrcChunkSize() + 1) {</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</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="l00580"></a><span class="lineno"> 580</span>&#160; <span class="stringliteral">&quot;The number of rows of input offset table is &quot;</span>, input_table-&gt;num_rows(),</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="stringliteral">&quot; which is larger than the offset size of source vertex chunk &quot;</span>,</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; edge_info_-&gt;GetSrcChunkSize() + 1, <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span> (adj_list_type_ == AdjListType::ordered_by_dest &amp;&amp;</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; input_table-&gt;num_rows() &gt; edge_info_-&gt;GetDstChunkSize() + 1) {</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</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="l00587"></a><span class="lineno"> 587</span>&#160; <span class="stringliteral">&quot;The number of rows of input offset table is &quot;</span>, input_table-&gt;num_rows(),</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="stringliteral">&quot; which is larger than the offset size of destination vertex chunk &quot;</span>,</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; edge_info_-&gt;GetSrcChunkSize() + 1, <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; }</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// strong validate for the input_table</span></div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::strong_validate) {</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// validate the input table</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; RETURN_NOT_ARROW_OK(input_table-&gt;Validate());</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// validate the schema</span></div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordtype">int</span> index = schema-&gt;GetFieldIndex(GeneralParams::kOffsetCol);</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (index == -1) {</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The offset column &quot;</span>, GeneralParams::kOffsetCol,</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="stringliteral">&quot; does not exist in the input table&quot;</span>);</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; }</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">auto</span> field = schema-&gt;field(index);</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (field-&gt;type()-&gt;id() != arrow::Type::INT64) {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a3335cf4bf5cd222d5e29b01fe95e919a">Status::TypeError</a>(</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="stringliteral">&quot;The data type for offset column should be INT64, but got &quot;</span>,</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; field-&gt;type()-&gt;name());</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</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="l00610"></a><span class="lineno"> 610</span>&#160;}</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; </div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment">// Check if the operation of writing a table as an adj list chunk is allowed.</span></div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;Status EdgeChunkWriter::validate(</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; IdType chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</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="l00622"></a><span class="lineno"> 622</span>&#160; <span class="comment">// validate for adj list type &amp; index</span></div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; GAR_RETURN_NOT_OK(validate(vertex_chunk_index, chunk_index, validate_level));</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// weak validate for the input table</span></div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">if</span> (input_table-&gt;num_rows() &gt; edge_info_-&gt;GetChunkSize()) {</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</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="l00627"></a><span class="lineno"> 627</span>&#160; <span class="stringliteral">&quot;The number of rows of input table is &quot;</span>, input_table-&gt;num_rows(),</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="stringliteral">&quot; which is larger than the &quot;</span>, edge_info_-&gt;GetEdgeType(),</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="stringliteral">&quot; edge chunk size &quot;</span>, edge_info_-&gt;GetChunkSize(), <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; }</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// strong validate for the input table</span></div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::strong_validate) {</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordtype">int</span> index = schema-&gt;GetFieldIndex(GeneralParams::kSrcIndexCol);</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (index == -1) {</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The source index column &quot;</span>,</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; GeneralParams::kSrcIndexCol,</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="stringliteral">&quot; does not exist in the input table&quot;</span>);</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keyword">auto</span> field = schema-&gt;field(index);</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">if</span> (field-&gt;type()-&gt;id() != arrow::Type::INT64) {</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a3335cf4bf5cd222d5e29b01fe95e919a">Status::TypeError</a>(</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="stringliteral">&quot;The data type for source index column should be INT64, but got &quot;</span>,</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; field-&gt;type()-&gt;name());</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; index = schema-&gt;GetFieldIndex(GeneralParams::kDstIndexCol);</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">if</span> (index == -1) {</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The destination index column &quot;</span>,</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; GeneralParams::kDstIndexCol,</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="stringliteral">&quot; does not exist in the input table&quot;</span>);</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; }</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; field = schema-&gt;field(index);</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span> (field-&gt;type()-&gt;id() != arrow::Type::INT64) {</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a3335cf4bf5cd222d5e29b01fe95e919a">Status::TypeError</a>(</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="stringliteral">&quot;The data type for destination index column should be INT64, but &quot;</span></div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="stringliteral">&quot;got &quot;</span>,</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; field-&gt;type()-&gt;name());</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</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="l00661"></a><span class="lineno"> 661</span>&#160;}</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; </div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment">// Check if the operation of writing a table as a property chunk is allowed.</span></div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;Status EdgeChunkWriter::validate(</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group,</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; IdType vertex_chunk_index, IdType chunk_index,</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="comment">// use the writer&#39;s validate level</span></div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::default_validate)</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; validate_level = validate_level_;</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="comment">// no validate</span></div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::no_validate)</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</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="l00675"></a><span class="lineno"> 675</span>&#160; <span class="comment">// validate for property group, adj list type &amp; index</span></div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; GAR_RETURN_NOT_OK(validate(property_group, vertex_chunk_index, chunk_index,</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; validate_level));</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="comment">// weak validate for the input table</span></div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">if</span> (input_table-&gt;num_rows() &gt; edge_info_-&gt;GetChunkSize()) {</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</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="l00681"></a><span class="lineno"> 681</span>&#160; <span class="stringliteral">&quot;The number of rows of input table is &quot;</span>, input_table-&gt;num_rows(),</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="stringliteral">&quot; which is larger than the &quot;</span>, edge_info_-&gt;GetEdgeType(),</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="stringliteral">&quot; edge chunk size &quot;</span>, edge_info_-&gt;GetChunkSize(), <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">// strong validate for the input table</span></div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (validate_level == ValidateLevel::strong_validate) {</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// validate the input table</span></div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; RETURN_NOT_ARROW_OK(input_table-&gt;Validate());</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="comment">// validate the schema</span></div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property : property_group-&gt;GetProperties()) {</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(property.name);</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (indice == -1) {</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Column named &quot;</span>, property.name,</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="stringliteral">&quot; of property group &quot;</span>, property_group,</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="stringliteral">&quot; does not exist in the input table.&quot;</span>);</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keyword">auto</span> field = schema-&gt;field(indice);</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">if</span> (DataType::ArrowDataTypeToDataType(field-&gt;type()) != property.type) {</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a3335cf4bf5cd222d5e29b01fe95e919a">Status::TypeError</a>(</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="stringliteral">&quot;The data type of property: &quot;</span>, property.name, <span class="stringliteral">&quot; is &quot;</span>,</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; property.type-&gt;ToTypeName(), <span class="stringliteral">&quot;, but got &quot;</span>,</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; DataType::ArrowDataTypeToDataType(field-&gt;type())-&gt;ToTypeName(),</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; }</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</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="l00709"></a><span class="lineno"> 709</span>&#160;}</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; </div>
<div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#abfa01f956f732e660eead056ce12f7c1"> 711</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#abfa01f956f732e660eead056ce12f7c1">EdgeChunkWriter::WriteEdgesNum</a>(IdType vertex_chunk_index,</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keyword">const</span> IdType&amp; count,</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; GAR_RETURN_NOT_OK(validate(vertex_chunk_index, count, validate_level));</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> suffix, edge_info_-&gt;GetEdgesNumFilePath(</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; vertex_chunk_index, adj_list_type_));</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteValueToFile&lt;IdType&gt;(count, path);</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;}</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; </div>
<div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#af3796d4dd08e7d876281f53d039dad5f"> 721</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#af3796d4dd08e7d876281f53d039dad5f">EdgeChunkWriter::WriteVerticesNum</a>(<span class="keyword">const</span> IdType&amp; count,</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; GAR_RETURN_NOT_OK(validate(0, count, validate_level));</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> suffix,</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; edge_info_-&gt;GetVerticesNumFilePath(adj_list_type_));</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteValueToFile&lt;IdType&gt;(count, path);</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;}</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; </div>
<div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a9a9041e72a3d46e9fb8a2f1d2463489c"> 730</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a9a9041e72a3d46e9fb8a2f1d2463489c">EdgeChunkWriter::WriteOffsetChunk</a>(</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; GAR_RETURN_NOT_OK(validate(input_table, vertex_chunk_index, validate_level));</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keyword">auto</span> file_type = edge_info_-&gt;GetAdjacentList(adj_list_type_)-&gt;GetFileType();</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordtype">int</span> index = schema-&gt;GetFieldIndex(GeneralParams::kOffsetCol);</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">if</span> (index == -1) {</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The offset column &quot;</span>, GeneralParams::kOffsetCol,</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="stringliteral">&quot; does not exist in the input table&quot;</span>);</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keyword">auto</span> in_table = input_table-&gt;SelectColumns({index}).ValueOrDie();</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> suffix, edge_info_-&gt;GetAdjListOffsetFilePath(</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; vertex_chunk_index, adj_list_type_));</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteTableToFile(in_table, file_type, path, options_);</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;}</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; </div>
<div class="line"><a name="l00748"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#abbf227f722fcfaf5a330229d92dcc7d0"> 748</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#abbf227f722fcfaf5a330229d92dcc7d0">EdgeChunkWriter::WriteAdjListChunk</a>(</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; IdType chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; validate(input_table, vertex_chunk_index, chunk_index, validate_level));</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keyword">auto</span> file_type = edge_info_-&gt;GetAdjacentList(adj_list_type_)-&gt;GetFileType();</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; std::vector&lt;int&gt; indices;</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; indices.clear();</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordtype">int</span> index = schema-&gt;GetFieldIndex(GeneralParams::kSrcIndexCol);</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">if</span> (index == -1) {</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The source index column &quot;</span>,</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; GeneralParams::kSrcIndexCol,</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="stringliteral">&quot; does not exist in the input table&quot;</span>);</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; }</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; indices.push_back(index);</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; index = schema-&gt;GetFieldIndex(GeneralParams::kDstIndexCol);</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (index == -1) {</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;The destination index column &quot;</span>,</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; GeneralParams::kDstIndexCol,</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="stringliteral">&quot; does not exist in the input table&quot;</span>);</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; indices.push_back(index);</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keyword">auto</span> in_table = input_table-&gt;SelectColumns(indices).ValueOrDie();</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keyword">auto</span> suffix, edge_info_-&gt;GetAdjListFilePath(vertex_chunk_index,</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; chunk_index, adj_list_type_));</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteTableToFile(in_table, file_type, path, options_);</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;}</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; </div>
<div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877"> 780</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">EdgeChunkWriter::WritePropertyChunk</a>(</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group,</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; IdType vertex_chunk_index, IdType chunk_index,</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; GAR_RETURN_NOT_OK(validate(input_table, property_group, vertex_chunk_index,</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; chunk_index, validate_level));</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keyword">auto</span> file_type = property_group-&gt;GetFileType();</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; </div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; std::vector&lt;int&gt; indices;</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; indices.clear();</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keyword">auto</span> schema = input_table-&gt;schema();</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property : property_group-&gt;GetProperties()) {</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordtype">int</span> indice = schema-&gt;GetFieldIndex(property.name);</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">if</span> (indice == -1) {</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_status.html#a9ca4be37aae8dfea7e6ef54920e0073f">Status::Invalid</a>(<span class="stringliteral">&quot;Column named &quot;</span>, property.name,</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="stringliteral">&quot; of property group &quot;</span>, property_group, <span class="stringliteral">&quot; of edge &quot;</span>,</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; edge_info_-&gt;GetEdgeType(),</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="stringliteral">&quot; does not exist in the input table.&quot;</span>);</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; indices.push_back(indice);</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keyword">auto</span> in_table = input_table-&gt;SelectColumns(indices).ValueOrDie();</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; GAR_ASSIGN_OR_RAISE(<span class="keyword">auto</span> suffix, edge_info_-&gt;GetPropertyFilePath(</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; property_group, adj_list_type_,</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; vertex_chunk_index, chunk_index));</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; std::string path = prefix_ + suffix;</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">return</span> fs_-&gt;WriteTableToFile(in_table, file_type, path, options_);</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;}</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
<div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a48f3a7356d603416caf3aefd546d2135"> 810</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">EdgeChunkWriter::WritePropertyChunk</a>(</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; IdType chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; property_groups = edge_info_-&gt;GetPropertyGroups();</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; property_group : property_groups) {</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">WritePropertyChunk</a>(input_table, property_group,</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; vertex_chunk_index, chunk_index,</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; validate_level));</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</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="l00820"></a><span class="lineno"> 820</span>&#160;}</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; </div>
<div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#aa2e0976953c5ef8a7015079c56b56c47"> 822</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#aa2e0976953c5ef8a7015079c56b56c47">EdgeChunkWriter::WriteChunk</a>(</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; IdType chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_edge_chunk_writer.html#abbf227f722fcfaf5a330229d92dcc7d0">WriteAdjListChunk</a>(input_table, vertex_chunk_index,</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; chunk_index, validate_level));</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">WritePropertyChunk</a>(input_table, vertex_chunk_index, chunk_index,</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; validate_level);</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;}</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
<div class="line"><a name="l00831"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a7197f8501c2205dd6a5456d4bf1769fd"> 831</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a7197f8501c2205dd6a5456d4bf1769fd">EdgeChunkWriter::WriteAdjListTable</a>(</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; int64_t length = input_table-&gt;num_rows();</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; IdType chunk_index = start_chunk_index;</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">for</span> (int64_t offset = 0; offset &lt; length;</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; offset += chunk_size_, chunk_index++) {</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keyword">auto</span> in_chunk = input_table-&gt;Slice(offset, chunk_size_);</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_edge_chunk_writer.html#abbf227f722fcfaf5a330229d92dcc7d0">WriteAdjListChunk</a>(in_chunk, vertex_chunk_index,</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; chunk_index, validate_level));</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</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="l00843"></a><span class="lineno"> 843</span>&#160;}</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; </div>
<div class="line"><a name="l00845"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a74d5ff66b247fb94b87db25442f98ee2"> 845</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a74d5ff66b247fb94b87db25442f98ee2">EdgeChunkWriter::WritePropertyTable</a>(</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group,</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; IdType vertex_chunk_index, IdType start_chunk_index,</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; int64_t length = input_table-&gt;num_rows();</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; IdType chunk_index = start_chunk_index;</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">for</span> (int64_t offset = 0; offset &lt; length;</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; offset += chunk_size_, chunk_index++) {</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keyword">auto</span> in_chunk = input_table-&gt;Slice(offset, chunk_size_);</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">WritePropertyChunk</a>(in_chunk, property_group,</div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; vertex_chunk_index, chunk_index,</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; validate_level));</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</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="l00860"></a><span class="lineno"> 860</span>&#160;}</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; </div>
<div class="line"><a name="l00862"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#ac4d3a559f6508f150ff5272ccec0f120"> 862</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a74d5ff66b247fb94b87db25442f98ee2">EdgeChunkWriter::WritePropertyTable</a>(</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; int64_t length = input_table-&gt;num_rows();</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; IdType chunk_index = start_chunk_index;</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keywordflow">for</span> (int64_t offset = 0; offset &lt; length;</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; offset += chunk_size_, chunk_index++) {</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keyword">auto</span> in_chunk = input_table-&gt;Slice(offset, chunk_size_);</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; GAR_RETURN_NOT_OK(<a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">WritePropertyChunk</a>(in_chunk, vertex_chunk_index,</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; chunk_index, validate_level));</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; }</div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</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="l00874"></a><span class="lineno"> 874</span>&#160;}</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; </div>
<div class="line"><a name="l00876"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#adbe1029f7e8f1777da7e905ec0e0b0e4"> 876</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#adbe1029f7e8f1777da7e905ec0e0b0e4">EdgeChunkWriter::WriteTable</a>(</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; int64_t length = input_table-&gt;num_rows();</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; IdType chunk_index = start_chunk_index;</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordflow">for</span> (int64_t offset = 0; offset &lt; length;</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; offset += chunk_size_, chunk_index++) {</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keyword">auto</span> in_chunk = input_table-&gt;Slice(offset, chunk_size_);</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#aa2e0976953c5ef8a7015079c56b56c47">WriteChunk</a>(in_chunk, vertex_chunk_index, chunk_index, validate_level));</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; }</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</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="l00888"></a><span class="lineno"> 888</span>&#160;}</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; </div>
<div class="line"><a name="l00890"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a69144b6a4bd4087b7401787d641ca772"> 890</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a69144b6a4bd4087b7401787d641ca772">EdgeChunkWriter::SortAndWriteAdjListTable</a>(</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keyword">auto</span> response_table,</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; sortTable(input_table, getSortColumnName(adj_list_type_)));</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">if</span> (adj_list_type_ == AdjListType::ordered_by_source ||</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; adj_list_type_ == AdjListType::ordered_by_dest) {</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="keyword">auto</span> offset_table,</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; getOffsetTable(response_table, getSortColumnName(adj_list_type_),</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; vertex_chunk_index));</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a9a9041e72a3d46e9fb8a2f1d2463489c">WriteOffsetChunk</a>(offset_table, vertex_chunk_index, validate_level));</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; }</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a7197f8501c2205dd6a5456d4bf1769fd">WriteAdjListTable</a>(response_table, vertex_chunk_index,</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; start_chunk_index, validate_level);</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160;}</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; </div>
<div class="line"><a name="l00909"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#ab859c5eb1f10b88c5d0af6ab71e0ec79"> 909</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#ab859c5eb1f10b88c5d0af6ab71e0ec79">EdgeChunkWriter::SortAndWritePropertyTable</a>(</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;PropertyGroup&gt;&amp; property_group,</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; IdType vertex_chunk_index, IdType start_chunk_index,</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keyword">auto</span> response_table,</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; sortTable(input_table, getSortColumnName(adj_list_type_)));</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a74d5ff66b247fb94b87db25442f98ee2">WritePropertyTable</a>(response_table, property_group, vertex_chunk_index,</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; start_chunk_index, validate_level);</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;}</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; </div>
<div class="line"><a name="l00921"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a0a7146c0fbc15e5775bf950e3f435f54"> 921</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#ab859c5eb1f10b88c5d0af6ab71e0ec79">EdgeChunkWriter::SortAndWritePropertyTable</a>(</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keyword">auto</span> response_table,</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; sortTable(input_table, getSortColumnName(adj_list_type_)));</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a74d5ff66b247fb94b87db25442f98ee2">WritePropertyTable</a>(response_table, vertex_chunk_index,</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; start_chunk_index, validate_level);</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;}</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; </div>
<div class="line"><a name="l00931"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#aadbd1ad5299ab867d099ffc85528268a"> 931</a></span>&#160;<a class="code" href="classgraphar_1_1_status.html">Status</a> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#aadbd1ad5299ab867d099ffc85528268a">EdgeChunkWriter::SortAndWriteTable</a>(</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table, IdType vertex_chunk_index,</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; IdType start_chunk_index, ValidateLevel validate_level)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keyword">auto</span> response_table,</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; sortTable(input_table, getSortColumnName(adj_list_type_)));</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; </div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">if</span> (adj_list_type_ == AdjListType::ordered_by_source ||</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; adj_list_type_ == AdjListType::ordered_by_dest) {</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; GAR_ASSIGN_OR_RAISE(</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keyword">auto</span> offset_table,</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; getOffsetTable(response_table, getSortColumnName(adj_list_type_),</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; vertex_chunk_index));</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; GAR_RETURN_NOT_OK(</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#a9a9041e72a3d46e9fb8a2f1d2463489c">WriteOffsetChunk</a>(offset_table, vertex_chunk_index, validate_level));</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classgraphar_1_1_edge_chunk_writer.html#adbe1029f7e8f1777da7e905ec0e0b0e4">WriteTable</a>(response_table, vertex_chunk_index, start_chunk_index,</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; validate_level);</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160;}</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; </div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; EdgeChunkWriter::getOffsetTable(</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="keyword">const</span> std::string&amp; column_name, IdType vertex_chunk_index)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; std::shared_ptr&lt;arrow::ChunkedArray&gt; column =</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; input_table-&gt;GetColumnByName(column_name);</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; int64_t array_index = 0, index = 0;</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keyword">auto</span> ids =</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; std::static_pointer_cast&lt;arrow::Int64Array&gt;(column-&gt;chunk(array_index));</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; </div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; arrow::Int64Builder builder;</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; IdType begin_index = vertex_chunk_index * vertex_chunk_size_,</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; end_index = begin_index + vertex_chunk_size_;</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; RETURN_NOT_ARROW_OK(builder.Append(0));</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; std::vector&lt;std::shared_ptr&lt;arrow::Array&gt;&gt; arrays;</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; std::vector&lt;std::shared_ptr&lt;arrow::Field&gt;&gt; schema_vector;</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; std::string <span class="keyword">property</span> = GeneralParams::kOffsetCol;</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; schema_vector.push_back(</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; arrow::field(property, DataType::DataTypeToArrowDataType(int64())));</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; </div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; int64_t global_index = 0;</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">for</span> (IdType i = begin_index; i &lt; end_index; i++) {</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">if</span> (array_index &gt;= column-&gt;num_chunks())</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">if</span> (index &gt;= ids-&gt;length()) {</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; array_index++;</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">if</span> (array_index == column-&gt;num_chunks())</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; ids = std::static_pointer_cast&lt;arrow::Int64Array&gt;(</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; column-&gt;chunk(array_index));</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; index = 0;</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; }</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">if</span> (ids-&gt;IsNull(index) || !ids-&gt;IsValid(index)) {</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; index++;</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; global_index++;</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; int64_t x = ids-&gt;Value(index);</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keywordflow">if</span> (x &lt;= i) {</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; index++;</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; global_index++;</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; }</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; RETURN_NOT_ARROW_OK(builder.Append(global_index));</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(<span class="keyword">auto</span> array, builder.Finish());</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; arrays.push_back(array);</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keyword">auto</span> schema = std::make_shared&lt;arrow::Schema&gt;(schema_vector);</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">return</span> arrow::Table::Make(schema, arrays);</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;}</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; </div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;Result&lt;std::shared_ptr&lt;arrow::Table&gt;&gt; EdgeChunkWriter::sortTable(</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;arrow::Table&gt;&amp; input_table,</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keyword">const</span> std::string&amp; column_name) {</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="preprocessor">#if ARROW_VERSION &gt;= 21000000</span></div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; RETURN_NOT_ARROW_OK(arrow::compute::Initialize());</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keyword">auto</span> exec_context = arrow::compute::default_exec_context();</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keyword">auto</span> plan = arrow_acero_namespace::ExecPlan::Make(exec_context).ValueOrDie();</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keyword">auto</span> table_source_options =</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; arrow_acero_namespace::TableSourceNodeOptions{input_table};</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keyword">auto</span> source = arrow_acero_namespace::MakeExecNode(<span class="stringliteral">&quot;table_source&quot;</span>, plan.get(),</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; {}, table_source_options)</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; .ValueOrDie();</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; AsyncGeneratorType sink_gen;</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; RETURN_NOT_ARROW_OK(</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; arrow_acero_namespace::MakeExecNode(</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="stringliteral">&quot;order_by_sink&quot;</span>, plan.get(), {source},</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; arrow_acero_namespace::OrderBySinkNodeOptions{</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; arrow::compute::SortOptions{{arrow::compute::SortKey{</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; column_name, arrow::compute::SortOrder::Ascending}}},</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; &amp;sink_gen})</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; .status());</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">return</span> ExecutePlanAndCollectAsTable(*exec_context, plan,</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; input_table-&gt;schema(), sink_gen);</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;}</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; </div>
<div class="line"><a name="l01032"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a82bf692fe22e5b40339513bff563a871"> 1032</a></span>&#160;Result&lt;std::shared_ptr&lt;EdgeChunkWriter&gt;&gt; EdgeChunkWriter::Make(</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;EdgeInfo&gt;&amp; edge_info, <span class="keyword">const</span> std::string&amp; prefix,</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; AdjListType adj_list_type, <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options,</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">if</span> (!edge_info-&gt;HasAdjacentListType(adj_list_type)) {</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">return</span> Status::KeyError(</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="stringliteral">&quot;The adjacent list type &quot;</span>, AdjListTypeToString(adj_list_type),</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="stringliteral">&quot; doesn&#39;t exist in edge &quot;</span>, edge_info-&gt;GetEdgeType(), <span class="stringliteral">&quot;.&quot;</span>);</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">return</span> std::make_shared&lt;EdgeChunkWriter&gt;(edge_info, prefix, adj_list_type,</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; options, validate_level);</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;}</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; </div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;Result&lt;std::shared_ptr&lt;EdgeChunkWriter&gt;&gt; EdgeChunkWriter::Make(</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;EdgeInfo&gt;&amp; edge_info, <span class="keyword">const</span> std::string&amp; prefix,</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; AdjListType adj_list_type, <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">return</span> Make(edge_info, prefix, adj_list_type,</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; WriterOptions::DefaultWriterOption(), validate_level);</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;}</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; </div>
<div class="line"><a name="l01052"></a><span class="lineno"><a class="line" href="classgraphar_1_1_edge_chunk_writer.html#a52d60859758a3c875acc7c87add12302"> 1052</a></span>&#160;Result&lt;std::shared_ptr&lt;EdgeChunkWriter&gt;&gt; EdgeChunkWriter::Make(</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;GraphInfo&gt;&amp; graph_info, <span class="keyword">const</span> std::string&amp; src_type,</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keyword">const</span> std::string&amp; edge_type, <span class="keyword">const</span> std::string&amp; dst_type,</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; AdjListType adj_list_type, <span class="keyword">const</span> std::shared_ptr&lt;WriterOptions&gt;&amp; options,</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keyword">auto</span> edge_info = graph_info-&gt;GetEdgeInfo(src_type, edge_type, dst_type);</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="keywordflow">if</span> (!edge_info) {</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">return</span> Status::KeyError(<span class="stringliteral">&quot;The edge &quot;</span>, src_type, <span class="stringliteral">&quot; &quot;</span>, edge_type, <span class="stringliteral">&quot; &quot;</span>,</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; dst_type, <span class="stringliteral">&quot; doesn&#39;t exist.&quot;</span>);</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; }</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">return</span> Make(edge_info, graph_info-&gt;GetPrefix(), adj_list_type, options,</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; validate_level);</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;}</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; </div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;Result&lt;std::shared_ptr&lt;EdgeChunkWriter&gt;&gt; EdgeChunkWriter::Make(</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;GraphInfo&gt;&amp; graph_info, <span class="keyword">const</span> std::string&amp; src_type,</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keyword">const</span> std::string&amp; edge_type, <span class="keyword">const</span> std::string&amp; dst_type,</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; AdjListType adj_list_type, <span class="keyword">const</span> ValidateLevel&amp; validate_level) {</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">return</span> Make(graph_info, src_type, edge_type, dst_type, adj_list_type,</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; WriterOptions::DefaultWriterOption(), validate_level);</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;}</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; </div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;std::string EdgeChunkWriter::getSortColumnName(AdjListType adj_list_type) {</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">switch</span> (adj_list_type) {</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">case</span> AdjListType::unordered_by_source:</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">return</span> GeneralParams::kSrcIndexCol;</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">case</span> AdjListType::ordered_by_source:</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">return</span> GeneralParams::kSrcIndexCol;</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">case</span> AdjListType::unordered_by_dest:</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> GeneralParams::kDstIndexCol;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">case</span> AdjListType::ordered_by_dest:</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">return</span> GeneralParams::kDstIndexCol;</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">return</span> GeneralParams::kSrcIndexCol;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; }</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">return</span> GeneralParams::kSrcIndexCol;</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;}</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;} <span class="comment">// namespace graphar</span></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_a2552448a395acd1e3cc10e9db45ce877"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#a2552448a395acd1e3cc10e9db45ce877">graphar::EdgeChunkWriter::WritePropertyChunk</a></div><div class="ttdeci">Status WritePropertyChunk(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, const std::shared_ptr&lt; PropertyGroup &gt; &amp;property_group, IdType vertex_chunk_index, IdType chunk_index, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Validate and write a single edge property group for an edge chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00780">chunk_writer.cc:780</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_a69144b6a4bd4087b7401787d641ca772"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#a69144b6a4bd4087b7401787d641ca772">graphar::EdgeChunkWriter::SortAndWriteAdjListTable</a></div><div class="ttdeci">Status SortAndWriteAdjListTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, IdType start_chunk_index=0, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Sort the edges, and write the adj list chunks for the edges of a vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00890">chunk_writer.cc:890</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_a7197f8501c2205dd6a5456d4bf1769fd"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#a7197f8501c2205dd6a5456d4bf1769fd">graphar::EdgeChunkWriter::WriteAdjListTable</a></div><div class="ttdeci">Status WriteAdjListTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, IdType start_chunk_index=0, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write the adj list chunks for the edges of a vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00831">chunk_writer.cc:831</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_a74d5ff66b247fb94b87db25442f98ee2"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#a74d5ff66b247fb94b87db25442f98ee2">graphar::EdgeChunkWriter::WritePropertyTable</a></div><div class="ttdeci">Status WritePropertyTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, const std::shared_ptr&lt; PropertyGroup &gt; &amp;property_group, IdType vertex_chunk_index, IdType start_chunk_index=0, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write chunks of a single property group for the edges of a vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00845">chunk_writer.cc:845</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_a9a9041e72a3d46e9fb8a2f1d2463489c"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#a9a9041e72a3d46e9fb8a2f1d2463489c">graphar::EdgeChunkWriter::WriteOffsetChunk</a></div><div class="ttdeci">Status WriteOffsetChunk(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Validate and write the offset chunk for a vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00730">chunk_writer.cc:730</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_aa2e0976953c5ef8a7015079c56b56c47"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#aa2e0976953c5ef8a7015079c56b56c47">graphar::EdgeChunkWriter::WriteChunk</a></div><div class="ttdeci">Status WriteChunk(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, IdType chunk_index, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write the adj list and all property groups for an edge chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00822">chunk_writer.cc:822</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_aadbd1ad5299ab867d099ffc85528268a"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#aadbd1ad5299ab867d099ffc85528268a">graphar::EdgeChunkWriter::SortAndWriteTable</a></div><div class="ttdeci">Status SortAndWriteTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, IdType start_chunk_index=0, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Sort the edges, and write chunks of the adj list and all property groups for the edges of a vertex ch...</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00931">chunk_writer.cc:931</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_ab859c5eb1f10b88c5d0af6ab71e0ec79"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#ab859c5eb1f10b88c5d0af6ab71e0ec79">graphar::EdgeChunkWriter::SortAndWritePropertyTable</a></div><div class="ttdeci">Status SortAndWritePropertyTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, const std::shared_ptr&lt; PropertyGroup &gt; &amp;property_group, IdType vertex_chunk_index, IdType start_chunk_index=0, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Sort the edges, and write chunks of a single property group for the edges of a vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00909">chunk_writer.cc:909</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_abbf227f722fcfaf5a330229d92dcc7d0"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#abbf227f722fcfaf5a330229d92dcc7d0">graphar::EdgeChunkWriter::WriteAdjListChunk</a></div><div class="ttdeci">Status WriteAdjListChunk(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, IdType chunk_index, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Validate and write the adj list chunk for an edge chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00748">chunk_writer.cc:748</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_abfa01f956f732e660eead056ce12f7c1"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#abfa01f956f732e660eead056ce12f7c1">graphar::EdgeChunkWriter::WriteEdgesNum</a></div><div class="ttdeci">Status WriteEdgesNum(IdType vertex_chunk_index, const IdType &amp;count, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write the number of edges into the file.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00711">chunk_writer.cc:711</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_ad0d49b05093477ee5bd4c59a1a181ad4"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#ad0d49b05093477ee5bd4c59a1a181ad4">graphar::EdgeChunkWriter::EdgeChunkWriter</a></div><div class="ttdeci">EdgeChunkWriter(const std::shared_ptr&lt; EdgeInfo &gt; &amp;edge_info, const std::string &amp;prefix, AdjListType adj_list_type, const std::shared_ptr&lt; WriterOptions &gt; &amp;options=WriterOptions::DefaultWriterOption(), const ValidateLevel &amp;validate_level=ValidateLevel::no_validate)</div><div class="ttdoc">Initialize the EdgeChunkWriter.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00476">chunk_writer.cc:476</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_adbe1029f7e8f1777da7e905ec0e0b0e4"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#adbe1029f7e8f1777da7e905ec0e0b0e4">graphar::EdgeChunkWriter::WriteTable</a></div><div class="ttdeci">Status WriteTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType vertex_chunk_index, IdType start_chunk_index=0, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write chunks of the adj list and all property groups for the edges of a vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00876">chunk_writer.cc:876</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_edge_chunk_writer_html_af3796d4dd08e7d876281f53d039dad5f"><div class="ttname"><a href="classgraphar_1_1_edge_chunk_writer.html#af3796d4dd08e7d876281f53d039dad5f">graphar::EdgeChunkWriter::WriteVerticesNum</a></div><div class="ttdeci">Status WriteVerticesNum(const IdType &amp;count, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write the number of vertices into the file.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00721">chunk_writer.cc:721</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_a1f9b2120c7a6b3e66f9f2e31021df67f"><div class="ttname"><a href="classgraphar_1_1_status.html#a1f9b2120c7a6b3e66f9f2e31021df67f">graphar::Status::IndexError</a></div><div class="ttdeci">static Status IndexError(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00197">status.h:197</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_status_html_a3335cf4bf5cd222d5e29b01fe95e919a"><div class="ttname"><a href="classgraphar_1_1_status.html#a3335cf4bf5cd222d5e29b01fe95e919a">graphar::Status::TypeError</a></div><div class="ttdeci">static Status TypeError(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00178">status.h:178</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_status_html_a4ee4924ddadfc2c1effc055572084d71"><div class="ttname"><a href="classgraphar_1_1_status.html#a4ee4924ddadfc2c1effc055572084d71">graphar::Status::KeyError</a></div><div class="ttdeci">static Status KeyError(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="status_8h_source.html#l00172">status.h:172</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="aclassgraphar_1_1_vertex_property_writer_html_a001d330977bb6830bc78c42219f8c8a0"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#a001d330977bb6830bc78c42219f8c8a0">graphar::VertexPropertyWriter::WriteLabelTable</a></div><div class="ttdeci">Status WriteLabelTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType start_chunk_index, FileType file_type, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write all labels for multiple vertex chunks to corresponding files.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00332">chunk_writer.cc:332</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_a47e13b7e46a9c1dacc069ca4f789b74f"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#a47e13b7e46a9c1dacc069ca4f789b74f">graphar::VertexPropertyWriter::VertexPropertyWriter</a></div><div class="ttdeci">VertexPropertyWriter(const std::shared_ptr&lt; VertexInfo &gt; &amp;vertex_info, const std::string &amp;prefix, const std::shared_ptr&lt; WriterOptions &gt; &amp;options=WriterOptions::DefaultWriterOption(), const ValidateLevel &amp;validate_level=ValidateLevel::no_validate)</div><div class="ttdoc">Initialize the VertexPropertyWriter.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00106">chunk_writer.cc:106</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_a5bad3bb184de34c951b1dea21cb1dcd5"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#a5bad3bb184de34c951b1dea21cb1dcd5">graphar::VertexPropertyWriter::WriteChunk</a></div><div class="ttdeci">Status WriteChunk(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, const std::shared_ptr&lt; PropertyGroup &gt; &amp;property_group, IdType chunk_index, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Validate and write a single property group for a single vertex chunk.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00224">chunk_writer.cc:224</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_a66aaa3cb378175cd0addee461191c180"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#a66aaa3cb378175cd0addee461191c180">graphar::VertexPropertyWriter::GetLabelTable</a></div><div class="ttdeci">Result&lt; std::shared_ptr&lt; arrow::Table &gt; &gt; GetLabelTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, const std::vector&lt; std::string &gt; &amp;labels) const</div><div class="ttdoc">Get label column from table to formulate label table.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00349">chunk_writer.cc:349</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_aa91467fdafe327b94e225ab705e6b1bf"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#aa91467fdafe327b94e225ab705e6b1bf">graphar::VertexPropertyWriter::Make</a></div><div class="ttdeci">static Result&lt; std::shared_ptr&lt; VertexPropertyWriter &gt; &gt; Make(const std::shared_ptr&lt; VertexInfo &gt; &amp;vertex_info, const std::string &amp;prefix, const std::shared_ptr&lt; WriterOptions &gt; &amp;options, const ValidateLevel &amp;validate_level=ValidateLevel::no_validate)</div><div class="ttdoc">Construct a VertexPropertyWriter from vertex info.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00420">chunk_writer.cc:420</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_acc8026d1d2eaaf86f9c2d8d49c207f99"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#acc8026d1d2eaaf86f9c2d8d49c207f99">graphar::VertexPropertyWriter::WriteLabelChunk</a></div><div class="ttdeci">Status WriteLabelChunk(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, IdType chunk_index, FileType file_type, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write all labels of a single vertex chunk to corresponding files.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00269">chunk_writer.cc:269</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_addf40fb82fe987af091278e01995b87a"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#addf40fb82fe987af091278e01995b87a">graphar::VertexPropertyWriter::WriteVerticesNum</a></div><div class="ttdeci">Status WriteVerticesNum(const IdType &amp;count, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write the number of vertices into the file.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00216">chunk_writer.cc:216</a></div></div>
<div class="ttc" id="aclassgraphar_1_1_vertex_property_writer_html_adea3f0326fad64bc061bc5b01790ab47"><div class="ttname"><a href="classgraphar_1_1_vertex_property_writer.html#adea3f0326fad64bc061bc5b01790ab47">graphar::VertexPropertyWriter::WriteTable</a></div><div class="ttdeci">Status WriteTable(const std::shared_ptr&lt; arrow::Table &gt; &amp;input_table, const std::shared_ptr&lt; PropertyGroup &gt; &amp;property_group, IdType start_chunk_index, ValidateLevel validate_level=ValidateLevel::default_validate) const</div><div class="ttdoc">Write a single property group for multiple vertex chunks to corresponding files.</div><div class="ttdef"><b>Definition:</b> <a href="chunk__writer_8cc_source.html#l00286">chunk_writer.cc:286</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>