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

npr 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 36b5a96  ARROW-9219: [R] coerce_timestamps in Parquet write options 
does not work
36b5a96 is described below

commit 36b5a9638f1debeadf2bd8f85bcf7aa3d5c30ae0
Author: Neal Richardson <[email protected]>
AuthorDate: Fri Jun 26 08:22:56 2020 -0700

    ARROW-9219: [R] coerce_timestamps in Parquet write options does not work
    
    In addition to fixing the bug (a quick fix), I also spent some time 
deleting unnecessary bindings for parquet writer builder methods. There's more 
that can be done, which I think would shave more off of the built library size, 
but I don't have time to do it right now.
    
    Closes #7550 from nealrichardson/r-fix-parquet
    
    Authored-by: Neal Richardson <[email protected]>
    Signed-off-by: Neal Richardson <[email protected]>
---
 r/R/arrowExports.R                    |  52 +-------
 r/R/parquet.R                         | 178 ++++++++++++---------------
 r/src/arrowExports.cpp                | 221 ++--------------------------------
 r/src/parquet.cpp                     | 156 +++++++++---------------
 r/tests/testthat/helper-expectation.R |   6 +
 r/tests/testthat/test-parquet.R       |  22 ++++
 6 files changed, 169 insertions(+), 466 deletions(-)

diff --git a/r/R/arrowExports.R b/r/R/arrowExports.R
index 4b6a5aa..54fadcb 100644
--- a/r/R/arrowExports.R
+++ b/r/R/arrowExports.R
@@ -1052,40 +1052,8 @@ parquet___arrow___FileReader__num_rows <- 
function(reader){
     .Call(`_arrow_parquet___arrow___FileReader__num_rows` , reader)
 }
 
-parquet___ArrowWriterProperties___Builder__create <- function(){
-    .Call(`_arrow_parquet___ArrowWriterProperties___Builder__create` )
-}
-
-parquet___ArrowWriterProperties___Builder__store_schema <- function(builder){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__store_schema`
 , builder))
-}
-
-parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps 
<- function(builder){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps`
 , builder))
-}
-
-parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps 
<- function(builder){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps`
 , builder))
-}
-
-parquet___ArrowWriterProperties___Builder__coerce_timestamps <- 
function(builder, unit){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__coerce_timestamps`
 , builder, unit))
-}
-
-parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps <- 
function(builder){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps`
 , builder))
-}
-
-parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps <- 
function(builder){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps`
 , builder))
-}
-
-parquet___ArrowWriterProperties___Builder__build <- function(builder){
-    .Call(`_arrow_parquet___ArrowWriterProperties___Builder__build` , builder)
-}
-
-parquet___default_writer_properties <- function(){
-    .Call(`_arrow_parquet___default_writer_properties` )
+parquet___ArrowWriterProperties___create <- 
function(allow_truncated_timestamps, use_deprecated_int96_timestamps, 
timestamp_unit){
+    .Call(`_arrow_parquet___ArrowWriterProperties___create` , 
allow_truncated_timestamps, use_deprecated_int96_timestamps, timestamp_unit)
 }
 
 parquet___WriterProperties___Builder__create <- function(){
@@ -1096,30 +1064,14 @@ parquet___WriterProperties___Builder__version <- 
function(builder, version){
     invisible(.Call(`_arrow_parquet___WriterProperties___Builder__version` , 
builder, version))
 }
 
-parquet___ArrowWriterProperties___Builder__default_compression <- 
function(builder, compression){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__default_compression`
 , builder, compression))
-}
-
 parquet___ArrowWriterProperties___Builder__set_compressions <- 
function(builder, paths, types){
     
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__set_compressions`
 , builder, paths, types))
 }
 
-parquet___ArrowWriterProperties___Builder__default_compression_level <- 
function(builder, compression_level){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__default_compression_level`
 , builder, compression_level))
-}
-
 parquet___ArrowWriterProperties___Builder__set_compression_levels <- 
function(builder, paths, levels){
     
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__set_compression_levels`
 , builder, paths, levels))
 }
 
-parquet___ArrowWriterProperties___Builder__default_write_statistics <- 
function(builder, write_statistics){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__default_write_statistics`
 , builder, write_statistics))
-}
-
-parquet___ArrowWriterProperties___Builder__default_use_dictionary <- 
function(builder, use_dictionary){
-    
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__default_use_dictionary`
 , builder, use_dictionary))
-}
-
 parquet___ArrowWriterProperties___Builder__set_use_dictionary <- 
