Skip to content

Commit b96ccdf

Browse files
authored
Merge pull request #409 from taosdata/3.0
Merge 3.0 to main
2 parents 7fed0be + 76004da commit b96ccdf

40 files changed

+6806
-523
lines changed

.cargo/config.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ rustflags = [
4343
"-Wclippy::unnecessary_struct_initialization",
4444
"-Wclippy::unused_peekable",
4545
"-Wclippy::unused_rounding",
46-
"-Wclippy::useless_let_if_seq",
4746
"-Wclippy::while_float",
4847

4948
# Pedantic Group

taos-query/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ tokio = { version = "1", features = [
6868
lazy_static = "1.4"
6969
derive_builder = "0.12.0"
7070
tracing = { version = "0.1", features = ["log"] }
71+
uuid = { version = "1.11.0", features = [
72+
"v4",
73+
"fast-rng",
74+
"macro-diagnostics",
75+
] }
7176

7277
[dev-dependencies]
7378
flate2 = "1"

taos-query/src/common/raw/mod.rs

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -241,18 +241,6 @@ impl RawBlock {
241241
unsafe { (v as *const u64).read_unaligned() == 0x7FFFFF0000000000 }
242242
}
243243

244-
// const BOOL_NULL: u8 = 0x2;
245-
// const TINY_INT_NULL: i8 = i8::MIN;
246-
// const SMALL_INT_NULL: i16 = i16::MIN;
247-
// const INT_NULL: i32 = i32::MIN;
248-
// const BIG_INT_NULL: i64 = i64::MIN;
249-
// const FLOAT_NULL: f32 = 0x7FF00000i32 as f32;
250-
// const DOUBLE_NULL: f64 = 0x7FFFFF0000000000i64 as f64;
251-
// const U_TINY_INT_NULL: u8 = u8::MAX;
252-
// const U_SMALL_INT_NULL: u16 = u16::MAX;
253-
// const U_INT_NULL: u32 = u32::MAX;
254-
// const U_BIG_INT_NULL: u64 = u64::MAX;
255-
256244
let layout = Rc::new(RefCell::new(Layout::INLINE_DEFAULT.with_schema_changed()));
257245

258246
let bytes = bytes.into();
@@ -273,8 +261,7 @@ impl RawBlock {
273261

274262
for (i, (field, length)) in fields.iter().zip(lengths).enumerate() {
275263
macro_rules! _primitive_view {
276-
($ty:ident, $prim:ty) => {
277-
{
264+
($ty:ident, $prim:ty) => {{
278265
debug_assert_eq!(field.bytes(), *length);
279266
// column start
280267
let start = offset;
@@ -283,31 +270,17 @@ impl RawBlock {
283270
// byte slice from start to end: `[start, end)`.
284271
let data = bytes.slice(start..offset);
285272
let nulls = NullBits::from_iter((0..rows).map(|row| unsafe {
286-
paste::paste!{ [<$ty:snake _is_null>] (
273+
paste::paste! { [<$ty:snake _is_null>] (
287274
data
288275
.as_ptr()
289276
.offset(row as isize * std::mem::size_of::<$prim>() as isize)
290277
as *const $prim,
291278
) }
292279
}));
293-
// value as target type
294-
// let value_slice = unsafe {
295-
// std::slice::from_raw_parts(
296-
// transmute::<*const u8, *const $prim>(data.as_ptr()),
297-
// rows,
298-
// )
299-
// };
280+
300281
// Set data lengths for v3-compatible block.
301282
data_lengths[i] = data.len() as u32;
302283

303-
// generate nulls bitmap.
304-
// let nulls = NullsMut::from_bools(
305-
// value_slice
306-
// .iter()
307-
// .map(|v| paste::paste!{ [<$ty:snake _is_null>](v as _) })
308-
// // .map(|b| *b as u64 == paste::paste! { [<$ty:snake:upper _NULL>] }),
309-
// )
310-
// .into_nulls();
311284
// build column view
312285
let column = paste::paste! { ColumnView::$ty([<$ty View>] { nulls, data }) };
313286
columns.push(column);
@@ -831,10 +804,6 @@ impl RawBlock {
831804
self.columns.get_unchecked(col).get_ref_unchecked(row)
832805
}
833806

834-
// unsafe fn get_col_unchecked(&self, col: usize) -> &ColumnView {
835-
// self.columns.get_unchecked(col)
836-
// }
837-
838807
pub fn to_values(&self) -> Vec<Vec<Value>> {
839808
self.rows().map(RowView::into_values).collect_vec()
840809
}
@@ -859,13 +828,6 @@ impl RawBlock {
859828
PrettyBlock::new(self)
860829
}
861830

862-
// pub fn fields_iter(&self) -> impl Iterator<Item = Field> + '_ {
863-
// self.schemas()
864-
// .iter()
865-
// .zip(self.field_names())
866-
// .map(|(schema, name)| Field::new(name, schema.ty, schema.len))
867-
// }
868-
869831
pub fn to_create(&self) -> Option<MetaCreate> {
870832
self.table_name().map(|table_name| MetaCreate::Normal {
871833
table_name: table_name.to_string(),
@@ -1029,6 +991,7 @@ impl crate::prelude::sync::Inlinable for InlineBlock {
1029991
Ok(self.0.len())
1030992
}
1031993
}
994+
1032995
#[async_trait::async_trait]
1033996
impl crate::prelude::AsyncInlinable for InlineBlock {
1034997
async fn read_inlined<R: tokio::io::AsyncRead + Send + Unpin>(

taos-query/src/common/raw/views/big_int_unsigned_view.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -257,26 +257,6 @@ impl ExactSizeIterator for UBigIntViewIter<'_> {
257257
}
258258
}
259259

260-
impl<A: Into<Option<Item>>> FromIterator<A> for UBigIntView {
261-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
262-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
263-
.into_iter()
264-
.map(|v| match v.into() {
265-
Some(v) => (false, v),
266-
None => (true, Item::default()),
267-
})
268-
.unzip();
269-
Self {
270-
nulls: NullBits::from_iter(nulls),
271-
data: Bytes::from({
272-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
273-
std::mem::forget(values);
274-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len * ITEM_SIZE, cap * ITEM_SIZE) }
275-
}),
276-
}
277-
}
278-
}
279-
280260
#[test]
281261
fn test_slice() {
282262
let data = [0, 1, Item::MIN, Item::MAX];

taos-query/src/common/raw/views/big_int_view.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -258,26 +258,6 @@ impl ExactSizeIterator for BigIntViewIter<'_> {
258258
}
259259
}
260260

261-
impl<A: Into<Option<Item>>> FromIterator<A> for View {
262-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
263-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
264-
.into_iter()
265-
.map(|v| match v.into() {
266-
Some(v) => (false, v),
267-
None => (true, Item::default()),
268-
})
269-
.unzip();
270-
Self {
271-
nulls: NullBits::from_iter(nulls),
272-
data: Bytes::from({
273-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
274-
std::mem::forget(values);
275-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len * ITEM_SIZE, cap * ITEM_SIZE) }
276-
}),
277-
}
278-
}
279-
}
280-
281261
#[test]
282262
fn test_slice() {
283263
let data = [0, 1, 2, i64::MAX];

taos-query/src/common/raw/views/bool_view.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -251,26 +251,6 @@ impl ExactSizeIterator for BoolViewIter<'_> {
251251
}
252252
}
253253

254-
impl<A: Into<Option<bool>>> FromIterator<A> for BoolView {
255-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
256-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
257-
.into_iter()
258-
.map(|v| match v.into() {
259-
Some(v) => (false, v),
260-
None => (true, false),
261-
})
262-
.unzip();
263-
Self {
264-
nulls: NullBits::from_iter(nulls),
265-
data: Bytes::from({
266-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
267-
std::mem::forget(values);
268-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len, cap) }
269-
}),
270-
}
271-
}
272-
}
273-
274254
#[test]
275255
fn test_bool_slice() {
276256
let data = [true, false, false, true];

taos-query/src/common/raw/views/double_view.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -258,27 +258,6 @@ impl ExactSizeIterator for DoubleViewIter<'_> {
258258
}
259259
}
260260

261-
impl<A: Into<Option<Item>>> FromIterator<A> for View {
262-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
263-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
264-
.into_iter()
265-
.map(|v| match v.into() {
266-
Some(v) => (false, v),
267-
None => (true, Item::default()),
268-
})
269-
.unzip();
270-
// dbg!()
271-
Self {
272-
nulls: NullBits::from_iter(nulls),
273-
data: Bytes::from({
274-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
275-
std::mem::forget(values);
276-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len * ITEM_SIZE, cap * ITEM_SIZE) }
277-
}),
278-
}
279-
}
280-
}
281-
282261
#[test]
283262
fn test_slice() {
284263
let data = [0., 1., Item::MIN, Item::MAX];

taos-query/src/common/raw/views/float_view.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -258,26 +258,6 @@ impl ExactSizeIterator for FloatViewIter<'_> {
258258
}
259259
}
260260

