You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2019/02/01 20:51:39 UTC

[arrow] branch master updated: ARROW-4235: [GLib] Use "column_builder" in GArrowRecordBatchBuilder

This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new fb11322  ARROW-4235: [GLib] Use "column_builder" in GArrowRecordBatchBuilder
fb11322 is described below

commit fb113225387be68e268d585c7216d21871a7ed62
Author: Yosuke Shiro <yo...@gmail.com>
AuthorDate: Sat Feb 2 05:51:11 2019 +0900

    ARROW-4235: [GLib] Use "column_builder" in GArrowRecordBatchBuilder
    
    Author: Yosuke Shiro <yo...@gmail.com>
    
    Closes #3540 from shiro615/glib-use-column-builder and squashes the following commits:
    
    a1741ccd <Yosuke Shiro> Use column_builders in GArrowRecordBatchBuilderPrivate
    23021ae7 <Yosuke Shiro> Add garrow_record_batch_builder_get_n_columns()
    fc388b7f <Yosuke Shiro> Use garrow_record_batch_builder_get_column_builder() in garrow_record_batch_builder_get_field()
    03b681d8 <Yosuke Shiro> Add test case for column_builders
    60928755 <Yosuke Shiro>  Make public column_builders
    1680c663 <Yosuke Shiro>  Add garrow_record_batch_builder_get_column_builder()
---
 c_glib/arrow-glib/table-builder.cpp              | 56 ++++++++++++++++++++----
 c_glib/arrow-glib/table-builder.h                | 13 ++++++
 c_glib/test/test-record-batch-builder.rb         | 18 ++++----
 ruby/red-arrow/lib/arrow/record-batch-builder.rb | 17 ++++---
 ruby/red-arrow/test/test-record-batch-builder.rb |  9 ++++
 5 files changed, 86 insertions(+), 27 deletions(-)

