1
1
package cc.unitmesh.database.actions
2
2
3
3
import cc.unitmesh.devti.AutoDevBundle
4
+ import cc.unitmesh.devti.gui.sendToChatWindow
4
5
import cc.unitmesh.devti.intentions.action.base.AbstractChatIntention
5
- import com.intellij.database.model.DasColumn
6
+ import cc.unitmesh.devti.provider.ContextPrompter
7
+ import cc.unitmesh.devti.template.TemplateRender
6
8
import com.intellij.database.model.DasTable
7
9
import com.intellij.database.model.ObjectKind
8
- import com.intellij.database.model.RawDataSource
9
- import com.intellij.database.psi.DbElement
10
10
import com.intellij.database.psi.DbPsiFacade
11
11
import com.intellij.database.util.DasUtil
12
+ import com.intellij.openapi.diagnostic.logger
12
13
import com.intellij.openapi.editor.Editor
13
14
import com.intellij.openapi.project.Project
14
15
import com.intellij.psi.PsiFile
@@ -23,11 +24,14 @@ class GenSqlScriptBySelection : AbstractChatIntention() {
23
24
24
25
override fun getText (): String = AutoDevBundle .message(" migration.database.sql.generate" )
25
26
26
- override fun isAvailable (project : Project , editor : Editor ? , psiFile : PsiFile ? ): Boolean {
27
+ override fun isAvailable (project : Project , editor : Editor ? , file : PsiFile ? ): Boolean {
28
+ DbPsiFacade .getInstance(project).dataSources.firstOrNull() ? : return false
27
29
return true
28
30
}
29
31
30
- override fun invoke (project : Project , editor : Editor ? , psiFile : PsiFile ? ) {
32
+ private val logger = logger<GenSqlScriptBySelection >()
33
+
34
+ override fun invoke (project : Project , editor : Editor ? , file : PsiFile ? ) {
31
35
val dbPsiFacade = DbPsiFacade .getInstance(project)
32
36
val dataSource = dbPsiFacade.dataSources.firstOrNull() ? : return
33
37
@@ -41,16 +45,37 @@ class GenSqlScriptBySelection : AbstractChatIntention() {
41
45
tables.filter { table -> table.kind == ObjectKind .TABLE && table.dasParent?.name == schemaName }
42
46
}.toList()
43
47
44
- val tableColumns = DbContextProvider (dasTables).getTableColumns(dasTables.map { it.name })
45
-
46
- DbContext (
48
+ val dbContext = DbContext (
47
49
requirement = selectedText ? : " " ,
48
50
databaseVersion = databaseVersion.let {
49
51
" name: ${it.name} , version: ${it.version} "
50
52
},
51
53
schemaName = schemaName,
52
54
tableNames = dasTables.map { it.name },
53
55
)
56
+
57
+ val actions = DbContextActionProvider (dasTables)
58
+ val prompter = generateStepOnePrompt(dbContext, actions)
59
+
60
+ sendToChatWindow(project, getActionType()) { panel, service ->
61
+ service.handlePromptAndResponse(panel, object : ContextPrompter () {
62
+ override fun displayPrompt (): String = prompter
63
+ override fun requestPrompt (): String = prompter
64
+ }, null , false )
65
+ }
66
+ }
67
+
68
+ private fun generateStepOnePrompt (context : DbContext , actions : DbContextActionProvider ): String {
69
+ val templateRender = TemplateRender (" genius/sql" )
70
+ val template = templateRender.getTemplate(" sql-gen-clarify.vm" )
71
+
72
+ templateRender.context = context
73
+ templateRender.actions = actions
74
+
75
+ val prompter = templateRender.renderTemplate(template)
76
+
77
+ logger.info(" Prompt: $prompter " )
78
+ return prompter
54
79
}
55
80
}
56
81
@@ -61,10 +86,9 @@ data class DbContext(
61
86
val tableNames : List <String >,
62
87
// for step 2
63
88
val tableInfos : List <String > = emptyList(),
64
- ) {
65
- }
89
+ )
66
90
67
- data class DbContextProvider (val dasTables : List <DasTable >) {
91
+ data class DbContextActionProvider (val dasTables : List <DasTable >) {
68
92
/* *
69
93
* Retrieves the columns of the specified tables.
70
94
*
0 commit comments