Skip to content

Commit

Permalink
Add linting via kotliner #1137
Browse files Browse the repository at this point in the history
  • Loading branch information
jnfeinstein authored and Tapac committed Apr 18, 2021
1 parent 75b6ad5 commit 98bdca8
Show file tree
Hide file tree
Showing 151 changed files with 1,407 additions and 1,354 deletions.
2 changes: 2 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[*.{kt,kts}]
disabled_rules=filename,no-wildcard-imports
3 changes: 3 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
plugins {
kotlin("jvm") version "1.4.32" apply true
id("io.github.gradle-nexus.publish-plugin") apply true
id("org.jmailen.kotlinter") version "3.3.0"
}

allprojects {
apply(plugin = "org.jmailen.kotlinter")

if (this.name != "exposed-tests" && this != rootProject) {
apply(from = rootProject.file("buildScripts/gradle/publishing.gradle.kts"))
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.jetbrains.exposed.dao.id

open class EntityID<T:Comparable<T>> protected constructor(val table: IdTable<T>, id: T?) : Comparable<EntityID<T>> {
constructor(id:T, table: IdTable<T>) : this(table, id)
open class EntityID<T : Comparable<T>> protected constructor(val table: IdTable<T>, id: T?) : Comparable<EntityID<T>> {
constructor(id: T, table: IdTable<T>) : this(table, id)
var _value: Any? = id
val value: T get() {
if (_value == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,31 @@ import org.jetbrains.exposed.sql.Table
import java.util.*

interface EntityIDFactory {
fun <T:Comparable<T>> createEntityID(value: T, table: IdTable<T>) : EntityID<T>
fun <T : Comparable<T>> createEntityID(value: T, table: IdTable<T>): EntityID<T>
}

object EntityIDFunctionProvider {
private val factory : EntityIDFactory
private val factory: EntityIDFactory
init {
factory = ServiceLoader.load(EntityIDFactory::class.java, EntityIDFactory::class.java.classLoader).firstOrNull()
?: object : EntityIDFactory {
override fun <T : Comparable<T>> createEntityID(value: T, table: IdTable<T>): EntityID<T> {
return EntityID(value, table)
}
?: object : EntityIDFactory {
override fun <T : Comparable<T>> createEntityID(value: T, table: IdTable<T>): EntityID<T> {
return EntityID(value, table)
}
}
}

@Suppress("UNCHECKED_CAST")
fun <T:Comparable<T>> createEntityID(value: T, table: IdTable<T>) = factory.createEntityID(value, table)
fun <T : Comparable<T>> createEntityID(value: T, table: IdTable<T>) = factory.createEntityID(value, table)
}

/**
* Base class for an identity table which could be referenced from another tables.
*
* @param name table name, by default name will be resolved from a class name with "Table" suffix removed (if present)
*/
abstract class IdTable<T:Comparable<T>>(name: String = ""): Table(name) {
abstract val id : Column<EntityID<T>>
abstract class IdTable<T : Comparable<T>>(name: String = "") : Table(name) {
abstract val id: Column<EntityID<T>>
}

/**
Expand Down Expand Up @@ -66,7 +66,7 @@ open class LongIdTable(name: String = "", columnName: String = "id") : IdTable<L
*/
open class UUIDTable(name: String = "", columnName: String = "id") : IdTable<UUID>(name) {
override val id: Column<EntityID<UUID>> = uuid(columnName)
.autoGenerate()
.entityId()
.autoGenerate()
.entityId()
override val primaryKey by lazy { super.primaryKey ?: PrimaryKey(id) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,4 @@ abstract class AbstractQuery<T : AbstractQuery<T>>(targets: List<Table>) : Sized
return hasNext!!
}
}
}
}
49 changes: 24 additions & 25 deletions exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Alias.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package org.jetbrains.exposed.sql


class Alias<out T:Table>(val delegate: T, val alias: String) : Table() {
class Alias<out T : Table>(val delegate: T, val alias: String) : Table() {

override val tableName: String get() = alias

val tableNameWithAlias: String = "${delegate.tableName} AS $alias"

private fun <T:Any?> Column<T>.clone() = Column<T>(this@Alias, name, columnType)
private fun <T : Any?> Column<T>.clone() = Column<T>(this@Alias, name, columnType)

fun <R> originalColumn(column: Column<R>) : Column<R>? {
fun <R> originalColumn(column: Column<R>): Column<R>? {
@Suppress("UNCHECKED_CAST")
return if (column.table == this)
delegate.columns.first { column.name == it.name } as Column<R>
Expand All @@ -35,15 +34,15 @@ class Alias<out T:Table>(val delegate: T, val alias: String) : Table() {
override fun hashCode(): Int = tableNameWithAlias.hashCode()

@Suppress("UNCHECKED_CAST")
operator fun <T: Any?> get(original: Column<T>): Column<T> =
operator fun <T : Any?> get(original: Column<T>): Column<T> =
delegate.columns.find { it == original }?.let { it.clone() as? Column<T> }
?: error("Column not found in original table")
}

class ExpressionAlias<T>(val delegate: Expression<T>, val alias: String) : Expression<T>() {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append(delegate).append(" $alias") }

fun aliasOnlyExpression() : Expression<T> {
fun aliasOnlyExpression(): Expression<T> {
return if (delegate is ExpressionWithColumnType<T>) {
object : Function<T>(delegate.columnType) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append(alias) }
Expand All @@ -56,14 +55,14 @@ class ExpressionAlias<T>(val delegate: Expression<T>, val alias: String) : Expre
}
}

class QueryAlias(val query: AbstractQuery<*>, val alias: String): ColumnSet() {
class QueryAlias(val query: AbstractQuery<*>, val alias: String) : ColumnSet() {

override fun describe(s: Transaction, queryBuilder: QueryBuilder) = queryBuilder{
override fun describe(s: Transaction, queryBuilder: QueryBuilder) = queryBuilder {
append("(")
query.prepareSQL(queryBuilder)
append(") ", alias)
}

override val columns: List<Column<*>>
get() = query.set.source.columns.filter { it in query.set.fields }.map { it.clone() }

Expand All @@ -79,40 +78,40 @@ class QueryAlias(val query: AbstractQuery<*>, val alias: String): ColumnSet() {
return expressionAlias.delegate.alias("$alias.${expressionAlias.alias}").aliasOnlyExpression()
}

override fun join(otherTable: ColumnSet, joinType: JoinType, onColumn: Expression<*>?, otherColumn: Expression<*>?, additionalConstraint: (SqlExpressionBuilder.()->Op<Boolean>)? ) : Join =
Join (this, otherTable, joinType, onColumn, otherColumn, additionalConstraint)
override fun join(otherTable: ColumnSet, joinType: JoinType, onColumn: Expression<*>?, otherColumn: Expression<*>?, additionalConstraint: (SqlExpressionBuilder.() -> Op<Boolean>)?): Join =
Join(this, otherTable, joinType, onColumn, otherColumn, additionalConstraint)

override infix fun innerJoin(otherTable: ColumnSet) : Join = Join (this, otherTable, JoinType.INNER)
override infix fun innerJoin(otherTable: ColumnSet): Join = Join(this, otherTable, JoinType.INNER)

override infix fun leftJoin(otherTable: ColumnSet) : Join = Join (this, otherTable, JoinType.LEFT)
override infix fun leftJoin(otherTable: ColumnSet): Join = Join(this, otherTable, JoinType.LEFT)

override infix fun rightJoin(otherTable: ColumnSet): Join = Join (this, otherTable, JoinType.RIGHT)
override infix fun rightJoin(otherTable: ColumnSet): Join = Join(this, otherTable, JoinType.RIGHT)

override infix fun fullJoin(otherTable: ColumnSet): Join = Join (this, otherTable, JoinType.FULL)
override infix fun fullJoin(otherTable: ColumnSet): Join = Join(this, otherTable, JoinType.FULL)

override infix fun crossJoin(otherTable: ColumnSet) : Join = Join (this, otherTable, JoinType.CROSS)
override infix fun crossJoin(otherTable: ColumnSet): Join = Join(this, otherTable, JoinType.CROSS)

private fun <T:Any?> Column<T>.clone() = Column<T>(table.alias(alias), name, columnType)
private fun <T : Any?> Column<T>.clone() = Column<T>(table.alias(alias), name, columnType)
}

fun <T:Table> T.alias(alias: String) = Alias(this, alias)
fun <T:AbstractQuery<*>> T.alias(alias: String) = QueryAlias(this, alias)
fun <T : Table> T.alias(alias: String) = Alias(this, alias)
fun <T : AbstractQuery<*>> T.alias(alias: String) = QueryAlias(this, alias)
fun <T> Expression<T>.alias(alias: String) = ExpressionAlias(this, alias)

fun Join.joinQuery(on: (SqlExpressionBuilder.(QueryAlias)->Op<Boolean>), joinType: JoinType = JoinType.INNER, joinPart: () -> AbstractQuery<*>): Join {
fun Join.joinQuery(on: (SqlExpressionBuilder.(QueryAlias) -> Op<Boolean>), joinType: JoinType = JoinType.INNER, joinPart: () -> AbstractQuery<*>): Join {
val qAlias = joinPart().alias("q${joinParts.count { it.joinPart is QueryAlias }}")
return join (qAlias, joinType, additionalConstraint = { on(qAlias) } )
return join(qAlias, joinType, additionalConstraint = { on(qAlias) })
}

fun Table.joinQuery(on: (SqlExpressionBuilder.(QueryAlias)->Op<Boolean>), joinType: JoinType = JoinType.INNER, joinPart: () -> AbstractQuery<*>)
= Join(this).joinQuery(on, joinType, joinPart)
fun Table.joinQuery(on: (SqlExpressionBuilder.(QueryAlias) -> Op<Boolean>), joinType: JoinType = JoinType.INNER, joinPart: () -> AbstractQuery<*>) =
Join(this).joinQuery(on, joinType, joinPart)

val Join.lastQueryAlias: QueryAlias? get() = joinParts.map { it.joinPart as? QueryAlias }.firstOrNull()

fun <T:Any> wrapAsExpression(query: AbstractQuery<*>) = object : Expression<T?>() {
fun <T : Any> wrapAsExpression(query: AbstractQuery<*>) = object : Expression<T?>() {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
append("(")
query.prepareSQL(this)
append(")")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -405,8 +405,6 @@ class DecimalColumnType(
result = 31 * result + scale
return result
}


}

// Character columns
Expand Down Expand Up @@ -467,7 +465,6 @@ abstract class StringColumnType(
return result
}


companion object {
private val charactersToEscape = mapOf(
'\'' to "\'\'",
Expand All @@ -476,9 +473,6 @@ abstract class StringColumnType(
'\n' to "\\n"
)
}



}

/**
Expand Down Expand Up @@ -521,8 +515,6 @@ open class CharColumnType(
result = 31 * result + colLength
return result
}


}

/**
Expand Down Expand Up @@ -774,7 +766,8 @@ class EnumerationColumnType<T : Enum<T>>(
*/
class EnumerationNameColumnType<T : Enum<T>>(
/** Returns the enum class used in this column type. */
val klass: KClass<T>, colLength: Int
val klass: KClass<T>,
colLength: Int
) : VarCharColumnType(colLength) {
@Suppress("UNCHECKED_CAST")
override fun valueFromDB(value: Any): T = when (value) {
Expand Down Expand Up @@ -814,5 +807,5 @@ class EnumerationNameColumnType<T : Enum<T>>(
* Marker interface for date/datetime related column types.
**/
interface IDateColumnType {
val hasTimePart : Boolean
val hasTimePart: Boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,37 @@ abstract class CompositeColumn<T> : Expression<T>() {
*
* @return key - real column, value - its parsed value
*/
abstract fun getRealColumnsWithValues(compositeValue : T) : Map<Column<*>, Any?>
abstract fun getRealColumnsWithValues(compositeValue: T): Map<Column<*>, Any?>

/**
* Return list of real columns, wrapped by this composite column
*/
abstract fun getRealColumns() : List<Column<*>>
abstract fun getRealColumns(): List<Column<*>>

/**
* Restore the composite value from its parts loaded from the DB
*/
abstract fun restoreValueFromParts(parts : Map<Column<*>, Any?>) : T
abstract fun restoreValueFromParts(parts: Map<Column<*>, Any?>): T

override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
getRealColumns().appendTo { +it }
}

}

/**
* Extension of [CompositeColumn] which consists of two columns
*/
abstract class BiCompositeColumn<C1, C2, T>(
protected val column1: Column<C1>,
protected val column2: Column<C2>,
val transformFromValue : (T) -> Pair<C1?, C2?>,
val transformToValue: (Any?, Any?) -> T
protected val column1: Column<C1>,
protected val column2: Column<C2>,
val transformFromValue: (T) -> Pair<C1?, C2?>,
val transformToValue: (Any?, Any?) -> T
) : CompositeColumn<T>() {

override fun getRealColumns(): List<Column<*>> = listOf(column1, column2)

override fun getRealColumnsWithValues(compositeValue: T): Map<Column<*>, Any?> {
require (compositeValue != null || nullable) {
require(compositeValue != null || nullable) {
"Can't set null value to non-nullable ${this::class.simpleName} column"
}
val (v1, v2) = transformFromValue(compositeValue)
Expand All @@ -59,5 +58,4 @@ abstract class BiCompositeColumn<C1, C2, T>(
}
return result as T
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ enum class ReferenceOption {
* Represents a foreign key constraint.
*/
data class ForeignKeyConstraint(
val target: Column<*>,
val from: Column<*>,
private val onUpdate: ReferenceOption?,
private val onDelete: ReferenceOption?,
private val name: String?
val target: Column<*>,
val from: Column<*>,
private val onUpdate: ReferenceOption?,
private val onDelete: ReferenceOption?,
private val name: String?
) : DdlAware {
private val tx: Transaction
get() = TransactionManager.current()
Expand All @@ -76,7 +76,7 @@ data class ForeignKeyConstraint(
/** Name of this constraint. */
val fkName: String
get() = tx.db.identifierManager.cutIfNecessaryAndQuote(
name ?: "fk_${from.table.tableNameWithoutScheme}_${from.name}_${target.name}"
name ?: "fk_${from.table.tableNameWithoutScheme}_${from.name}_${target.name}"
).inProperCase()
internal val foreignKeyPart: String get() = buildString {
if (fkName.isNotBlank()) {
Expand Down
Loading

0 comments on commit 98bdca8

Please sign in to comment.