SQLProvider icon indicating copy to clipboard operation
SQLProvider copied to clipboard

[Question] How to use Pragma with SQLITE?

Open OnurGumus opened this issue 2 years ago • 6 comments
trafficstars

When you use pragma statements with sqlite, you need to do it at the beginning of your connection. I am not sure how this is achievable with SqlProvider, any hints appreciated.

OnurGumus avatar May 25 '23 12:05 OnurGumus

As SQLite doesn't support stored procedures and the features was already there, you can do pragma via them: https://fsprojects.github.io/SQLProvider/core/programmability.html

Thorium avatar May 25 '23 13:05 Thorium

As in test-project:

    let dc = sql.GetDataContext()
    let pragmaSchemav = dc.Pragma.Get.Invoke("schema_version")
    let res = pragmaSchemav.ResultSet |> Array.map(fun i -> i.ColumnValues |> Map.ofSeq)
    let ver = (res |> Seq.head).["schema_version"] :?> Int64

    let pragmaFk = dc.Pragma.GetOf.Invoke("foreign_key_list", "EmployeesTerritories")
    let res = pragmaFk.ResultSet |> Array.map(fun i -> i.ColumnValues |> Map.ofSeq)

Thorium avatar May 25 '23 13:05 Thorium

In particular I'd like to set busy_timeout per connection. How can I do it? as in PRAGMA busy_timeout

OnurGumus avatar May 25 '23 15:05 OnurGumus

What happens if you do this: dc.Pragma.Get.Invoke("busy_timeout=300")

Thorium avatar May 25 '23 16:05 Thorium

@Thorium, Invoke doesn't take any parameter with sqlite, not for get not for getof.

image

OnurGumus avatar May 29 '23 11:05 OnurGumus

That's a bit weird because I took my code line from the test-project:

https://github.com/fsprojects/SQLProvider/blob/e1c768a701a0a6ec5ff47ddb74f6f1ef1ff7cbc2/tests/SqlProvider.Tests/QueryTests.fs#L2259

Thorium avatar Jun 15 '23 10:06 Thorium