diff --git a/c_glib/arrow-glib/table-builder.cpp b/c_glib/arrow-glib/table-builder.cpp
index e87314b..5e004a5 100644
--- a/c_glib/arrow-glib/table-builder.cpp
+++ b/c_glib/arrow-glib/table-builder.cpp
@@ -41,7 +41,7 @@ G_BEGIN_DECLS
 
 typedef struct GArrowRecordBatchBuilderPrivate_ {
   arrow::RecordBatchBuilder *record_batch_builder;
-  GPtrArray *fields;
+  GPtrArray *column_builders;
 } GArrowRecordBatchBuilderPrivate;
 
 enum {
@@ -63,13 +63,13 @@ garrow_record_batch_builder_constructed(GObject *object)
 {
   auto priv = GARROW_RECORD_BATCH_BUILDER_GET_PRIVATE(object);
   auto arrow_builder = priv->record_batch_builder;
-  auto n_fields = arrow_builder->num_fields();
-  priv->fields = g_ptr_array_new_full(n_fields, g_object_unref);
-  for (int i = 0; i < n_fields; ++i) {
+  auto n_columns = arrow_builder->num_fields();
+  priv->column_builders = g_ptr_array_new_full(n_columns, g_object_unref);
+  for (int i = 0; i < n_columns; ++i) {
     auto arrow_array_builder = arrow_builder->GetField(i);
     auto array_builder = garrow_array_builder_new_raw(arrow_array_builder);
     garrow_array_builder_release_ownership(array_builder);
-    g_ptr_array_add(priv->fields, array_builder);
+    g_ptr_array_add(priv->column_builders, array_builder);
   }
 
   G_OBJECT_CLASS(garrow_record_batch_builder_parent_class)->constructed(object);
@@ -80,7 +80,7 @@ garrow_record_batch_builder_finalize(GObject *object)
 {
   auto priv = GARROW_RECORD_BATCH_BUILDER_GET_PRIVATE(object);
 
-  g_ptr_array_free(priv->fields, TRUE);
+  g_ptr_array_free(priv->column_builders, TRUE);
   delete priv->record_batch_builder;
 
   G_OBJECT_CLASS(garrow_record_batch_builder_parent_class)->finalize(object);
@@ -223,10 +223,27 @@ garrow_record_batch_builder_get_schema(GArrowRecordBatchBuilder *builder)
  * Returns: The number of fields.
  *
  * Since: 0.8.0
+ *
+ * Deprecated: 0.13.0:
+ *   Use garrow_record_batch_builder_get_n_columns() instead.
  */
 gint
 garrow_record_batch_builder_get_n_fields(GArrowRecordBatchBuilder *builder)
 {
+  return garrow_record_batch_builder_get_n_columns(builder);
+}
+
+/**
+ * garrow_record_batch_builder_get_n_columns:
+ * @builder: A #GArrowRecordBatchBuilder.
+ *
+ * Returns: The number of columns.
+ *
+ * Since: 0.13.0
+ */
+gint
+garrow_record_batch_builder_get_n_columns(GArrowRecordBatchBuilder *builder)
+{
   auto arrow_builder = garrow_record_batch_builder_get_raw(builder);
   return arrow_builder->num_fields();
 }
@@ -241,23 +258,44 @@ garrow_record_batch_builder_get_n_fields(GArrowRecordBatchBuilder *builder)
  *   the `i`-th field on success, %NULL on out of index.
  *
  * Since: 0.8.0
+ *
+ * Deprecated: 0.13.0:
+ *   Use garrow_record_batch_builder_get_column_builder() instead.
  */
 GArrowArrayBuilder *
 garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder,
                                       gint i)
 {
+  return garrow_record_batch_builder_get_column_builder(builder, i);
+}
+
+/**
+ * garrow_record_batch_builder_get_column_builder:
+ * @builder: A #GArrowRecordBatchBuilder.
+ * @i: The column index. If it's negative, index is counted backward
+ *   from the end of the columns. `-1` means the last column.
+ *
+ * Returns: (transfer none) (nullable): The #GArrowArrayBuilder for
+ *   the `i`-th column on success, %NULL on out of index.
+ *
+ * Since: 0.13.0
+ */
+GArrowArrayBuilder *
+garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder,
+                                               gint i)
+{
   auto priv = GARROW_RECORD_BATCH_BUILDER_GET_PRIVATE(builder);
   if (i < 0) {
-    i += priv->fields->len;
+    i += priv->column_builders->len;
   }
   if (i < 0) {
     return NULL;
   }
-  if (static_cast<guint>(i) >= priv->fields->len) {
+  if (static_cast<guint>(i) >= priv->column_builders->len) {
     return NULL;
   }
 
-  return GARROW_ARRAY_BUILDER(g_ptr_array_index(priv->fields, i));
+  return GARROW_ARRAY_BUILDER(g_ptr_array_index(priv->column_builders, i));
 }
 
 /**
diff --git a/c_glib/arrow-glib/table-builder.h b/c_glib/arrow-glib/table-builder.h
index d05525e..a767939 100644
--- a/c_glib/arrow-glib/table-builder.h
+++ b/c_glib/arrow-glib/table-builder.h
@@ -45,9 +45,22 @@ void garrow_record_batch_builder_set_initial_capacity(GArrowRecordBatchBuilder *
                                                       gint64 capacity);
 GArrowSchema *garrow_record_batch_builder_get_schema(GArrowRecordBatchBuilder *builder);
 
+#ifndef GARROW_DISABLE_DEPRECATED
+GARROW_DEPRECATED_IN_0_13_FOR(garrow_record_batch_builder_get_n_columns)
 gint garrow_record_batch_builder_get_n_fields(GArrowRecordBatchBuilder *builder);
+#endif
+GARROW_AVAILABLE_IN_0_13
+gint
+garrow_record_batch_builder_get_n_columns(GArrowRecordBatchBuilder *builder);
+#ifndef GARROW_DISABLE_DEPRECATED
+GARROW_DEPRECATED_IN_0_13_FOR(garrow_record_batch_builder_get_column_builder)
 GArrowArrayBuilder *garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder,
                                                           gint i);
+#endif
+GARROW_AVAILABLE_IN_0_13
+GArrowArrayBuilder *
+garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder,
+                                               gint i);
 
 GArrowRecordBatch *garrow_record_batch_builder_flush(GArrowRecordBatchBuilder *builder,
                                                      GError **error);
diff --git a/c_glib/test/test-record-batch-builder.rb b/c_glib/test/test-record-batch-builder.rb
index 030cc78..ce8efdf 100644
--- a/c_glib/test/test-record-batch-builder.rb
+++ b/c_glib/test/test-record-batch-builder.rb
@@ -37,27 +37,27 @@ class TestRecordBatchBuilder < Test::Unit::TestCase
     assert_equal(@schema, @builder.schema)
   end
 
-  def test_n_fields
-    assert_equal(@fields.size, @builder.n_fields)
+  def test_n_columns
+    assert_equal(@fields.size, @builder.n_columns)
   end
 
-  sub_test_case("#get_field") do
+  sub_test_case("#get_column_builder") do
     def test_valid
       assert_equal(Arrow::BooleanArrayBuilder,
-                   @builder.get_field(0).class)
+                   @builder.get_column_builder(0).class)
     end
 
     def test_negative
       assert_equal(Arrow::Int32ArrayBuilder,
-                   @builder.get_field(-1).class)
+                   @builder.get_column_builder(-1).class)
     end
 
     def test_too_negative
-      assert_nil(@builder.get_field(-@fields.size - 1))
+      assert_nil(@builder.get_column_builder(-@fields.size - 1))
     end
 
     def test_too_large
-      assert_nil(@builder.get_field(@fields.size))
+      assert_nil(@builder.get_column_builder(@fields.size))
     end
   end
 
@@ -68,7 +68,7 @@ class TestRecordBatchBuilder < Test::Unit::TestCase
       "point"   => build_int32_array([1, -1, 0]),
     }
     arrays.each_with_index do |(_, array), i|
-      @builder.get_field(i).append_values(array.values, [])
+      @builder.get_column_builder(i).append_values(array.values, [])
     end
     assert_equal(build_record_batch(arrays),
                  @builder.flush)
@@ -78,7 +78,7 @@ class TestRecordBatchBuilder < Test::Unit::TestCase
       "point"   => build_int32_array([10, -10]),
     }
     arrays.each_with_index do |(_, array), i|
-      @builder.get_field(i).append_values(array.values, [])
+      @builder.get_column_builder(i).append_values(array.values, [])
     end
     assert_equal(build_record_batch(arrays),
                  @builder.flush)
diff --git a/ruby/red-arrow/lib/arrow/record-batch-builder.rb b/ruby/red-arrow/lib/arrow/record-batch-builder.rb
index dba16b3..dc20312 100644
--- a/ruby/red-arrow/lib/arrow/record-batch-builder.rb
+++ b/ruby/red-arrow/lib/arrow/record-batch-builder.rb
@@ -65,7 +65,7 @@ module Arrow
 
     # @since 0.12.0
     def append_records(records)
-      n = n_fields
+      n = n_columns
       columns = n.times.collect do
         []
       end
@@ -99,17 +99,16 @@ module Arrow
       end
     end
 
+    # @since 0.13.0
+    def column_builders
+      @column_builders ||= n_columns.times.collect do |i|
+        get_column_builder(i)
+      end
+    end
+
     private
     def resolve_name(name)
       @name_to_index[name.to_s]
     end
-
-    # TODO: Make public with good name. Is column_builders good enough?
-    # builders? sub_builders?
-    def column_builders
-      @column_builders ||= n_fields.times.collect do |i|
-        get_field(i)
-      end
-    end
   end
 end
diff --git a/ruby/red-arrow/test/test-record-batch-builder.rb b/ruby/red-arrow/test/test-record-batch-builder.rb
index 7cd1f8c..988e020 100644
--- a/ruby/red-arrow/test/test-record-batch-builder.rb
+++ b/ruby/red-arrow/test/test-record-batch-builder.rb
@@ -112,5 +112,14 @@ class RecordBatchBuilderTest < Test::Unit::TestCase
                                           arrays),
                    @builder.flush)
     end
+
+    test("#column_builders") do
+      column_builders = [
+        @builder.get_column_builder(0),
+        @builder.get_column_builder(1),
+      ]
+      assert_equal(column_builders,
+                   @builder.column_builders)
+    end
   end
 end