mirror of
https://github.com/nushell/nushell
synced 2025-01-15 14:44:14 +00:00
db info
tweaks (#5338)
* Rename db info to db schema * Change db schema to take db as input
This commit is contained in:
parent
5319544481
commit
cd5199de31
3 changed files with 19 additions and 24 deletions
|
@ -2,9 +2,9 @@ mod collect;
|
|||
mod command;
|
||||
mod describe;
|
||||
mod from;
|
||||
mod info;
|
||||
mod open;
|
||||
mod query;
|
||||
mod schema;
|
||||
mod select;
|
||||
mod utils;
|
||||
|
||||
|
@ -12,10 +12,10 @@ use collect::CollectDb;
|
|||
use command::Database;
|
||||
use describe::DescribeDb;
|
||||
use from::FromDb;
|
||||
use info::InfoDb;
|
||||
use nu_protocol::engine::StateWorkingSet;
|
||||
use open::OpenDb;
|
||||
use query::QueryDb;
|
||||
use schema::SchemaDb;
|
||||
use select::SelectDb;
|
||||
|
||||
pub fn add_database_decls(working_set: &mut StateWorkingSet) {
|
||||
|
@ -29,5 +29,5 @@ pub fn add_database_decls(working_set: &mut StateWorkingSet) {
|
|||
}
|
||||
|
||||
// Series commands
|
||||
bind_command!(CollectDb, Database, DescribeDb, FromDb, QueryDb, SelectDb, OpenDb, InfoDb);
|
||||
bind_command!(CollectDb, Database, DescribeDb, FromDb, QueryDb, SelectDb, OpenDb, SchemaDb);
|
||||
}
|
||||
|
|
|
@ -1,56 +1,51 @@
|
|||
use super::super::SQLiteDatabase;
|
||||
use crate::database::values::db_row::DbRow;
|
||||
use nu_engine::CallExt;
|
||||
use nu_protocol::{
|
||||
ast::Call,
|
||||
engine::{Command, EngineState, Stack},
|
||||
Category, Example, PipelineData, ShellError, Signature, Spanned, SyntaxShape, Value,
|
||||
Category, Example, PipelineData, ShellError, Signature, Value,
|
||||
};
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct InfoDb;
|
||||
pub struct SchemaDb;
|
||||
|
||||
impl Command for InfoDb {
|
||||
impl Command for SchemaDb {
|
||||
fn name(&self) -> &str {
|
||||
"db info"
|
||||
"db schema"
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build(self.name())
|
||||
.required("db", SyntaxShape::Filepath, "sqlite database file name")
|
||||
.category(Category::Custom("database".into()))
|
||||
Signature::build(self.name()).category(Category::Custom("database".into()))
|
||||
}
|
||||
|
||||
fn usage(&self) -> &str {
|
||||
"Show database information."
|
||||
"Show database information, including its schema."
|
||||
}
|
||||
|
||||
fn examples(&self) -> Vec<Example> {
|
||||
vec![Example {
|
||||
description: "Show information of a SQLite database",
|
||||
example: r#"db info foo.db"#,
|
||||
description: "Show the schema of a SQLite database",
|
||||
example: r#"open foo.db | db schema"#,
|
||||
result: None,
|
||||
}]
|
||||
}
|
||||
|
||||
fn search_terms(&self) -> Vec<&str> {
|
||||
vec!["database", "info", "SQLite"]
|
||||
vec!["database", "info", "SQLite", "schema"]
|
||||
}
|
||||
|
||||
fn run(
|
||||
&self,
|
||||
engine_state: &EngineState,
|
||||
stack: &mut Stack,
|
||||
_engine_state: &EngineState,
|
||||
_stack: &mut Stack,
|
||||
call: &Call,
|
||||
_input: PipelineData,
|
||||
input: PipelineData,
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let db_file: Spanned<PathBuf> = call.req(engine_state, stack, 0)?;
|
||||
let span = db_file.span;
|
||||
let mut cols = vec![];
|
||||
let mut vals = vec![];
|
||||
let span = call.head;
|
||||
|
||||
let sqlite_db = SQLiteDatabase::try_from_path(db_file.item.as_path(), db_file.span)?;
|
||||
let sqlite_db = SQLiteDatabase::try_from_pipeline(input, span)?;
|
||||
let conn = sqlite_db.open_connection().map_err(|e| {
|
||||
ShellError::GenericError(
|
||||
"Error opening file".into(),
|
||||
|
@ -73,7 +68,7 @@ impl Command for InfoDb {
|
|||
|
||||
cols.push("db_filename".into());
|
||||
vals.push(Value::String {
|
||||
val: db_file.item.to_string_lossy().to_string(),
|
||||
val: sqlite_db.path.to_string_lossy().to_string(),
|
||||
span,
|
||||
});
|
||||
|
|
@ -19,7 +19,7 @@ pub struct SQLiteDatabase {
|
|||
// I considered storing a SQLite connection here, but decided against it because
|
||||
// 1) YAGNI, 2) it's not obvious how cloning a connection could work, 3) state
|
||||
// management gets tricky quick. Revisit this approach if we find a compelling use case.
|
||||
path: PathBuf,
|
||||
pub path: PathBuf,
|
||||
pub query: Option<Query>,
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue