Skip to content

Remove DBEntity #36

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions sample/src/commonMain/kotlin/com/ctrip/sqllin/sample/Sample.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@ package com.ctrip.sqllin.sample
import com.ctrip.sqllin.driver.DatabaseConfiguration
import com.ctrip.sqllin.dsl.Database
import com.ctrip.sqllin.dsl.annotation.DBRow
import com.ctrip.sqllin.dsl.DBEntity
import com.ctrip.sqllin.dsl.sql.clause.*
import com.ctrip.sqllin.dsl.sql.clause.OrderByWay.DESC
import com.ctrip.sqllin.dsl.sql.statement.SelectStatement
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable

/**
Expand Down Expand Up @@ -97,26 +95,20 @@ object Sample {
data class Person(
val age: Int?,
val name: String?,
) : DBEntity<Person> {
override fun kSerializer(): KSerializer<Person> = serializer()
}
)

@DBRow("transcript")
@Serializable
data class Transcript(
val name: String?,
val math: Int,
val english: Int,
) : DBEntity<Transcript> {
override fun kSerializer(): KSerializer<Transcript> = serializer()
}
)

@Serializable
data class Student(
val name: String?,
val age: Int?,
val math: Int,
val english: Int,
) : DBEntity<Student> {
override fun kSerializer(): KSerializer<Student> = serializer()
}
)
5 changes: 1 addition & 4 deletions sqllin-dsl/doc/getting-start-cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ override fun onDestroy() {
在 _sqllin-dsl_ 中,你可以直接插入或查找对象。所以,你需要使用正确的方式定义你的 data class,比如:

```kotlin
import com.ctrip.sqllin.dsl.DBEntity
import com.ctrip.sqllin.dsl.annotation.DBRow
import kotlinx.serialization.Serializable

Expand All @@ -140,9 +139,7 @@ import kotlinx.serialization.Serializable
data class Person(
val name: String,
val age: Int,
) : DBEntity<Person> {
override fun kSerializer(): KSerializer<Person> = serializer()
}
)
```
你定义的 DBEntity 的属性名应与数据库表的列名相对应。DBEntity 不应该拥有名字与表中的所有列名均不相同的属性,但是
DBEntity 的属性数量可以比表中列的数量少。
Expand Down
5 changes: 1 addition & 4 deletions sqllin-dsl/doc/getting-start.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,6 @@ override fun onDestroy() {
In _sqllin-dsl_, you can insert and query objects directly. So, you need to use the correct way to define your data class. For example:

```kotlin
import com.ctrip.sqllin.dsl.DBEntity
import com.ctrip.sqllin.dsl.annotation.DBRow
import kotlinx.serialization.Serializable

Expand All @@ -148,9 +147,7 @@ import kotlinx.serialization.Serializable
data class Person(
val name: String,
val age: Int,
) : DBEntity<Person> {
override fun kSerializer(): KSerializer<Person> = serializer()
}
)
```

Your DBEntity's property names should same with the database table's column names. The DBEntity cannot have properties with names different from all
Expand Down
29 changes: 0 additions & 29 deletions sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DBEntity.kt

This file was deleted.

64 changes: 32 additions & 32 deletions sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/Database.kt
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public class Database(
executeEngine.addStatement(statement)
}

private fun <T : DBEntity<T>> addSelectStatement(statement: SelectStatement<T>) {
private fun <T> addSelectStatement(statement: SelectStatement<T>) {
if (unionSelectStatementGroupStack.isNotEmpty)
(unionSelectStatementGroupStack.top as UnionSelectStatementGroup<T>).addSelectStatement(statement)
else
Expand All @@ -128,19 +128,19 @@ public class Database(
* Insert.
*/

