parquet 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/parquet/src/adapter_ffi.rs +16 -10
- data/ext/parquet-ruby-adapter/src/schema.rs +9 -2
- data/ext/parquet-ruby-adapter/src/utils.rs +15 -0
- data/lib/parquet/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd9295880f123b0ed979fb970d789bf63461007e8c087641b47391baa02bef29
|
4
|
+
data.tar.gz: e5ccd26a48e7b800412049e9d44e7f8c6fb5c12dbe25c74980467c822fb114c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f275d82733cd6b1658ed7b6212618830e2a12e6831bcfcc26beeae79691ddc972b22b0b0660f10db9b0bb7a03e2af29da15de28d037d5896891fbd678b3ecca9
|
7
|
+
data.tar.gz: 8fbfd33a92350c84409c0e879745fbc5a07d60f0a2862a2993a4780eb5c110be7b3918bfdfe6721e60e44635792108a1a3eeed460a189076bd03056a27764e50
|
@@ -1,6 +1,6 @@
|
|
1
1
|
use magnus::scan_args::{get_kwargs, scan_args};
|
2
|
-
use magnus::value::ReprValue;
|
3
2
|
use magnus::{Error as MagnusError, Ruby, Value};
|
3
|
+
use parquet_ruby_adapter::utils::parse_string_or_symbol;
|
4
4
|
use parquet_ruby_adapter::{
|
5
5
|
logger::RubyLogger, types::ParserResultType, utils::parse_parquet_write_args,
|
6
6
|
};
|
@@ -34,11 +34,14 @@ pub fn each_row(rb_self: Value, args: &[Value]) -> Result<Value, MagnusError> {
|
|
34
34
|
)?;
|
35
35
|
|
36
36
|
let result_type: ParserResultType = if let Some(rt_value) = kwargs.optional.0.flatten() {
|
37
|
-
rt_value
|
38
|
-
.
|
39
|
-
|
37
|
+
parse_string_or_symbol(&ruby, rt_value)?
|
38
|
+
.ok_or_else(|| {
|
39
|
+
MagnusError::new(magnus::exception::arg_error(), "result_type cannot be nil")
|
40
|
+
})?
|
40
41
|
.parse()
|
41
|
-
.map_err(|
|
42
|
+
.map_err(|_| {
|
43
|
+
MagnusError::new(magnus::exception::arg_error(), "Invalid result_type value")
|
44
|
+
})?
|
42
45
|
} else {
|
43
46
|
ParserResultType::Hash
|
44
47
|
};
|
@@ -89,11 +92,14 @@ pub fn each_column(rb_self: Value, args: &[Value]) -> Result<Value, MagnusError>
|
|
89
92
|
)?;
|
90
93
|
|
91
94
|
let result_type: ParserResultType = if let Some(rt_value) = kwargs.optional.0.flatten() {
|
92
|
-
rt_value
|
93
|
-
.
|
94
|
-
|
95
|
+
parse_string_or_symbol(&ruby, rt_value)?
|
96
|
+
.ok_or_else(|| {
|
97
|
+
MagnusError::new(magnus::exception::arg_error(), "result_type cannot be nil")
|
98
|
+
})?
|
95
99
|
.parse()
|
96
|
-
.map_err(|
|
100
|
+
.map_err(|_| {
|
101
|
+
MagnusError::new(magnus::exception::arg_error(), "Invalid result_type value")
|
102
|
+
})?
|
97
103
|
} else {
|
98
104
|
ParserResultType::Hash
|
99
105
|
};
|
@@ -101,7 +107,7 @@ pub fn each_column(rb_self: Value, args: &[Value]) -> Result<Value, MagnusError>
|
|
101
107
|
let batch_size = if let Some(bs) = kwargs.optional.2.flatten() {
|
102
108
|
if bs == 0 {
|
103
109
|
return Err(MagnusError::new(
|
104
|
-
|
110
|
+
magnus::exception::arg_error(),
|
105
111
|
"batch_size must be greater than 0",
|
106
112
|
));
|
107
113
|
}
|
@@ -2,6 +2,8 @@ use magnus::value::ReprValue;
|
|
2
2
|
use magnus::{Error as MagnusError, RArray, RHash, Ruby, Symbol, TryConvert, Value};
|
3
3
|
use parquet_core::{ParquetError, PrimitiveType, Result, Schema, SchemaNode};
|
4
4
|
|
5
|
+
use crate::utils::parse_string_or_symbol;
|
6
|
+
|
5
7
|
/// Ruby schema builder that converts Ruby hash/array representations to Parquet schemas
|
6
8
|
pub struct RubySchemaBuilder;
|
7
9
|
|
@@ -595,7 +597,7 @@ fn schema_node_to_ruby(node: &SchemaNode, _ruby: &Ruby) -> Result<Value> {
|
|
595
597
|
/// Convert old schema format to new format
|
596
598
|
/// Old: [{ "column_name" => "type" }, ...]
|
597
599
|
/// New: [{ name: "column_name", type: :type }, ...]
|
598
|
-
pub fn convert_legacy_schema(
|
600
|
+
pub fn convert_legacy_schema(ruby: &Ruby, schema: RArray) -> Result<RArray> {
|
599
601
|
let new_schema = RArray::new();
|
600
602
|
|
601
603
|
for item in schema.into_iter() {
|
@@ -609,7 +611,12 @@ pub fn convert_legacy_schema(_ruby: &Ruby, schema: RArray) -> Result<RArray> {
|
|
609
611
|
|key: Value,
|
610
612
|
value: Value|
|
611
613
|
-> std::result::Result<magnus::r_hash::ForEach, MagnusError> {
|
612
|
-
let key_str: String =
|
614
|
+
let key_str: String = parse_string_or_symbol(ruby, key)?.ok_or_else(|| {
|
615
|
+
MagnusError::new(
|
616
|
+
magnus::exception::arg_error(),
|
617
|
+
"Nil keys not allowed in schema",
|
618
|
+
)
|
619
|
+
})?;
|
613
620
|
let type_str: String = TryConvert::try_convert(value)?;
|
614
621
|
|
615
622
|
new_field.aset(Symbol::new("name"), key_str)?;
|
@@ -122,6 +122,21 @@ pub fn parse_parquet_write_args(
|
|
122
122
|
})
|
123
123
|
}
|
124
124
|
|
125
|
+
/// Convert a Ruby Value to a String, handling both String and Symbol types
|
126
|
+
pub fn parse_string_or_symbol(ruby: &Ruby, value: Value) -> Result<Option<String>, MagnusError> {
|
127
|
+
if value.is_nil() {
|
128
|
+
Ok(None)
|
129
|
+
} else if value.is_kind_of(ruby.class_string()) || value.is_kind_of(ruby.class_symbol()) {
|
130
|
+
let stringed = value.to_r_string()?.to_string()?;
|
131
|
+
Ok(Some(stringed))
|
132
|
+
} else {
|
133
|
+
Err(MagnusError::new(
|
134
|
+
magnus::exception::type_error(),
|
135
|
+
"Value must be a String or Symbol",
|
136
|
+
))
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
125
140
|
/// Handle block or enumerator creation
|
126
141
|
pub fn handle_block_or_enum<F, T>(
|
127
142
|
block_given: bool,
|
data/lib/parquet/version.rb
CHANGED