Skip to content
This repository has been archived by the owner on May 25, 2022. It is now read-only.

Commit

Permalink
feat(sca): init two beans for bean2sql script
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Apr 22, 2022
1 parent de128a5 commit 8840d9e
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 10 deletions.
Expand Up @@ -10,6 +10,7 @@ data class CompositionDependency(
@Sql("name") val name: String,
@Sql("version") val version: String,
@Sql("parent_id") val parentId: String,
@Sql("package_manager") val packageManager: String,
@Sql("dep_name") val dpeName: String,
@Sql("dep_group") val depGroup: String,
@Sql("dep_artifact") val depArtifact: String,
Expand All @@ -21,6 +22,8 @@ data class CompositionDependency(
annotation class Sql(val value: String)

class Bean2Sql {
private val STEP = 100

fun bean2Sql(datas: List<Any>): String {
val clazz = datas[0]::class

Expand All @@ -39,12 +42,20 @@ class Bean2Sql {
}
}

val valueString = values.joinToString {
if (it is String) {
"'${it.replace("'", "''")}'"
} else it.toString()
}
val chunkedByColumn = values.chunked(columns.size)
val chunked = chunkedByColumn.chunked(STEP)
return chunked.joinToString("\n") { list ->
val valueString = list.joinToString(",") {
val value = it.joinToString(transform = { item ->
if (item is String) {
"'${item.replace("'", "''")}'"
} else item.toString()
})

"($value)"
}

return "insert into $table(${columns.joinToString()}) values($valueString);"
"insert into $table(${columns.joinToString()}) values $valueString;"
}
}
}
Expand Up @@ -5,16 +5,45 @@ import kotlin.test.assertEquals

internal class Bean2SqlTest {
@Test
fun split_when_bean_sql() {
fun normal_bean() {
val samples: MutableList<CompositionDependency> = mutableListOf()
samples += CompositionDependency("12", "", "", "", "", "", "", "", "", "", "")

val bean2Sql = Bean2Sql()
val sqls = bean2Sql.bean2Sql(samples)

val splits = sqls.split("\n")
assertEquals(1, splits.size)
assertEquals("insert into project_composition_dependencies(dep_artifact, dep_group, dep_metadata, dep_source, dep_name, id, name, package_manager, parent_id, system_id, version) values ('', '', '', '', '', '1', '', '', '', '', ''),('', '', '', '', '', '2', '', '', '', '', '');",
sqls)
}

@Test
fun two_beans() {
val samples: MutableList<CompositionDependency> = mutableListOf()
samples += CompositionDependency("1", "", "", "", "", "", "", "", "", "", "")
samples += CompositionDependency("2", "", "", "", "", "", "", "", "", "", "")

val bean2Sql = Bean2Sql()
val sqls = bean2Sql.bean2Sql(samples)

val splits = sqls.split("\n")
assertEquals(1, splits.size)
assertEquals("insert into project_composition_dependencies(dep_artifact, dep_group, dep_metadata, dep_source, dep_name, id, name, package_manager, parent_id, system_id, version) values ('', '', '', '', '', '1', '', '', '', '', '','', '', '', '', '', '2', '', '', '', '', '');",
sqls)
}

@Test
fun split_when_beans_more_than_100() {
val samples: MutableList<CompositionDependency> = mutableListOf()
for (i in 0..150) {
samples += CompositionDependency(i.toString(), "", "", "", "", "", "", "", "", "")
samples += CompositionDependency(i.toString(), "", "", "", "", "", "", "", "", "", "")
}

val bean2Sql = Bean2Sql()
val sqls = bean2Sql.bean2Sql(samples)

var splits = sqls.split("\n")
assertEquals(1, splits.size)
val splits = sqls.split("\n")
assertEquals(2, splits.size)
}
}

0 comments on commit 8840d9e

Please sign in to comment.