[Editor] Add support for executing queries
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
package com.bartlomiejpluta.base.editor.database.component
|
||||
|
||||
import com.bartlomiejpluta.base.editor.database.model.Field
|
||||
import com.bartlomiejpluta.base.editor.database.model.Row
|
||||
import javafx.scene.control.TableCell
|
||||
|
||||
class QueryFieldCell : TableCell<Row, Field>() {
|
||||
|
||||
override fun updateItem(item: Field?, empty: Boolean) {
|
||||
super.updateItem(item, empty)
|
||||
|
||||
when {
|
||||
empty || item == null -> {
|
||||
text = null
|
||||
graphic = null
|
||||
}
|
||||
|
||||
else -> {
|
||||
text = item.value
|
||||
graphic = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.bartlomiejpluta.base.editor.database.model
|
||||
|
||||
class Field(val value: String)
|
||||
@@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.editor.database.model
|
||||
import tornadofx.getValue
|
||||
import tornadofx.toProperty
|
||||
|
||||
class Query(name: String, val columns: List<String>, val data: List<Map<String, String>>) {
|
||||
class Query(name: String, val columns: List<String>, val data: List<Row>) {
|
||||
val nameProperty = name.toProperty()
|
||||
val name by nameProperty
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.bartlomiejpluta.base.editor.database.model
|
||||
|
||||
class Row(val fields: Map<String, Field>)
|
||||
@@ -1,19 +1,17 @@
|
||||
package com.bartlomiejpluta.base.editor.database.view.list
|
||||
|
||||
import com.bartlomiejpluta.base.editor.database.component.SQLElementCell
|
||||
import com.bartlomiejpluta.base.editor.database.model.Query
|
||||
import com.bartlomiejpluta.base.editor.database.model.SQLDatabase
|
||||
import com.bartlomiejpluta.base.editor.database.model.SQLElement
|
||||
import com.bartlomiejpluta.base.editor.database.model.SQLTable
|
||||
import com.bartlomiejpluta.base.editor.database.model.*
|
||||
import com.bartlomiejpluta.base.editor.database.model.Field
|
||||
import com.bartlomiejpluta.base.editor.database.service.DatabaseService
|
||||
import com.bartlomiejpluta.base.editor.file.model.InMemoryStringFileNode
|
||||
import com.bartlomiejpluta.base.editor.main.controller.MainController
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import javafx.scene.control.TreeItem
|
||||
import org.kordamp.ikonli.javafx.FontIcon
|
||||
import tornadofx.*
|
||||
import java.sql.Connection
|
||||
import java.sql.SQLException
|
||||
import tornadofx.*
|
||||
|
||||
class TablesListView : View() {
|
||||
private val mainController: MainController by di()
|
||||
@@ -90,19 +88,19 @@ class TablesListView : View() {
|
||||
if (results != null && metadata != null) {
|
||||
val columns = mutableListOf<String>()
|
||||
|
||||
for (i in 1..metadata.columnCount) {
|
||||
for(i in 1..metadata.columnCount) {
|
||||
columns += metadata.getColumnLabel(i)
|
||||
}
|
||||
|
||||
val data = mutableListOf<Map<String, String>>()
|
||||
val data = mutableListOf<Row>()
|
||||
while (results.next()) {
|
||||
val record = mutableMapOf<String, String>()
|
||||
val record = mutableMapOf<String, Field>()
|
||||
|
||||
for (i in 1..metadata.columnCount) {
|
||||
record[metadata.getColumnLabel(i)] = results.getObject(i).toString()
|
||||
record[metadata.getColumnLabel(i)] = Field(results.getObject(i).toString())
|
||||
}
|
||||
|
||||
data += record
|
||||
data += Row(record)
|
||||
}
|
||||
|
||||
mainController.openQuery(Query(name, columns, data))
|
||||
|
||||
@@ -1,13 +1,46 @@
|
||||
package com.bartlomiejpluta.base.editor.database.view.query
|
||||
|
||||
import tornadofx.View
|
||||
import tornadofx.borderpane
|
||||
import tornadofx.toolbar
|
||||
import com.bartlomiejpluta.base.editor.database.component.QueryFieldCell
|
||||
import com.bartlomiejpluta.base.editor.database.model.Field
|
||||
import com.bartlomiejpluta.base.editor.database.model.Row
|
||||
import com.bartlomiejpluta.base.editor.database.viewmodel.QueryVM
|
||||
import javafx.scene.control.TableColumn
|
||||
import tornadofx.*
|
||||
|
||||
class QueryResultView : View() {
|
||||
private val queryVM = find<QueryVM>()
|
||||
|
||||
private val table = tableview<Row> {
|
||||
}
|
||||
|
||||
init {
|
||||
queryVM.itemProperty.addListener { _, _, _ -> refreshData() }
|
||||
|
||||
refreshData()
|
||||
}
|
||||
|
||||
private fun refreshData() {
|
||||
table.columns.clear()
|
||||
table.items.clear()
|
||||
queryVM.item?.let { query ->
|
||||
table.items.addAll(query.data)
|
||||
query.columns.map { column ->
|
||||
TableColumn<Row, Field>(column).apply {
|
||||
setCellValueFactory {
|
||||
it.value.fields[column].toProperty()
|
||||
}
|
||||
|
||||
setCellFactory { QueryFieldCell() }
|
||||
}
|
||||
}.forEach { table.addColumnInternal(it) }
|
||||
}
|
||||
}
|
||||
|
||||
override val root = borderpane {
|
||||
top = toolbar {
|
||||
|
||||
}
|
||||
|
||||
center = table
|
||||
}
|
||||
}
|
||||
@@ -122,8 +122,13 @@ class MainController : Controller() {
|
||||
|
||||
fun openQuery(query: Query) {
|
||||
val findQuery = { q: Query -> q.name == query.name }
|
||||
val updateQuery = { scope: Scope ->
|
||||
openItems -= scope
|
||||
// openItems[scope] = query
|
||||
// find<QueryVM>(scope).item = query
|
||||
}
|
||||
|
||||
openItem<Query, Scope>(findQuery, {}) {
|
||||
openItem(findQuery, updateQuery) {
|
||||
val vm = QueryVM(query)
|
||||
val scope = Scope()
|
||||
setInScope(vm, scope)
|
||||
|
||||
Reference in New Issue
Block a user