<!--
SPDX-FileCopyrightText: The Apache Software Foundation

SPDX-License-Identifier: Apache-2.0
-->

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Arrow.BinaryDictionaryArrayBuilder.append_array</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <meta charset="utf-8" />

  
  <meta property="og:type" content="website"/>

  

  
  <meta priority="og:title" content="Arrow.BinaryDictionaryArrayBuilder.append_array"/>
  <meta priority="og:description" content="Reference for Arrow.BinaryDictionaryArrayBuilder.append_array"/>
  <meta name="twitter:title" content="Arrow.BinaryDictionaryArrayBuilder.append_array"/>
  <meta name="twitter:description" content="Reference for Arrow.BinaryDictionaryArrayBuilder.append_array"/>


  
  <meta name="twitter:card" content="summary"/>

  
  
  
  

  <link rel="stylesheet" href="style.css" type="text/css" />

  

  
  <script src="urlmap.js"></script>
  
  
  <script src="fzy.js"></script>
  <script src="search.js"></script>
  
  <script src="main.js"></script>

  
</head>

<body>
  <div id="body-wrapper" tabindex="-1">

    <nav class="sidebar devhelp-hidden">
      
      
      <div class="search section">
        <form id="search-form" autocomplete="off">
          <input id="search-input" type="text" name="do-not-autocomplete" placeholder="Click, or press 's' to search" autocomplete="off"/>
        </form>
      </div>
      
      <div class="section namespace">
        <h3><a href="index.html">Arrow</a></h3>
        <p>API Version: 25.0</p>
        
        <p>Library Version: 25.0.0.dev</p>
        
      </div>
      
<div class="section">
  <h5>Type</h5>
  <div class="links">
    <a href="class.BinaryDictionaryArrayBuilder.html">BinaryDictionaryArrayBuilder</a>
  </div>
</div>
<div class="section">
  <h5>Methods</h5>
  <div class="links">
  
    <a class="method current" href="method.BinaryDictionaryArrayBuilder.append_array.html">append_array</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.append_indices.html">append_indices</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.append_null.html">append_null</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.append_value.html">append_value</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.append_value_bytes.html">append_value_bytes</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.finish_delta.html">finish_delta</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.get_dictionary_length.html">get_dictionary_length</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.insert_memo_values.html">insert_memo_values</a>
  
    <a class="method" href="method.BinaryDictionaryArrayBuilder.reset_full.html">reset_full</a>
  
  </div>
</div>

      <div class="section generator">
        <p>Generated by <a href="https://gitlab.gnome.org/GNOME/gi-docgen">gi-docgen</a> 2025.3</p>
      </div>
    </nav>

    <button id="btn-to-top" class="hidden"><span class="up-arrow"></span></button>

    
<section id="main" class="content">
  <header>
    <h3>Method</h3>
    <h1><a href="index.html">Arrow</a><span class="sep"></span><a href="class.BinaryDictionaryArrayBuilder.html">BinaryDictionaryArrayBuilder</a><span class="sep"></span>append_array</h1>
  </header>

  <section>
    <div class="docblock">
      <p><span class="emblem available">since: 2.0.0</span></p>
    </div>

    <div class="declaration toggle-wrapper">
      <h4 style="display:flex;" id="declaration">
        Declaration
        <a class="anchor" href="#declaration"></a>
        
        <a class="srclink" title="go to source location" href="https://github.com/apache/arrow/blob/main/c_glib/arrow-glib/array-builder.h#L1512">[src]</a>
        
      </h4>

      <div class="docblock c-decl">
        <pre><code><div class="highlight"><pre><span></span><span class="n">gboolean</span>
<span class="n">garrow_binary_dictionary_array_builder_append_array</span><span class="w"> </span><span class="p">(</span>
<span class="w">  </span><span class="n">GArrowBinaryDictionaryArrayBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="p">,</span>
<span class="w">  </span><span class="n">GArrowBinaryArray</span><span class="o">*</span><span class="w"> </span><span class="n">array</span><span class="p">,</span>
<span class="w">  </span><span class="n">GError</span><span class="o">**</span><span class="w"> </span><span class="n">error</span>
<span class="p">)</span>
</pre></div>
</code></pre>
      </div>
    </div>

    <div class="description toggle-wrapper">
      <h4 style="display:flex;" id="description">
        Description
        <a class="anchor" href="#description"></a>
        
      </h4>

      <div class="docblock">
        <p>No description available.</p>
      </div>

      <div class="docblock">
        
        <p>Available since: 2.0.0</p>
        
        
        
        
        
      </div>

      
    </div>

    
    <div class="parameters toggle-wrapper">
      <h4 id="parameters">
        Parameters
        <a href="#parameters" class="anchor"></a>
      </h4>

      <div class="docblock">
        <dl class="arguments">
          

          
          <dt class="arg-name"><code>array</code></dt>
          <dd class="arg-description">
            <p><em>Type:</em>&nbsp;<a href="class.BinaryArray.html"><code>GArrowBinaryArray</code></a></p>
            <p>A <code>GArrowBinaryArray</code>.</p>
            <table>
            
            
            
            
            
            
            
            <tr><td title="transfer: none">The data is owned by the caller of the method.</td></tr>
            
            </table>
          </dd>
          

          
          <dt class="arg-name"><code>error</code></dt>
          <dd class="arg-description">
            <p><em>Type:</em>&nbsp;<a href="javascript:void(0)" data-namespace="GLib" data-link="struct.Error.html" class="external"><code>GError **</code></a></p>
            <p>The return location for <a href="https://docs.gtk.org/glib/error-reporting.html#rules-for-use-of-gerror">a recoverable error</a>.</p>
            <table>
              <tr><td>The argument can be <code>NULL</code>.</td></tr>
              <tr><td>If the return location is not <code>NULL</code>, then you must initialize it to a <code>NULL</code> <code>GError*</code>.</td></tr>
              <tr><td>The argument will be left initialized to <code>NULL</code> by the method if there are no errors.</td></tr>
              <tr><td>In case of error, the argument will be set to a newly allocated <code>GError</code>; the caller will take ownership of the data, and be responsible for freeing it.</td></tr>
            </table>
          </dd>
          
        </dl>
      </div>
    </div>
    

    
    <div class="return-value toggle-wrapper">
      <h4 id="return-value">
        Return value
        <a href="#return-value" class="anchor"></a>
      </h4>

      <div class="docblock">
        <div class="returns">
          <div class="arg-description">
            <p><em>Type:</em>&nbsp;<code>gboolean</code></p>
            <p><code>TRUE</code> on success, <code>FALSE</code> if there was an&nbsp;error.</p>
          </div>
          <div>
            <table>
            
            
            
            
            
            
            </table>
          </div>
        </div>
      </div>
    </div>
    

  </section>
</section>


    

    <section id="search" class="content hidden"></section>

    <footer>
    
    </footer>
  </div>
</body>
</html>