261-
impl<A: Into<Option<Item>>> FromIterator<A> for View {
262-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
263-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
264-
.into_iter()
265-
.map(|v| match v.into() {
266-
Some(v) => (false, v),
267-
None => (true, Item::default()),
268-
})
269-
.unzip();
270-
Self {
271-
nulls: NullBits::from_iter(nulls),
272-
data: Bytes::from({
273-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
274-
std::mem::forget(values);
275-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len * ITEM_SIZE, cap * ITEM_SIZE) }
276-
}),
277-
}
278-
}
279-
}
280-
281261
#[test]
282262
fn test_slice() {
283263
let data = [0., 1., Item::MIN, Item::MAX];

taos-query/src/common/raw/views/int_unsigned_view.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -253,26 +253,6 @@ impl ExactSizeIterator for UIntViewIter<'_> {
253253
}
254254
}
255255

256-
impl<A: Into<Option<Item>>> FromIterator<A> for View {
257-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
258-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
259-
.into_iter()
260-
.map(|v| match v.into() {
261-
Some(v) => (false, v),
262-
None => (true, Item::default()),
263-
})
264-
.unzip();
265-
Self {
266-
nulls: NullBits::from_iter(nulls),
267-
data: Bytes::from({
268-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
269-
std::mem::forget(values);
270-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len * ITEM_SIZE, cap * ITEM_SIZE) }
271-
}),
272-
}
273-
}
274-
}
275-
276256
#[test]
277257
fn test_slice() {
278258
let data = [0, 1, Item::MIN, Item::MAX];

taos-query/src/common/raw/views/int_view.rs

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -259,40 +259,59 @@ impl ExactSizeIterator for IntViewIter<'_> {
259259
}
260260
}
261261

