[MDEV-30349] Optimizer trace produces invalid JSON by placing BIT constant into it Created: 2023-01-05  Updated: 2023-11-28

Status: Open
Project: MariaDB Server
Component/s: Data types, Optimizer
Affects Version/s: 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11
Fix Version/s: 10.4, 10.5, 10.6

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Sergei Petrunia
Resolution: Unresolved Votes: 0
Labels: None


 Description   

SET optimizer_trace= 'enabled=on';
 
CREATE TABLE t (col_bit BIT) ENGINE=MyISAM;
INSERT INTO t VALUES (1);
 
SELECT * FROM t t1 WHERE EXISTS ( SELECT * FROM t t2 WHERE t2.col_bit <= t1.col_bit );
 
select json_valid(trace), json_compact(trace) from information_schema.optimizer_trace;
 
# Cleanup
DROP TABLE t;

10.5 b8f4b984

SELECT * FROM t t1 WHERE EXISTS ( SELECT * FROM t t2 WHERE t2.col_bit <= t1.col_bit );
col_bit
 
select json_valid(trace), json_compact(trace) from information_schema.optimizer_trace;
json_valid(trace)	json_compact(trace)
0	NULL
Warnings:
Warning	4036	Character disallowed in JSON in argument 1 to function 'json_compact' at position 2451

The problematic part of the trace is

          {
            "condition_on_constant_tables": "<in_optimizer>(1,exists(/* select#2 */ select 1 from t t2 where t2.col_bit <= ^A limit 1))",
            "evaluated": "false",
            "cause": "expensive cond"
          },
          {
            "attaching_conditions_to_tables": {
              "original_condition": "<in_optimizer>(1,exists(/* select#2 */ select 1 from t t2 where t2.col_bit <= ^A limit 1))",
              "attached_conditions_computation": [],
              "attached_conditions_summary": []
            }
          },
          {
            "join_optimization": {
              "select_id": 2,
              "steps": [
                {
                  "condition_processing": {
                    "condition": "WHERE",
                    "original_condition": "t2.col_bit <= ^A",
                    "steps": [
                      {
                        "transformation": "equality_propagation",
                        "resulting_condition": "t2.col_bit <= ^A"
                      },
                      {
                        "transformation": "constant_propagation",
                        "resulting_condition": "t2.col_bit <= ^A"
                      },
                      {
                        "transformation": "trivial_condition_removal",
                        "resulting_condition": "t2.col_bit <= ^A"
                      }

where ^A represent the problematic symbols.

 


Generated at Thu Feb 08 10:15:35 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.