Skip to content

Latest commit

 

History

History
67 lines (56 loc) · 2.26 KB

response_handling.md

File metadata and controls

67 lines (56 loc) · 2.26 KB

Response handling

We can divide Response AST into 2 parts:

  • WriteResult
  • ReadResult[_]

WriteResult

  1. WriteResult looks like:
case class WriteResult(code: Int,                    // HTTP response code
                       isSuccess: Boolean,           // success status
                       ex: Option[Throwable] = None) // optional exception

It's returns when you use write functionality, like (setPassword, makeAdmin, createDatabase).

You can handle it like that:

influx.setUserPassword("SomeUser", "newPassword") map {
        case Result(_, _, None) => // succesfully finished operation
        case _ => // handle error
}

ReadResult

ReadResult returns from Query API. like(readJs, read, bulkReadJs). It's a base interface for:

  • QueryResult[_]
  • GroupedResult[_]

QueryResult used to represent simply query response, it's looks like:

case class QueryResult[T](code: Int,                    // response HTTP code
                          isSuccess: Boolean,           // success status 
                          queryResult: Seq[T] = Nil,    // quered data  
                          ex: Option[Throwable] = None) // optional exception 

In universal methods like readJs, if you expect query result you should handle it like:

// M depend on your backend, it can be Future, Try, etc.
val res: M[Array[JArray]] = db.readJs("SELECT * FROM some_measurement") map {
      case QueryResult(_, _, queryResult, None) => queryResult // if no exсeption exist
      case _ => // handle error
}

or in short:

db.readJs("SELECT * FROM some_measurement").map(_.queryResult)

Otherwise if you expect GROUP BY result:

// tuple of grouped tags and aggregated result
val res: M[Array[(Array[String], JArray)] = db.readJs("SELECT sum(age) FROM some_measurement GROUP BY sex") map {
      case GroupedResult(_, _, groupedResult, None) => groupedResult // if no exсeption exist
      case _ => // handle error
}

or in short:

db.readJs("SELECT sum(age) FROM some_measurement GROUP BY sex").map(_.groupedResult)

If you will try execute wrong result extraction from ReadResult type. it will throw UnsupportedOperationException.

All non-universe methods can be handler as QueryResult[_].