Open jeggy opened 3 years ago
For the specific case of Exposed's DAO, it'd be nice to only use the properties defined on the class itself using KClass<T>.declaredMemberProperties
. While this does mean you lose some benefits of inheritance, there exist solutions to it, e.g.
open class A {
open val x: Int = 1
}
class B : A() {
override val x: Int // Redeclares x, but doesn't redefine it, meaning it acts as effectively a no-op and still shows up in declaredMemberProperties
get() = super.x
}
This way, properties of Entity<T>
are not included unless expressly so, fixing a lot of the issues currently happening with Exposed.
Here's an example error of when using a Exposed class:
Exception in thread "main" com.apurebase.kgraphql.schema.SchemaException: Generic types are not supported by GraphQL, found kotlin.collections.Map<org.jetbrains.exposed.sql.Expression<*>, kotlin.Int>
thrown from SchemaCompilation.kt:168Instead of throwing this error, it would be great to provide a error message which recursively provides full information of exactly where this issue is coming from.
In a Exposed sample, the reason would be because of the type is extending the
Entity<Int>
type, and a field on this class is ResultRow and it's here the fieldfieldIndex
of the typeMap<Expression<*>, Int>
lies, which is causing this to fail.