Skip to content

Commit

Permalink
fix(nodejs): rowcount renames (#2594)
Browse files Browse the repository at this point in the history
* fix(nodejs): rowcount renames
  • Loading branch information
universalmind303 committed Feb 10, 2022
1 parent 01321d9 commit 34b75b7
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 5 deletions.
25 changes: 25 additions & 0 deletions nodejs-polars/src/conversion/from.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ use napi::{
JsBigint, JsBoolean, JsDate, JsNumber, JsObject, JsString, JsUnknown, Result, ValueType,
};
use polars::prelude::*;
use polars::io::RowCount;


pub trait FromJsUnknown: Sized + Send {
fn from_js(obj: JsUnknown) -> Result<Self>;
Expand All @@ -15,6 +17,7 @@ impl FromJsUnknown for String {
s.into_utf8()?.into_owned()
}
}

impl FromJsUnknown for QuantileInterpolOptions {
fn from_js(val: JsUnknown) -> Result<Self> {
let s = String::from_js(val)?;
Expand All @@ -29,6 +32,28 @@ impl FromJsUnknown for QuantileInterpolOptions {
}
}

impl FromJsUnknown for RowCount {
fn from_js(val: JsUnknown) -> Result<Self> {
let obj: JsObject = match val.get_type()? {
ValueType::Object => unsafe { val.cast() },
dt => {
return Err(JsPolarsEr::Other(format!(
"Invalid cast, unable to cast {} to object",
dt
))
.into())
}
};
let name: JsUnknown = obj.get_named_property("name")?;
let name: String = String::from_js(name)?;

let offset: JsUnknown = obj.get_named_property("name")?;
let offset: u32 = u32::from_js(offset)?;

Ok(RowCount { name, offset })
}
}

impl FromJsUnknown for DistinctKeepStrategy {
fn from_js(val: JsUnknown) -> Result<Self> {
let s = String::from_js(val)?;
Expand Down
9 changes: 6 additions & 3 deletions nodejs-polars/src/dataframe/frame.rs
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,8 @@ pub fn sort_in_place(cx: CallContext) -> JsResult<JsUndefined> {
let df = params.get_external_mut::<DataFrame>(&cx, "_df")?;
let by_column = params.get_as::<&str>("by")?;
let reverse = params.get_as::<bool>("reverse")?;
df.sort_in_place(by_column, reverse)

df.sort_in_place([by_column], reverse)
.map_err(JsPolarsEr::from)?;

cx.env.get_undefined()
Expand Down Expand Up @@ -530,8 +531,10 @@ pub fn frame_equal(cx: CallContext) -> JsResult<JsBoolean> {
pub fn with_row_count(cx: CallContext) -> JsResult<JsExternal> {
let params = get_params(&cx)?;
let df = params.get_external::<DataFrame>(&cx, "_df")?;
let name = params.get_as::<&str>("name")?;
df.with_row_count(name)
let name = params.get_as::<String>("name")?;
let offset: Option<u32> = params.get_as("offset")?;

df.with_row_count(&name, offset)
.map_err(JsPolarsEr::from)?
.try_into_js(&cx)
}
Expand Down
11 changes: 9 additions & 2 deletions nodejs-polars/src/lazy/lazyframe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use polars::lazy::frame::{LazyCsvReader, LazyFrame, LazyGroupBy};
use polars::lazy::prelude::col;
use polars::prelude::NullValues;
use polars::prelude::*;
use polars::io::RowCount;

impl IntoJs<JsExternal> for LazyFrame {
fn try_into_js(self, cx: &CallContext) -> JsResult<JsExternal> {
Expand Down Expand Up @@ -65,11 +66,14 @@ pub fn scan_parquet(cx: CallContext) -> JsResult<JsExternal> {
let cache: bool = params.get_or("cache", true)?;
let rechunk: bool = params.get_or("rechunk", true)?;

let row_count = params.get_as::<Option<RowCount>>("rowCount")?;

let args = ScanArgsParquet {
n_rows,
cache,
parallel,
rechunk,
row_count,
};

LazyFrame::scan_parquet(path, args)
Expand All @@ -85,11 +89,13 @@ pub fn scan_ipc(cx: CallContext) -> JsResult<JsExternal> {
let n_rows: Option<usize> = params.get_as("numRows")?;
let cache: bool = params.get_or("cache", true)?;
let rechunk: bool = params.get_or("rechunk", true)?;

let row_count = params.get_as::<Option<RowCount>>("rowCount")?;

let args = ScanArgsIpc {
n_rows,
cache,
rechunk,
row_count,
};

LazyFrame::scan_ipc(path, args)
Expand Down Expand Up @@ -466,8 +472,9 @@ pub fn with_row_count(cx: CallContext) -> JsResult<JsExternal> {
let params = get_params(&cx)?;
let ldf = params.get_external::<LazyFrame>(&cx, "_ldf")?.clone();
let name: String = params.get_as("name")?;
let offset: Option<u32> = params.get_as("offset")?;

ldf.with_row_count(&name).try_into_js(&cx)
ldf.with_row_count(&name, offset).try_into_js(&cx)
}

#[js_function(1)]
Expand Down

0 comments on commit 34b75b7

Please sign in to comment.