taking today time as default -> working for datetime, not timezone yet

This commit is contained in:
Loïc Riegel 2025-04-04 00:42:45 +02:00
parent 71964354e0
commit 44fea3e00e

View File

@ -540,7 +540,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value {
Now, Now,
Zero, Zero,
} }
let mut record_column_default = RecordColumnDefault::Zero; let mut record_column_default = RecordColumnDefault::Now;
let now = Local::now(); let now = Local::now();
let mut now_nanosecond = now.nanosecond(); let mut now_nanosecond = now.nanosecond();
@ -549,25 +549,30 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value {
let now_microsecond = now_nanosecond / 1_000; let now_microsecond = now_nanosecond / 1_000;
now_nanosecond %= 1_000; now_nanosecond %= 1_000;
let nanosecond = match record.get("nanosecond") { let year: i32 = match record.get("year") {
Some(col_val) => { Some(val) => {
record_column_default = RecordColumnDefault::Now; record_column_default = RecordColumnDefault::Zero;
match parse_value_from_record_as_u32_bis("nanosecond", col_val, &head, &span) { match val {
Ok(value) => value, Value::Int { val, .. } => *val as i32,
Err(err) => { other => {
return err; return Value::error(
ShellError::OnlySupportsThisInputType {
exp_input_type: "int".to_string(),
wrong_type: other.get_type().to_string(),
dst_span: head,
src_span: other.span(),
},
span,
);
} }
} }
} }
None => match record_column_default { None => now.year(),
RecordColumnDefault::Now => now_nanosecond,
RecordColumnDefault::Zero => 0,
},
}; };
let microsecond = match record.get("microsecond") { let month = match record.get("month") {
Some(col_val) => { Some(col_val) => {
record_column_default = RecordColumnDefault::Now; record_column_default = RecordColumnDefault::Zero;
match parse_value_from_record_as_u32_bis("microsecond", col_val, &head, &span) { match parse_value_from_record_as_u32_bis("month", col_val, &head, &span) {
Ok(value) => value, Ok(value) => value,
Err(err) => { Err(err) => {
return err; return err;
@ -575,73 +580,13 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value {
} }
} }
None => match record_column_default { None => match record_column_default {
RecordColumnDefault::Now => now_microsecond, RecordColumnDefault::Now => now.month(),
RecordColumnDefault::Zero => 0, RecordColumnDefault::Zero => 1,
},
};
let millisecond = match record.get("millisecond") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Now;
match parse_value_from_record_as_u32_bis("millisecond", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now_millisecond,
RecordColumnDefault::Zero => 0,
},
};
let second = match record.get("second") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Now;
match parse_value_from_record_as_u32_bis("second", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now.second(),
RecordColumnDefault::Zero => 0,
},
};
let minute = match record.get("minute") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Now;
match parse_value_from_record_as_u32_bis("minute", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now.minute(),
RecordColumnDefault::Zero => 0,
},
};
let hour = match record.get("hour") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Now;
match parse_value_from_record_as_u32_bis("hour", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now.hour(),
RecordColumnDefault::Zero => 0,
}, },
}; };
let day = match record.get("day") { let day = match record.get("day") {
Some(col_val) => { Some(col_val) => {
record_column_default = RecordColumnDefault::Now; record_column_default = RecordColumnDefault::Zero;
match parse_value_from_record_as_u32_bis("day", col_val, &head, &span) { match parse_value_from_record_as_u32_bis("day", col_val, &head, &span) {
Ok(value) => value, Ok(value) => value,
Err(err) => { Err(err) => {
@ -654,34 +599,95 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value {
RecordColumnDefault::Zero => 1, RecordColumnDefault::Zero => 1,
}, },
}; };
let month = match record.get("month") { let hour = match record.get("hour") {
Some(col_val) => match parse_value_from_record_as_u32_bis("month", col_val, &head, &span) { Some(col_val) => {
Ok(value) => value, record_column_default = RecordColumnDefault::Zero;
Err(err) => { match parse_value_from_record_as_u32_bis("hour", col_val, &head, &span) {
return err; Ok(value) => value,
Err(err) => {
return err;
}
} }
}, }
None => match record_column_default { None => match record_column_default {
RecordColumnDefault::Now => now.month(), RecordColumnDefault::Now => now.hour(),
RecordColumnDefault::Zero => 1, RecordColumnDefault::Zero => 0,
}, },
}; };
let year: i32 = match record.get("year") { let minute = match record.get("minute") {
Some(val) => match val { Some(col_val) => {
Value::Int { val, .. } => *val as i32, record_column_default = RecordColumnDefault::Zero;
other => { match parse_value_from_record_as_u32_bis("minute", col_val, &head, &span) {
return Value::error( Ok(value) => value,
ShellError::OnlySupportsThisInputType { Err(err) => {
exp_input_type: "int".to_string(), return err;
wrong_type: other.get_type().to_string(), }
dst_span: head,
src_span: other.span(),
},
span,
);
} }
}
None => match record_column_default {
RecordColumnDefault::Now => now.minute(),
RecordColumnDefault::Zero => 0,
},
};
let second = match record.get("second") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Zero;
match parse_value_from_record_as_u32_bis("second", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now.second(),
RecordColumnDefault::Zero => 0,
},
};
let millisecond = match record.get("millisecond") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Zero;
match parse_value_from_record_as_u32_bis("millisecond", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now_millisecond,
RecordColumnDefault::Zero => 0,
},
};
let microsecond = match record.get("microsecond") {
Some(col_val) => {
record_column_default = RecordColumnDefault::Zero;
match parse_value_from_record_as_u32_bis("microsecond", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now_microsecond,
RecordColumnDefault::Zero => 0,
},
};
let nanosecond = match record.get("nanosecond") {
Some(col_val) => {
match parse_value_from_record_as_u32_bis("nanosecond", col_val, &head, &span) {
Ok(value) => value,
Err(err) => {
return err;
}
}
}
None => match record_column_default {
RecordColumnDefault::Now => now_nanosecond,
RecordColumnDefault::Zero => 0,
}, },
None => now.year(),
}; };
let offset = match parse_timezone_from_record(record, &head, &span) { let offset = match parse_timezone_from_record(record, &head, &span) {
@ -756,7 +762,6 @@ fn parse_value_from_record_as_u32_bis(
head: &Span, head: &Span,
span: &Span, span: &Span,
) -> Result<u32, Value> { ) -> Result<u32, Value> {
dbg!(col);
let value: u32 = match col_val { let value: u32 = match col_val {
Value::Int { val, .. } => { Value::Int { val, .. } => {
if *val < 0 || *val > u32::MAX as i64 { if *val < 0 || *val > u32::MAX as i64 {