@@ -9,7 +9,7 @@ pub mod int32;
9
9
pub mod int64;
10
10
pub mod int8;
11
11
pub mod null;
12
- pub mod time ;
12
+ pub mod time32 ;
13
13
pub mod time64;
14
14
pub mod tuple;
15
15
pub mod uint16;
@@ -31,7 +31,7 @@ use crate::types::evaluator::int32::*;
31
31
use crate :: types:: evaluator:: int64:: * ;
32
32
use crate :: types:: evaluator:: int8:: * ;
33
33
use crate :: types:: evaluator:: null:: NullBinaryEvaluator ;
34
- use crate :: types:: evaluator:: time :: * ;
34
+ use crate :: types:: evaluator:: time32 :: * ;
35
35
use crate :: types:: evaluator:: time64:: * ;
36
36
use crate :: types:: evaluator:: tuple:: {
37
37
TupleEqBinaryEvaluator , TupleGtBinaryEvaluator , TupleGtEqBinaryEvaluator ,
@@ -205,10 +205,6 @@ impl EvaluatorFactory {
205
205
_ => Err ( DatabaseError :: UnsupportedBinaryOperator ( ty, op) ) ,
206
206
} ,
207
207
LogicalType :: TimeStamp ( _, _) => match op {
208
- BinaryOperator :: Plus => Ok ( BinaryEvaluatorBox ( Arc :: new ( Time64PlusBinaryEvaluator ) ) ) ,
209
- BinaryOperator :: Minus => {
210
- Ok ( BinaryEvaluatorBox ( Arc :: new ( Time64MinusBinaryEvaluator ) ) )
211
- }
212
208
BinaryOperator :: Gt => Ok ( BinaryEvaluatorBox ( Arc :: new ( Time64GtBinaryEvaluator ) ) ) ,
213
209
BinaryOperator :: GtEq => Ok ( BinaryEvaluatorBox ( Arc :: new ( Time64GtEqBinaryEvaluator ) ) ) ,
214
210
BinaryOperator :: Lt => Ok ( BinaryEvaluatorBox ( Arc :: new ( Time64LtBinaryEvaluator ) ) ) ,
@@ -1059,6 +1055,164 @@ mod test {
1059
1055
Ok ( ( ) )
1060
1056
}
1061
1057
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
+
1062
1216
#[ test]
1063
1217
fn test_reference_serialization ( ) -> Result < ( ) , DatabaseError > {
1064
1218
let mut cursor = Cursor :: new ( Vec :: new ( ) ) ;
0 commit comments