Skip to content

Commit 8886ecb

Browse files
committed
cleanup
1 parent bb5cd4f commit 8886ecb

2 files changed

Lines changed: 88 additions & 96 deletions

File tree

bindings/cpp/include/fluss.hpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,20 @@ struct Datum {
399399
return d;
400400
}
401401

402+
private:
403+
DatumType type{DatumType::Null};
404+
bool bool_val{false};
405+
int32_t i32_val{0};
406+
int64_t i64_val{0};
407+
float f32_val{0.0F};
408+
double f64_val{0.0};
409+
std::string string_val;
410+
std::vector<uint8_t> bytes_val;
411+
int32_t decimal_precision{0}; // Decimal: precision (total digits)
412+
int32_t decimal_scale{0}; // Decimal: scale (digits after decimal point)
413+
int64_t i128_hi{0}; // Decimal (i128): high 64 bits of unscaled value
414+
int64_t i128_lo{0}; // Decimal (i128): low 64 bits of unscaled value
415+
402416
DatumType GetType() const { return type; }
403417
bool IsNull() const { return type == DatumType::Null; }
404418
bool GetBool() const { return bool_val; }
@@ -432,20 +446,6 @@ struct Datum {
432446
return "";
433447
}
434448

435-
private:
436-
DatumType type{DatumType::Null};
437-
bool bool_val{false};
438-
int32_t i32_val{0};
439-
int64_t i64_val{0};
440-
float f32_val{0.0F};
441-
double f64_val{0.0};
442-
std::string string_val;
443-
std::vector<uint8_t> bytes_val;
444-
int32_t decimal_precision{0}; // Decimal: precision (total digits)
445-
int32_t decimal_scale{0}; // Decimal: scale (digits after decimal point)
446-
int64_t i128_hi{0}; // Decimal (i128): high 64 bits of unscaled value
447-
int64_t i128_lo{0}; // Decimal (i128): low 64 bits of unscaled value
448-
449449
static std::string FormatUnscaled64(int64_t unscaled, int32_t scale) {
450450
bool negative = unscaled < 0;
451451
uint64_t abs_val =

bindings/cpp/src/ffi_converter.hpp

Lines changed: 74 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,79 @@ struct FfiAccess {
2929
static const std::vector<Datum>& fields(const GenericRow& row) { return row.fields; }
3030
static std::vector<Datum>& fields(GenericRow& row) { return row.fields; }
3131

32-
static int32_t decimal_precision(const Datum& d) { return d.decimal_precision; }
33-
static int32_t decimal_scale(const Datum& d) { return d.decimal_scale; }
34-
static int64_t i128_hi(const Datum& d) { return d.i128_hi; }
35-
static int64_t i128_lo(const Datum& d) { return d.i128_lo; }
36-
37-
static Datum from_ffi_decimal(const ffi::FfiDatum& ffi_datum, DatumType dtype) {
38-
Datum d;
39-
d.type = dtype;
40-
d.i64_val = ffi_datum.i64_val;
41-
d.decimal_precision = ffi_datum.decimal_precision;
42-
d.decimal_scale = ffi_datum.decimal_scale;
43-
d.i128_hi = ffi_datum.i128_hi;
44-
d.i128_lo = ffi_datum.i128_lo;
45-
if (dtype == DatumType::DecimalString) {
46-
d.string_val = std::string(ffi_datum.string_val);
32+
static ffi::FfiDatum to_ffi_datum(const Datum& datum) {
33+
ffi::FfiDatum ffi_datum;
34+
ffi_datum.datum_type = static_cast<int32_t>(datum.type);
35+
ffi_datum.bool_val = datum.bool_val;
36+
ffi_datum.i32_val = datum.i32_val;
37+
ffi_datum.i64_val = datum.i64_val;
38+
ffi_datum.f32_val = datum.f32_val;
39+
ffi_datum.f64_val = datum.f64_val;
40+
ffi_datum.string_val = rust::String(datum.string_val);
41+
ffi_datum.decimal_precision = datum.decimal_precision;
42+
ffi_datum.decimal_scale = datum.decimal_scale;
43+
ffi_datum.i128_hi = datum.i128_hi;
44+
ffi_datum.i128_lo = datum.i128_lo;
45+
46+
rust::Vec<uint8_t> bytes;
47+
for (auto b : datum.bytes_val) {
48+
bytes.push_back(b);
49+
}
50+
ffi_datum.bytes_val = std::move(bytes);
51+
52+
return ffi_datum;
53+
}
54+
55+
static Datum from_ffi_datum(const ffi::FfiDatum& ffi_datum) {
56+
auto dtype = static_cast<DatumType>(ffi_datum.datum_type);
57+
switch (dtype) {
58+
case DatumType::Null:
59+
return Datum::Null();
60+
case DatumType::Bool:
61+
return Datum::Bool(ffi_datum.bool_val);
62+
case DatumType::Int32:
63+
return Datum::Int32(ffi_datum.i32_val);
64+
case DatumType::Int64:
65+
return Datum::Int64(ffi_datum.i64_val);
66+
case DatumType::Float32:
67+
return Datum::Float32(ffi_datum.f32_val);
68+
case DatumType::Float64:
69+
return Datum::Float64(ffi_datum.f64_val);
70+
case DatumType::String:
71+
return Datum::String(std::string(ffi_datum.string_val));
72+
case DatumType::Bytes: {
73+
std::vector<uint8_t> bytes;
74+
for (auto b : ffi_datum.bytes_val) {
75+
bytes.push_back(b);
76+
}
77+
return Datum::Bytes(std::move(bytes));
78+
}
79+
case DatumType::Date:
80+
return Datum::Date(fluss::Date{ffi_datum.i32_val});
81+
case DatumType::Time:
82+
return Datum::Time(fluss::Time{ffi_datum.i32_val});
83+
case DatumType::TimestampNtz:
84+
return Datum::TimestampNtz(fluss::Timestamp{ffi_datum.i64_val, ffi_datum.i32_val});
85+
case DatumType::TimestampLtz:
86+
return Datum::TimestampLtz(fluss::Timestamp{ffi_datum.i64_val, ffi_datum.i32_val});
87+
case DatumType::DecimalI64:
88+
case DatumType::DecimalI128:
89+
case DatumType::DecimalString: {
90+
Datum d;
91+
d.type = dtype;
92+
d.i64_val = ffi_datum.i64_val;
93+
d.decimal_precision = ffi_datum.decimal_precision;
94+
d.decimal_scale = ffi_datum.decimal_scale;
95+
d.i128_hi = ffi_datum.i128_hi;
96+
d.i128_lo = ffi_datum.i128_lo;
97+
if (dtype == DatumType::DecimalString) {
98+
d.string_val = std::string(ffi_datum.string_val);
99+
}
100+
return d;
101+
}
102+
default:
103+
return Datum::Null();
47104
}
48-
return d;
49105
}
50106
};
51107
} // namespace detail
@@ -128,35 +184,12 @@ inline ffi::FfiTableDescriptor to_ffi_table_descriptor(const TableDescriptor& de
128184
return ffi_desc;
129185
}
130186

131-
inline ffi::FfiDatum to_ffi_datum(const Datum& datum) {
132-
ffi::FfiDatum ffi_datum;
133-
ffi_datum.datum_type = static_cast<int32_t>(datum.GetType());
134-
ffi_datum.bool_val = datum.GetBool();
135-
ffi_datum.i32_val = datum.GetInt32();
136-
ffi_datum.i64_val = datum.GetInt64();
137-
ffi_datum.f32_val = datum.GetFloat32();
138-
ffi_datum.f64_val = datum.GetFloat64();
139-
ffi_datum.string_val = rust::String(datum.GetString());
140-
ffi_datum.decimal_precision = detail::FfiAccess::decimal_precision(datum);
141-
ffi_datum.decimal_scale = detail::FfiAccess::decimal_scale(datum);
142-
ffi_datum.i128_hi = detail::FfiAccess::i128_hi(datum);
143-
ffi_datum.i128_lo = detail::FfiAccess::i128_lo(datum);
144-
145-
rust::Vec<uint8_t> bytes;
146-
for (auto b : datum.GetBytes()) {
147-
bytes.push_back(b);
148-
}
149-
ffi_datum.bytes_val = std::move(bytes);
150-
151-
return ffi_datum;
152-
}
153-
154187
inline ffi::FfiGenericRow to_ffi_generic_row(const GenericRow& row) {
155188
ffi::FfiGenericRow ffi_row;
156189

157190
rust::Vec<ffi::FfiDatum> ffi_fields;
158191
for (const auto& field : detail::FfiAccess::fields(row)) {
159-
ffi_fields.push_back(to_ffi_datum(field));
192+
ffi_fields.push_back(detail::FfiAccess::to_ffi_datum(field));
160193
}
161194
ffi_row.fields = std::move(ffi_fields);
162195

@@ -220,52 +253,11 @@ inline TableInfo from_ffi_table_info(const ffi::FfiTableInfo& ffi_info) {
220253
return info;
221254
}
222255

223-
inline Datum from_ffi_datum(const ffi::FfiDatum& ffi_datum) {
224-
auto dtype = static_cast<DatumType>(ffi_datum.datum_type);
225-
switch (dtype) {
226-
case DatumType::Null:
227-
return Datum::Null();
228-
case DatumType::Bool:
229-
return Datum::Bool(ffi_datum.bool_val);
230-
case DatumType::Int32:
231-
return Datum::Int32(ffi_datum.i32_val);
232-
case DatumType::Int64:
233-
return Datum::Int64(ffi_datum.i64_val);
234-
case DatumType::Float32:
235-
return Datum::Float32(ffi_datum.f32_val);
236-
case DatumType::Float64:
237-
return Datum::Float64(ffi_datum.f64_val);
238-
case DatumType::String:
239-
return Datum::String(std::string(ffi_datum.string_val));
240-
case DatumType::Bytes: {
241-
std::vector<uint8_t> bytes;
242-
for (auto b : ffi_datum.bytes_val) {
243-
bytes.push_back(b);
244-
}
245-
return Datum::Bytes(std::move(bytes));
246-
}
247-
case DatumType::Date:
248-
return Datum::Date(fluss::Date{ffi_datum.i32_val});
249-
case DatumType::Time:
250-
return Datum::Time(fluss::Time{ffi_datum.i32_val});
251-
case DatumType::TimestampNtz:
252-
return Datum::TimestampNtz(fluss::Timestamp{ffi_datum.i64_val, ffi_datum.i32_val});
253-
case DatumType::TimestampLtz:
254-
return Datum::TimestampLtz(fluss::Timestamp{ffi_datum.i64_val, ffi_datum.i32_val});
255-
case DatumType::DecimalI64:
256-
case DatumType::DecimalI128:
257-
case DatumType::DecimalString:
258-
return detail::FfiAccess::from_ffi_decimal(ffi_datum, dtype);
259-
default:
260-
return Datum::Null();
261-
}
262-
}
263-
264256
inline GenericRow from_ffi_generic_row(const ffi::FfiGenericRow& ffi_row) {
265257
GenericRow row;
266258

267259
for (const auto& field : ffi_row.fields) {
268-
detail::FfiAccess::fields(row).push_back(from_ffi_datum(field));
260+
detail::FfiAccess::fields(row).push_back(detail::FfiAccess::from_ffi_datum(field));
269261
}
270262

271263
return row;

0 commit comments

Comments
 (0)