diff --git a/c/driver/postgresql/statement.cc b/c/driver/postgresql/statement.cc index 30920467ed..93013d8432 100644 --- a/c/driver/postgresql/statement.cc +++ b/c/driver/postgresql/statement.cc @@ -361,6 +361,11 @@ struct BindStream { } // namespace int TupleReader::GetSchema(struct ArrowSchema* out) { + if (!copy_reader_) { + StringBuilderAppend(&error_builder_, + "[libpq] Statement was already freed"); + return EINVAL; + } int na_res = copy_reader_->GetSchema(out); if (out->release == nullptr) { StringBuilderAppend(&error_builder_, @@ -375,6 +380,12 @@ int TupleReader::GetSchema(struct ArrowSchema* out) { } int TupleReader::GetNext(struct ArrowArray* out) { + if (!copy_reader_) { + StringBuilderAppend(&error_builder_, + "[libpq] Statement was already freed"); + return EINVAL; + } + if (!result_) { out->release = nullptr; return 0; @@ -473,6 +484,7 @@ void TupleReader::Release() { PQfreemem(pgbuf_); pgbuf_ = nullptr; } + copy_reader_ = nullptr; } void TupleReader::ExportTo(struct ArrowArrayStream* stream) {