Skip to content

Commit

Permalink
Merge branch 'dev' of github.com:vitrivr/vitrivr-engine into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
faberf committed May 29, 2024
2 parents 9176859 + a888831 commit ce53093
Show file tree
Hide file tree
Showing 78 changed files with 199 additions and 195 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,15 @@ typealias DescriptorId = UUID
*/
interface Descriptor : Persistable {
/** The [DescriptorId] held by this [Descriptor]. */
val id: DescriptorId
var id: DescriptorId

/** The [RetrievableId] of the [Retrievable] that is being described by this [Descriptor]. */
val retrievableId: RetrievableId?
var retrievableId: RetrievableId?

/** The [Schema.Field] backing this [Descriptor]. */
val field: Schema.Field<*, out Descriptor>?


/** */
/** Flag indicating whether this [Descriptor] is persistent or not. */
override val transient: Boolean
get() = this.field != null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import org.vitrivr.engine.core.model.types.Value
*/

data class BooleanDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
override val value: Value.Boolean,
override val field: Schema.Field<*, BooleanDescriptor>? = null
) : ScalarDescriptor<Value.Boolean> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import org.vitrivr.engine.core.model.types.Value
*/

data class DoubleDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
override val value: Value.Double,
override val field: Schema.Field<*, DoubleDescriptor>? = null
) : ScalarDescriptor<Value.Double> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import org.vitrivr.engine.core.model.types.Value
*/

data class FloatDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
override val value: Value.Float,
override val field: Schema.Field<*, FloatDescriptor>? = null
) : ScalarDescriptor<Value.Float> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import org.vitrivr.engine.core.model.types.Value
*/

data class IntDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
override val value: Value.Int,
override val field: Schema.Field<*, IntDescriptor>? = null
) : ScalarDescriptor<Value.Int> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import org.vitrivr.engine.core.model.types.Value
*/

data class LongDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
override val value: Value.Long,
override val field: Schema.Field<*, LongDescriptor>? = null
) : ScalarDescriptor<Value.Long> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import org.vitrivr.engine.core.model.types.Value
*/

data class StringDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId?,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
override val value: Value.String,
override val field: Schema.Field<*, StringDescriptor>? = null
) : ScalarDescriptor<Value.String> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import org.vitrivr.engine.core.model.types.Value
* @version 1.0.0
*/
data class LabelDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId?,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val label: Value.String,
val confidence: Value.Float,
override val field: Schema.Field<*, LabelDescriptor>? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import org.vitrivr.engine.core.model.types.Type
import org.vitrivr.engine.core.model.types.Value

data class RasterDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val hist: List<Value.Float>,
val raster: List<Value.Float>,
override val field: Schema.Field<*, RasterDescriptor>? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import org.vitrivr.engine.core.model.types.Type
import org.vitrivr.engine.core.model.types.Value

data class SkeletonDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val person: Value.Int,
val skeleton: List<Value.Float>,
val weights: List<Value.Float>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import java.util.*
* @version 1.0.0
*/
data class MediaDimensionsDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val width: Value.Int,
val height: Value.Int,
override val field: Schema.Field<*, MediaDimensionsDescriptor>? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
* @version 1.0.0
*/
data class Rectangle2DMetadataDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val leftX: Value.Int,
val leftY: Value.Int,
val width: Value.Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
* @version 1.0.0
*/
data class TemporalMetadataDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId, //retrievable Id must come first, due to reflection
override var id: DescriptorId,
override var retrievableId: RetrievableId?, //retrievable Id must come first, due to reflection
val startNs: Value.Long,
val endNs: Value.Long,
override val field: Schema.Field<*, TemporalMetadataDescriptor>? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
* @version 1.0.0
*/
data class FileSourceMetadataDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val path: Value.String,
val size: Value.Long,
override val field: Schema.Field<*, FileSourceMetadataDescriptor>? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import org.vitrivr.engine.core.model.types.Value
import java.util.*

