Skip to content

programingjd/asynk_postgres

Repository files navigation

jcenterjcenter

Asynk POSTGRES

A Postgres async client with suspend functions for kotlin coroutines.

Download

The maven artifacts are on Bintray and jcenter.

Download the latest jar.

Maven

Include those settings to be able to resolve jcenter artifacts.

<dependency>
  <groupId>info.jdavid.asynk</groupId>
  <artifactId>postgres</artifactId>
  <version>0.0.0.34</version>
</dependency>

Gradle

Add jcenter to the list of maven repositories.

repositories {
  jcenter()
}
dependencies {
  compile 'info.jdavid.asynk:postgres:0.0.0.34'
}

Usage

Connecting

val credentials = 
  PostgresAuthentication.Credentials.PasswordCredentials("user", "password")
val serverAddress = InetAddress.getByName("hostname")
println(
  runBlocking {
    credentials.connectTo("database", InetSocketAddress(serverAddress, db.port)).use { connection ->
      // returns a list of one row as a map of key (column name or alias) to value.
      connection.rows("SELECT VERSION();").toList().first().values.first()
    }
  }
)

Fetching rows

val total: Int = 
  connection.values("SELECT COUNT(*) as count FROM table;", "count").iterate {
    it.next() // only one row
  }

val max = 123
val count: Int =
  connection.values(
    "SELECT COUNT(*) as count FROM table WHERE id > ?;",
    listOf(max),
    "count"
  ).iterate {
    it.next() // only one value
  }

val ids = ArrayList<Int>(count)
connection.values("SELECT * FROM table WHERE id > ?", listOf(max), "id").toList(ids)

val names = Map<Int,String?>(count)
connection.entries("SELECT id, name FROM table", "id", "name").toMap(map)

val json = com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(
  connection.rows("SELECT * FROM table").toList(ids)
)

Updating rows

println(
  connection.affectedRows("UPDATE table SET key = ? WHERE id = ?", listOf("a", 1))
)

println(
  connection.prepare("DELETE FROM table WHERE id = ?").use { statement ->
    listOf(1, 3, 4, 6, 9).count { id ->
      statement.affectedRows(listOf(id)) == 1
    }
  }
)

Tests

The unit tests assume that docker is running and that the docker daemon is exposed on tcp port 2375. This option is not enabled by default. On windows, you will also get prompts to give permission to share your drive that you have to accept.

Docker settings

About

Async Postgres client with kotlin suspend functions.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published