public infix fun <T : DBEntity<T>> Table<T>.INSERT(entities: Iterable<T>) {
public infix fun <T> Table<T>.INSERT(entities: Iterable<T>) {
val statement = Insert.insert(this, databaseConnection, entities)
addStatement(statement)
}

public infix fun <T : DBEntity<T>> Table<T>.INSERT(entity: T): Unit =
public infix fun <T> Table<T>.INSERT(entity: T): Unit =
INSERT(listOf(entity))

/**
* Update.
*/

public infix fun <T : DBEntity<T>> Table<T>.UPDATE(clause: SetClause<T>): UpdateStatementWithoutWhereClause<T> =
public infix fun <T> Table<T>.UPDATE(clause: SetClause<T>): UpdateStatementWithoutWhereClause<T> =
transactionStatementsGroup?.let {
val statement = Update.update(this, databaseConnection, it, clause)
it addStatement statement
Expand All @@ -158,7 +158,7 @@ public class Database(
addStatement(statement)
}

public infix fun <T : DBEntity<T>> Table<T>.DELETE(clause: WhereClause<T>) {
public infix fun <T> Table<T>.DELETE(clause: WhereClause<T>) {
val statement = Delete.delete(this, databaseConnection, clause)
addStatement(statement)
}
Expand All @@ -170,13 +170,13 @@ public class Database(
/**
* Select with no any clause.
*/
public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT(x: X): FinalSelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT(x: X): FinalSelectStatement<T> =
select(getKSerializer(), false)

public inline infix fun <reified T :DBEntity<T>> Table<T>.SELECT_DISTINCT(x: X): FinalSelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT_DISTINCT(x: X): FinalSelectStatement<T> =
select(getKSerializer(), true)

public fun <T : DBEntity<T>> Table<T>.select(serializer: KSerializer<T>, isDistinct: Boolean): FinalSelectStatement<T> {
public fun <T> Table<T>.select(serializer: KSerializer<T>, isDistinct: Boolean): FinalSelectStatement<T> {
val container = getSelectStatementGroup()
val statement = Select.select(this, isDistinct, serializer, databaseConnection, container)
addSelectStatement(statement)
Expand All @@ -186,13 +186,13 @@ public class Database(
/**
* Receive the 'WHERE' clause.
*/
public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT(clause: WhereClause<T>): WhereSelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT(clause: WhereClause<T>): WhereSelectStatement<T> =
select(getKSerializer(), clause, false)

public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT_DISTINCT(clause: WhereClause<T>): WhereSelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT_DISTINCT(clause: WhereClause<T>): WhereSelectStatement<T> =
select(getKSerializer(), clause, true)

public fun <T : DBEntity<T>> Table<T>.select(serializer: KSerializer<T>, clause: WhereClause<T>, isDistinct: Boolean): WhereSelectStatement<T> {
public fun <T> Table<T>.select(serializer: KSerializer<T>, clause: WhereClause<T>, isDistinct: Boolean): WhereSelectStatement<T> {
val container = getSelectStatementGroup()
val statement = Select.select(this, clause, isDistinct, serializer, databaseConnection, container)
addSelectStatement(statement)
Expand All @@ -202,13 +202,13 @@ public class Database(
/**
* Receive the 'ORDER BY' clause.
*/
public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT(clause: OrderByClause<T>): OrderBySelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT(clause: OrderByClause<T>): OrderBySelectStatement<T> =
select(getKSerializer(), clause, false)

public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT_DISTINCT(clause: OrderByClause<T>): OrderBySelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT_DISTINCT(clause: OrderByClause<T>): OrderBySelectStatement<T> =
select(getKSerializer(), clause, true)

public fun <T : DBEntity<T>> Table<T>.select(serializer: KSerializer<T>, clause: OrderByClause<T>, isDistinct: Boolean): OrderBySelectStatement<T> {
public fun <T> Table<T>.select(serializer: KSerializer<T>, clause: OrderByClause<T>, isDistinct: Boolean): OrderBySelectStatement<T> {
val container = getSelectStatementGroup()
val statement = Select.select(this, clause, isDistinct, serializer, databaseConnection, container)
addSelectStatement(statement)
Expand All @@ -218,13 +218,13 @@ public class Database(
/**
* Receive the 'LIMIT' clause.
*/
public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT(clause: LimitClause<T>): LimitSelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT(clause: LimitClause<T>): LimitSelectStatement<T> =
select(getKSerializer(), clause, false)

public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT_DISTINCT(clause: LimitClause<T>): LimitSelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT_DISTINCT(clause: LimitClause<T>): LimitSelectStatement<T> =
select(getKSerializer(), clause, true)

public fun <T : DBEntity<T>> Table<T>.select(serializer: KSerializer<T>, clause: LimitClause<T>, isDistinct: Boolean): LimitSelectStatement<T> {
public fun <T> Table<T>.select(serializer: KSerializer<T>, clause: LimitClause<T>, isDistinct: Boolean): LimitSelectStatement<T> {
val container = getSelectStatementGroup()
val statement = Select.select(this, clause, isDistinct, serializer, databaseConnection, container)
addSelectStatement(statement)
Expand All @@ -234,20 +234,20 @@ public class Database(
/**
* Receive the 'GROUP BY' clause.
*/
public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT(clause: GroupByClause<T>): GroupBySelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT(clause: GroupByClause<T>): GroupBySelectStatement<T> =
select(getKSerializer(), clause, false)

public inline infix fun <reified T : DBEntity<T>> Table<T>.SELECT_DISTINCT(clause: GroupByClause<T>): GroupBySelectStatement<T> =
public inline infix fun <reified T> Table<T>.SELECT_DISTINCT(clause: GroupByClause<T>): GroupBySelectStatement<T> =
select(getKSerializer(), clause, true)

public fun <T : DBEntity<T>> Table<T>.select(serializer: KSerializer<T>, clause: GroupByClause<T>, isDistinct: Boolean): GroupBySelectStatement<T> {
public fun <T> Table<T>.select(serializer: KSerializer<T>, clause: GroupByClause<T>, isDistinct: Boolean): GroupBySelectStatement<T> {
val container = getSelectStatementGroup()
val statement = Select.select(this, clause, isDistinct, serializer, databaseConnection, container)
addSelectStatement(statement)
return statement
}

public inline fun <reified T : DBEntity<T>> getKSerializer(): KSerializer<T> = EmptySerializersModule().serializer()
public inline fun <reified T> getKSerializer(): KSerializer<T> = EmptySerializersModule().serializer()

/**
* The 'UNION' clause of Select.
Expand All @@ -257,7 +257,7 @@ public class Database(

private fun getSelectStatementGroup(): StatementContainer = unionSelectStatementGroupStack.top ?: transactionStatementsGroup ?: executeEngine

public inline fun <T : DBEntity<T>> Table<T>.UNION(block: Table<T>.(Table<T>) -> Unit): FinalSelectStatement<T> {
public inline fun <T> Table<T>.UNION(block: Table<T>.(Table<T>) -> Unit): FinalSelectStatement<T> {
beginUnion<T>()
var selectStatement: SelectStatement<T>? = null
try {
Expand All @@ -269,7 +269,7 @@ public class Database(
}
}

public inline fun <T : DBEntity<T>> Table<T>.UNION_ALL(block: Table<T>.(Table<T>) -> Unit): FinalSelectStatement<T> {
public inline fun <T> Table<T>.UNION_ALL(block: Table<T>.(Table<T>) -> Unit): FinalSelectStatement<T> {
beginUnion<T>()
var selectStatement: SelectStatement<T>? = null
try {
Expand All @@ -281,16 +281,16 @@ public class Database(
}
}

public fun <T : DBEntity<T>> beginUnion() {
public fun <T> beginUnion() {
unionSelectStatementGroupStack.push(UnionSelectStatementGroup<T>())
}

public fun <T : DBEntity<T>> createUnionSelectStatement(isUnionAll: Boolean): FinalSelectStatement<T> {
public fun <T> createUnionSelectStatement(isUnionAll: Boolean): FinalSelectStatement<T> {
check(unionSelectStatementGroupStack.isNotEmpty) { "Please invoke the 'beginUnion' before you invoke this function!!!" }
return (unionSelectStatementGroupStack.top as UnionSelectStatementGroup<T>).unionStatements(isUnionAll)
}

public fun <T : DBEntity<T>> endUnion(selectStatement: SelectStatement<T>?) {
public fun <T> endUnion(selectStatement: SelectStatement<T>?) {
unionSelectStatementGroupStack.pop()
selectStatement?.let { addSelectStatement(it) }
}
Expand All @@ -299,13 +299,13 @@ public class Database(
* Receive the 'JOIN' clause.
*/

public inline infix fun <T : DBEntity<T>, reified R : DBEntity<R>> Table<T>.SELECT(clause: JoinClause<R>): JoinStatementWithoutCondition<R> =
public inline infix fun <T, reified R> Table<T>.SELECT(clause: JoinClause<R>): JoinStatementWithoutCondition<R> =
select(getKSerializer(), clause, false)

public inline infix fun <T : DBEntity<T>, reified R : DBEntity<R>> Table<T>.SELECT_DISTINCT(clause: JoinClause<R>): JoinStatementWithoutCondition<R> =
public inline infix fun <T, reified R> Table<T>.SELECT_DISTINCT(clause: JoinClause<R>): JoinStatementWithoutCondition<R> =
select(getKSerializer(), clause, true)

public fun <T : DBEntity<T>, R : DBEntity<R>> Table<T>.select(serializer: KSerializer<R>, clause: JoinClause<R>, isDistinct: Boolean): JoinStatementWithoutCondition<R> {
public fun <T, R> Table<T>.select(serializer: KSerializer<R>, clause: JoinClause<R>, isDistinct: Boolean): JoinStatementWithoutCondition<R> {
val container = getSelectStatementGroup()
return Select.select(this, clause, isDistinct, serializer, databaseConnection, container, ::addSelectStatement)
}
Expand All @@ -314,13 +314,13 @@ public class Database(
* Receive the natural join clause(includes 'NATURAL LEFT OUTER JOIN' and 'NATURAL INNER JOIN').
*/

public inline infix fun <T : DBEntity<T>, reified R : DBEntity<R>> Table<T>.SELECT(clause: NaturalJoinClause<R>): JoinSelectStatement<R> =
public inline infix fun <T, reified R> Table<T>.SELECT(clause: NaturalJoinClause<R>): JoinSelectStatement<R> =
select(getKSerializer(), clause, false)

public inline infix fun <T : DBEntity<T>, reified R : DBEntity<R>> Table<T>.SELECT_DISTINCT(clause: NaturalJoinClause<R>): JoinSelectStatement<R> =
public inline infix fun <T, reified R> Table<T>.SELECT_DISTINCT(clause: NaturalJoinClause<R>): JoinSelectStatement<R> =
select(getKSerializer(), clause, true)

public fun <T : DBEntity<T>, R : DBEntity<R>> Table<T>.select(serializer: KSerializer<R>, clause: NaturalJoinClause<R>, isDistinct: Boolean): JoinSelectStatement<R> {
public fun <T, R> Table<T>.select(serializer: KSerializer<R>, clause: NaturalJoinClause<R>, isDistinct: Boolean): JoinSelectStatement<R> {
val container = getSelectStatementGroup()
val statement = Select.select(this, clause, isDistinct, serializer, databaseConnection, container)
addSelectStatement(statement)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@

package com.ctrip.sqllin.dsl.sql

import com.ctrip.sqllin.dsl.DBEntity
import kotlinx.serialization.KSerializer

/**
* SQL table
* @author yaqiao
*/

public abstract class Table<T : DBEntity<T>>(
public abstract class Table<T>(
internal val tableName: String,
)
) {
public abstract fun kSerializer(): KSerializer<T>
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package com.ctrip.sqllin.dsl.sql.clause

import com.ctrip.sqllin.dsl.DBEntity
import com.ctrip.sqllin.dsl.sql.Table
import com.ctrip.sqllin.dsl.sql.statement.JoinSelectStatement
import com.ctrip.sqllin.dsl.sql.statement.JoinStatementWithoutCondition
Expand All @@ -26,7 +25,7 @@ import com.ctrip.sqllin.dsl.sql.statement.JoinStatementWithoutCondition
* @author yaqiao
*/

public sealed class BaseJoinClause<R : DBEntity<R>>(private vararg val tables: Table<*>) : SelectClause<R> {
public sealed class BaseJoinClause<R>(private vararg val tables: Table<*>) : SelectClause<R> {

internal abstract val clauseName: String

Expand All @@ -41,15 +40,15 @@ public sealed class BaseJoinClause<R : DBEntity<R>>(private vararg val tables: T
}
}

public sealed class NaturalJoinClause<R : DBEntity<R>>(vararg tables: Table<*>) : BaseJoinClause<R>(*tables)
public sealed class NaturalJoinClause<R>(vararg tables: Table<*>) : BaseJoinClause<R>(*tables)

public sealed class JoinClause<R : DBEntity<R>>(vararg tables: Table<*>) : BaseJoinClause<R>(*tables)
public sealed class JoinClause<R>(vararg tables: Table<*>) : BaseJoinClause<R>(*tables)

public infix fun <R : DBEntity<R>> JoinStatementWithoutCondition<R>.ON(condition: SelectCondition): JoinSelectStatement<R> =
public infix fun <R> JoinStatementWithoutCondition<R>.ON(condition: SelectCondition): JoinSelectStatement<R> =
convertToJoinSelectStatement(condition)

public inline infix fun <R : DBEntity<R>> JoinStatementWithoutCondition<R>.USING(clauseElement: ClauseElement): JoinSelectStatement<R> =
public inline infix fun <R> JoinStatementWithoutCondition<R>.USING(clauseElement: ClauseElement): JoinSelectStatement<R> =
USING(listOf(clauseElement))

public infix fun <R : DBEntity<R>> JoinStatementWithoutCondition<R>.USING(clauseElements: Iterable<ClauseElement>): JoinSelectStatement<R> =
public infix fun <R> JoinStatementWithoutCondition<R>.USING(clauseElements: Iterable<ClauseElement>): JoinSelectStatement<R> =
convertToJoinSelectStatement(clauseElements)
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,9 @@

package com.ctrip.sqllin.dsl.sql.clause

import com.ctrip.sqllin.dsl.DBEntity

/**
* Abstract clause, include 'where', 'update set' and more
* @author yaqiao
*/

public sealed interface Clause<T : DBEntity<T>>
public sealed interface Clause<T>
Loading