@@ -6,6 +6,7 @@ import com.intellij.database.model.DasIndex
66import com.intellij.database.model.DasNamespace
77import com.intellij.database.model.DasTable
88import com.intellij.database.model.DasTableKey
9+ import com.intellij.openapi.progress.ProgressManager
910import dev.ekvedaras.laravelquery.models.DbReferenceExpression
1011import dev.ekvedaras.laravelquery.utils.DatabaseUtils.Companion.columnsInParallel
1112import dev.ekvedaras.laravelquery.utils.DatabaseUtils.Companion.dbDataSourcesInParallel
@@ -49,6 +50,8 @@ private class ResolverForTableMethods(
4950 fun resolve () {
5051 resolveSchemes()
5152
53+ ProgressManager .checkCanceled()
54+
5255 when (reference.parts.size) {
5356 1 -> resolveTables()
5457 else -> resolveSchemaTables()
@@ -72,7 +75,11 @@ private class ResolverForTableMethods(
7275 */
7376 private fun resolveTables () {
7477 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
78+ ProgressManager .checkCanceled()
79+
7580 dataSource.tablesInParallel().forEach { table ->
81+ ProgressManager .checkCanceled()
82+
7683 if (table.nameWithoutPrefix(reference.project) == reference.parts.last()) {
7784 tables.add(table)
7885 } else if (reference.tablesAndAliases[reference.parts.last()]?.first == table.nameWithoutPrefix(reference.project)) {
@@ -88,9 +95,13 @@ private class ResolverForTableMethods(
8895 */
8996 private fun resolveSchemaTables () {
9097 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
98+ ProgressManager .checkCanceled()
99+
91100 dataSource.schemasInParallel()
92101 .filter { schemas.contains(it) }
93102 .forEach { schema ->
103+ ProgressManager .checkCanceled()
104+
94105 dataSource.tablesInParallel()
95106 .filter { it.dasParent?.name == schema.name }
96107 .filter { it.nameWithoutPrefix(reference.project) == reference.parts.last() }
@@ -122,11 +133,15 @@ private class ResolverForColumnMethods(
122133 */
123134 private fun withOnePart () {
124135 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
136+ ProgressManager .checkCanceled()
137+
125138 dataSource.schemasInParallel()
126139 .filter { it.name == reference.parts.first() }
127140 .forEach { schemas.add(it) }
128141
129142 dataSource.tablesInParallel().forEach { dasTable ->
143+ ProgressManager .checkCanceled()
144+
130145 if (dasTable.nameWithoutPrefix(reference.project) == reference.parts.first()) {
131146 tables.add(dasTable)
132147 } else if (reference.tablesAndAliases[reference.parts.first()]?.first == dasTable.nameWithoutPrefix(reference.project)) {
@@ -147,11 +162,15 @@ private class ResolverForColumnMethods(
147162 */
148163 private fun withTwoParts () {
149164 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
165+ ProgressManager .checkCanceled()
166+
150167 dataSource.schemasInParallel()
151168 .filter { it.name == reference.parts.first() }
152169 .forEach { schemas.add(it) }
153170
154171 dataSource.tablesInParallel().forEach { table ->
172+ ProgressManager .checkCanceled()
173+
155174 if (schemas.isEmpty() || schemas.contains(table.dasParent)) {
156175 addTablesAndTheirColumns(table)
157176 }
@@ -185,10 +204,14 @@ private class ResolverForColumnMethods(
185204 */
186205 private fun withThreeParts () {
187206 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
207+ ProgressManager .checkCanceled()
208+
188209 dataSource.schemasInParallel()
189210 .filter { it.name == reference.parts.first() }
190211 .forEach { schemas.add(it) }
191212
213+ ProgressManager .checkCanceled()
214+
192215 dataSource.tablesInParallel()
193216 .filter { schemas.contains(it.dasParent) }
194217 .forEach { addTableAndItsColumns(it) }
@@ -218,11 +241,15 @@ private class ResolverForIndexMethods(
218241) {
219242 fun resolve () {
220243 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
244+ ProgressManager .checkCanceled()
245+
221246 dataSource.tablesInParallel().filter {
222247 reference.tablesAndAliases.containsKey(it.nameWithoutPrefix(reference.project))
223248 }.filter {
224249 (reference.tablesAndAliases[it.nameWithoutPrefix(reference.project)]?.second ? : it.dasParent?.name) == it.dasParent?.name
225250 }.forEach { table ->
251+ ProgressManager .checkCanceled()
252+
226253 table.indexesInParallel()
227254 .filter { it.name == reference.parts[0 ] }
228255 .forEach { indexes.add(it) }
@@ -237,11 +264,15 @@ private class ResolverForKeyMethods(
237264) {
238265 fun resolve () {
239266 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
267+ ProgressManager .checkCanceled()
268+
240269 dataSource.tablesInParallel().filter {
241270 reference.tablesAndAliases.containsKey(it.nameWithoutPrefix(reference.project))
242271 }.filter {
243272 (reference.tablesAndAliases[it.nameWithoutPrefix(reference.project)]?.second ? : it.dasParent?.name) == it.dasParent?.name
244273 }.forEach { table ->
274+ ProgressManager .checkCanceled()
275+
245276 table.keysInParallel()
246277 .filter { it.name == reference.parts[0 ] }
247278 .forEach { keys.add(it) }
@@ -256,11 +287,15 @@ private class ResolverForForeignKeyMethods(
256287) {
257288 fun resolve () {
258289 reference.project.dbDataSourcesInParallel().forEach { dataSource ->
290+ ProgressManager .checkCanceled()
291+
259292 dataSource.tablesInParallel().filter {
260293 reference.tablesAndAliases.containsKey(it.nameWithoutPrefix(reference.project))
261294 }.filter {
262295 (reference.tablesAndAliases[it.nameWithoutPrefix(reference.project)]?.second ? : it.dasParent?.name) == it.dasParent?.name
263296 }.forEach { table ->
297+ ProgressManager .checkCanceled()
298+
264299 table.foreignKeysInParallel()
265300 .filter { it.name == reference.parts[0 ] }
266301 .forEach { foreignKeys.add(it) }
0 commit comments