Skip to content

Commit de3fb55

Browse files
committed
Add encoding options to session options
1 parent 9715c77 commit de3fb55

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

src/result.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::{
2+
session::SessionWrapper,
23
types::{
34
local_date::LocalDateWrapper,
45
time_uuid::TimeUuidWrapper,
@@ -29,7 +30,7 @@ enum QueryResultVariant {
2930
RowsResult(QueryRowsResult),
3031
}
3132

32-
#[napi]
33+
#[napi(object)]
3334
#[derive(Clone)]
3435
pub struct EncodingOptions {
3536
pub use_big_int_as_long: bool,
@@ -62,21 +63,24 @@ pub struct MetaColumnWrapper {
6263

6364
#[napi]
6465
impl QueryResultWrapper {
65-
pub fn from_query(internal: QueryResult) -> napi::Result<QueryResultWrapper> {
66+
pub fn from_query(
67+
internal: QueryResult,
68+
client: &SessionWrapper,
69+
) -> napi::Result<QueryResultWrapper> {
6670
let value = match internal.into_rows_result() {
6771
Ok(v) => QueryResultVariant::RowsResult(v),
6872
Err(IntoRowsResultError::ResultNotRows(v)) => QueryResultVariant::EmptyResult(v),
6973
Err(IntoRowsResultError::ResultMetadataLazyDeserializationError(e)) => {
7074
return Err(err_to_napi(e));
7175
}
7276
};
73-
let empty_decoding_options = EncodingOptions {
74-
use_big_int_as_long: false,
75-
use_big_int_as_varint: false,
76-
};
7777
Ok(QueryResultWrapper {
7878
internal: value,
79-
decoding_options: empty_decoding_options,
79+
decoding_options: client
80+
.options
81+
.encoding_options
82+
.clone()
83+
.unwrap_or(EncodingOptions::default()),
8084
})
8185
}
8286

@@ -453,3 +457,12 @@ pub(crate) fn map_column_type_to_complex_type(typ: &ColumnType) -> ComplexType {
453457
other => unimplemented!("Missing implementation for CQL type {:?}", other),
454458
}
455459
}
460+
461+
impl EncodingOptions {
462+
pub(crate) fn default() -> EncodingOptions {
463+
EncodingOptions {
464+
use_big_int_as_long: true,
465+
use_big_int_as_varint: false,
466+
}
467+
}
468+
}

src/session.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ use scylla::value::CqlValue;
99
use crate::options;
1010
use crate::requests::parameter_wrappers::QueryParameterWrapper;
1111
use crate::requests::request::QueryOptionsWrapper;
12+
use crate::result::EncodingOptions;
1213
use crate::utils::{bigint_to_i64, js_error};
1314
use crate::{
1415
requests::request::PreparedStatementWrapper, result::QueryResultWrapper, utils::err_to_napi,
1516
};
1617

1718
#[napi]
19+
#[derive(Clone)]
1820
pub struct SessionOptions {
1921
pub connect_points: Vec<String>,
2022
pub application_name: Option<String>,
2123
pub application_version: Option<String>,
24+
pub encoding_options: Option<EncodingOptions>,
2225
}
2326

2427
#[napi]
@@ -29,6 +32,7 @@ pub struct BatchWrapper {
2932
#[napi]
3033
pub struct SessionWrapper {
3134
inner: Session,
35+
pub(crate) options: SessionOptions,
3236
}
3337

3438
#[napi]
@@ -39,6 +43,7 @@ impl SessionOptions {
3943
connect_points: vec![],
4044
application_name: None,
4145
application_version: None,
46+
encoding_options: None,
4247
}
4348
}
4449
}
@@ -53,7 +58,10 @@ impl SessionWrapper {
5358
.build()
5459
.await
5560
.map_err(err_to_napi)?;
56-
Ok(SessionWrapper { inner: s })
61+
Ok(SessionWrapper {
62+
inner: s,
63+
options: options.clone(),
64+
})
5765
}
5866

5967
#[napi]
@@ -72,7 +80,7 @@ impl SessionWrapper {
7280
.query_unpaged(query, &[])
7381
.await
7482
.map_err(err_to_napi)?;
75-
QueryResultWrapper::from_query(query_result)
83+
QueryResultWrapper::from_query(query_result, self)
7684
}
7785

7886
/// Executes unprepared query. This assumes the types will be either guessed or provided by user.
@@ -93,7 +101,7 @@ impl SessionWrapper {
93101
.query_unpaged(query, params_vec)
94102
.await
95103
.map_err(err_to_napi)?;
96-
QueryResultWrapper::from_query(query_result)
104+
QueryResultWrapper::from_query(query_result, &self)
97105
}
98106

99107
/// Prepares a statement through rust driver for a given session
@@ -131,6 +139,7 @@ impl SessionWrapper {
131139
.execute_unpaged(&query, params_vec)
132140
.await
133141
.map_err(err_to_napi)?,
142+
self,
134143
)
135144
}
136145

@@ -149,6 +158,7 @@ impl SessionWrapper {
149158
.batch(&batch.inner, params_vec)
150159
.await
151160
.map_err(err_to_napi)?,
161+
self,
152162
)
153163
}
154164
}

0 commit comments

Comments
 (0)