@@ -1321,9 +1321,7 @@ g.test_datetime_23_2 = function()
1321
1321
g .server :exec (function ()
1322
1322
local t = require (' luatest' )
1323
1323
local sql = [[ SELECT dt + 1 FROM t2;]]
1324
- local res = [[ Type mismatch: can not convert ]] ..
1325
- [[ datetime(2001-01-01T01:00:00Z) ]] ..
1326
- [[ to integer, decimal or double]]
1324
+ local res = [[ Type mismatch: can not convert integer(1) to interval]]
1327
1325
local _ , err = box .execute (sql )
1328
1326
t .assert_equals (err .message , res )
1329
1327
end )
@@ -1333,9 +1331,8 @@ g.test_datetime_23_3 = function()
1333
1331
g .server :exec (function ()
1334
1332
local t = require (' luatest' )
1335
1333
local sql = [[ SELECT dt - 1 FROM t2;]]
1336
- local res = [[ Type mismatch: can not convert ]] ..
1337
- [[ datetime(2001-01-01T01:00:00Z) ]] ..
1338
- [[ to integer, decimal or double]]
1334
+ local res = [[ Type mismatch: can not convert integer(1) to ]] ..
1335
+ [[ datetime or interval]]
1339
1336
local _ , err = box .execute (sql )
1340
1337
t .assert_equals (err .message , res )
1341
1338
end )
@@ -2259,3 +2256,109 @@ g.test_datetime_30_18 = function()
2259
2256
t .assert_equals (rows , res )
2260
2257
end )
2261
2258
end
2259
+
2260
+ -- Make sure that arithmetic for datetime works as intended.
2261
+ g .test_datetime_31_1 = function ()
2262
+ g .server :exec (function ()
2263
+ local t = require (' luatest' )
2264
+ local dt = require (' datetime' )
2265
+ local itv = dt .interval
2266
+ local dt1 = dt .new ({year = 2001 , month = 1 , day = 1 , hour = 1 })
2267
+ local dt2 = dt .new ({year = 2002 , month = 2 , day = 2 , hour = 2 })
2268
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2269
+ t .assert_equals (dt2 - dt1 , itv1 )
2270
+
2271
+ local rows = box .execute ([[ SELECT $1 - $2;]] , {dt2 , dt1 }).rows
2272
+ t .assert_equals (rows , {{itv1 }})
2273
+ end )
2274
+ end
2275
+
2276
+ g .test_datetime_31_2 = function ()
2277
+ g .server :exec (function ()
2278
+ local t = require (' luatest' )
2279
+ local dt = require (' datetime' )
2280
+ local dt1 = dt .new ({year = 2001 , month = 1 , day = 1 , hour = 1 })
2281
+ local dt2 = dt .new ({year = 2002 , month = 2 , day = 2 , hour = 2 })
2282
+ local _ , err = box .execute ([[ SELECT $1 + $2;]] , {dt1 , dt2 })
2283
+ t .assert_equals (err .message , [[ Type mismatch: can not convert ]] ..
2284
+ [[ datetime(2002-02-02T02:00:00Z) to ]] ..
2285
+ [[ interval]] )
2286
+ end )
2287
+ end
2288
+
2289
+ g .test_datetime_31_3 = function ()
2290
+ g .server :exec (function ()
2291
+ local t = require (' luatest' )
2292
+ local dt = require (' datetime' )
2293
+ local itv = dt .interval
2294
+ local dt1 = dt .new ({year = 2001 , month = 1 , day = 1 , hour = 1 })
2295
+ local dt2 = dt .new ({year = 2002 , month = 2 , day = 2 , hour = 2 })
2296
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2297
+ local rows = box .execute ([[ SELECT $1 + $2;]] , {dt1 , itv1 }).rows
2298
+ t .assert_equals (rows , {{dt2 }})
2299
+ end )
2300
+ end
2301
+
2302
+ g .test_datetime_31_4 = function ()
2303
+ g .server :exec (function ()
2304
+ local t = require (' luatest' )
2305
+ local dt = require (' datetime' )
2306
+ local itv = dt .interval
2307
+ local dt1 = dt .new ({year = 2001 , month = 1 , day = 1 , hour = 1 })
2308
+ local dt2 = dt .new ({year = 2002 , month = 2 , day = 2 , hour = 2 })
2309
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2310
+ local rows = box .execute ([[ SELECT $1 - $2;]] , {dt2 , itv1 }).rows
2311
+ t .assert_equals (rows , {{dt1 }})
2312
+ end )
2313
+ end
2314
+
2315
+ g .test_datetime_31_5 = function ()
2316
+ g .server :exec (function ()
2317
+ local t = require (' luatest' )
2318
+ local dt = require (' datetime' )
2319
+ local itv = dt .interval
2320
+ local dt1 = dt .new ({year = 2001 , month = 1 , day = 1 , hour = 1 })
2321
+ local dt2 = dt .new ({year = 2002 , month = 2 , day = 2 , hour = 2 })
2322
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2323
+ local rows = box .execute ([[ SELECT $1 + $2;]] , {itv1 , dt1 }).rows
2324
+ t .assert_equals (rows , {{dt2 }})
2325
+ end )
2326
+ end
2327
+
2328
+ g .test_datetime_31_6 = function ()
2329
+ g .server :exec (function ()
2330
+ local t = require (' luatest' )
2331
+ local dt = require (' datetime' )
2332
+ local itv = dt .interval
2333
+ local dt1 = dt .new ({year = 2001 , month = 1 , day = 1 , hour = 1 })
2334
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2335
+ local _ , err = box .execute ([[ SELECT $1 - $2;]] , {itv1 , dt1 })
2336
+ t .assert_equals (err .message , [[ Type mismatch: can not convert ]] ..
2337
+ [[ datetime(2001-01-01T01:00:00Z) to ]] ..
2338
+ [[ interval]] )
2339
+ end )
2340
+ end
2341
+
2342
+ g .test_datetime_31_7 = function ()
2343
+ g .server :exec (function ()
2344
+ local t = require (' luatest' )
2345
+ local itv = require (' datetime' ).interval
2346
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2347
+ local itv2 = itv .new ({year = 2 , month = 3 , day = 4 , hour = 5 })
2348
+ local itv3 = itv .new ({year = 3 , month = 4 , day = 5 , hour = 6 })
2349
+ local rows = box .execute ([[ SELECT $1 - $2;]] , {itv3 , itv1 }).rows
2350
+ t .assert_equals (rows , {{itv2 }})
2351
+ end )
2352
+ end
2353
+
2354
+ g .test_datetime_31_8 = function ()
2355
+ g .server :exec (function ()
2356
+ local t = require (' luatest' )
2357
+ local itv = require (' datetime' ).interval
2358
+ local itv1 = itv .new ({year = 1 , month = 1 , day = 1 , hour = 1 })
2359
+ local itv2 = itv .new ({year = 2 , month = 3 , day = 4 , hour = 5 })
2360
+ local itv3 = itv .new ({year = 3 , month = 4 , day = 5 , hour = 6 })
2361
+ local rows = box .execute ([[ SELECT $1 + $2;]] , {itv2 , itv1 }).rows
2362
+ t .assert_equals (rows , {{itv3 }})
2363
+ end )
2364
+ end
0 commit comments