All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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