11package io.github.skydynamic.increment.storage.lib.database
22
33import com.google.gson.Gson
4- import io.github.skydynamic.increment.storage.lib.Interface.IDataBaseManager
4+ import io.github.skydynamic.increment.storage.lib.Interface.IDatabaseManager
55import org.jetbrains.exposed.sql.*
66import org.jetbrains.exposed.sql.Database
77import org.jetbrains.exposed.sql.transactions.transaction
@@ -14,9 +14,9 @@ fun String.toMap(): Map<String, String> {
1414 return if (map is Map <* , * >) map.mapKeys { it.key.toString() }.mapValues { it.value.toString() } else emptyMap()
1515}
1616
17- class Database (val databaseManager : IDataBaseManager ) {
17+ class Database (val databaseManager : IDatabaseManager ) {
1818 private val database: Database = Database .connect(
19- url = " jdbc:h2:file:./ ${databaseManager.dataBasePath } /${databaseManager.fileName} " ,
19+ url = " jdbc:h2:file:${databaseManager.databasePath } /${databaseManager.fileName} " ,
2020 driver = " org.h2.Driver"
2121 )
2222
@@ -113,18 +113,27 @@ class Database(val databaseManager: IDataBaseManager) {
113113 return transaction(database) {
114114 StorageInfoTable .selectAll()
115115 .where { StorageInfoTable .collectionUuid eq databaseManager.collectionUuid }
116- .where { StorageInfoTable .name eq name }
117116 .toList()
118- .isNotEmpty()
117+ .any { it[StorageInfoTable .name] == name }
118+ }
119+ }
120+
121+ fun getStorageInfoWithName (name : String ): StorageInfo ? {
122+ return transaction(database) {
123+ StorageInfoTable .selectAll()
124+ .where { StorageInfoTable .collectionUuid eq databaseManager.collectionUuid }
125+ .toList()
126+ .firstOrNull { it[StorageInfoTable .name] == name }
127+ ?.let { StorageInfoTable .getStorageInfo(it) }
119128 }
120129 }
121130
122131 fun getStorageInfoWithNameList (nameList : List <String >): List <StorageInfo > {
123132 return transaction(database) {
124133 StorageInfoTable .selectAll()
125134 .where { StorageInfoTable .collectionUuid eq databaseManager.collectionUuid }
126- .where { StorageInfoTable .name inList nameList }
127135 .toList()
136+ .filter { it[StorageInfoTable .name] in nameList }
128137 .map { StorageInfoTable .getStorageInfo(it) }
129138 }
130139 }
@@ -139,20 +148,21 @@ class Database(val databaseManager: IDataBaseManager) {
139148 }
140149 }
141150
142- fun getAllStorageInfo (): List <ResultRow > {
151+ fun getAllStorageInfo (): List <StorageInfo > {
143152 return transaction(database) {
144153 StorageInfoTable .selectAll()
145154 .where { StorageInfoTable .collectionUuid eq databaseManager.collectionUuid }
146155 .toList()
156+ .map { StorageInfoTable .getStorageInfo(it) }
147157 }
148158 }
149159
150160 fun getIndexFileWithNameList (nameList : List <String >): List <IndexFile > {
151161 return transaction(database) {
152162 IndexFileTable .selectAll()
153163 .where { IndexFileTable .collectionUuid eq databaseManager.collectionUuid }
154- .where { IndexFileTable .name inList nameList }
155164 .toList()
165+ .filter { it[IndexFileTable .name] in nameList }
156166 .map { IndexFileTable .getIndexFile(it) }
157167 }
158168 }
@@ -161,9 +171,8 @@ class Database(val databaseManager: IDataBaseManager) {
161171 val map = transaction(database) {
162172 IndexFileTable .selectAll()
163173 .where { IndexFileTable .collectionUuid eq databaseManager.collectionUuid }
164- .where { IndexFileTable .name eq name }
165174 .toList()
166- .first()
175+ .first { it[ IndexFileTable .name] == name }
167176 .let {
168177 val map = gson.fromJson(it[IndexFileTable .indexFileMap], Map ::class .java)
169178 return @let if (map is Map <* , * >) map.mapKeys { it.key.toString() }.mapValues { it.value.toString() } else emptyMap()
@@ -176,9 +185,8 @@ class Database(val databaseManager: IDataBaseManager) {
176185 return transaction(database) {
177186 FileHashTable .selectAll()
178187 .where { FileHashTable .collectionUuid eq databaseManager.collectionUuid }
179- .where { FileHashTable .name eq name }
180188 .toList()
181- .first()
189+ .first { it[ FileHashTable .name] == name }
182190 .let {
183191 val map = gson.fromJson(it[FileHashTable .fileHashMap], Map ::class .java)
184192 return @let if (map is Map <* , * >) map.mapKeys { it.key.toString() }.mapValues { it.value.toString() } else emptyMap()
0 commit comments