> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# KineticaPoolExt

> KineticaPoolExt — Kinetica Rust API

[gpudb\_api](https://docs.kinetica.com/content/api/rust/index.md)::<wbr />[sqlx\_support](https://docs.kinetica.com/content/api/rust/sqlx_support/index.md)
[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L625-L757)&#x20;

<pre>`pub trait KineticaPoolExt {    // Required methods    fn execute_sql(        &self,        sql: &str,    ) -> impl Future<Output = Result<u64, SqlxError>> + Send;    fn table_exists(        &self,        table_name: &str,    ) -> impl Future<Output = Result<bool, SqlxError>> + Send;    fn count_rows(        &self,        table_name: &str,        condition: Option<&str>,    ) -> impl Future<Output = Result<i64, SqlxError>> + Send;    fn fetch_page(        &self,        sql: &str,        offset: i64,        limit: i64,    ) -> impl Future<Output = Result<(Vec<PgRow>, i64), SqlxError>> + Send;    fn fetch_all_pages<F>(        &self,        sql: &str,        page_size: i64,        callback: F,    ) -> impl Future<Output = Result<SqlxPaginationStats, SqlxError>> + Send       where F: FnMut(Vec<PgRow>, u64) -> Result<bool, SqlxError> + Send;    fn fetch_all_paginated(        &self,        sql: &str,        page_size: i64,    ) -> impl Future<Output = Result<Vec<PgRow>, SqlxError>> + Send;}`</pre>

Extension trait for `PgPool` with Kinetica-specific helpers.

## Required Methods

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L627-L630)
fn [execute\_sql](#tymethod.execute_sql)( \&self, sql: &[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html), ) -> impl [Future](https://doc.rust-lang.org/1.98.1/core/future/future/trait.Future.html)\<Output = [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<[u64](https://doc.rust-lang.org/1.98.1/std/primitive.u64.html), SqlxError>> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html)

Execute a raw SQL statement and return the number of rows affected.

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L633-L636)
fn [table\_exists](#tymethod.table_exists)( \&self, table\_name: &[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html), ) -> impl [Future](https://doc.rust-lang.org/1.98.1/core/future/future/trait.Future.html)\<Output = [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<[bool](https://doc.rust-lang.org/1.98.1/std/primitive.bool.html), SqlxError>> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html)

Check if a table exists.

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L639-L643)
fn [count\_rows](#tymethod.count_rows)( \&self, table\_name: &[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html), condition: [Option](https://doc.rust-lang.org/1.98.1/core/option/enum.Option.html)\<&[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html)>, ) -> impl [Future](https://doc.rust-lang.org/1.98.1/core/future/future/trait.Future.html)\<Output = [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<[i64](https://doc.rust-lang.org/1.98.1/std/primitive.i64.html), SqlxError>> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html)

Get the count of rows in a table.

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L676-L681)
fn [fetch\_page](#tymethod.fetch_page)( \&self, sql: &[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html), offset: [i64](https://doc.rust-lang.org/1.98.1/std/primitive.i64.html), limit: [i64](https://doc.rust-lang.org/1.98.1/std/primitive.i64.html), ) -> impl [Future](https://doc.rust-lang.org/1.98.1/core/future/future/trait.Future.html)\<Output = [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<([Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<PgRow>, [i64](https://doc.rust-lang.org/1.98.1/std/primitive.i64.html)), SqlxError>> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html)

Execute a query with pagination (LIMIT/OFFSET).Returns rows for the specified page along with the total count.

##### Arguments

<ul>
  <li>`sql` - The base SQL query (without LIMIT/OFFSET)</li>
  <li>`offset` - Number of rows to skip</li>
  <li>`limit` - Maximum number of rows to return</li>
</ul>

##### Example

```rust theme={null}
use gpudb_api::sqlx_support::{KineticaPoolExt, KineticaPool};
use sqlx::Row;

let (rows, total) = pool.fetch_page(
    "SELECT * FROM users ORDER BY id",
    0,   // offset
    100  // limit
).await?;

println!("Fetched {} rows out of {} total", rows.len(), total);
for row in rows {
    let id: i32 = row.get("id");
    println!("id: {}", id);
}
```

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L717-L724)

#### fn [fetch\_all\_pages](#tymethod.fetch_all_pages)\<F>( \&self, sql: &[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html), page\_size: [i64](https://doc.rust-lang.org/1.98.1/std/primitive.i64.html), callback: F, ) -> impl [Future](https://doc.rust-lang.org/1.98.1/core/future/future/trait.Future.html)\<Output = [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<[SqlxPaginationStats](https://docs.kinetica.com/content/api/rust/sqlx_support/struct.SqlxPaginationStats.md), SqlxError>> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html)&#xA;where F: [FnMut](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.FnMut.html)([Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<PgRow>, [u64](https://doc.rust-lang.org/1.98.1/std/primitive.u64.html)) -> [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<[bool](https://doc.rust-lang.org/1.98.1/std/primitive.bool.html), SqlxError> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html),

Execute a query and process all results page by page with a callback.This is memory-efficient as it only loads one page at a time.

##### Arguments

<ul>
  <li>`sql` - The base SQL query (without LIMIT/OFFSET)</li>
  <li>`page_size` - Number of rows per page</li>
  <li>`callback` - Function called for each page; return `false` to stop early</li>
</ul>

##### Example

```rust theme={null}
use gpudb_api::sqlx_support::{KineticaPoolExt, KineticaPool, SqlxPaginationStats};
use sqlx::Row;

let stats = pool.fetch_all_pages(
    "SELECT * FROM large_table ORDER BY id",
    10000,
    |rows, page_num| {
        println!("Processing page {} with {} rows", page_num, rows.len());
        for row in &rows {
            let id: i32 = row.get("id");
            // Process row...
        }
        Ok(true) // Continue to next page
    }
).await?;

println!("Processed {} pages, {} total rows", stats.pages_fetched, stats.rows_fetched);
```

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L752-L756)
fn [fetch\_all\_paginated](#tymethod.fetch_all_paginated)( \&self, sql: &[str](https://doc.rust-lang.org/1.98.1/std/primitive.str.html), page\_size: [i64](https://doc.rust-lang.org/1.98.1/std/primitive.i64.html), ) -> impl [Future](https://doc.rust-lang.org/1.98.1/core/future/future/trait.Future.html)\<Output = [Result](https://doc.rust-lang.org/1.98.1/core/result/enum.Result.html)\<[Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<PgRow>, SqlxError>> + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html)

Fetch all rows from a query, automatically handling pagination.**Warning**: This loads all results into memory. For very large result sets, use `fetch_all_pages` to process results in batches.

##### Arguments

<ul>
  <li>`sql` - The base SQL query (without LIMIT/OFFSET)</li>
  <li>`page_size` - Number of rows to fetch per page</li>
</ul>

##### Example

```rust theme={null}
use gpudb_api::sqlx_support::{KineticaPoolExt, KineticaPool};
use sqlx::Row;

let rows = pool.fetch_all_paginated(
    "SELECT * FROM users ORDER BY id",
    10000
).await?;

println!("Fetched {} total rows", rows.len());
```

## Dyn Compatibility

This trait is not [dyn compatible](https://doc.rust-lang.org/1.98.1/reference/items/traits.html#dyn-compatibility).In older versions of Rust, dyn compatibility was called "object safety".

## Implementors

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/sqlx_support.rs#L770-L898)
impl [KineticaPoolExt](https://docs.kinetica.com/content/api/rust/sqlx_support/trait.KineticaPoolExt.md) for [KineticaPool](https://docs.kinetica.com/content/api/rust/sqlx_support/type.KineticaPool.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.