Fix to json for SQLite databases (#8343)

Fixes #8341. 

The `CustomValue::to_json()` function is an odd duck; it defaults to
returning `null`, and no `CustomValue` implementations override it to do
anything useful. I forgot to implement `to_json()` for `SQLiteDatabase`,
so `open foo.db | to json` was returning `null`.

To fix this, I've removed `CustomValue::to_json()` and now `to json`
will collect a `CustomValue` into a regular `Value` before doing a JSON
conversion.
This commit is contained in:
Reilly Wood 2023-03-06 14:36:26 -08:00 committed by GitHub
parent 454d1a995c
commit e445c41454
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 4 additions and 26 deletions

View File

@ -33,10 +33,6 @@ impl CustomValue for NuDataFrame {
Ok(Value::List { vals, span }) Ok(Value::List { vals, span })
} }
fn to_json(&self) -> nu_json::Value {
nu_json::Value::Null
}
fn as_any(&self) -> &dyn std::any::Any { fn as_any(&self) -> &dyn std::any::Any {
self self
} }

View File

@ -34,10 +34,6 @@ impl CustomValue for NuExpression {
Ok(self.to_value(span)) Ok(self.to_value(span))
} }
fn to_json(&self) -> nu_json::Value {
nu_json::Value::Null
}
fn as_any(&self) -> &dyn std::any::Any { fn as_any(&self) -> &dyn std::any::Any {
self self
} }

View File

@ -47,10 +47,6 @@ impl CustomValue for NuLazyFrame {
Ok(Value::Record { cols, vals, span }) Ok(Value::Record { cols, vals, span })
} }
fn to_json(&self) -> nu_json::Value {
nu_json::Value::Null
}
fn as_any(&self) -> &dyn std::any::Any { fn as_any(&self) -> &dyn std::any::Any {
self self
} }

View File

@ -38,10 +38,6 @@ impl CustomValue for NuLazyGroupBy {
Ok(Value::Record { cols, vals, span }) Ok(Value::Record { cols, vals, span })
} }
fn to_json(&self) -> nu_json::Value {
nu_json::Value::Null
}
fn as_any(&self) -> &dyn std::any::Any { fn as_any(&self) -> &dyn std::any::Any {
self self
} }

View File

@ -34,10 +34,6 @@ impl CustomValue for NuWhen {
Ok(value) Ok(value)
} }
fn to_json(&self) -> nu_json::Value {
nu_json::Value::Null
}
fn as_any(&self) -> &dyn std::any::Any { fn as_any(&self) -> &dyn std::any::Any {
self self
} }

View File

@ -142,7 +142,10 @@ pub fn value_to_json_value(v: &Value) -> Result<nu_json::Value, ShellError> {
let collected = val.collect()?; let collected = val.collect()?;
value_to_json_value(&collected)? value_to_json_value(&collected)?
} }
Value::CustomValue { val, .. } => val.to_json(), Value::CustomValue { val, span } => {
let collected = val.to_base_value(*span)?;
value_to_json_value(&collected)?
}
}) })
} }

View File

@ -17,11 +17,6 @@ pub trait CustomValue: fmt::Debug + Send + Sync {
// That already exist in nushell // That already exist in nushell
fn to_base_value(&self, span: Span) -> Result<Value, ShellError>; fn to_base_value(&self, span: Span) -> Result<Value, ShellError>;
// Json representation of custom value
fn to_json(&self) -> nu_json::Value {
nu_json::Value::Null
}
// Any representation used to downcast object to its original type // Any representation used to downcast object to its original type
fn as_any(&self) -> &dyn std::any::Any; fn as_any(&self) -> &dyn std::any::Any;