Github user ricellis commented on a diff in the pull request:

    https://github.com/apache/bahir/pull/61#discussion_r159699798
  
    --- Diff: 
sql-cloudant/src/main/scala/org/apache/bahir/cloudant/CloudantConfig.scala ---
    @@ -16,34 +16,127 @@
      */
     package org.apache.bahir.cloudant
     
    -import java.net.URLEncoder
    +import java.net.{URL, URLEncoder}
     
    -import play.api.libs.json.{JsArray, JsObject, Json, JsValue}
    +import scala.collection.JavaConverters._
    +import scala.collection.mutable
    +import scala.reflect.io.File
    +
    +import com.cloudant.client.api.{ClientBuilder, CloudantClient, Database}
    +import com.cloudant.client.api.model.SearchResult
    +import com.cloudant.client.api.views._
    +import com.cloudant.http.{Http, HttpConnection}
    +import com.cloudant.http.interceptors.Replay429Interceptor
    +import com.google.gson.{JsonObject, JsonParser}
     
     import org.apache.bahir.cloudant.common._
    +import org.apache.bahir.cloudant.common.JsonUtil.JsonConverter
     
     /*
     * Only allow one field pushdown now
     * as the filter today does not tell how to link the filters out And v.s. Or
     */
     
     class CloudantConfig(val protocol: String, val host: String,
    -                     val dbName: String, val indexName: String, val 
viewName: String)
    +                     val dbName: String, val indexPath: String, val 
viewPath: String)
                         (implicit val username: String, val password: String,
                          val partitions: Int, val maxInPartition: Int, val 
minInPartition: Int,
                          val requestTimeout: Long, val bulkSize: Int, val 
schemaSampleSize: Int,
                          val createDBOnSave: Boolean, val endpoint: String,
                          val useQuery: Boolean = false, val queryLimit: Int)
       extends Serializable {
     
    +  @transient private lazy val client: CloudantClient = ClientBuilder
    +    .url(getClientUrl)
    +    .username(username)
    +    .password(password)
    +    .interceptors(Replay429Interceptor.WITH_DEFAULTS)
    +    .build
    +  @transient private lazy val database: Database = client.database(dbName, 
false)
       lazy val dbUrl: String = {protocol + "://" + host + "/" + dbName}
    +  lazy val designDoc: String = {
    +    if (viewPath != null && viewPath.nonEmpty) {
    +      viewPath.split("/")(1)
    +    } else {
    +    null
    +    }
    +  }
    +  lazy val searchName: String = {
    +    // verify that the index path matches '_design/ddoc/_search/searchname'
    +    if (indexPath != null && indexPath.nonEmpty && 
indexPath.matches("\\w+\\/\\w+\\/\\w+\\/\\w+")) {
    +      val splitPath = indexPath.split(File.separator)
    --- End diff --
    
    If you separate out the regex pattern from earlier you could use the 
captured groups to extract the design doc ID and search index name without 
needing to do more splits here.


---

Reply via email to