Skip to content

Commit 1cbf2ed

Browse files
committed
Added tests on time32 and time64 operators
1 parent 600d8f0 commit 1cbf2ed

File tree

6 files changed

+356
-206
lines changed

6 files changed

+356
-206
lines changed

docs/features.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ let kite_sql = DataBaseBuilder::path("./data")
133133
- Right
134134
- Full
135135
- Cross (Natural\Using)
136+
- [x] Exists
136137
- [x] Group By
137138
- [x] Having
138139
- [x] Order By
@@ -170,4 +171,5 @@ let kite_sql = DataBaseBuilder::path("./data")
170171
- Date
171172
- DateTime
172173
- Time
174+
- TimeStamp
173175
- Tuple

src/optimizer/core/histogram.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ impl Histogram {
339339
DataValue::Date64(value) => DataValue::Int64(*value)
340340
.cast(&LogicalType::Double)?
341341
.double(),
342-
DataValue::Time(value, ..) => DataValue::UInt32(*value)
342+
DataValue::Time32(value, ..) => DataValue::UInt32(*value)
343343
.cast(&LogicalType::Double)?
344344
.double(),
345345
DataValue::Time64(value, ..) => DataValue::Int64(*value)

src/types/evaluator/mod.rs

Lines changed: 160 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub mod int32;
99
pub mod int64;
1010
pub mod int8;
1111
pub mod null;
12-
pub mod time;
12+
pub mod time32;
1313
pub mod time64;
1414
pub mod tuple;
1515
pub mod uint16;
@@ -31,7 +31,7 @@ use crate::types::evaluator::int32::*;
3131
use crate::types::evaluator::int64::*;
3232
use crate::types::evaluator::int8::*;
3333
use crate::types::evaluator::null::NullBinaryEvaluator;
34-
use crate::types::evaluator::time::*;
34+
use crate::types::evaluator::time32::*;
3535
use crate::types::evaluator::time64::*;
3636
use crate::types::evaluator::tuple::{
3737
TupleEqBinaryEvaluator, TupleGtBinaryEvaluator, TupleGtEqBinaryEvaluator,
@@ -205,10 +205,6 @@ impl EvaluatorFactory {
205205
_ => Err(DatabaseError::UnsupportedBinaryOperator(ty, op)),
206206
},
207207
LogicalType::TimeStamp(_, _) => match op {
208-
BinaryOperator::Plus => Ok(BinaryEvaluatorBox(Arc::new(Time64PlusBinaryEvaluator))),
209-
BinaryOperator::Minus => {
210-
Ok(BinaryEvaluatorBox(Arc::new(Time64MinusBinaryEvaluator)))
211-
}
212208
BinaryOperator::Gt => Ok(BinaryEvaluatorBox(Arc::new(Time64GtBinaryEvaluator))),
213209
BinaryOperator::GtEq => Ok(BinaryEvaluatorBox(Arc::new(Time64GtEqBinaryEvaluator))),
214210
BinaryOperator::Lt => Ok(BinaryEvaluatorBox(Arc::new(Time64LtBinaryEvaluator))),
@@ -1059,6 +1055,164 @@ mod test {
10591055
Ok(())
10601056
}
10611057

1058+
#[test]
1059+
fn test_binary_op_time32_and_time64() -> Result<(), DatabaseError> {
1060+
let evaluator_time32 =
1061+
EvaluatorFactory::binary_create(LogicalType::Time(None, false), BinaryOperator::Plus)?;
1062+
assert_eq!(
1063+
evaluator_time32.0.binary_eval(
1064+
&DataValue::Time32(4190119896, 3, false),
1065+
&DataValue::Time32(2621204256, 4, false),
1066+
),
1067+
DataValue::Time32(2618593017, 4, false)
1068+
);
1069+
assert_eq!(
1070+
evaluator_time32.0.binary_eval(
1071+
&DataValue::Time32(4190175696, 3, false),
1072+
&DataValue::Time32(2621224256, 4, false),
1073+
),
1074+
DataValue::Null
1075+
);
1076+
1077+
let evaluator_time32 =
1078+
EvaluatorFactory::binary_create(LogicalType::Time(None, false), BinaryOperator::Minus)?;
1079+
assert_eq!(
1080+
evaluator_time32.0.binary_eval(
1081+
&DataValue::Time32(4190119896, 3, false),
1082+
&DataValue::Time32(2621204256, 4, false),
1083+
),
1084+
DataValue::Null
1085+
);
1086+
assert_eq!(
1087+
evaluator_time32.0.binary_eval(
1088+
&DataValue::Time32(2621204256, 4, false),
1089+
&DataValue::Time32(4190119896, 3, false),
1090+
),
1091+
DataValue::Time32(2375496, 4, false)
1092+
);
1093+
1094+
let evaluator_time32 =
1095+
EvaluatorFactory::binary_create(LogicalType::Time(None, false), BinaryOperator::Gt)?;
1096+
let evaluator_time64 = EvaluatorFactory::binary_create(
1097+
LogicalType::TimeStamp(None, false),
1098+
BinaryOperator::Gt,
1099+
)?;
1100+
assert_eq!(
1101+
evaluator_time32.0.binary_eval(
1102+
&DataValue::Time32(2621204256, 4, false),
1103+
&DataValue::Time32(4190119896, 3, false),
1104+
),
1105+
DataValue::Boolean(true)
1106+
);
1107+
assert_eq!(
1108+
evaluator_time32.0.binary_eval(
1109+
&DataValue::Time32(4190119896, 3, false),
1110+
&DataValue::Time32(2621204256, 4, false),
1111+
),
1112+
DataValue::Boolean(false)
1113+
);
1114+
assert_eq!(
1115+
evaluator_time64.0.binary_eval(
1116+
&DataValue::Time64(1736055775154814, 6, false),
1117+
&DataValue::Time64(1738734177256, 3, false),
1118+
),
1119+
DataValue::Boolean(false)
1120+
);
1121+
assert_eq!(
1122+
evaluator_time64.0.binary_eval(
1123+
&DataValue::Time64(1738734177256, 3, false),
1124+
&DataValue::Time64(1736055775154814, 6, false),
1125+
),
1126+
DataValue::Boolean(true)
1127+
);
1128+
1129+
let evaluator_time32 =
1130+
EvaluatorFactory::binary_create(LogicalType::Time(None, false), BinaryOperator::GtEq)?;
1131+
let evaluator_time64 = EvaluatorFactory::binary_create(
1132+
LogicalType::TimeStamp(None, false),
1133+
BinaryOperator::GtEq,
1134+
)?;
1135+
assert_eq!(
1136+
evaluator_time32.0.binary_eval(
1137+
&DataValue::Time32(2621204256, 4, false),
1138+
&DataValue::Time32(4190119896, 3, false),
1139+
),
1140+
DataValue::Boolean(true)
1141+
);
1142+
assert_eq!(
1143+
evaluator_time32.0.binary_eval(
1144+
&DataValue::Time32(4190119896, 3, false),
1145+
&DataValue::Time32(2621204256, 4, false),
1146+
),
1147+
DataValue::Boolean(false)
1148+
);
1149+
assert_eq!(
1150+
evaluator_time32.0.binary_eval(
1151+
&DataValue::Time32(4190119896, 3, false),
1152+
&DataValue::Time32(2618828760, 4, false),
1153+
),
1154+
DataValue::Boolean(true)
1155+
);
1156+
assert_eq!(
1157+
evaluator_time64.0.binary_eval(
1158+
&DataValue::Time64(1736055775154814, 6, false),
1159+
&DataValue::Time64(1738734177256, 3, false),
1160+
),
1161+
DataValue::Boolean(false)
1162+
);
1163+
assert_eq!(
1164+
evaluator_time64.0.binary_eval(
1165+
&DataValue::Time64(1738734177256, 3, false),
1166+
&DataValue::Time64(1736055775154814, 6, false),
1167+
),
1168+
DataValue::Boolean(true)
1169+
);
1170+
assert_eq!(
1171+
evaluator_time64.0.binary_eval(
1172+
&DataValue::Time64(1738734177256, 3, false),
1173+
&DataValue::Time64(1738734177256000, 6, false),
1174+
),
1175+
DataValue::Boolean(true)
1176+
);
1177+
1178+
let evaluator_time32 =
1179+
EvaluatorFactory::binary_create(LogicalType::Time(None, false), BinaryOperator::Eq)?;
1180+
let evaluator_time64 = EvaluatorFactory::binary_create(
1181+
LogicalType::TimeStamp(None, false),
1182+
BinaryOperator::Eq,
1183+
)?;
1184+
assert_eq!(
1185+
evaluator_time32.0.binary_eval(
1186+
&DataValue::Time32(4190119896, 3, false),
1187+
&DataValue::Time32(2621204256, 4, false),
1188+
),
1189+
DataValue::Boolean(false)
1190+
);
1191+
assert_eq!(
1192+
evaluator_time32.0.binary_eval(
1193+
&DataValue::Time32(4190119896, 3, false),
1194+
&DataValue::Time32(2618828760, 4, false),
1195+
),
1196+
DataValue::Boolean(true)
1197+
);
1198+
assert_eq!(
1199+
evaluator_time64.0.binary_eval(
1200+
&DataValue::Time64(1738734177256, 3, false),
1201+
&DataValue::Time64(1736055775154814, 6, false),
1202+
),
1203+
DataValue::Boolean(false)
1204+
);
1205+
assert_eq!(
1206+
evaluator_time64.0.binary_eval(
1207+
&DataValue::Time64(1738734177256, 3, false),
1208+
&DataValue::Time64(1738734177256000, 6, false),
1209+
),
1210+
DataValue::Boolean(true)
1211+
);
1212+
1213+
Ok(())
1214+
}
1215+
10621216
#[test]
10631217
fn test_reference_serialization() -> Result<(), DatabaseError> {
10641218
let mut cursor = Cursor::new(Vec::new());

0 commit comments

Comments
 (0)