message: fixing String support for Cylon table operations
diff: @@ -50,12 +50,16 @@ arrow::Status do_copy_numeric_array(const std::shared_ptr<std::vector<int64_t>>
  return array_builder.Finish(copied_array);
  }
  +template<typename TYPE>
  arrow::Status do_copy_binary_array(const std::shared_ptr<std::vector<int64_t>> &indices,
  const std::shared_ptr<arrow::Array> &data_array,
  std::shared_ptr<arrow::Array> *copied_array,
  arrow::MemoryPool *memory_pool) {
  - arrow::BinaryBuilder binary_builder(memory_pool);
  - auto casted_array = std::static_pointer_cast<arrow::BinaryArray>(data_array);
  + using ARRAY_TYPE = typename arrow::TypeTraits<TYPE>::ArrayType;
  + using BUILDER_TYPE = typename arrow::TypeTraits<TYPE>::BuilderType;
  +
  + BUILDER_TYPE binary_builder(memory_pool);
  + auto casted_array = std::static_pointer_cast<ARRAY_TYPE>(data_array);
  for (auto &index : *indices) {
  if (casted_array->length() <= index) {
  LOG(FATAL) << "INVALID INDEX " << index << " LENGTH " << casted_array->length();
  @@ -188,11 +192,15 @@ arrow::Status copy_array_by_indices(const std::shared_ptr<std::vector<int64_t>>
  copied_array,
  memory_pool);
  case arrow::Type::STRING:
  - return do_copy_binary_array(indices, data_array,
  - copied_array, memory_pool);
  + return do_copy_binary_array<arrow::StringType>(indices,
  + data_array,
  + copied_array,
  + memory_pool);
  case arrow::Type::BINARY:
  - return do_copy_binary_array(indices, data_array,
  - copied_array, memory_pool);
  + return do_copy_binary_array<arrow::BinaryType>(indices,
  + data_array,
  + copied_array,
  + memory_pool);
  case arrow::Type::FIXED_SIZE_BINARY:
  return do_copy_fixed_binary_array(indices,
  data_array,
  