data class MapStructDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val columnTypes: Map<String, String>,
val columnValues: Map<String, Any?>,
override val transient: Boolean = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
* @version 1.0.0
*/
class VideoSourceMetadataDescriptor(
override val id: DescriptorId,
override val retrievableId: RetrievableId,
override var id: DescriptorId,
override var retrievableId: RetrievableId?,
val width: Value.Int,
val height: Value.Int,
val fps: Value.Double,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
*/

data class BooleanVectorDescriptor(
override val id: UUID = UUID.randomUUID(),
override val retrievableId: RetrievableId? = null,
override var id: UUID = UUID.randomUUID(),
override var retrievableId: RetrievableId? = null,
override val vector: List<Value.Boolean>,
override val field: Schema.Field<*, BooleanVectorDescriptor>? = null
) : VectorDescriptor<Value.Boolean> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
*/

data class DoubleVectorDescriptor(
override val id: UUID = UUID.randomUUID(),
override val retrievableId: RetrievableId? = null,
override var id: UUID = UUID.randomUUID(),
override var retrievableId: RetrievableId? = null,
override val vector: List<Value.Double>,
override val field: Schema.Field<*, DoubleVectorDescriptor>? = null
) : VectorDescriptor<Value.Double> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import java.util.*
*/

data class FloatVectorDescriptor(
override val id: UUID = UUID.randomUUID(),
override val retrievableId: RetrievableId? = null,
override var id: UUID = UUID.randomUUID(),
override var retrievableId: RetrievableId? = null,
override val vector: List<Value.Float>,
override val field: Schema.Field<*, FloatVectorDescriptor>? = null
) : VectorDescriptor<Value.Float> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
*/

data class IntVectorDescriptor(
override val id: UUID = UUID.randomUUID(),
override val retrievableId: RetrievableId? = null,
override var id: UUID = UUID.randomUUID(),
override var retrievableId: RetrievableId? = null,
override val vector: List<Value.Int>,
override val field: Schema.Field<*, IntVectorDescriptor>? = null
) : VectorDescriptor<Value.Int> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import java.util.*
*/

data class LongVectorDescriptor(
override val id: UUID = UUID.randomUUID(),
override val retrievableId: RetrievableId? = null,
override var id: UUID = UUID.randomUUID(),
override var retrievableId: RetrievableId? = null,
override val vector: List<Value.Long>,
override val field: Schema.Field<*, LongVectorDescriptor>? = null
) : VectorDescriptor<Value.Long> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import org.vitrivr.engine.core.model.query.basics.ComparisonOperator
import org.vitrivr.engine.core.model.query.bool.SimpleBooleanQuery
import org.vitrivr.engine.core.model.types.Type
import org.vitrivr.engine.core.model.types.Value
import java.util.*

/** The name of the retrievable entity. */
const val RETRIEVABLE_ENTITY_NAME = "retrievable"
Expand Down Expand Up @@ -106,6 +107,34 @@ internal fun SimpleBooleanQuery<*>.operator() = when (this.comparison) {
ComparisonOperator.GEQ -> Compare.Operator.GEQUAL
}

/**
* Tries to convert this [Any] to a [PublicValue] (Cottontail DB).
*
* @return [PublicValue] for this [Any]
*/
internal fun Any.toCottontailValue(): PublicValue = when (this) {
is UUID -> UuidValue(this)
is String -> StringValue(this)
is Boolean -> BooleanValue(this)
is Byte -> ByteValue(this)
is Short -> ShortValue(this)
is Int -> IntValue(this)
is Long -> LongValue(this)
is Float -> FloatValue(this)
is Double -> DoubleValue(this)
is Date -> DateValue(this)
is Value.Boolean -> BooleanValue(this.value)
is Value.Byte -> ByteValue(this.value)
is Value.Double -> DoubleValue(this.value)
is Value.Float -> FloatValue(this.value)
is Value.Int -> IntValue(this.value)
is Value.Long -> LongValue(this.value)
is Value.Short -> ShortValue(this.value)
is Value.String -> StringValue(this.value)
is Value.DateTime -> DateValue(this.value)
else -> throw IllegalArgumentException("Unsupported type for vector value.")
}

/**
* Converts this [Value] (vitrivr-engine) to a [PublicValue] (Cottontail DB).
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,14 @@ import org.vitrivr.cottontail.client.language.basics.predicate.Compare
import org.vitrivr.cottontail.client.language.dml.BatchInsert
import org.vitrivr.cottontail.client.language.dml.Insert
import org.vitrivr.cottontail.client.language.dml.Update
import org.vitrivr.cottontail.core.values.*
import org.vitrivr.cottontail.core.values.UuidValue
import org.vitrivr.engine.core.model.descriptor.struct.StructDescriptor
import org.vitrivr.engine.core.model.metamodel.Schema
import org.vitrivr.engine.core.model.types.Value
import org.vitrivr.engine.plugin.cottontaildb.CottontailConnection
import org.vitrivr.engine.plugin.cottontaildb.DESCRIPTOR_ID_COLUMN_NAME
import org.vitrivr.engine.plugin.cottontaildb.RETRIEVABLE_ID_COLUMN_NAME
import org.vitrivr.engine.plugin.cottontaildb.descriptors.AbstractDescriptorWriter
import java.util.*
import org.vitrivr.engine.plugin.cottontaildb.toCottontailValue

private val logger: KLogger = KotlinLogging.logger {}

Expand All @@ -43,29 +42,7 @@ class StructDescriptorWriter(field: Schema.Field<*, StructDescriptor>, connectio

/* Append fields. */
for ((field, value) in item.values()) {
insert.value(
field, when (value) {
null -> null
is UUID -> UuidValue(value)
is String -> StringValue(value)
is Value.String -> StringValue(value.value)
is Boolean -> BooleanValue(value)
is Value.Boolean -> BooleanValue(value.value)
is Byte -> ByteValue(value)
is Value.Byte -> ByteValue(value.value)
is Short -> ShortValue(value)
is Value.Short -> ShortValue(value.value)
is Int -> IntValue(value)
is Value.Int -> IntValue(value.value)
is Long -> LongValue(value)
is Value.Long -> LongValue(value.value)
is Float -> FloatValue(value)
is Value.Float -> FloatValue(value.value)
is Double -> DoubleValue(value)
is Value.Double -> DoubleValue(value.value)
else -> throw IllegalArgumentException("Unsupported type ${value::class.simpleName} for struct descriptor.")
}
)
insert.value(field, value?.toCottontailValue())
}

return try {
Expand Down Expand Up @@ -106,29 +83,7 @@ class StructDescriptorWriter(field: Schema.Field<*, StructDescriptor>, connectio
when (it) {
0 -> UuidValue(item.id)
1 -> item.retrievableId?.let { v -> UuidValue(v) }
else -> when (val v = values[it - 2].second) {
null -> null
is UUID -> UuidValue(v)
is String -> StringValue(v)
is Value.String -> StringValue(v.value)
is Boolean -> BooleanValue(v)
is Value.Boolean -> BooleanValue(v.value)
is Byte -> ByteValue(v)
is Value.Byte -> ByteValue(v.value)
is Short -> ShortValue(v)
is Value.Short -> ShortValue(v.value)
is Int -> IntValue(v)
is Value.Int -> IntValue(v.value)
is Long -> LongValue(v)
is Value.Long -> LongValue(v.value)
is Float -> FloatValue(v)
is Value.Float -> FloatValue(v.value)
is Double -> DoubleValue(v)
is Value.Double -> DoubleValue(v.value)
is Date -> DateValue(v)
is Value.DateTime -> DateValue(v.value)
else -> throw IllegalArgumentException("Unsupported type ${v::class.simpleName} for struct descriptor.")
}
else -> values[it - 2].second?.toCottontailValue()
}
}
insert.any(*inserts)
Expand Down Expand Up @@ -163,7 +118,7 @@ class StructDescriptorWriter(field: Schema.Field<*, StructDescriptor>, connectio

/* Append values. */
for ((field, value) in item.values()) {
update.any(field to value)
update.any(field to value?.toCottontailValue())
}

/* Update values. */
Expand Down
Loading

0 comments on commit ce53093

Please sign in to comment.