Skip to content

Commit

Permalink
fix(driver): add test for format_null_as_str (#466)
Browse files Browse the repository at this point in the history
  • Loading branch information
everpcpc authored Jul 31, 2024
1 parent c098aaa commit 78b3d05
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 29 deletions.
27 changes: 12 additions & 15 deletions cli/src/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 +152,18 @@ impl<'a> FormatDisplay<'a> {
);
}
ExpandMode::Auto => {
if rows.len() > 1 {
println!(
"{}",
create_table(
schema,
&rows,
self.replace_newline,
self.settings.max_display_rows,
self.settings.max_width,
self.settings.max_col_width
)?
);
} else {
print_expanded(schema, &rows)?;
}
// FIXME: depends on terminal size
println!(
"{}",
create_table(
schema,
&rows,
self.replace_newline,
self.settings.max_display_rows,
self.settings.max_width,
self.settings.max_col_width
)?
);
}
}

Expand Down
2 changes: 1 addition & 1 deletion cli/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ case $TEST_HANDLER in
;;
"http")
echo "==> Testing REST API handler"
export BENDSQL_DSN="databend+http://${DATABEND_USER}:${DATABEND_PASSWORD}@${DATABEND_HOST}:8000/?sslmode=disable&presign=on&format_null_as_str=0"
export BENDSQL_DSN="databend+http://${DATABEND_USER}:${DATABEND_PASSWORD}@${DATABEND_HOST}:8000/?sslmode=disable&presign=on"
;;
*)
echo "Usage: $0 [flight|http]"
Expand Down
55 changes: 49 additions & 6 deletions driver/tests/driver/select_simple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,55 @@ async fn prepare() -> Box<dyn Connection> {

#[tokio::test]
async fn select_null() {
let conn = prepare().await;
let row = conn.query_row("select null").await.unwrap();
assert!(row.is_some());
let row = row.unwrap();
let (val,): (Option<u8>,) = row.try_into().unwrap();
assert_eq!(val, None);
{
let conn = prepare().await;
conn.exec("DROP TABLE IF EXISTS select_null").await.unwrap();
conn.exec(
"CREATE TABLE `select_null` (
a String,
b UInt64,
c String
);",
)
.await
.unwrap();
conn.exec("INSERT INTO `select_null` (a) VALUES ('NULL')")
.await
.unwrap();
}
{
let dsn = option_env!("TEST_DATABEND_DSN").unwrap_or(DEFAULT_DSN);
// ignore null to str test for flightsql
if !dsn.starts_with("databend+flight://") {
let client = Client::new(format!("{dsn}&format_null_as_str=1"));
let conn = client.get_conn().await.unwrap();
let row = conn.query_row("select * from select_null").await.unwrap();
assert!(row.is_some());
let row = row.unwrap();
let (val1, val2, val3): (Option<String>, Option<u64>, Option<String>) =
row.try_into().unwrap();
assert_eq!(val1, Some("NULL".to_string()));
assert_eq!(val2, None);
assert_eq!(val3, Some("NULL".to_string()));
}
}
{
let dsn = option_env!("TEST_DATABEND_DSN").unwrap_or(DEFAULT_DSN);
let client = Client::new(format!("{dsn}&format_null_as_str=0"));
let conn = client.get_conn().await.unwrap();
let row = conn.query_row("select * from select_null").await.unwrap();
assert!(row.is_some());
let row = row.unwrap();
let (val1, val2, val3): (Option<String>, Option<u64>, Option<String>) =
row.try_into().unwrap();
assert_eq!(val1, Some("NULL".to_string()));
assert_eq!(val2, None);
assert_eq!(val3, None);
}
{
let conn = prepare().await;
conn.exec("DROP TABLE IF EXISTS select_null").await.unwrap();
}
}

#[tokio::test]
Expand Down
17 changes: 11 additions & 6 deletions sql/src/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,13 +230,18 @@ impl TryFrom<(&DataType, &str)> for Value {
let decoder = ValueDecoder {};
decoder.read_field(t, &mut reader)
}
DataType::Nullable(inner) => {
if v == NULL_VALUE {
Ok(Self::Null)
} else {
Self::try_from((inner.as_ref(), v))
DataType::Nullable(inner) => match inner.as_ref() {
DataType::String => Ok(Self::String(v.to_string())),
_ => {
// not string type, try to check if it is NULL
// for compatible with old version server
if v == NULL_VALUE {
Ok(Self::Null)
} else {
Self::try_from((inner.as_ref(), v))
}
}
}
},
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ test-core: up

test-driver: up
cargo test --test driver
TEST_DATABEND_DSN=databend+flight://root:@localhost:8900/default?sslmode=disable&format_null_as_str=0 cargo test --features flight-sql --test driver
TEST_DATABEND_DSN=databend+flight://root:@localhost:8900/default?sslmode=disable cargo test --features flight-sql --test driver

test-bendsql: up
cd .. && ./cli/test.sh http
Expand Down

0 comments on commit 78b3d05

Please sign in to comment.