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.
---