Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.kakao.actionbase.v2.engine.query
package com.kakao.actionbase.engine.query

import com.kakao.actionbase.v2.core.metadata.Direction
import com.kakao.actionbase.v2.core.types.DataType
Expand All @@ -25,66 +25,66 @@ data class ActionbaseQuery(
sealed class Item {
abstract val name: String
abstract val include: Boolean
abstract val cache: Boolean
abstract val memoize: Boolean
abstract val post: List<PostProcessor>

data class Self(
override val name: String,
val service: String,
val label: String,
val src: Vertex,
val database: String,
val table: String,
val source: Vertex,
override val include: Boolean = false,
override val cache: Boolean = false,
override val memoize: Boolean = false,
override val post: List<PostProcessor> = emptyList(),
) : Item()

data class Get(
override val name: String,
val service: String,
val label: String,
val src: Vertex,
val tgt: Vertex,
val database: String,
val table: String,
val source: Vertex,
val target: Vertex,
override val include: Boolean = false,
override val cache: Boolean = false,
override val memoize: Boolean = false,
override val post: List<PostProcessor> = emptyList(),
) : Item()

data class Count(
override val name: String,
val service: String,
val label: String,
val src: Vertex,
val dir: Direction,
val database: String,
val table: String,
val source: Vertex,
val direction: Direction,
override val include: Boolean = false,
override val cache: Boolean = false,
override val memoize: Boolean = false,
override val post: List<PostProcessor> = emptyList(),
) : Item()

data class Scan(
override val name: String,
val service: String,
val label: String,
val src: Vertex,
val dir: Direction,
val database: String,
val table: String,
val source: Vertex,
val direction: Direction,
val index: String,
val limit: Int,
val offset: String? = null,
val predicates: List<WherePredicate>? = null,
override val include: Boolean = false,
override val cache: Boolean = false,
override val memoize: Boolean = false,
override val post: List<PostProcessor> = emptyList(),
) : Item()

data class Cache(
override val name: String,
val service: String,
val label: String,
val src: Vertex,
val dir: Direction,
val cacheName: String,
val database: String,
val table: String,
val source: Vertex,
val direction: Direction,
val cache: String,
val limit: Int,
override val include: Boolean = false,
override val cache: Boolean = false,
override val memoize: Boolean = false,
override val post: List<PostProcessor> = emptyList(),
) : Item()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.kakao.actionbase.v2.engine.query
package com.kakao.actionbase.engine.query

import com.kakao.actionbase.engine.query.compat.toScanFilter
import com.kakao.actionbase.v2.core.code.EmptyEdgeIdEncoder
import com.kakao.actionbase.v2.core.metadata.Direction
import com.kakao.actionbase.v2.core.types.Field
import com.kakao.actionbase.v2.core.types.StructType
import com.kakao.actionbase.v2.engine.query.compat.toScanFilter
import com.kakao.actionbase.v2.engine.sql.DataFrame
import com.kakao.actionbase.v2.engine.sql.Row

Expand Down Expand Up @@ -65,7 +64,7 @@ class ActionbaseQueryExecutor(
): Mono<DataFrame> =
processQueryItem(queryItem, context, actionBaseQuery)
.flatMap { applyPostProcessors(it, queryItem.post) }
.let { if (queryItem.cache) it.cache() else it }
.let { if (queryItem.memoize) it.cache() else it }

private fun processQueryItem(
queryItem: ActionbaseQuery.Item,
Expand Down Expand Up @@ -102,8 +101,8 @@ class ActionbaseQueryExecutor(
context: Map<String, DataFrame>,
actionBaseQuery: ActionbaseQuery,
): Mono<DataFrame> {
val label = labelProvider.getLabel(queryItem.service, queryItem.label)
val src = resolveVertex(queryItem.src, context).toList()
val label = labelProvider.getLabel(queryItem.database, queryItem.table)
val src = resolveVertex(queryItem.source, context).toList()
return label.getSelf(src, actionBaseQuery.stats, EmptyEdgeIdEncoder.INSTANCE)
}

Expand All @@ -112,28 +111,28 @@ class ActionbaseQueryExecutor(
context: Map<String, DataFrame>,
actionBaseQuery: ActionbaseQuery,
): Mono<DataFrame> {
val label = labelProvider.getLabel(queryItem.service, queryItem.label)
val src = resolveVertex(queryItem.src, context).toList()
val tgt = resolveVertex(queryItem.tgt, context).toList()
val label = labelProvider.getLabel(queryItem.database, queryItem.table)
val src = resolveVertex(queryItem.source, context).toList()
val tgt = resolveVertex(queryItem.target, context).toList()
return label.get(src, tgt, actionBaseQuery.stats, EmptyEdgeIdEncoder.INSTANCE)
}

private fun processCount(
queryItem: ActionbaseQuery.Item.Count,
context: Map<String, DataFrame>,
): Mono<DataFrame> {
val label = labelProvider.getLabel(queryItem.service, queryItem.label)
val src = resolveVertex(queryItem.src, context)
return label.count(src, Direction.OUT)
val label = labelProvider.getLabel(queryItem.database, queryItem.table)
val src = resolveVertex(queryItem.source, context)
return label.count(src, queryItem.direction)
}

private fun processScan(
queryItem: ActionbaseQuery.Item.Scan,
context: Map<String, DataFrame>,
actionBaseQuery: ActionbaseQuery,
): Mono<DataFrame> {
val label = labelProvider.getLabel(queryItem.service, queryItem.label)
val src = resolveVertex(queryItem.src, context)
val label = labelProvider.getLabel(queryItem.database, queryItem.table)
val src = resolveVertex(queryItem.source, context)
val scanFilter = queryItem.toScanFilter(src)
return label.scan(scanFilter, actionBaseQuery.stats, EmptyEdgeIdEncoder.INSTANCE)
}
Expand All @@ -144,7 +143,7 @@ class ActionbaseQueryExecutor(
context: Map<String, DataFrame>,
): Mono<DataFrame> =
// TODO Phase 3: resolve src via resolveVertex(), look up label via labelProvider,
// perform EdgeCache multi-get using cacheName and limit from queryItem,
// perform EdgeCache multi-get using cache and limit from queryItem,
// validate limit > 0 from user input
Mono.just(DataFrame(emptyList(), StructType(emptyArray())))

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.kakao.actionbase.v2.engine.query
package com.kakao.actionbase.engine.query

import com.kakao.actionbase.v2.engine.entity.EntityName
import com.kakao.actionbase.v2.engine.label.Label
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.kakao.actionbase.v2.engine.query.compat
package com.kakao.actionbase.engine.query.compat

import com.kakao.actionbase.engine.query.ActionbaseQuery
import com.kakao.actionbase.v2.engine.entity.EntityName
import com.kakao.actionbase.v2.engine.query.ActionbaseQuery
import com.kakao.actionbase.v2.engine.sql.ScanFilter

fun ActionbaseQuery.Item.Scan.toScanFilter(srcSet: Set<Any>): ScanFilter =
ScanFilter(
name = EntityName(service, label),
name = EntityName(database, table),
srcSet = srcSet,
dir = dir,
dir = direction,
limit = limit,
offset = offset,
indexName = index,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import com.kakao.actionbase.core.edge.mapper.EdgeIndexRecordMapper
import com.kakao.actionbase.core.edge.mapper.EdgeLockRecordMapper
import com.kakao.actionbase.core.edge.mapper.EdgeRecordMapper
import com.kakao.actionbase.core.edge.mapper.EdgeStateRecordMapper
import com.kakao.actionbase.engine.query.ActionbaseQuery
import com.kakao.actionbase.engine.query.ActionbaseQueryExecutor
import com.kakao.actionbase.engine.query.LabelProvider
import com.kakao.actionbase.v2.core.code.EdgeEncoderFactory
import com.kakao.actionbase.v2.core.code.EmptyEdgeIdEncoder
import com.kakao.actionbase.v2.core.code.IdEdgeEncoder
Expand Down Expand Up @@ -51,9 +54,6 @@ import com.kakao.actionbase.v2.engine.metadata.sync.MetadataSyncStatus
import com.kakao.actionbase.v2.engine.metadata.sync.MetadataType
import com.kakao.actionbase.v2.engine.metastore.MetastoreInspector
import com.kakao.actionbase.v2.engine.migration.Migration
import com.kakao.actionbase.v2.engine.query.ActionbaseQuery
import com.kakao.actionbase.v2.engine.query.ActionbaseQueryExecutor
import com.kakao.actionbase.v2.engine.query.LabelProvider
import com.kakao.actionbase.v2.engine.service.ddl.AliasDdlService
import com.kakao.actionbase.v2.engine.service.ddl.LabelDdlService
import com.kakao.actionbase.v2.engine.service.ddl.QueryDdlService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.kakao.actionbase.core.edge.payload.EdgePayload
import com.kakao.actionbase.core.edge.record.EdgeGroupRecord
import com.kakao.actionbase.core.metadata.common.Group
import com.kakao.actionbase.core.storage.HBaseRecord
import com.kakao.actionbase.engine.query.ActionbaseQuery
import com.kakao.actionbase.v2.core.edge.Edge
import com.kakao.actionbase.v2.core.metadata.Direction
import com.kakao.actionbase.v2.core.metadata.LabelType
Expand Down Expand Up @@ -374,6 +375,8 @@ class V3QueryService(
}
}

fun query(request: ActionbaseQuery): Mono<Map<String, DataFrame>> = graph.query(request)

private fun encodeAggRanges(
values: List<Any>,
lastField: Group.Field,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.kakao.actionbase.v2.engine.query
package com.kakao.actionbase.v2.engine.v3.query

import com.kakao.actionbase.engine.query.ActionbaseQuery
import com.kakao.actionbase.engine.query.ActionbaseQueryExecutor
import com.kakao.actionbase.engine.query.LabelProvider
import com.kakao.actionbase.v2.core.types.DataType
import com.kakao.actionbase.v2.core.types.Field
import com.kakao.actionbase.v2.core.types.StructType
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.kakao.actionbase.v2.engine.query
package com.kakao.actionbase.v2.engine.v3.query

import com.kakao.actionbase.engine.query.ActionbaseQuery
import com.kakao.actionbase.engine.query.ActionbaseQueryExecutor
import com.kakao.actionbase.engine.query.LabelProvider
import com.kakao.actionbase.v2.core.types.DataType
import com.kakao.actionbase.v2.core.types.Field
import com.kakao.actionbase.v2.core.types.StructType
Expand Down
Loading
Loading