262-
impl<A: Into<Option<Item>>> FromIterator<A> for View {
263-
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
264-
let (nulls, mut values): (Vec<bool>, Vec<_>) = iter
265-
.into_iter()
266-
.map(|v| match v.into() {
267-
Some(v) => (false, v),
268-
None => (true, Item::default()),
269-
})
270-
.unzip();
271-
Self {
272-
nulls: NullBits::from_iter(nulls),
273-
data: Bytes::from({
274-
let (ptr, len, cap) = (values.as_mut_ptr(), values.len(), values.capacity());
275-
std::mem::forget(values);
276-
unsafe { Vec::from_raw_parts(ptr as *mut u8, len * ITEM_SIZE, cap * ITEM_SIZE) }
277-
}),
262+
#[cfg(test)]
263+
mod tests {
264+
use byteorder::{BigEndian, ByteOrder};
265+
266+
use crate::views::int_view::{Item, View, ITEM_SIZE};
267+
268+
#[test]
269+
fn test_slice() {
270+
let data = [0, 1, Item::MIN, Item::MAX];
271+
let view = View::from_iter(data);
272+
dbg!(&view);
273+
let slice = view.slice(1..3);
274+
dbg!(&slice);
275+
276+
let data = [None, Some(Item::MIN), Some(Item::MAX), None];
277+
let view = View::from_iter(data);
278+
dbg!(&view);
279+
let range = 1..4;
280+
let slice = view.slice(range.clone()).unwrap();
281+
for (v, i) in slice.iter().zip(range) {
282+
assert_eq!(v, data[i]);
278283
}
279284
}
280-
}
281285

282-
#[test]
283-
fn test_slice() {
284-
let data = [0, 1, Item::MIN, Item::MAX];
285-
let view = View::from_iter(data);
286-
dbg!(&view);
287-
let slice = view.slice(1..3);
288-
dbg!(&slice);
289-
290-
let data = [None, Some(Item::MIN), Some(Item::MAX), None];
291-
let view = View::from_iter(data);
292-
dbg!(&view);
293-
let range = 1..4;
294-
let slice = view.slice(range.clone()).unwrap();
295-
for (v, i) in slice.iter().zip(range) {
296-
assert_eq!(v, data[i]);
286+
#[cfg(target_endian = "little")]
287+
#[test]
288+
fn test_from_iterator() {
289+
let data = [0x12345678];
290+
let view = View::from_iter(data);
291+
let bytes = view.data;
292+
assert_eq!(bytes.to_vec(), vec![0x78, 0x56, 0x34, 0x12]);
293+
}
294+
295+
#[cfg(target_endian = "little")]
296+
#[test]
297+
fn test_from_iterator_mock_big_endian() {
298+
let mut bytes = [0u8; 16];
299+
BigEndian::write_i32(&mut bytes, 0x12345678);
300+
BigEndian::write_i32(&mut bytes[4..], 0x78563412);
301+
BigEndian::write_i32(&mut bytes[8..], 0x12131415);
302+
BigEndian::write_i32(&mut bytes[12..], 0x51413121);
303+
304+
for i in (0..bytes.len()).step_by(ITEM_SIZE) {
305+
let j = i + ITEM_SIZE;
306+
let val = Item::from_be_bytes(bytes[i..j].try_into().unwrap());
307+
bytes[i..j].copy_from_slice(&val.to_le_bytes());
308+
}
309+
310+
let expect = vec![
311+
0x78, 0x56, 0x34, 0x12, 0x12, 0x34, 0x56, 0x78, 0x15, 0x14, 0x13, 0x12, 0x21, 0x31,
312+
0x41, 0x51,
313+
];
314+
315+
assert_eq!(bytes.to_vec(), expect);
297316
}
298317
}

0 commit comments

Comments
 (0)