@@ -3430,7 +3430,7 @@ CASE WHEN TRUE THEN COALESCE(NULL) ELSE 4 END
3430
3430
NULL
3431
3431
SELECT COALESCE(COALESCE(NULL), 1.1) AS c0, IF(0, COALESCE(NULL), 1.1) AS c1;
3432
3432
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
3433
- def c0 246 4 3 Y 32896 1 63
3433
+ def c0 246 4 3 N 32897 1 63
3434
3434
def c1 246 4 3 Y 32896 1 63
3435
3435
c0 c1
3436
3436
1.1 1.1
@@ -3795,8 +3795,8 @@ FROM t1;
3795
3795
SHOW CREATE TABLE t2;
3796
3796
Table Create Table
3797
3797
t2 CREATE TABLE `t2` (
3798
- `f0` decimal(1,0) DEFAULT NULL,
3799
- `f1` decimal(1,0) DEFAULT NULL
3798
+ `f0` decimal(1,0) NOT NULL,
3799
+ `f1` decimal(1,0) NOT NULL
3800
3800
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
3801
3801
DROP TABLE t1, t2;
3802
3802
SET sql_mode=DEFAULT;
@@ -4362,3 +4362,146 @@ LEAST( CAST( 0 AS CHAR ), OLD_PASSWORD( 1 ) )
4362
4362
#
4363
4363
# End of 10.6 tests
4364
4364
#
4365
+ #
4366
+ # MDEV-36581: COALESCE() returns nullable column while IFNULL() does not
4367
+ #
4368
+ CREATE OR REPLACE VIEW test_coalesce_vs_ifnull AS
4369
+ SELECT
4370
+ COALESCE(operation_date, '1970-01-01 00:00:00') AS coalesced_date,
4371
+ IFNULL(operation_date, '1970-01-01 00:00:00') AS ifnull_date
4372
+ FROM (
4373
+ SELECT NULL AS operation_date
4374
+ ) AS t;
4375
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE
4376
+ FROM INFORMATION_SCHEMA.COLUMNS
4377
+ WHERE TABLE_NAME = 'test_coalesce_vs_ifnull';
4378
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4379
+ coalesced_date NO varchar(19)
4380
+ ifnull_date NO varchar(19)
4381
+ DROP VIEW test_coalesce_vs_ifnull;
4382
+ CREATE VIEW v2 as SELECT COALESCE(c, NULL) AS c_col, IFNULL(c, 10) AS i_col FROM (SELECT NULL AS c) AS t;
4383
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'v2';
4384
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4385
+ c_col YES binary(0)
4386
+ i_col NO varchar(2)
4387
+ DROP VIEW v2;
4388
+ CREATE VIEW v3 as SELECT COALESCE(c, 10, NULL) AS c_col, IFNULL(c, 10) AS i_col FROM (SELECT NULL AS c) AS t;
4389
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'v3';
4390
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4391
+ c_col NO varchar(2)
4392
+ i_col NO varchar(2)
4393
+ DROP VIEW v3;
4394
+ CREATE VIEW v4 AS SELECT COALESCE(c, NULL, NULL) as c_col FROM (SELECT NULL AS c) AS t;
4395
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'v4';
4396
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4397
+ c_col YES binary(0)
4398
+ DROP VIEW v4;
4399
+ CREATE VIEW v5 AS SELECT COALESCE(c, COALESCE(NULL, 10), NULL) as c_col FROM (SELECT NULL AS c) AS t;
4400
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'v5';
4401
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4402
+ c_col NO varchar(2)
4403
+ DROP VIEW v5;
4404
+ CREATE TABLE t (c1 INT, c2 DOUBLE, c3 VARCHAR(5), c4 DATE);
4405
+ INSERT INTO t values (1, 2.3, 'four', '2025-05-06');
4406
+ SELECT COALESCE(c1, 10) AS coalesced_c1, IFNULL(c1, 10) AS ifnull_c1 FROM t;
4407
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4408
+ def coalesced_c1 3 11 1 N 32897 0 63
4409
+ def ifnull_c1 3 11 1 N 32897 0 63
4410
+ coalesced_c1 ifnull_c1
4411
+ 1 1
4412
+ SELECT COALESCE(c1, NULL) AS coalesced_c1, IFNULL(c1, NULL) AS ifnull_c1 FROM t;
4413
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4414
+ def coalesced_c1 3 11 1 Y 32896 0 63
4415
+ def ifnull_c1 3 11 1 Y 32896 0 63
4416
+ coalesced_c1 ifnull_c1
4417
+ 1 1
4418
+ SELECT COALESCE(c2, NULL) AS coalesced_c2, IFNULL(c2, NULL) as ifnull_c2 FROM t;
4419
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4420
+ def coalesced_c2 5 22 3 Y 32896 31 63
4421
+ def ifnull_c2 5 22 3 Y 32896 31 63
4422
+ coalesced_c2 ifnull_c2
4423
+ 2.3 2.3
4424
+ SELECT COALESCE(c3, 'two') as coalesced_c1, COALESCE(c4, '2025-07-08') AS coalesced_date FROM t;
4425
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4426
+ def coalesced_c1 253 5 4 N 1 39 8
4427
+ def coalesced_date 253 10 10 N 1 39 8
4428
+ coalesced_c1 coalesced_date
4429
+ four 2025-05-06
4430
+ INSERT INTO t values (2, 3.4, NULL, NULL);
4431
+ SELECT COALESCE(c3, 'two') AS coalesced_c3, IFNULL(c3, 'three') AS ifnull_c3 FROM t WHERE c1 = 2;
4432
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4433
+ def coalesced_c3 253 5 3 N 1 39 8
4434
+ def ifnull_c3 253 5 5 N 1 39 8
4435
+ coalesced_c3 ifnull_c3
4436
+ two three
4437
+ SELECT COALESCE(c3, 'four', NULL) AS coalesced_c3, COALESCE(COALESCE(c3, NULL), NULL) AS coalesced_c3_null FROM t WHERE c1 = 2;
4438
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4439
+ def coalesced_c3 253 5 4 N 1 39 8
4440
+ def coalesced_c3_null 253 5 0 Y 0 39 8
4441
+ coalesced_c3 coalesced_c3_null
4442
+ four NULL
4443
+ SELECT COALESCE(c4, COALESCE('2025-05-06', NULL)) AS coalesced_date FROM t WHERE c1 = 2;
4444
+ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
4445
+ def coalesced_date 253 10 10 N 1 39 8
4446
+ coalesced_date
4447
+ 2025-05-06
4448
+ DROP TABLE t;
4449
+ SET sql_mode='';
4450
+ CREATE TABLE t1 (a UUID, b VARCHAR(32) NOT NULL);
4451
+ INSERT INTO t1 VALUES (NULL, '1');
4452
+ CREATE TABLE t2 AS SELECT COALESCE(a, b), IFNULL(a, b) FROM t1;
4453
+ Warnings:
4454
+ Warning 1292 Incorrect uuid value: '1'
4455
+ Warning 1292 Incorrect uuid value: '1'
4456
+ SHOW CREATE TABLE t2;
4457
+ Table Create Table
4458
+ t2 CREATE TABLE `t2` (
4459
+ `COALESCE(a, b)` uuid DEFAULT NULL,
4460
+ `IFNULL(a, b)` uuid DEFAULT NULL
4461
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
4462
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't2';
4463
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4464
+ COALESCE(a, b) YES uuid
4465
+ IFNULL(a, b) YES uuid
4466
+ DROP TABLE t1, t2;
4467
+ CREATE TABLE t (c1 INET6, c2 INET4);
4468
+ INSERT INTO t VALUES ('::', '0.0.0.0'), (NULL, NULL);
4469
+ CREATE TABLE t1 AS
4470
+ SELECT
4471
+ COALESCE(c1, '::1') AS inet6_c1_c, IFNULL(c1, '::1') AS inet6_c1_i,
4472
+ COALESCE(c2, '0.0.0.0') AS inet4_c2_c, IFNULL(c2, '0.0.0.0') AS inet4_c2_i
4473
+ FROM t;
4474
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
4475
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4476
+ inet6_c1_c NO inet6
4477
+ inet6_c1_i NO inet6
4478
+ inet4_c2_c NO inet4
4479
+ inet4_c2_i NO inet4
4480
+ CREATE TABLE t2 AS
4481
+ SELECT
4482
+ COALESCE(c1, 'ipv6') AS inet6_c1_c, IFNULL(c1, 'ipv6') AS inet6_c1_i,
4483
+ COALESCE(c2, 'ipv4') AS inet4_c2_c, IFNULL(c2, 'ipv4') AS inet4_c2_i
4484
+ FROM t;
4485
+ Warnings:
4486
+ Warning 1292 Incorrect inet6 value: 'ipv6'
4487
+ Warning 1292 Incorrect inet6 value: 'ipv6'
4488
+ Warning 1292 Incorrect inet4 value: 'ipv4'
4489
+ Warning 1292 Incorrect inet4 value: 'ipv4'
4490
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't2';
4491
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4492
+ inet6_c1_c YES inet6
4493
+ inet6_c1_i YES inet6
4494
+ inet4_c2_c YES inet4
4495
+ inet4_c2_i YES inet4
4496
+ CREATE TABLE t3 AS SELECT COALESCE(c1, '::1') AS inet4_c1_c, IFNULL(c1, '::1') as inet6_c1_i FROM t WHERE c1 IS NULL;
4497
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't3';
4498
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4499
+ inet4_c1_c NO inet6
4500
+ inet6_c1_i NO inet6
4501
+ CREATE TABLE t4 AS SELECT COALESCE(c1, 'foo') AS inet4_c1_c, IFNULL(c1, 'bar') as inet6_c1_i FROM t WHERE c1 IS NOT NULL;
4502
+ SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't3';
4503
+ COLUMN_NAME IS_NULLABLE COLUMN_TYPE
4504
+ inet4_c1_c NO inet6
4505
+ inet6_c1_i NO inet6
4506
+ DROP TABLE t, t1, t2, t3, t4;
4507
+ # End of 10.11 tests
0 commit comments