Skip to content

Commit eb4f81f

Browse files
committed
feat: null, empty and default italics style
1 parent 857943d commit eb4f81f

File tree

5 files changed

+97
-25
lines changed

5 files changed

+97
-25
lines changed

Diff for: components/ResultsTable.go

+41-8
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,17 @@ func (table *ResultsTable) AddRows(rows [][]string) {
190190
for i, row := range rows {
191191
for j, cell := range row {
192192
tableCell := tview.NewTableCell(cell)
193+
tableCell.SetTextColor(tview.Styles.PrimaryTextColor)
194+
195+
if cell == "EMPTY&" || cell == "NULL&" {
196+
tableCell.SetText(strings.Replace(cell, "&", "", 1))
197+
tableCell.SetStyle(table.GetItalicStyle())
198+
tableCell.SetReference(cell)
199+
}
200+
193201
tableCell.SetSelectable(i > 0)
194202
tableCell.SetExpansion(1)
195203

196-
tableCell.SetTextColor(tview.Styles.PrimaryTextColor)
197-
198204
table.SetCell(i, j, tableCell)
199205
}
200206
}
@@ -228,7 +234,7 @@ func (table *ResultsTable) AddInsertedRows() {
228234
tableCell.SetExpansion(1)
229235
tableCell.SetReference(inserts[i].PrimaryKeyValue)
230236

231-
tableCell.SetTextColor(tcell.ColorWhite.TrueColor())
237+
tableCell.SetTextColor(tview.Styles.PrimaryTextColor)
232238
tableCell.SetBackgroundColor(InsertColor)
233239

234240
table.SetCell(rowIndex, j, tableCell)
@@ -242,7 +248,7 @@ func (table *ResultsTable) AppendNewRow(cells []models.CellValue, index int, UUI
242248
tableCell.SetExpansion(1)
243249
tableCell.SetReference(UUID)
244250
tableCell.SetTextColor(tview.Styles.PrimaryTextColor)
245-
tableCell.SetBackgroundColor(tcell.ColorDarkGreen)
251+
tableCell.SetBackgroundColor(InsertColor)
246252

247253
switch cell.Type {
248254
case models.Null:
@@ -346,7 +352,7 @@ func (table *ResultsTable) tableInputCapture(event *tcell.EventKey) *tcell.Event
346352
for i, insertedRow := range *table.state.listOfDbChanges {
347353
cellReference := table.GetCell(selectedRowIndex, 0).GetReference()
348354

349-
if cellReference != nil && insertedRow.PrimaryKeyValue == cellReference.(string) {
355+
if cellReference != nil && insertedRow.PrimaryKeyValue == cellReference {
350356
isAnInsertedRow = true
351357
indexOfInsertedRow = i
352358
}
@@ -377,7 +383,13 @@ func (table *ResultsTable) tableInputCapture(event *tcell.EventKey) *tcell.Event
377383
list := NewSetValueList()
378384
list.SetRect(x, y, width, 7)
379385

380-
list.OnFinish(table.FinishSettingValue)
386+
list.OnFinish(func(selection models.CellValueType, value string) {
387+
table.FinishSettingValue()
388+
389+
if selection >= 0 {
390+
table.AppendNewChange(models.DmlUpdateType, table.Tree.GetSelectedDatabase(), table.Tree.GetSelectedTable(), selectedRowIndex, selectedColumnIndex, models.CellValue{Type: selection, Value: value, Column: table.GetColumnNameByIndex(selectedColumnIndex)})
391+
}
392+
})
381393

382394
list.Show(x, y, width)
383395
}
@@ -424,7 +436,13 @@ func (table *ResultsTable) UpdateRowsColor(headerColor tcell.Color, rowColor tce
424436
if i == 0 && headerColor != 0 {
425437
cell.SetTextColor(headerColor)
426438
} else {
427-
cell.SetTextColor(rowColor)
439+
cellReference := cell.GetReference()
440+
441+
if cellReference != nil && cellReference == "EMPTY&" || cellReference == "NULL&" || cellReference == "DEFAULT&" {
442+
cell.SetStyle(table.GetItalicStyle())
443+
} else {
444+
cell.SetTextColor(rowColor)
445+
}
428446
}
429447
}
430448
}
@@ -516,6 +534,7 @@ func (table *ResultsTable) subscribeToEditorChanges() {
516534
if strings.Contains(queryLower, "select") {
517535
table.SetLoading(true)
518536
App.Draw()
537+
519538
rows, err := table.DBDriver.ExecuteQuery(query)
520539
table.Pagination.SetTotalRecords(len(rows))
521540
table.Pagination.SetLimit(len(rows))
@@ -927,7 +946,7 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, databaseNa
927946
tableCell := table.GetCell(rowIndex, colIndex)
928947
tableCellReference := tableCell.GetReference()
929948

930-
isAnInsertedRow := tableCellReference != nil
949+
isAnInsertedRow := tableCellReference != nil && tableCellReference.(string) != "NULL&" && tableCellReference.(string) != "EMPTY&" && tableCellReference.(string) != "DEFAULT&"
931950

932951
if isAnInsertedRow {
933952
table.MutateInsertedRowCell(tableCellReference.(string), value)
@@ -936,6 +955,15 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, databaseNa
936955

937956
primaryKeyValue, primaryKeyColumnName := table.GetPrimaryKeyValue(rowIndex)
938957

958+
if changeType == models.DmlUpdateType {
959+
switch value.Type {
960+
case models.Null, models.Empty, models.Default:
961+
tableCell.SetText(value.Value.(string))
962+
tableCell.SetStyle(tcell.StyleDefault.Italic(true))
963+
tableCell.SetReference(value.Value.(string) + "&")
964+
}
965+
}
966+
939967
for i, dmlChange := range *table.state.listOfDbChanges {
940968
if dmlChange.Table == tableName && dmlChange.Type == changeType && dmlChange.PrimaryKeyValue == primaryKeyValue {
941969
dmlChangeAlreadyExists = true
@@ -984,6 +1012,7 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, databaseNa
9841012
case models.DmlDeleteType:
9851013
table.SetRowColor(rowIndex, DeleteColor)
9861014
case models.DmlUpdateType:
1015+
tableCell.SetStyle(tcell.StyleDefault.Background(ChangeColor))
9871016
table.SetCellColor(rowIndex, colIndex, ChangeColor)
9881017
}
9891018

@@ -1243,3 +1272,7 @@ func (table *ResultsTable) FinishSettingValue() {
12431272
table.SetInputCapture(table.tableInputCapture)
12441273
App.SetFocus(table)
12451274
}
1275+
1276+
func (table *ResultsTable) GetItalicStyle() tcell.Style {
1277+
return tcell.StyleDefault.Foreground(tview.Styles.InverseTextColor).Italic(true)
1278+
}

Diff for: components/SetValueList.go

+12-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/gdamore/tcell/v2"
55
"github.com/jorgerojas26/lazysql/app"
66
"github.com/jorgerojas26/lazysql/commands"
7+
"github.com/jorgerojas26/lazysql/models"
78
"github.com/rivo/tview"
89
)
910

@@ -33,23 +34,29 @@ func NewSetValueList() *SetValueList {
3334
return &SetValueList{List: list}
3435
}
3536

36-
func (list *SetValueList) OnFinish(callback func()) {
37+
func (list *SetValueList) OnFinish(callback func(selection models.CellValueType, value string)) {
3738
list.SetDoneFunc(func() {
3839
list.Hide()
39-
callback()
40+
callback(-1, "")
4041
})
4142

42-
list.SetSelectedFunc(func(int, string, string, rune) {
43+
list.SetSelectedFunc(func(_ int, _ string, _ string, shortcut rune) {
4344
list.Hide()
44-
callback()
45+
if shortcut == 'n' {
46+
callback(models.Null, "NULL")
47+
} else if shortcut == 'e' {
48+
callback(models.Empty, "EMPTY")
49+
} else if shortcut == 'd' {
50+
callback(models.Default, "DEFAULT")
51+
}
4552
})
4653

4754
list.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
4855
command := app.Keymaps.Group(app.TableGroup).Resolve(event)
4956

5057
if command == commands.SetValue {
5158
list.Hide()
52-
callback()
59+
callback(-1, "")
5360
return nil
5461
}
5562

Diff for: drivers/mysql.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -372,9 +372,11 @@ func (db *MySQL) GetRecords(database, table, where, sort string, offset, limit i
372372
paginatedResults = append(paginatedResults, columns)
373373

374374
for paginatedRows.Next() {
375+
nullStringSlice := make([]sql.NullString, len(columns))
376+
375377
rowValues := make([]interface{}, len(columns))
376-
for i := range columns {
377-
rowValues[i] = new(sql.RawBytes)
378+
for i := range nullStringSlice {
379+
rowValues[i] = &nullStringSlice[i]
378380
}
379381

380382
err = paginatedRows.Scan(rowValues...)
@@ -383,8 +385,16 @@ func (db *MySQL) GetRecords(database, table, where, sort string, offset, limit i
383385
}
384386

385387
var row []string
386-
for _, col := range rowValues {
387-
row = append(row, string(*col.(*sql.RawBytes)))
388+
for _, col := range nullStringSlice {
389+
if col.Valid {
390+
if col.String == "" {
391+
row = append(row, "EMPTY&")
392+
} else {
393+
row = append(row, col.String)
394+
}
395+
} else {
396+
row = append(row, "NULL&")
397+
}
388398
}
389399

390400
paginatedResults = append(paginatedResults, row)

Diff for: drivers/postgres.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -588,16 +588,27 @@ func (db *Postgres) GetRecords(database, table, where, sort string, offset, limi
588588
records = append(records, columns)
589589

590590
for paginatedRows.Next() {
591+
nullStringSlice := make([]sql.NullString, len(columns))
592+
593+
// Create a slice of interface{} to hold pointers to the sql.NullString slice
591594
rowValues := make([]interface{}, len(columns))
592-
for i := range columns {
593-
rowValues[i] = new(sql.RawBytes)
595+
for i := range nullStringSlice {
596+
rowValues[i] = &nullStringSlice[i]
594597
}
595598

596599
err = paginatedRows.Scan(rowValues...)
597600

598601
var row []string
599-
for _, col := range rowValues {
600-
row = append(row, string(*col.(*sql.RawBytes)))
602+
for _, col := range nullStringSlice {
603+
if col.Valid {
604+
if col.String == "" {
605+
row = append(row, "EMPTY&")
606+
} else {
607+
row = append(row, col.String)
608+
}
609+
} else {
610+
row = append(row, "NULL&")
611+
}
601612
}
602613

603614
records = append(records, row)

Diff for: drivers/sqlite.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,12 @@ func (db *SQLite) GetRecords(_, table, where, sort string, offset, limit int) (p
362362
paginatedResults = append(paginatedResults, columns)
363363

364364
for paginatedRows.Next() {
365+
nullStringSlice := make([]sql.NullString, len(columns))
366+
365367
rowValues := make([]interface{}, len(columns))
366-
for i := range columns {
367-
rowValues[i] = new(sql.RawBytes)
368+
369+
for i := range nullStringSlice {
370+
rowValues[i] = &nullStringSlice[i]
368371
}
369372

370373
err = paginatedRows.Scan(rowValues...)
@@ -373,8 +376,16 @@ func (db *SQLite) GetRecords(_, table, where, sort string, offset, limit int) (p
373376
}
374377

375378
var row []string
376-
for _, col := range rowValues {
377-
row = append(row, string(*col.(*sql.RawBytes)))
379+
for _, col := range nullStringSlice {
380+
if col.Valid {
381+
if col.String == "" {
382+
row = append(row, "EMPTY&")
383+
} else {
384+
row = append(row, col.String)
385+
}
386+
} else {
387+
row = append(row, "NULL&")
388+
}
378389
}
379390

380391
paginatedResults = append(paginatedResults, row)

0 commit comments

Comments
 (0)