@@ -7,23 +7,34 @@ import io.hstream.Cluster
77import io.hstream.ConsumerBuilder
88import io.hstream.HStreamClient
99import io.hstream.ProducerBuilder
10+ import io.hstream.Query
1011import io.hstream.QueryerBuilder
1112import io.hstream.ReaderBuilder
1213import io.hstream.Shard
1314import io.hstream.Stream
1415import io.hstream.Subscription
16+ import io.hstream.View
17+ import io.hstream.internal.CommandQuery
18+ import io.hstream.internal.CreateQueryRequest
19+ import io.hstream.internal.DeleteQueryRequest
1520import io.hstream.internal.DeleteStreamRequest
1621import io.hstream.internal.DeleteSubscriptionRequest
22+ import io.hstream.internal.DeleteViewRequest
23+ import io.hstream.internal.GetQueryRequest
24+ import io.hstream.internal.GetViewRequest
1725import io.hstream.internal.HStreamApiGrpcKt
26+ import io.hstream.internal.ListQueriesRequest
1827import io.hstream.internal.ListShardsRequest
1928import io.hstream.internal.ListStreamsRequest
2029import io.hstream.internal.ListSubscriptionsRequest
30+ import io.hstream.internal.ListViewsRequest
2131import io.hstream.internal.LookupSubscriptionRequest
2232import io.hstream.util.GrpcUtils
2333import kotlinx.coroutines.runBlocking
2434import org.slf4j.LoggerFactory
2535import java.util.concurrent.CompletableFuture
2636import java.util.concurrent.atomic.AtomicReference
37+ import kotlin.streams.toList
2738
2839class HStreamClientKtImpl (bootstrapServerUrls : List <String >, credentials : ChannelCredentials ? = null ) : HStreamClient {
2940
@@ -193,6 +204,64 @@ class HStreamClientKtImpl(bootstrapServerUrls: List<String>, credentials: Channe
193204 }
194205 }
195206
207+ override fun createQuery (sql : String? ): Query ? {
208+ checkNotNull(sql)
209+ return unaryCallBlocked {
210+ val query = it.createQuery(CreateQueryRequest .newBuilder().setSql(sql).build())
211+ GrpcUtils .queryFromInternal(query)
212+ }
213+ }
214+
215+ override fun listQueries (): List <Query > {
216+ return unaryCallBlocked {
217+ val result = it.listQueries(ListQueriesRequest .getDefaultInstance())
218+ result.queriesList.stream()
219+ .map(GrpcUtils ::queryFromInternal)
220+ .toList()
221+ }
222+ }
223+
224+ override fun getQuery (id : String? ): Query {
225+ return unaryCallBlocked {
226+ val result = it.getQuery(GetQueryRequest .newBuilder().setId(id).build())
227+ GrpcUtils .queryFromInternal(result)
228+ }
229+ }
230+
231+ override fun deleteQuery (id : String? ) {
232+ unaryCallBlocked {
233+ it.deleteQuery(DeleteQueryRequest .newBuilder().setId(id).build())
234+ }
235+ }
236+
237+ override fun createView (sql : String? ) {
238+ unaryCallBlocked {
239+ it.executeQuery(CommandQuery .newBuilder().setStmtText(sql).build())
240+ }
241+ }
242+
243+ override fun listViews (): List <View > {
244+ return unaryCallBlocked {
245+ it.listViews(ListViewsRequest .getDefaultInstance())
246+ .viewsList.stream()
247+ .map(GrpcUtils ::viewFromInternal)
248+ .toList()
249+ }
250+ }
251+
252+ override fun getView (name : String? ): View {
253+ return unaryCallBlocked {
254+ val result = it.getView(GetViewRequest .newBuilder().setViewId(name).build())
255+ GrpcUtils .viewFromInternal(result)
256+ }
257+ }
258+
259+ override fun deleteView (name : String? ) {
260+ unaryCallBlocked {
261+ it.deleteView(DeleteViewRequest .newBuilder().setViewId(name).build())
262+ }
263+ }
264+
196265 private final suspend fun lookupSubscriptionServerUrl (subscriptionId : String? ): String {
197266 return unaryCallCoroutine {
198267 val req: LookupSubscriptionRequest =
0 commit comments