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

Round 2 of cleaning up SpiTupleTable #3

Draft
wants to merge 2 commits into
base: spi-cleanup-tupletable
Choose a base branch
from

Conversation

eeeebbbbrrrr
Copy link
Owner

This removes SpiHeapTupleData and SpiHeapTupleDataEntry in favor of something that is hopefully less complex.

We also change SpiTupleTable to kinda look like an Iterator rather than actually implement std::iter::Iterator. This is a breaking API change, but a good one. The changes are reflected in the test and example code diffs.

SpiTupleTable has also been split up into a private Inner struct that manages access to the wrapped pg_sys::SPI_tuptable instance, allowing SpiTupleTable to manage its lifetime. This also allows us to clone the inner object and share the "current row number" Inner::current across all the Entry-ies.

Doing so avoids the need for the old SpiHeapTupleData type entirely while allowing us to impl Index for SpiTupleTable, which accesses attributes (columns) by their name or ordinal at the current position of the SpiTupleTable.

ping @workingjubilee for review

This removes `SpiHeapTupleData` and `SpiHeapTupleDataEntry` in favor of something that is hopefully less complex.

We also change `SpiTupleTable` to *kinda* look like an Iterator rather than actually implement `std::iter::Iterator`.  This is a breaking API change, but a good one.  The changes are reflected in the test and example code diffs.

`SpiTupleTable` has also been split up into a private `Inner` struct that manages access to the wrapped `pg_sys::SPI_tuptable` instance, allowing `SpiTupleTable` to manage its lifetime.  This also allows us to clone the inner object and share the "current row number" `Inner::current` across all the `Entry`-ies.

Doing so avoids the need for the old `SpiHeapTupleData` type entirely while allowing us to `impl Index for SpiTupleTable`, which accesses attributes (columns) by their name or ordinal at the current position of the SpiTupleTable.
eeeebbbbrrrr added a commit that referenced this pull request Nov 2, 2024
I can't quite explain why, but this function was deadlocking with this
backtrace:

```
* thread #1, name = 'cargo-pgrx', stop reason = signal SIGSTOP
  * frame #0: 0x00007fbe1eeb288d libc.so.6`syscall at syscall.S:38
    frame #1: 0x000055aee526c5d3 cargo-pgrx`std::sys::sync::mutex::futex::Mutex::lock_contended::h6389e2305b0b005c [inlined] std::sys::pal::unix::futex::futex_wait::h30abf43e2d55aa33 at futex.rs:67:21
    frame #2: 0x000055aee526c590 cargo-pgrx`std::sys::sync::mutex::futex::Mutex::lock_contended::h6389e2305b0b005c at futex.rs:57:13
    frame #3: 0x000055aee4157835 cargo-pgrx`std::sync::mutex::Mutex$LT$T$GT$::lock::h4d2bb65800cc6fd3 at futex.rs:29:13
    frame pgcentralfoundation#4: 0x000055aee41577ed cargo-pgrx`std::sync::mutex::Mutex$LT$T$GT$::lock::h4d2bb65800cc6fd3(self=0x000055aee6926c20) at mutex.rs:317:24
    frame pgcentralfoundation#5: 0x000055aee406c779 cargo-pgrx`cargo_pgrx::command::install::get_git_hash::ha84d504db9d1bba8(manifest_path=0x00007ffdc43b83b0) at install.rs:507:9
    frame pgcentralfoundation#6: 0x000055aee406d6e9 cargo-pgrx`cargo_pgrx::command::install::filter_contents::h8c710847129ba6be(manifest_path=0x00007ffdc43b8d10, input=String @ 0x00007ffdc43b8940) at install.rs:541:46
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant