You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by sh...@apache.org on 2018/11/24 13:49:46 UTC
[arrow] branch master updated: ARROW-3864: [GLib] Add support for
allow-float-truncate cast option
This is an automated email from the ASF dual-hosted git repository.
shiro 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 6dbd1ec ARROW-3864: [GLib] Add support for allow-float-truncate cast option
6dbd1ec is described below
commit 6dbd1ecfd081a7366068f1bcdbece612706ad6ed
Author: Kouhei Sutou <ko...@clear-code.com>
AuthorDate: Sat Nov 24 22:49:29 2018 +0900
ARROW-3864: [GLib] Add support for allow-float-truncate cast option
Author: Kouhei Sutou <ko...@clear-code.com>
Closes #3023 from kou/glib-add-allow-float-truncate-cast-options and squashes the following commits:
57611105 <Kouhei Sutou> Add support for allow-float-truncate cast option
---
c_glib/arrow-glib/compute.cpp | 28 +++++++++++++++++++++++++---
c_glib/test/test-cast.rb | 17 +++++++++++++++++
2 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/c_glib/arrow-glib/compute.cpp b/c_glib/arrow-glib/compute.cpp
index ce427e6..2039eea 100644
--- a/c_glib/arrow-glib/compute.cpp
+++ b/c_glib/arrow-glib/compute.cpp
@@ -41,7 +41,8 @@ typedef struct GArrowCastOptionsPrivate_ {
enum {
PROP_0,
PROP_ALLOW_INT_OVERFLOW,
- PROP_ALLOW_TIME_TRUNCATE
+ PROP_ALLOW_TIME_TRUNCATE,
+ PROP_ALLOW_FLOAT_TRUNCATE
};
G_DEFINE_TYPE_WITH_PRIVATE(GArrowCastOptions,
@@ -68,6 +69,9 @@ garrow_cast_options_set_property(GObject *object,
case PROP_ALLOW_TIME_TRUNCATE:
priv->options.allow_time_truncate = g_value_get_boolean(value);
break;
+ case PROP_ALLOW_FLOAT_TRUNCATE:
+ priv->options.allow_float_truncate = g_value_get_boolean(value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -89,6 +93,9 @@ garrow_cast_options_get_property(GObject *object,
case PROP_ALLOW_TIME_TRUNCATE:
g_value_set_boolean(value, priv->options.allow_time_truncate);
break;
+ case PROP_ALLOW_FLOAT_TRUNCATE:
+ g_value_set_boolean(value, priv->options.allow_float_truncate);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -103,13 +110,12 @@ garrow_cast_options_init(GArrowCastOptions *object)
static void
garrow_cast_options_class_init(GArrowCastOptionsClass *klass)
{
- GParamSpec *spec;
-
auto gobject_class = G_OBJECT_CLASS(klass);
gobject_class->set_property = garrow_cast_options_set_property;
gobject_class->get_property = garrow_cast_options_get_property;
+ GParamSpec *spec;
/**
* GArrowCastOptions:allow-int-overflow:
*
@@ -137,6 +143,20 @@ garrow_cast_options_class_init(GArrowCastOptionsClass *klass)
FALSE,
static_cast<GParamFlags>(G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, PROP_ALLOW_TIME_TRUNCATE, spec);
+
+ /**
+ * GArrowCastOptions:allow-float-truncate:
+ *
+ * Whether truncating float value is allowed or not.
+ *
+ * Since: 0.12.0
+ */
+ spec = g_param_spec_boolean("allow-float-truncate",
+ "Allow float truncate",
+ "Whether truncating float value is allowed or not",
+ FALSE,
+ static_cast<GParamFlags>(G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class, PROP_ALLOW_FLOAT_TRUNCATE, spec);
}
/**
@@ -161,6 +181,8 @@ garrow_cast_options_new_raw(arrow::compute::CastOptions *arrow_cast_options)
auto cast_options =
g_object_new(GARROW_TYPE_CAST_OPTIONS,
"allow-int-overflow", arrow_cast_options->allow_int_overflow,
+ "allow-time-truncate", arrow_cast_options->allow_time_truncate,
+ "allow-float-truncate", arrow_cast_options->allow_float_truncate,
NULL);
return GARROW_CAST_OPTIONS(cast_options);
}
diff --git a/c_glib/test/test-cast.rb b/c_glib/test/test-cast.rb
index 6c29e85..2512e05 100644
--- a/c_glib/test/test-cast.rb
+++ b/c_glib/test/test-cast.rb
@@ -65,4 +65,21 @@ class TestCast < Test::Unit::TestCase
milli_array.cast(second_timestamp, options))
end
end
+
+ sub_test_case("allow-float-truncate") do
+ def test_default
+ require_gi(1, 42, 0)
+ assert_raise(Arrow::Error::Invalid) do
+ build_float_array([1.1]).cast(Arrow::Int8DataType.new)
+ end
+ end
+
+ def test_true
+ options = Arrow::CastOptions.new
+ options.allow_float_truncate = true
+ int8_data_type = Arrow::Int8DataType.new
+ assert_equal(build_int8_array([1]),
+ build_float_array([1.1]).cast(int8_data_type, options))
+ end
+ end
end