All Downloads are FREE. Search and download functionalities are using the official Maven repository.

zio.nebula.storage.NebulaStorageClientLive.scala Maven / Gradle / Ivy

The newest version!
package zio.nebula.storage

import scala.jdk.CollectionConverters._

import zio._

import com.vesoft.nebula.client.storage.StorageClient

/**
 * @author
 *   梦境迷离
 * @version 1.0,2023/8/31
 */
private[nebula] object NebulaStorageClientLive {
  private val DEFAULT_LIMIT: Int                   = 1000
  private val DEFAULT_START_TIME: Long             = 0
  private val DEFAULT_END_TIME: Long               = java.lang.Long.MAX_VALUE
  private val DEFAULT_ALLOW_PART_SUCCESS: Boolean  = false
  private val DEFAULT_ALLOW_READ_FOLLOWER: Boolean = true
}

private[nebula] final class NebulaStorageClientLive(underlying: StorageClient) extends NebulaStorageClient {

  import NebulaStorageClientLive._

  override def connect(): Task[Boolean] = ZIO.attempt(underlying.connect())

  override def close(): Task[Unit] = ZIO.attempt(underlying.close())

  override def scan(scanInput: ScanInput): Task[scanInput.T] = {
    scanInput match {
      case ScanVertex(spaceName, part, tagName, returnCols, _limit, _between, _allowConfig) =>
        val limit       = _limit.getOrElse(DEFAULT_LIMIT)
        val between     = _between.getOrElse(Between(DEFAULT_START_TIME, DEFAULT_END_TIME))
        val allowConfig =
          _allowConfig.getOrElse(AllowConfig(DEFAULT_ALLOW_PART_SUCCESS, DEFAULT_ALLOW_READ_FOLLOWER))

        ZIO.attempt {
          (part, returnCols) match {
            case (Some(_part), Some(_returnCols)) =>
              underlying.scanVertex(
                spaceName,
                _part,
                tagName,
                _returnCols.asJava,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )
            case (Some(_part), None)              =>
              underlying.scanVertex(
                spaceName,
                _part,
                tagName,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )
            case (None, Some(_returnCols))        =>
              underlying.scanVertex(
                spaceName,
                tagName,
                _returnCols.asJava,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )

            case (None, None) =>
              underlying.scanVertex(
                spaceName,
                tagName,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )
          }
        }
          .map(_.asInstanceOf[scanInput.T])

      case ScanEdge(spaceName, part, edgeName, returnCols, _limit, _between, _allowConfig) =>
        val limit       = _limit.getOrElse(DEFAULT_LIMIT)
        val between     = _between.getOrElse(Between(DEFAULT_START_TIME, DEFAULT_END_TIME))
        val allowConfig =
          _allowConfig.getOrElse(AllowConfig(DEFAULT_ALLOW_PART_SUCCESS, DEFAULT_ALLOW_READ_FOLLOWER))

        ZIO.attempt {
          (part, returnCols) match {
            case (Some(_part), Some(_returnCols)) =>
              underlying.scanEdge(
                spaceName,
                _part,
                edgeName,
                _returnCols.asJava,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )
            case (Some(_part), None)              =>
              underlying.scanEdge(
                spaceName,
                _part,
                edgeName,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )
            case (None, Some(_returnCols))        =>
              underlying.scanEdge(
                spaceName,
                edgeName,
                _returnCols.asJava,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )

            case (None, None) =>
              underlying.scanEdge(
                spaceName,
                edgeName,
                limit,
                between.startTime,
                between.endTime,
                allowConfig.allowPartSuccess,
                allowConfig.allowReadFromFollower
              )
          }
        }.map(_.asInstanceOf[scanInput.T])
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy