Skip to content
Merged

Fixes #363

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/tui/handlers/sql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ pub fn editable_handler(app: &mut App, key: KeyEvent) {
}
}
}
// Exit edit mode after executing so user can scroll results
app.state.sql_tab.exit_edit();
}
_ => app.state.sql_tab.update_editor_content(key),
}
Expand Down
1 change: 0 additions & 1 deletion src/tui/state/tabs/sql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ pub fn keyword_regex() -> String {

pub fn keyword_style() -> Style {
Style::default()
.bg(tailwind::BLACK)
.fg(tailwind::YELLOW.c100)
.add_modifier(Modifier::BOLD)
}
Expand Down
179 changes: 35 additions & 144 deletions src/tui/ui/convert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ macro_rules! convert_array_values_to_cells {
($rows:expr, $arr:expr, $typ:ty) => {
if let Some(a) = $arr.as_any().downcast_ref::<$typ>() {
for i in 0..$rows.len() {
let cell = Cell::from(a.value(i).to_string())
.bg(tailwind::BLACK)
.fg(tailwind::WHITE);
let cell = Cell::from(a.value(i).to_string());
$rows[i].push(cell);
}
}
Expand All @@ -49,9 +47,7 @@ macro_rules! convert_binary_array_values_to_cells {
($rows:expr, $arr:expr, $typ:ty) => {
if let Some(a) = $arr.as_any().downcast_ref::<$typ>() {
for i in 0..$rows.len() {
let cell = Cell::from(format!("{:?}", a.value(i)))
.bg(tailwind::BLACK)
.fg(tailwind::WHITE);
let cell = Cell::from(format!("{:?}", a.value(i)));
$rows[i].push(cell);
}
}
Expand All @@ -71,11 +67,7 @@ pub fn record_batch_to_table_header_cells(record_batch: &RecordBatch) -> Vec<Cel

pub fn create_row_number_cells(record_batch: &RecordBatch) -> Vec<Cell<'_>> {
let cells: Vec<Cell> = (0..record_batch.num_rows())
.map(|i| {
Cell::new(i.to_string())
.bg(tailwind::BLACK)
.fg(tailwind::WHITE)
})
.map(|i| Cell::new(i.to_string()))
.collect();
cells
}
Expand Down Expand Up @@ -263,16 +255,8 @@ mod tests {
header_cells,
vec![
Cell::new("#").bg(tailwind::ORANGE.c300).fg(tailwind::BLACK),
Cell::new("a")
.bg(tailwind::BLACK)
.fg(tailwind::WHITE)
.bg(tailwind::ORANGE.c300)
.fg(tailwind::BLACK),
Cell::new("b")
.bg(tailwind::BLACK)
.fg(tailwind::WHITE)
.bg(tailwind::ORANGE.c300)
.fg(tailwind::BLACK)
Cell::new("a").bg(tailwind::ORANGE.c300).fg(tailwind::BLACK),
Cell::new("b").bg(tailwind::ORANGE.c300).fg(tailwind::BLACK)
]
);
}
Expand All @@ -284,170 +268,89 @@ mod tests {
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("a").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("b").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("c").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("a")],
vec![Cell::new("1"), Cell::new("b")],
vec![Cell::new("2"), Cell::new("c")],
];
assert_eq!(table_cells, expected);

let a: ArrayRef = Arc::new(Int8Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(Int16Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(Int32Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(Int64Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(UInt8Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(UInt16Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(UInt32Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);

let a: ArrayRef = Arc::new(UInt64Array::from(vec![1, 2, 3]));
let batch = RecordBatch::try_from_iter(vec![("a", a)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1")],
vec![Cell::new("1"), Cell::new("2")],
vec![Cell::new("2"), Cell::new("3")],
];
assert_eq!(a_table_cells, expected);
}
Expand All @@ -459,21 +362,9 @@ mod tests {
let batch = RecordBatch::try_from_iter(vec![("a", a), ("b", b)]).unwrap();
let a_table_cells = record_batch_to_table_row_cells(&batch).unwrap();
let expected = vec![
vec![
Cell::new("0").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("a").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("1").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("b").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![
Cell::new("2").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("3").bg(tailwind::BLACK).fg(tailwind::WHITE),
Cell::new("c").bg(tailwind::BLACK).fg(tailwind::WHITE),
],
vec![Cell::new("0"), Cell::new("1"), Cell::new("a")],
vec![Cell::new("1"), Cell::new("2"), Cell::new("b")],
vec![Cell::new("2"), Cell::new("3"), Cell::new("c")],
];
assert_eq!(a_table_cells, expected);
}
Expand Down
5 changes: 3 additions & 2 deletions tests/tui_cases/sql_execution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use ratatui::crossterm::event;

use crate::tui_cases::TestApp;

/// Test that ALT+Enter in SQL tab's edit mode executes the query
/// Test that ALT+Enter in SQL tab's edit mode executes the query and exits edit mode
#[tokio::test(flavor = "multi_thread")]
async fn sql_alt_enter_executes_in_edit_mode() {
let mut test_app = TestApp::new().await;
Expand All @@ -44,7 +44,8 @@ async fn sql_alt_enter_executes_in_edit_mode() {
let alt_enter = event::KeyEvent::new(event::KeyCode::Enter, event::KeyModifiers::ALT);
test_app.handle_app_event(AppEvent::Key(alt_enter)).unwrap();

// Test passes if execution is triggered without panic
// Should exit edit mode after execution so user can scroll results
assert!(!test_app.state().sql_tab.editable());
}

/// Test that Enter key in SQL normal mode executes the query
Expand Down