function(builder, paths, use_dictionary){
     
invisible(.Call(`_arrow_parquet___ArrowWriterProperties___Builder__set_use_dictionary`
 , builder, paths, use_dictionary))
 }
diff --git a/r/R/parquet.R b/r/R/parquet.R
index c0c2eaf..e504a5c 100644
--- a/r/R/parquet.R
+++ b/r/R/parquet.R
@@ -174,51 +174,25 @@ write_parquet <- function(x,
   invisible(x_out)
 }
 
-
-ParquetArrowWriterPropertiesBuilder <- 
R6Class("ParquetArrowWriterPropertiesBuilder", inherit = ArrowObject,
-  public = list(
-    store_schema = function() {
-      parquet___ArrowWriterProperties___Builder__store_schema(self)
-      self
-    },
-    set_int96_support = function(use_deprecated_int96_timestamps = FALSE) {
-      if (use_deprecated_int96_timestamps) {
-        
parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps(self)
-      } else {
-        
parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps(self)
-      }
-      self
-    },
-    set_coerce_timestamps = function(coerce_timestamps = NULL) {
-      if (!is.null(coerce_timestamps)) {
-        unit <- make_valid_time_unit(coerce_timestamps,
-          c("ms" = TimeUnit$MILLI, "us" = TimeUnit$MICRO)
-        )
-        parquet___ArrowWriterProperties___Builder__coerce_timestamps(unit)
-      }
-      self
-    },
-    set_allow_truncated_timestamps = function(allow_truncated_timestamps = 
FALSE) {
-      if (allow_truncated_timestamps) {
-        
parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(self)
-      } else {
-        
parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(self)
-      }
-
-      self
-    }
-
-  )
-)
 ParquetArrowWriterProperties <- R6Class("ParquetArrowWriterProperties", 
inherit = ArrowObject)
-
-ParquetArrowWriterProperties$create <- 
function(use_deprecated_int96_timestamps = FALSE, coerce_timestamps = NULL, 
allow_truncated_timestamps = FALSE) {
-  builder <- shared_ptr(ParquetArrowWriterPropertiesBuilder, 
parquet___ArrowWriterProperties___Builder__create())
-  builder$store_schema()
-  builder$set_int96_support(use_deprecated_int96_timestamps)
-  builder$set_coerce_timestamps(coerce_timestamps)
-  builder$set_allow_truncated_timestamps(allow_truncated_timestamps)
-  shared_ptr(ParquetArrowWriterProperties, 
parquet___ArrowWriterProperties___Builder__build(builder))
+ParquetArrowWriterProperties$create <- 
function(use_deprecated_int96_timestamps = FALSE,
+                                                coerce_timestamps = NULL,
+                                                allow_truncated_timestamps = 
FALSE) {
+  if (is.null(coerce_timestamps)) {
+    timestamp_unit <- -1L # null sentinel value
+  } else {
+    timestamp_unit <- make_valid_time_unit(coerce_timestamps,
+      c("ms" = TimeUnit$MILLI, "us" = TimeUnit$MICRO)
+    )
+  }
+  shared_ptr(
+    ParquetArrowWriterProperties,
+    parquet___ArrowWriterProperties___create(
+      use_deprecated_int96_timestamps = 
isTRUE(use_deprecated_int96_timestamps),
+      timestamp_unit = timestamp_unit,
+      allow_truncated_timestamps = isTRUE(allow_truncated_timestamps)
+    )
+  )
 }
 
 valid_parquet_version <- c(
@@ -285,86 +259,89 @@ ParquetWriterPropertiesBuilder <- 
R6Class("ParquetWriterPropertiesBuilder", inhe
     set_version = function(version) {
       parquet___ArrowWriterProperties___Builder__version(self, 
make_valid_version(version))
     },
-
-    set_compression = function(table, compression){
-      private$.set(table, compression_from_name(compression), "compression", 
is.integer,
-        parquet___ArrowWriterProperties___Builder__default_compression,
+    set_compression = function(table, compression) {
+      compression <- compression_from_name(compression)
+      assert_that(is.integer(compression))
+      private$.set(table, compression,
         parquet___ArrowWriterProperties___Builder__set_compressions
       )
     },
-
     set_compression_level = function(table, compression_level){
-      private$.set(table, compression_level, "compression_level", 
is_integerish,
-        parquet___ArrowWriterProperties___Builder__default_compression_level,
+      assert_that(is_integerish(compression_level))
+      private$.set(table, compression_level,
         parquet___ArrowWriterProperties___Builder__set_compression_levels
       )
     },
-
     set_dictionary = function(table, use_dictionary) {
-      private$.set(table, use_dictionary, "use_dictionary", is.logical,
-        parquet___ArrowWriterProperties___Builder__default_use_dictionary,
+      assert_that(is.logical(use_dictionary))
+      private$.set(table, use_dictionary,
         parquet___ArrowWriterProperties___Builder__set_use_dictionary
       )
     },
-
     set_write_statistics = function(table, write_statistics) {
-      private$.set(table, write_statistics, "write_statistics", is.logical,
-        parquet___ArrowWriterProperties___Builder__default_write_statistics,
+      assert_that(is.logical(write_statistics))
+      private$.set(table, write_statistics,
         parquet___ArrowWriterProperties___Builder__set_write_statistics
       )
     },
-
     set_data_page_size = function(data_page_size) {
       parquet___ArrowWriterProperties___Builder__data_page_size(self, 
data_page_size)
     }
   ),
 
   private = list(
-    .set = function(table, value, name, is, default, multiple) {
-      msg <- paste0("unsupported ", name, "= specification")
-      assert_that(is(value), msg = msg)
+    .set = function(table, value, FUN) {
+      msg <- paste0("unsupported ", substitute(value), "= specification")
       column_names <- names(table)
-      if (is.null(given_names <- names(value))) {
-        if (length(value) == 1L) {
-          default(self, value)
-        } else if (length(value) == length(column_names)) {
-          multiple(self, column_names, value)
+      given_names <- names(value)
+      if (is.null(given_names)) {
+        if (length(value) %in% c(1L, length(column_names))) {
+          # If there's a single, unnamed value, FUN will set it globally
+          # If there are values for all columns, send them along with the names
+          FUN(self, column_names, value)
+        } else {
+          abort(msg)
         }
-      } else if(all(given_names %in% column_names)) {
-        multiple(self, given_names, value)
+      } else if (all(given_names %in% column_names)) {
+        # Use the given names
+        FUN(self, given_names, value)
       } else {
         abort(msg)
       }
     }
   )
-
 )
 
-ParquetWriterProperties$create <- function(table, version = NULL, compression 
= NULL, compression_level = NULL, use_dictionary = NULL, write_statistics = 
NULL, data_page_size = NULL) {
-  if (is.null(version) && is.null(compression) && is.null(compression_level) 
&& is.null(use_dictionary) && is.null(write_statistics) && 
is.null(data_page_size)) {
-    shared_ptr(ParquetWriterProperties, parquet___default_writer_properties())
-  } else {
-    builder <- shared_ptr(ParquetWriterPropertiesBuilder, 
parquet___WriterProperties___Builder__create())
-    if (!is.null(version)) {
-      builder$set_version(version)
-    }
-    if (!is.null(compression)) {
-      builder$set_compression(table, compression = compression)
-    }
-    if (!is.null(compression_level)) {
-      builder$set_compression_level(table, compression_level = 
compression_level)
-    }
-    if (!is.null(use_dictionary)) {
-      builder$set_dictionary(table, use_dictionary)
-    }
-    if (!is.null(write_statistics)) {
-      builder$set_write_statistics(table, write_statistics)
-    }
-    if (!is.null(data_page_size)) {
-      builder$set_data_page_size(data_page_size)
-    }
-    shared_ptr(ParquetWriterProperties, 
parquet___WriterProperties___Builder__build(builder))
+ParquetWriterProperties$create <- function(table,
+                                           version = NULL,
+                                           compression = NULL,
+                                           compression_level = NULL,
+                                           use_dictionary = NULL,
+                                           write_statistics = NULL,
+                                           data_page_size = NULL) {
+  builder <- shared_ptr(
+    ParquetWriterPropertiesBuilder,
+    parquet___WriterProperties___Builder__create()
+  )
+  if (!is.null(version)) {
+    builder$set_version(version)
+  }
+  if (!is.null(compression)) {
+    builder$set_compression(table, compression = compression)
+  }
+  if (!is.null(compression_level)) {
+    builder$set_compression_level(table, compression_level = compression_level)
   }
+  if (!is.null(use_dictionary)) {
+    builder$set_dictionary(table, use_dictionary)
+  }
+  if (!is.null(write_statistics)) {
+    builder$set_write_statistics(table, write_statistics)
+  }
+  if (!is.null(data_page_size)) {
+    builder$set_data_page_size(data_page_size)
+  }
+  shared_ptr(ParquetWriterProperties, 
parquet___WriterProperties___Builder__build(builder))
 }
 
 #' @title ParquetFileWriter class
@@ -391,18 +368,13 @@ ParquetFileWriter <- R6Class("ParquetFileWriter", inherit 
= ArrowObject,
     WriteTable = function(table, chunk_size) {
       parquet___arrow___FileWriter__WriteTable(self, table, chunk_size)
     },
-    Close = function() {
-      parquet___arrow___FileWriter__Close(self)
-    }
+    Close = function() parquet___arrow___FileWriter__Close(self)
   )
-
 )
-ParquetFileWriter$create <- function(
-  schema,
-  sink,
-  properties = ParquetWriterProperties$create(),
-  arrow_properties = ParquetArrowWriterProperties$create()
-) {
+ParquetFileWriter$create <- function(schema,
+                                     sink,
+                                     properties = 
ParquetWriterProperties$create(),
+                                     arrow_properties = 
ParquetArrowWriterProperties$create()) {
   shared_ptr(
     ParquetFileWriter,
     parquet___arrow___ParquetFileWriter__Open(schema, sink, properties, 
arrow_properties)
diff --git a/r/src/arrowExports.cpp b/r/src/arrowExports.cpp
index 4231a8c..3fa77c2 100644
--- a/r/src/arrowExports.cpp
+++ b/r/src/arrowExports.cpp
@@ -4090,141 +4090,18 @@ RcppExport SEXP 
_arrow_parquet___arrow___FileReader__num_rows(SEXP reader_sexp){
 
 // parquet.cpp
 #if defined(ARROW_R_WITH_ARROW)
-std::shared_ptr<parquet::ArrowWriterPropertiesBuilder> 
parquet___ArrowWriterProperties___Builder__create();
-RcppExport SEXP _arrow_parquet___ArrowWriterProperties___Builder__create(){
+std::shared_ptr<parquet::ArrowWriterProperties> 
parquet___ArrowWriterProperties___create(bool allow_truncated_timestamps, bool 
use_deprecated_int96_timestamps, int timestamp_unit);
+RcppExport SEXP _arrow_parquet___ArrowWriterProperties___create(SEXP 
allow_truncated_timestamps_sexp, SEXP use_deprecated_int96_timestamps_sexp, 
SEXP timestamp_unit_sexp){
 BEGIN_RCPP
-       return Rcpp::wrap(parquet___ArrowWriterProperties___Builder__create());
+       Rcpp::traits::input_parameter<bool>::type 
allow_truncated_timestamps(allow_truncated_timestamps_sexp);
+       Rcpp::traits::input_parameter<bool>::type 
use_deprecated_int96_timestamps(use_deprecated_int96_timestamps_sexp);
+       Rcpp::traits::input_parameter<int>::type 
timestamp_unit(timestamp_unit_sexp);
+       return 
Rcpp::wrap(parquet___ArrowWriterProperties___create(allow_truncated_timestamps, 
use_deprecated_int96_timestamps, timestamp_unit));
 END_RCPP
 }
 #else
-RcppExport SEXP _arrow_parquet___ArrowWriterProperties___Builder__create(){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__create(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void parquet___ArrowWriterProperties___Builder__store_schema(const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__store_schema(SEXP 
builder_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       parquet___ArrowWriterProperties___Builder__store_schema(builder);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__store_schema(SEXP 
builder_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__store_schema(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void 
parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps(const
 std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps(SEXP
 builder_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       
parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps(builder);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps(SEXP
 builder_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps().
 Please use arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void 
parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps(const
 std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps(SEXP
 builder_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       
parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps(builder);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps(SEXP
 builder_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps().
 Please use arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void parquet___ArrowWriterProperties___Builder__coerce_timestamps(const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder, 
arrow::TimeUnit::type unit);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__coerce_timestamps(SEXP 
builder_sexp, SEXP unit_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       Rcpp::traits::input_parameter<arrow::TimeUnit::type>::type 
unit(unit_sexp);
-       parquet___ArrowWriterProperties___Builder__coerce_timestamps(builder, 
unit);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__coerce_timestamps(SEXP 
builder_sexp, SEXP unit_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__coerce_timestamps(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void 
parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(SEXP
 builder_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       
parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(builder);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(SEXP
 builder_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(). Please 
use arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void 
parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(SEXP
 builder_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       
parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(builder);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(SEXP
 builder_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(). 
Please use arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-std::shared_ptr<parquet::ArrowWriterProperties> 
parquet___ArrowWriterProperties___Builder__build(const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder);
-RcppExport SEXP _arrow_parquet___ArrowWriterProperties___Builder__build(SEXP 
builder_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>&>::type 
builder(builder_sexp);
-       return 
Rcpp::wrap(parquet___ArrowWriterProperties___Builder__build(builder));
-END_RCPP
-}
-#else
-RcppExport SEXP _arrow_parquet___ArrowWriterProperties___Builder__build(SEXP 
builder_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__build(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-std::shared_ptr<parquet::WriterProperties> 
parquet___default_writer_properties();
-RcppExport SEXP _arrow_parquet___default_writer_properties(){
-BEGIN_RCPP
-       return Rcpp::wrap(parquet___default_writer_properties());
-END_RCPP
-}
-#else
-RcppExport SEXP _arrow_parquet___default_writer_properties(){
-       Rf_error("Cannot call parquet___default_writer_properties(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
+RcppExport SEXP _arrow_parquet___ArrowWriterProperties___create(SEXP 
allow_truncated_timestamps_sexp, SEXP use_deprecated_int96_timestamps_sexp, 
SEXP timestamp_unit_sexp){
+       Rf_error("Cannot call parquet___ArrowWriterProperties___create(). 
Please use arrow::install_arrow() to install required runtime libraries. ");
 }
 #endif
 
@@ -4261,23 +4138,6 @@ RcppExport SEXP 
_arrow_parquet___WriterProperties___Builder__version(SEXP builde
 
 // parquet.cpp
 #if defined(ARROW_R_WITH_ARROW)
-void parquet___ArrowWriterProperties___Builder__default_compression(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, const 
arrow::Compression::type& compression);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_compression(SEXP 
builder_sexp, SEXP compression_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::WriterPropertiesBuilder>&>::type builder(builder_sexp);
-       Rcpp::traits::input_parameter<const arrow::Compression::type&>::type 
compression(compression_sexp);
-       parquet___ArrowWriterProperties___Builder__default_compression(builder, 
compression);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_compression(SEXP 
builder_sexp, SEXP compression_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__default_compression(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
 void parquet___ArrowWriterProperties___Builder__set_compressions(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, const 
std::vector<std::string>& paths, const Rcpp::IntegerVector& types);
 RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__set_compressions(SEXP 
builder_sexp, SEXP paths_sexp, SEXP types_sexp){
 BEGIN_RCPP
@@ -4296,23 +4156,6 @@ RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__set_compressio
 
 // parquet.cpp
 #if defined(ARROW_R_WITH_ARROW)
-void 
parquet___ArrowWriterProperties___Builder__default_compression_level(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, int 
compression_level);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_compression_level(SEXP
 builder_sexp, SEXP compression_level_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::WriterPropertiesBuilder>&>::type builder(builder_sexp);
-       Rcpp::traits::input_parameter<int>::type 
compression_level(compression_level_sexp);
-       
parquet___ArrowWriterProperties___Builder__default_compression_level(builder, 
compression_level);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_compression_level(SEXP
 builder_sexp, SEXP compression_level_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__default_compression_level(). Please 
use arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
 void parquet___ArrowWriterProperties___Builder__set_compression_levels(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, const 
std::vector<std::string>& paths, const Rcpp::IntegerVector& levels);
 RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__set_compression_levels(SEXP 
builder_sexp, SEXP paths_sexp, SEXP levels_sexp){
 BEGIN_RCPP
@@ -4331,40 +4174,6 @@ RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__set_compressio
 
 // parquet.cpp
 #if defined(ARROW_R_WITH_ARROW)
-void parquet___ArrowWriterProperties___Builder__default_write_statistics(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, bool 
write_statistics);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_write_statistics(SEXP 
builder_sexp, SEXP write_statistics_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::WriterPropertiesBuilder>&>::type builder(builder_sexp);
-       Rcpp::traits::input_parameter<bool>::type 
write_statistics(write_statistics_sexp);
-       
parquet___ArrowWriterProperties___Builder__default_write_statistics(builder, 
write_statistics);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_write_statistics(SEXP 
builder_sexp, SEXP write_statistics_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__default_write_statistics(). Please 
use arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
-void parquet___ArrowWriterProperties___Builder__default_use_dictionary(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, bool 
use_dictionary);
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_use_dictionary(SEXP 
builder_sexp, SEXP use_dictionary_sexp){
-BEGIN_RCPP
-       Rcpp::traits::input_parameter<const 
std::shared_ptr<parquet::WriterPropertiesBuilder>&>::type builder(builder_sexp);
-       Rcpp::traits::input_parameter<bool>::type 
use_dictionary(use_dictionary_sexp);
-       
parquet___ArrowWriterProperties___Builder__default_use_dictionary(builder, 
use_dictionary);
-       return R_NilValue;
-END_RCPP
-}
-#else
-RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__default_use_dictionary(SEXP 
builder_sexp, SEXP use_dictionary_sexp){
-       Rf_error("Cannot call 
parquet___ArrowWriterProperties___Builder__default_use_dictionary(). Please use 
arrow::install_arrow() to install required runtime libraries. ");
-}
-#endif
-
-// parquet.cpp
-#if defined(ARROW_R_WITH_ARROW)
 void parquet___ArrowWriterProperties___Builder__set_use_dictionary(const 
std::shared_ptr<parquet::WriterPropertiesBuilder>& builder, const 
std::vector<std::string>& paths, const Rcpp::LogicalVector& use_dictionary);
 RcppExport SEXP 
_arrow_parquet___ArrowWriterProperties___Builder__set_use_dictionary(SEXP 
builder_sexp, SEXP paths_sexp, SEXP use_dictionary_sexp){
 BEGIN_RCPP
@@ -6119,23 +5928,11 @@ static const R_CallMethodDef CallEntries[] = {
                { "_arrow_parquet___arrow___FileReader__ReadTable1", (DL_FUNC) 
&_arrow_parquet___arrow___FileReader__ReadTable1, 1}, 
                { "_arrow_parquet___arrow___FileReader__ReadTable2", (DL_FUNC) 
&_arrow_parquet___arrow___FileReader__ReadTable2, 2}, 
                { "_arrow_parquet___arrow___FileReader__num_rows", (DL_FUNC) 
&_arrow_parquet___arrow___FileReader__num_rows, 1}, 
-               { "_arrow_parquet___ArrowWriterProperties___Builder__create", 
(DL_FUNC) &_arrow_parquet___ArrowWriterProperties___Builder__create, 0}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__store_schema", (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__store_schema, 1}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps",
 (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps,
 1}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps",
 (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps,
 1}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__coerce_timestamps", 
(DL_FUNC) &_arrow_parquet___ArrowWriterProperties___Builder__coerce_timestamps, 
2}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps, 
1}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps",
 (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps,
 1}, 
-               { "_arrow_parquet___ArrowWriterProperties___Builder__build", 
(DL_FUNC) &_arrow_parquet___ArrowWriterProperties___Builder__build, 1}, 
-               { "_arrow_parquet___default_writer_properties", (DL_FUNC) 
&_arrow_parquet___default_writer_properties, 0}, 
+               { "_arrow_parquet___ArrowWriterProperties___create", (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___create, 3}, 
                { "_arrow_parquet___WriterProperties___Builder__create", 
(DL_FUNC) &_arrow_parquet___WriterProperties___Builder__create, 0}, 
                { "_arrow_parquet___WriterProperties___Builder__version", 
(DL_FUNC) &_arrow_parquet___WriterProperties___Builder__version, 2}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__default_compression", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__default_compression, 2}, 
                { 
"_arrow_parquet___ArrowWriterProperties___Builder__set_compressions", (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__set_compressions, 3}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__default_compression_level", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__default_compression_level, 
2}, 
                { 
"_arrow_parquet___ArrowWriterProperties___Builder__set_compression_levels", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__set_compression_levels, 3}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__default_write_statistics", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__default_write_statistics, 
2}, 
-               { 
"_arrow_parquet___ArrowWriterProperties___Builder__default_use_dictionary", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__default_use_dictionary, 2}, 
                { 
"_arrow_parquet___ArrowWriterProperties___Builder__set_use_dictionary", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__set_use_dictionary, 3}, 
                { 
"_arrow_parquet___ArrowWriterProperties___Builder__set_write_statistics", 
(DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__set_write_statistics, 3}, 
                { 
"_arrow_parquet___ArrowWriterProperties___Builder__data_page_size", (DL_FUNC) 
&_arrow_parquet___ArrowWriterProperties___Builder__data_page_size, 2}, 
diff --git a/r/src/parquet.cpp b/r/src/parquet.cpp
index 13d2d9a..626e58c 100644
--- a/r/src/parquet.cpp
+++ b/r/src/parquet.cpp
@@ -106,61 +106,27 @@ class ArrowWriterPropertiesBuilder : public 
ArrowWriterProperties::Builder {
 }  // namespace parquet
 
 // [[arrow::export]]
-std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>
-parquet___ArrowWriterProperties___Builder__create() {
-  return std::make_shared<parquet::ArrowWriterPropertiesBuilder>();
-}
-
-// [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__store_schema(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder) {
+std::shared_ptr<parquet::ArrowWriterProperties> 
parquet___ArrowWriterProperties___create(
+    bool allow_truncated_timestamps, bool use_deprecated_int96_timestamps,
+    int timestamp_unit) {
+  auto builder = std::make_shared<parquet::ArrowWriterPropertiesBuilder>();
   builder->store_schema();
-}
-
-// [[arrow::export]]
-void 
parquet___ArrowWriterProperties___Builder__enable_deprecated_int96_timestamps(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder) {
-  builder->enable_deprecated_int96_timestamps();
-}
-
-// [[arrow::export]]
-void 
parquet___ArrowWriterProperties___Builder__disable_deprecated_int96_timestamps(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder) {
-  builder->disable_deprecated_int96_timestamps();
-}
-
-// [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__coerce_timestamps(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder,
-    arrow::TimeUnit::type unit) {
-  builder->coerce_timestamps(unit);
-}
-
-// [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__allow_truncated_timestamps(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder) {
-  builder->allow_truncated_timestamps();
-}
 
-// [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__disallow_truncated_timestamps(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder) {
-  builder->disallow_truncated_timestamps();
-}
+  if (allow_truncated_timestamps) {
+    builder->allow_truncated_timestamps();
+  }
+  if (use_deprecated_int96_timestamps) {
+    builder->enable_deprecated_int96_timestamps();
+  }
+  if (timestamp_unit > -1) {
+    // -1 is passed in for NULL/default
+    
builder->coerce_timestamps(static_cast<arrow::TimeUnit::type>(timestamp_unit));
+  }
 
-// [[arrow::export]]
-std::shared_ptr<parquet::ArrowWriterProperties>
-parquet___ArrowWriterProperties___Builder__build(
-    const std::shared_ptr<parquet::ArrowWriterPropertiesBuilder>& builder) {
   return builder->build();
 }
 
 // [[arrow::export]]
-std::shared_ptr<parquet::WriterProperties> 
parquet___default_writer_properties() {
-  return parquet::default_writer_properties();
-}
-
-// [[arrow::export]]
 std::shared_ptr<parquet::WriterPropertiesBuilder>
 parquet___WriterProperties___Builder__create() {
   return std::make_shared<parquet::WriterPropertiesBuilder>();
@@ -174,58 +140,30 @@ void parquet___WriterProperties___Builder__version(
 }
 
 // [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__default_compression(
-    const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
-    const arrow::Compression::type& compression) {
-  builder->compression(compression);
-}
-
-// [[arrow::export]]
 void parquet___ArrowWriterProperties___Builder__set_compressions(
     const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
     const std::vector<std::string>& paths, const Rcpp::IntegerVector& types) {
-  auto n = paths.size();
-  for (decltype(n) i = 0; i < n; i++) {
-    builder->compression(paths[i], 
static_cast<arrow::Compression::type>(types[i]));
+  auto n = types.size();
+  if (n == 1) {
+    builder->compression(static_cast<arrow::Compression::type>(types[0]));
+  } else {
+    for (decltype(n) i = 0; i < n; i++) {
+      builder->compression(paths[i], 
static_cast<arrow::Compression::type>(types[i]));
+    }
   }
 }
 
 // [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__default_compression_level(
-    const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
-    int compression_level) {
-  builder->compression_level(compression_level);
-}
-
-// [[arrow::export]]
 void parquet___ArrowWriterProperties___Builder__set_compression_levels(
     const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
     const std::vector<std::string>& paths, const Rcpp::IntegerVector& levels) {
-  auto n = paths.size();
-  for (decltype(n) i = 0; i < n; i++) {
-    builder->compression_level(paths[i], levels[i]);
-  }
-}
-
-// [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__default_write_statistics(
-    const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
-    bool write_statistics) {
-  if (write_statistics) {
-    builder->enable_statistics();
+  auto n = levels.size();
+  if (n == 1) {
+    builder->compression_level(levels[0]);
   } else {
-    builder->disable_statistics();
-  }
-}
-
-// [[arrow::export]]
-void parquet___ArrowWriterProperties___Builder__default_use_dictionary(
-    const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
-    bool use_dictionary) {
-  if (use_dictionary) {
-    builder->enable_dictionary();
-  } else {
-    builder->disable_dictionary();
+    for (decltype(n) i = 0; i < n; i++) {
+      builder->compression_level(paths[i], levels[i]);
+    }
   }
 }
 
@@ -233,13 +171,21 @@ void 
parquet___ArrowWriterProperties___Builder__default_use_dictionary(
 void parquet___ArrowWriterProperties___Builder__set_use_dictionary(
     const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
     const std::vector<std::string>& paths, const Rcpp::LogicalVector& 
use_dictionary) {
-  builder->disable_dictionary();
-  auto n = paths.size();
-  for (decltype(n) i = 0; i < n; i++) {
-    if (use_dictionary[i]) {
-      builder->enable_dictionary(paths[i]);
+  auto n = use_dictionary.size();
+  if (n == 1) {
+    if (use_dictionary[0]) {
+      builder->enable_dictionary();
     } else {
-      builder->disable_dictionary(paths[i]);
+      builder->disable_dictionary();
+    }
+  } else {
+    builder->disable_dictionary();
+    for (decltype(n) i = 0; i < n; i++) {
+      if (use_dictionary[i]) {
+        builder->enable_dictionary(paths[i]);
+      } else {
+        builder->disable_dictionary(paths[i]);
+      }
     }
   }
 }
@@ -248,13 +194,21 @@ void 
parquet___ArrowWriterProperties___Builder__set_use_dictionary(
 void parquet___ArrowWriterProperties___Builder__set_write_statistics(
     const std::shared_ptr<parquet::WriterPropertiesBuilder>& builder,
     const std::vector<std::string>& paths, const Rcpp::LogicalVector& 
write_statistics) {
-  builder->disable_statistics();
-  auto n = paths.size();
-  for (decltype(n) i = 0; i < n; i++) {
-    if (write_statistics[i]) {
-      builder->enable_statistics(paths[i]);
+  auto n = write_statistics.size();
+  if (n == 1) {
+    if (write_statistics[0]) {
+      builder->enable_statistics();
     } else {
-      builder->disable_statistics(paths[i]);
+      builder->disable_statistics();
+    }
+  } else {
+    builder->disable_statistics();
+    for (decltype(n) i = 0; i < n; i++) {
+      if (write_statistics[i]) {
+        builder->enable_statistics(paths[i]);
+      } else {
+        builder->disable_statistics(paths[i]);
+      }
     }
   }
 }
diff --git a/r/tests/testthat/helper-expectation.R 
b/r/tests/testthat/helper-expectation.R
index 29fb08a..69597d5 100644
--- a/r/tests/testthat/helper-expectation.R
+++ b/r/tests/testthat/helper-expectation.R
@@ -38,6 +38,12 @@ expect_equivalent <- function(object, expected, ...) {
 
 # expect_equal but for DataTypes, so the error prints better
 expect_type_equal <- function(object, expected, ...) {
+  if (is.Array(object)) {
+    object <- object$type
+  }
+  if (is.Array(expected)) {
+    expected <- expected$type
+  }
   expect_equal(object, expected, ..., label = object$ToString(), 
expected.label = expected$ToString())
 }
 
diff --git a/r/tests/testthat/test-parquet.R b/r/tests/testthat/test-parquet.R
index 23699f5..71484db 100644
--- a/r/tests/testthat/test-parquet.R
+++ b/r/tests/testthat/test-parquet.R
@@ -79,6 +79,15 @@ test_that("write_parquet() handles various use_dictionary= 
specs", {
   expect_parquet_roundtrip(tab, use_dictionary = TRUE)
   expect_parquet_roundtrip(tab, use_dictionary = c(TRUE, FALSE, TRUE))
   expect_parquet_roundtrip(tab, use_dictionary = c(x1 = TRUE, x2 = TRUE))
+  expect_error(
+    write_parquet(tab, tempfile(), use_dictionary = c(TRUE, FALSE)),
+    "unsupported use_dictionary= specification"
+  )
+  expect_error(
+    write_parquet(tab, tempfile(), use_dictionary = 12),
+    "is.logical(use_dictionary) is not TRUE",
+    fixed = TRUE
+  )
 })
 
 test_that("write_parquet() handles various write_statistics= specs", {
@@ -89,6 +98,19 @@ test_that("write_parquet() handles various write_statistics= 
specs", {
   expect_parquet_roundtrip(tab, write_statistics = c(x1 = TRUE, x2 = TRUE))
 })
 
+test_that("write_parquet() can truncate timestamps", {
+  tab <- Table$create(x1 = as.POSIXct("2020/06/03 18:00:00", tz = "UTC"))
+  expect_type_equal(tab$x1, timestamp("us", "UTC"))
+
+  tf <- tempfile()
+  on.exit(unlink(tf))
+
+  write_parquet(tab, tf, coerce_timestamps = "ms", allow_truncated_timestamps 
= TRUE)
+  new <- read_parquet(tf, as_data_frame = FALSE)
+  expect_type_equal(new$x1, timestamp("ms", "UTC"))
+  expect_equivalent(as.data.frame(tab), as.data.frame(new))
+})
+
 test_that("make_valid_version()", {
   expect_equal(make_valid_version("1.0"), ParquetVersionType$PARQUET_1_0)
   expect_equal(make_valid_version("2.0"), ParquetVersionType$PARQUET_2_0)

Reply via email to