diff --git a/crates/nu-command/src/database/commands/into_sqlite.rs b/crates/nu-command/src/database/commands/into_sqlite.rs index 924508ef60..81d86f0927 100644 --- a/crates/nu-command/src/database/commands/into_sqlite.rs +++ b/crates/nu-command/src/database/commands/into_sqlite.rs @@ -201,29 +201,8 @@ fn insert_in_transaction( span: Span, mut table: Table, ) -> Result { - let mut stream = stream.peekable(); - let first_val = match stream.peek() { - None => return Ok(Value::nothing(span)), - Some(val) => val.as_record()?, - }; - + let mut stream = stream; let table_name = table.name().clone(); - let tx = table.try_init(first_val)?; - let insert_statement = format!( - "INSERT INTO [{}] VALUES ({})", - table_name, - ["?"].repeat(first_val.values().len()).join(", ") - ); - - let mut insert_statement = - tx.prepare(&insert_statement) - .map_err(|e| ShellError::GenericError { - error: "Failed to prepare SQLite statement".into(), - msg: e.to_string(), - span: None, - help: None, - inner: Vec::new(), - })?; // insert all the records stream.try_for_each(|stream_value| { @@ -233,25 +212,47 @@ fn insert_in_transaction( } } - insert_value(stream_value, &mut insert_statement) - })?; + let val = stream_value.as_record()?; - insert_statement - .finalize() - .map_err(|e| ShellError::GenericError { - error: "Failed to finalize SQLite prepared statement".into(), + let tx = table.try_init(val)?; + let insert_statement = format!( + "INSERT INTO [{}] ({}) VALUES ({})", + table_name, + val.cols.join(", "), + ["?"].repeat(val.values().len()).join(", ") + ); + + let mut insert_statement = + tx.prepare(&insert_statement) + .map_err(|e| ShellError::GenericError { + error: "Failed to prepare SQLite statement".into(), + msg: e.to_string(), + span: None, + help: None, + inner: Vec::new(), + })?; + + let result = insert_value(stream_value, &mut insert_statement); + + insert_statement + .finalize() + .map_err(|e| ShellError::GenericError { + error: "Failed to finalize SQLite prepared statement".into(), + msg: e.to_string(), + span: None, + help: None, + inner: Vec::new(), + })?; + + tx.commit().map_err(|e| ShellError::GenericError { + error: "Failed to commit SQLite transaction".into(), msg: e.to_string(), span: None, help: None, inner: Vec::new(), })?; - tx.commit().map_err(|e| ShellError::GenericError { - error: "Failed to commit SQLite transaction".into(), - msg: e.to_string(), - span: None, - help: None, - inner: Vec::new(), + result })?; Ok(Value::nothing(span))