Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-38418: [MATLAB] Add method for extracting one row of an arrow.tabular.Table as a string #38463

Merged
merged 25 commits into from
Oct 26, 2023

Conversation

sgilmore10
Copy link
Member

@sgilmore10 sgilmore10 commented Oct 25, 2023

Rationale for this change

We would like to modify the display of the arrow.tabular.Table and arrow.tabular.RecordBatch classes to be more "MATLAB-like". In order to do this, we need to add a method to their respective C++ Proxy classes that returns a single row of the Table/RecordBatch as a MATLAB string array.

What changes are included in this PR?

Added new function template:

template <typename TabularLike>
arrow::matlab::tabular::print_row(const std::shared_ptr<TabularLike>& tabularObject, const int64_t row_index) 

This function template returns a string representation of the specified row in tabbularObject.

Added a new proxy method called getRowString to both the Table and RecordBatch C++ proxy classes. These methods invoke print_row to return a string representation of one row in the Table/RecordBatch. Neither MATLAB class arrow.tabular.Table nor arrow.tabular.RecordBatch expose these methods directly because they will only be used internally for display.

Below is an example Output of getRowString():

>> matlabTable = table([1; 2; 3], ["ABC"; "DE"; "FGH"], datetime(2023, 10, 25) + days(0:2)');
>> arrowTable = arrow.table(matlabTable);
>> rowOneAsString = arrowTable.Proxy.getRowString(struct(Index=int64(1)))

rowOneAsString = 

    "1 | "ABC" | 2023-10-25 00:00:00.000000"

Are these changes tested?

Yes, added a new test class called tTabularInternal.m. Because getRowString() is not a method on the MATLAB classes arrow.tabular.Table and arrow.tabular.RecordBatch, this test class calls getRowString() on their Proxy properties, which are public but hidden.

Are there any user-facing changes?

No.

Copy link
Member

@kevingurney kevingurney left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this @sgilmore10!

matlab/src/cpp/arrow/matlab/tabular/print_row.h Outdated Show resolved Hide resolved
matlab/src/cpp/arrow/matlab/tabular/print_row.h Outdated Show resolved Hide resolved
matlab/src/cpp/arrow/matlab/tabular/print_row.h Outdated Show resolved Hide resolved
matlab/src/cpp/arrow/matlab/tabular/proxy/record_batch.cc Outdated Show resolved Hide resolved
matlab/test/arrow/tabular/tTabularInternal.m Outdated Show resolved Hide resolved
@github-actions github-actions bot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 25, 2023
matlab/test/arrow/tabular/tTabularInternal.m Outdated Show resolved Hide resolved
matlab/src/cpp/arrow/matlab/error/error.h Outdated Show resolved Hide resolved
@github-actions github-actions bot added awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Oct 26, 2023
@github-actions github-actions bot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Oct 26, 2023
@kevingurney
Copy link
Member

+1

@github-actions github-actions bot added awaiting merge Awaiting merge and removed awaiting change review Awaiting change review labels Oct 26, 2023
@kevingurney kevingurney merged commit 818f71d into apache:main Oct 26, 2023
9 checks passed
@kevingurney kevingurney deleted the GH-38418 branch October 26, 2023 19:57
@kevingurney kevingurney removed the awaiting merge Awaiting merge label Oct 26, 2023
@conbench-apache-arrow
Copy link

After merging your PR, Conbench analyzed the 4 benchmarking runs that have been run so far on merge-commit 818f71d.

There were no benchmark performance regressions. 🎉

The full Conbench report has more details.

loicalleyne pushed a commit to loicalleyne/arrow that referenced this pull request Nov 13, 2023
…ow.tabular.Table` as a string (apache#38463)

### Rationale for this change

We would like to modify the display of the `arrow.tabular.Table` and `arrow.tabular.RecordBatch` classes to be more "MATLAB-like". In order to do this, we need to add a method to their respective C++ Proxy classes that  returns a single row of the Table/RecordBatch as a MATLAB `string` array.

### What changes are included in this PR?

Added  new function template:
```cpp 
template <typename TabularLike>
arrow::matlab::tabular::print_row(const std::shared_ptr<TabularLike>& tabularObject, const int64_t row_index) 
```
This function template returns a string representation of the specified row in `tabbularObject`. 

Added a new proxy method called `getRowString` to both the `Table` and `RecordBatch` C++ proxy classes. These methods invoke `print_row` to return a string representation of one row in the `Table`/`RecordBatch`.  Neither MATLAB class `arrow.tabular.Table` nor `arrow.tabular.RecordBatch` expose these methods directly because they will only be used internally for display. 

Below is an example Output of `getRowString()`:

```matlab
>> matlabTable = table([1; 2; 3], ["ABC"; "DE"; "FGH"], datetime(2023, 10, 25) + days(0:2)');
>> arrowTable = arrow.table(matlabTable);
>> rowOneAsString = arrowTable.Proxy.getRowString(struct(Index=int64(1)))

rowOneAsString = 

    "1 | "ABC" | 2023-10-25 00:00:00.000000"
```

### Are these changes tested?

Yes, added a new test class called `tTabularInternal.m`. Because `getRowString()` is not a method on the MATLAB classes `arrow.tabular.Table` and `arrow.tabular.RecordBatch`, this test class calls `getRowString()` on their `Proxy` properties, which are public but hidden.

### Are there any user-facing changes?

No.

* Closes: apache#38418

Lead-authored-by: Sarah Gilmore <[email protected]>
Co-authored-by: sgilmore10 <[email protected]>
Co-authored-by: Kevin Gurney <[email protected]>
Signed-off-by: Kevin Gurney <[email protected]>
dgreiss pushed a commit to dgreiss/arrow that referenced this pull request Feb 19, 2024
…ow.tabular.Table` as a string (apache#38463)

### Rationale for this change

We would like to modify the display of the `arrow.tabular.Table` and `arrow.tabular.RecordBatch` classes to be more "MATLAB-like". In order to do this, we need to add a method to their respective C++ Proxy classes that  returns a single row of the Table/RecordBatch as a MATLAB `string` array.

### What changes are included in this PR?

Added  new function template:
```cpp 
template <typename TabularLike>
arrow::matlab::tabular::print_row(const std::shared_ptr<TabularLike>& tabularObject, const int64_t row_index) 
```
This function template returns a string representation of the specified row in `tabbularObject`. 

Added a new proxy method called `getRowString` to both the `Table` and `RecordBatch` C++ proxy classes. These methods invoke `print_row` to return a string representation of one row in the `Table`/`RecordBatch`.  Neither MATLAB class `arrow.tabular.Table` nor `arrow.tabular.RecordBatch` expose these methods directly because they will only be used internally for display. 

Below is an example Output of `getRowString()`:

```matlab
>> matlabTable = table([1; 2; 3], ["ABC"; "DE"; "FGH"], datetime(2023, 10, 25) + days(0:2)');
>> arrowTable = arrow.table(matlabTable);
>> rowOneAsString = arrowTable.Proxy.getRowString(struct(Index=int64(1)))

rowOneAsString = 

    "1 | "ABC" | 2023-10-25 00:00:00.000000"
```

### Are these changes tested?

Yes, added a new test class called `tTabularInternal.m`. Because `getRowString()` is not a method on the MATLAB classes `arrow.tabular.Table` and `arrow.tabular.RecordBatch`, this test class calls `getRowString()` on their `Proxy` properties, which are public but hidden.

### Are there any user-facing changes?

No.

* Closes: apache#38418

Lead-authored-by: Sarah Gilmore <[email protected]>
Co-authored-by: sgilmore10 <[email protected]>
Co-authored-by: Kevin Gurney <[email protected]>
Signed-off-by: Kevin Gurney <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[MATLAB] Add method for extracting one row of a arrow.tabular.Table as a string
2 participants