postgres-nio icon indicating copy to clipboard operation
postgres-nio copied to clipboard

Need examples

Open NikKovIos opened this issue 1 year ago • 0 comments

Hello, thanks for the great framework!

When trying to use it there are a lot of questions and I thought that it would be great to make some examples of use. I watched https://github.com/vapor/postgres-nio/blob/main/Snippets/Birthdays.swift and it helps a lot, but there are still questions. Like:

  • how to map to swift struct models and back. How to use PostgresDecodable.
  • can I use code like next instead withTaskGroup:
        let runned = Task {
            await client.run()
        }
        // do sql actions
        runned.cancel()

For now I'm using

static func query<T: Codable>(_ closure: @escaping ((PostgresClient) async throws -> T)) async throws -> T {
        return try await withThrowingTaskGroup(of: Void.self) { taskGroup in
            defer {
                taskGroup.cancelAll()
            }
            taskGroup.addTask {
                await client.run()
            }

            let result: T = try await closure(client)

            return result
        }
    }
try await Database.query { client in
                let rows = try await client.query("""
                                                  SELECT * FROM "\(Constants.reviewersTableName)"
                                                  """
                )
}

And get an error on the second call PostgresNIO/PostgresClient.swift:420: Precondition failed: PostgresClient.run() should just be called once! What is wrong? I thought block in defer is closing connection.

It would be useful to have a guide.

NikKovIos avatar Oct 04 '24 20:10 NikKovIos