
com.sxtanna.database.task.builder.Create.kt Maven / Gradle / Ivy
package com.sxtanna.database.task.builder
import com.sxtanna.database.ext.co
import com.sxtanna.database.struct.Resolver
import com.sxtanna.database.struct.base.Duo
import com.sxtanna.database.struct.obj.SqlType
import com.sxtanna.database.task.builder.base.BuilderStatement
import com.sxtanna.database.type.base.SqlObject
import kotlin.reflect.full.declaredMemberProperties
data class Create(override val table : String) : BuilderStatement() {
val columns = mutableListOf>()
private var inited = false
fun co(name : String, type : SqlType) = apply { columns.add(name co type) }
@JvmSynthetic
fun co(name : String, type : () -> SqlType) = apply { columns.add(name co type()) }
fun cos(vararg columns : Duo) = apply { columns.forEach { co(it.name, it.value) } }
@JvmSynthetic
inline fun init() = init(T::class.java)
fun init(clazz : Class) = apply {
if (inited) return@apply
columns.addAll(clazz.kotlin.declaredMemberProperties.map { Duo(it.name, Resolver[it]) })
inited = true
}
companion object {
@JvmStatic
fun table(table : String) = Create(table)
inline fun from(table : String = T::class.simpleName!!) = Create(table).init()
@JvmStatic
@JvmOverloads
fun from(clazz : Class, table : String = clazz.simpleName!!) = Create(table).init(clazz)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy