Bug #117198 Inconsistent Results with CASE and Spatial Data Between Table and View
Submitted: 13 Jan 13:26 Modified: 13 Jan 14:27
Reporter: Wenqian Deng Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Data Types Severity:S3 (Non-critical)
Version:8.0 OS:Any
Assigned to: CPU Architecture:Any

[13 Jan 13:26] Wenqian Deng
Description:
When performing queries using a CASE statement with spatial data in MULTIPOLYGON format, inconsistent results are observed between queries executed on a table created via CREATE TABLE AS SELECT and a view created using the same query logic. Specifically, the number of rows returned differs when applying the same WHERE clause on the table and view.

How to repeat:
1.Create t0 and insert spatial data:

CREATE TABLE t0 (c0 MEDIUMINT, c1 DECIMAL, c2 VARCHAR(4), c3 MULTIPOLYGON);
INSERT INTO t0 (c0, c1, c2, c3) VALUES (901466, -9508047426.821144, 'IQb1', ST_GeomFromText('MULTIPOLYGON(((124.353036 24.73807, 88.364431 75.400008, -169.548411 82.050414, 24.984403 43.80306, 124.353036 24.73807)), ((-4.244989 82.257869, -130.256909 13.876689, 167.369044 3.409117, -115.609114 -53.464333, -22.969432 -13.789396, -4.244989 82.257869)), ((-143.585392 79.827203, 52.094297 25.374638, 12.160977 37.817167, -128.840316 6.289032, -143.585392 79.827203)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (-5661424, 4876699790.361849, 'xrF5', ST_GeomFromText('MULTIPOLYGON(((-102.391345 68.38709, 46.885622 11.149204, 78.518412 18.432797, 18.544831 59.360611, -106.224953 -15.045379, 111.271143 -45.523445, -102.391345 68.38709)), ((119.888925 -75.348047, -98.759588 34.448166, -25.995586 35.80229, 119.888925 -75.348047)), ((45.979034 -57.856352, 164.707354 -53.897868, -177.048874 10.697153, 51.374136 -33.274647, -102.184886 46.876304, 45.979034 -57.856352)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (217061, 8054937238.972183, 'lWbb', ST_GeomFromText('MULTIPOLYGON(((150.884452 -75.414857, -110.922942 6.005607, 151.307371 8.177366, 100.247556 29.147823, -44.04214 55.13819, 63.467497 53.116178, 150.884452 -75.414857)), ((-100.396861 87.4666, 127.159183 -35.880215, 154.549171 -21.265151, 33.233697 -72.163075, -133.706362 11.551812, 179.94453 49.529994, -100.396861 87.4666)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (1858689, -2797190338.365771, '7xug', ST_GeomFromText('MULTIPOLYGON(((-121.752473 -32.870427, -22.845866 51.368946, -101.390797 -72.772565, 86.014348 -10.493412, 24.523491 80.133596, -121.752473 -32.870427)), ((12.659357 11.458399, 100.478754 -87.017825, 105.317459 -36.846807, 127.977945 6.530589, 52.277029 -41.725985, 12.659357 11.458399)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (4794137, -6183227487.819585, 'clDW', ST_GeomFromText('MULTIPOLYGON(((45.904396 39.876317, 7.645033 39.883783, -1.495738 61.808156, 103.460341 -30.680601, 45.904396 39.876317)), ((-167.841321 75.269048, 34.633759 -80.711664, 97.203583 -5.135993, -167.841321 75.269048)), ((-12.22092 52.521906, 172.034002 37.081438, -103.436843 -62.367108, 35.10613 72.534193, -12.22092 52.521906)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (-1435925, -3522405297.743138, 'Lgoe', ST_GeomFromText('MULTIPOLYGON(((-91.518563 40.770433, -128.806286 -58.613149, -67.990981 -81.316147, -128.103124 26.150431, 58.918592 -63.793044, -91.518563 40.770433)), ((15.999885 -57.040517, -10.562103 75.122297, -46.181694 55.130588, 108.789674 75.920871, -119.70957 66.5269, 158.204878 -87.753791, 15.999885 -57.040517)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (1382231, -990178719.968033, 'U987', ST_GeomFromText('MULTIPOLYGON(((-37.552797 71.427821, -114.625319 -1.308759, 87.015125 88.507762, -38.659583 58.069681, -45.151954 46.407556, -37.552797 71.427821)), ((55.420989 -7.772592, 24.856748 72.132227, 24.020612 -64.175723, -19.092236 20.68191, 55.420989 -7.772592)), ((13.956995 54.645466, 130.69433 68.580015, -17.3553 -54.156206, 13.956995 54.645466)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (-7371290, 5656312645.200418, 'VAkM', ST_GeomFromText('MULTIPOLYGON(((-167.313401 -3.508146, 58.541808 -83.583677, -177.437189 58.484781, 89.477342 59.928742, -1.398587 -49.283125, -167.313401 -3.508146)), ((152.555734 45.862685, -125.826481 -37.154689, 95.848842 1.771174, -158.091641 40.647901, 152.555734 45.862685)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (-1208069, 9100866054.65044, 'clBJ', ST_GeomFromText('MULTIPOLYGON(((91.412874 -16.86577, 50.693932 65.600108, 61.509748 -62.54501, 167.695922 82.578071, -171.362849 -62.786337, -8.454519 59.052993, 91.412874 -16.86577)), ((28.256677 74.236837, -60.867731 12.846567, -112.678447 49.252953, 18.315327 -47.347915, 28.256677 74.236837)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (3226258, -2016485117.633437, 'K6Bb', ST_GeomFromText('MULTIPOLYGON(((144.918747 -52.119628, 56.209555 63.388362, 155.294101 -21.980851, -55.105221 80.189917, -161.81083 -25.026931, 144.918747 -52.119628)), ((110.292755 12.613307, -68.154052 31.565896, -20.565339 -11.378659, -111.964428 86.725733, -10.786663 49.609398, -68.003989 -86.021512, 110.292755 12.613307)), ((64.370753 67.212191, 143.770109 7.614297, -153.833913 -86.934723, -100.341114 67.799954, -34.097447 79.817843, -124.046125 26.829616, 64.370753 67.212191)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (-562251, -2118483592.861424, 'X0oW', ST_GeomFromText('MULTIPOLYGON(((-150.604207 77.729892, -77.573983 38.592053, 147.990017 -7.098405, 24.214286 86.22118, -150.604207 77.729892)), ((58.853711 -11.253632, 166.81297 -50.29851, -139.302652 -39.462131, 30.758653 77.947207, 58.853711 -11.253632)))'));
INSERT INTO t0 (c0, c1, c2, c3) VALUES (4075327, -5599123803.959778, 'vdAz', ST_GeomFromText('MULTIPOLYGON(((72.302054 -36.644388, 151.347684 36.510932, -147.90573 -11.76161, -119.03278 20.802194, 72.302054 -36.644388)), ((27.924553 -89.822661, 100.002296 -16.233353, 109.976896 61.455412, -139.365956 71.372, 95.646027 82.439891, 27.924553 -89.822661)), ((-96.229979 -41.1211, -54.744441 26.585834, -78.14672 18.887428, 15.226966 -79.786382, 160.009256 85.020996, -96.229979 -41.1211)))'));

2.Create t1 as a table and query it, returns 2 rows:

CREATE TABLE t1 AS (SELECT (c0/c1) AS c0 , c2 AS c2, c3 AS c3 FROM t0 );
mysql> SELECT (c0), c3, c2 FROM t1 WHERE (CASE WHEN ((c0) <= c2) THEN (('c95N')) ELSE ((-3051306668.994731)) END);
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| c0     | c3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | c2   |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| 0.0004 | 0x00000000010600000002000000010300000001000000060000009A7ADD2230E156C02C616D8C9D62444020274C18CD1960C09D499BAA7B4E4DC0467D923B6CFF50C0A06EA0C03B5454C0D9EDB3CA4C0360C0F94D61A582263A40012F336C94754D40FF243E7782E54FC09A7ADD2230E156C02C616D8C9D624440010300000001000000070000009D853DEDF0FF2F404DF73AA92F854CC08CF7E3F6CB1F25C088D9CBB6D3C7524091F0BDBF411747C002A08A1BB7904B401920D1048A325B406E35EB8CEFFA5240410E4A9869ED5DC0CB10C7BAB8A1504070B54E5C8EC663403A419B1C3EF055C09D853DEDF0FF2F404DF73AA92F854CC0 | Lgoe |
| 0.0003 | 0x00000000010600000002000000010300000001000000050000007520EBA955D362C02C67EF8CB66E5340705D3123BC6453C0D53F8864C84B43407DAF2138AE7F6240300DC347C4641CC09CFD8172DB363840E0A128D0278E55407520EBA955D362C02C67EF8CB66E534001030000000100000005000000239EEC66466D4D402A70B20DDC8126C02254A9D903DA6440B5C35F93352649C035423F53AF6961C0E0BBCD1B27BB43C02503401537C23E40B5E21B0A9F7C5340239EEC66466D4D402A70B20DDC8126C0                                                                                                 | X0oW |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
2 rows in set, 22 warnings (0.01 sec)

3. Create t1 as a view instead and query it:

CREATE VIEW t1 AS (SELECT (c0/c1) AS c0 , c2 AS c2, c3 AS c3 FROM t0 );
mysql> SELECT (c0), c3, c2 FROM t1 WHERE (CASE WHEN ((c0) <= c2) THEN (('c95N')) ELSE ((-3051306668.994731)) END);
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| c0     | c3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | c2   |
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| 0.0000 | 0x000000000106000000020000000103000000010000000700000038DC476E4DDC624011E15F048DDA52C0B686527B11BB5BC0C38366D7BD051840A417B5FBD5E962403CD862B7CF5A20406EFB1EF5D70F5940BB9866BAD7253D403EEDF0D7640546C02F51BD35B0914B4033FD12F1D6BB4F40E141B3EBDE8E4A4038DC476E4DDC624011E15F048DDA52C001030000000100000007000000B403AE2B661959C012143FC6DCDD554011C5E40D30CA5F406D3997E2AAF041C02C9D0FCF925163406F8099EFE04335C02F1686C8E99D4040E5F21FD26F0A52C064247B849AB660C0A9143B1A871A2740E882FA96397E6640C289E8D7D6C34840B403AE2B661959C012143FC6DCDD5540 | lWbb |
| 0.0004 | 0x00000000010600000002000000010300000001000000060000009A7ADD2230E156C02C616D8C9D62444020274C18CD1960C09D499BAA7B4E4DC0467D923B6CFF50C0A06EA0C03B5454C0D9EDB3CA4C0360C0F94D61A582263A40012F336C94754D40FF243E7782E54FC09A7ADD2230E156C02C616D8C9D624440010300000001000000070000009D853DEDF0FF2F404DF73AA92F854CC08CF7E3F6CB1F25C088D9CBB6D3C7524091F0BDBF411747C002A08A1BB7904B401920D1048A325B406E35EB8CEFFA5240410E4A9869ED5DC0CB10C7BAB8A1504070B54E5C8EC663403A419B1C3EF055C09D853DEDF0FF2F404DF73AA92F854CC0                                 | Lgoe |
| 0.0003 | 0x00000000010600000002000000010300000001000000050000007520EBA955D362C02C67EF8CB66E5340705D3123BC6453C0D53F8864C84B43407DAF2138AE7F6240300DC347C4641CC09CFD8172DB363840E0A128D0278E55407520EBA955D362C02C67EF8CB66E534001030000000100000005000000239EEC66466D4D402A70B20DDC8126C02254A9D903DA6440B5C35F93352649C035423F53AF6961C0E0BBCD1B27BB43C02503401537C23E40B5E21B0A9F7C5340239EEC66466D4D402A70B20DDC8126C0                                                                                                                                 | X0oW |
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
3 rows in set, 21 warnings (0.00 sec)

Expected Result:

The results of the queries on t1 (table) and t1 (view) should be identical, as they are based on the same data and logic.

Actual Result:

* The query on t1 (table) returns 2 rows.
* The query on t1 (view) returns 3 rows.
[13 Jan 14:27] MySQL Verification Team
Hi Mr. Deng,

Thank you for your bug report.

We repeated the bug with all versions from 8.0 to 9.1:

+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| c0     | c3                                                                                                                                                                                                                                                      | c2   |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| 0.0004 |                    �z�"0�V�,am��bD@ 'L�`��I��{NM�F}�;l�P��n��;TT����L`��Ma��&:@/3l�uM@�$>w��O��z�"0�V�,am��bD@         ��=���/@M�:�/�L������%���˶��R@��AG����K@ ��2[@n5���R@AJ�i�]��Ǻ��P@p�N\��c@:A�>�U���=���/@M�:�/�L�                                                                                                | Lgoe |
܁&�"T���d@��_�5&I�5B?S�ia����C�%@7�>@��  #��fFmM@*p�?�d�KC@}�!8�b@0
܁&�                                                                                                           | X0oW |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
| c0     | c3                                                                                                                                                                                                                                                                      | c2   |
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+
0�_@m9���A�,�ϒQc@o����C5�/���@@���o�b@�_��R���R{�[�Ãf׽@�����b@<�b��Z @n���Y@��f��%=@>���dF�/Q�5��K@3��ֻO@�A��ގJ@8�GnM�b@�_��R�         ��+fY�?���U@��
R�d${���`��;�'@��9~f@‰����H@��+fY�?���U@                                                                                                  | lWbb |
| 0.0004 |                    �z�"0�V�,am��bD@ 'L�`��I��{NM�F}�;l�P��n��;TT����L`��Ma��&:@/3l�uM@�$>w��O��z�"0�V�,am��bD@         ��=���/@M�:�/�L������%���˶��R@��AG����K@ ��2[@n5���R@AJ�i�]��Ǻ��P@p�N\��c@:A�>�U���=���/@M�:�/�L�                                                                                                                | Lgoe |
܁&�"T���d@��_�5&I�5B?S�ia����C�%@7�>@��  #��fFmM@*p�?�d�KC@}�!8�b@0
܁&�                                                                                                                           | X0oW |
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+

Verified as reported.