From c08adb5567f52be95435fa8bd055233d1435ae50 Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Thu, 12 Apr 2018 10:50:57 +0100 Subject: [PATCH] Catch errors when trying to EXPLAIN an invalid query. Fixes #3257 --- docs/en_US/release_notes.rst | 1 + docs/en_US/release_notes_3_1.rst | 17 +++++++++++++ .../sqleditor/sql/10_plus/explain_plan.sql | 24 +++++++------------ .../sqleditor/sql/9.2_plus/explain_plan.sql | 21 ++++++---------- .../sqleditor/sql/default/explain_plan.sql | 19 +++++---------- .../sql/gpdb_5.0_plus/explain_plan.sql | 6 +---- .../tests/test_explain_plan_templates.py | 12 +++++----- 7 files changed, 46 insertions(+), 54 deletions(-) create mode 100644 docs/en_US/release_notes_3_1.rst diff --git a/docs/en_US/release_notes.rst b/docs/en_US/release_notes.rst index d54843cd6..3b3f84b96 100644 --- a/docs/en_US/release_notes.rst +++ b/docs/en_US/release_notes.rst @@ -9,6 +9,7 @@ for it. .. toctree:: + release_notes_3_1 release_notes_3_0 release_notes_2_1 release_notes_2_0 diff --git a/docs/en_US/release_notes_3_1.rst b/docs/en_US/release_notes_3_1.rst new file mode 100644 index 000000000..9c5c1e1fe --- /dev/null +++ b/docs/en_US/release_notes_3_1.rst @@ -0,0 +1,17 @@ +*********** +Version 3.1 +*********** + +Release date: 2018-??-?? + +This release contains a number of features and fixes reported since the release of pgAdmin4 3.0 + + +Features +******** + + +Bug fixes +********* + +| `Bug #3257 `_ - Catch errors when trying to EXPLAIN an invalid query diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/10_plus/explain_plan.sql b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/10_plus/explain_plan.sql index fc4a8d2d7..26743f9ec 100644 --- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/10_plus/explain_plan.sql +++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/10_plus/explain_plan.sql @@ -1,23 +1,15 @@ -EXPLAIN ( -{% if format %} +EXPLAIN ({% if format -%} FORMAT {{ format.upper() }}, -{% endif %} -{% if analyze is defined %} +{%- endif %}{% if analyze is defined -%} ANALYZE {{ analyze }}, -{% endif %} -{% if verbose is defined %} +{%- endif %}{% if verbose is defined -%} VERBOSE {{ verbose }}, -{% endif %} -{% if costs is defined %} +{%- endif %}{% if costs is defined -%} COSTS {{ costs }}, -{% endif %} -{% if timing is defined %} +{%- endif %}{% if timing is defined -%} TIMING {{ timing }}, -{% endif %} -{% if summary is defined %} +{%- endif %}{% if summary is defined -%} SUMMARY {{ summary }}, -{% endif %} -{% if buffers is defined %} +{%- endif %}{% if buffers is defined -%} BUFFERS {{ buffers }} -{% endif %} -) {{ sql }} +{%- endif %}) {{ sql }} diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/9.2_plus/explain_plan.sql b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/9.2_plus/explain_plan.sql index 315174a65..6540f80aa 100644 --- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/9.2_plus/explain_plan.sql +++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/9.2_plus/explain_plan.sql @@ -1,20 +1,13 @@ -EXPLAIN ( -{% if format %} +EXPLAIN ({% if format -%} FORMAT {{ format.upper() }}, -{% endif %} -{% if analyze is defined %} +{%- endif %}{% if analyze is defined -%} ANALYZE {{ analyze }}, -{% endif %} -{% if verbose is defined %} +{%- endif %}{% if verbose is defined -%} VERBOSE {{ verbose }}, -{% endif %} -{% if costs is defined %} +{%- endif %}{% if costs is defined -%} COSTS {{ costs }}, -{% endif %} -{% if timing is defined %} +{%- endif %}{% if timing is defined -%} TIMING {{ timing }}, -{% endif %} -{% if buffers is defined %} +{%- endif %}{% if buffers is defined -%} BUFFERS {{ buffers }} -{% endif %} -) {{ sql }} +{%- endif %}) {{ sql }} diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/explain_plan.sql b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/explain_plan.sql index 72b20c95c..2945de449 100644 --- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/explain_plan.sql +++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/explain_plan.sql @@ -1,17 +1,10 @@ -EXPLAIN ( -{% if format %} +EXPLAIN ({% if format -%} FORMAT {{ format.upper() }}, -{% endif %} -{% if analyze is defined %} - ANALYZE {{ analyze }}, -{% endif %} -{% if verbose is defined %} +{%- endif %}{% if analyze is defined -%} + ANALYZE {{ analyze }},{%- endif %}{% if verbose is defined -%} VERBOSE {{ verbose }}, -{% endif %} -{% if costs is defined %} +{%- endif %}{% if costs is defined -%} COSTS {{ costs }}, -{% endif %} -{% if buffers is defined %} +{%- endif %}{% if buffers is defined -%} BUFFERS {{ buffers }} -{% endif %} -) {{ sql }} +{%- endif %}) {{ sql }} diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/gpdb_5.0_plus/explain_plan.sql b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/gpdb_5.0_plus/explain_plan.sql index aacabe451..7904f26bb 100644 --- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/gpdb_5.0_plus/explain_plan.sql +++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/gpdb_5.0_plus/explain_plan.sql @@ -1,5 +1 @@ -EXPLAIN -{% if analyze %} - ANALYZE -{% endif %} - {{ sql }} +EXPLAIN {% if analyze %}ANALYZE {% endif %}{{ sql }} diff --git a/web/pgadmin/tools/sqleditor/tests/test_explain_plan_templates.py b/web/pgadmin/tools/sqleditor/tests/test_explain_plan_templates.py index 1b3e09f5e..c8c32cfc6 100644 --- a/web/pgadmin/tools/sqleditor/tests/test_explain_plan_templates.py +++ b/web/pgadmin/tools/sqleditor/tests/test_explain_plan_templates.py @@ -35,8 +35,8 @@ class TestExplainPlanTemplates(BaseTestGenerator): ), sql_statement='SELECT * FROM places', expected_return_value='EXPLAIN ' - '( FORMAT XML, ANALYZE True, ' - 'VERBOSE True, COSTS False, ' + '(FORMAT XML,ANALYZE True,' + 'VERBOSE True,COSTS False,' 'BUFFERS True) SELECT * FROM places' ) ), @@ -54,7 +54,7 @@ class TestExplainPlanTemplates(BaseTestGenerator): ), sql_statement='SELECT * FROM places', expected_return_value='EXPLAIN ' - '( FORMAT JSON, BUFFERS True) ' + '(FORMAT JSON,BUFFERS True) ' 'SELECT * FROM places' ) ), @@ -73,7 +73,7 @@ class TestExplainPlanTemplates(BaseTestGenerator): ), sql_statement='SELECT * FROM places', expected_return_value='EXPLAIN ' - '( FORMAT JSON, TIMING False, ' + '(FORMAT JSON,TIMING False,' 'BUFFERS True) SELECT * FROM places' ) ), @@ -93,8 +93,8 @@ class TestExplainPlanTemplates(BaseTestGenerator): ), sql_statement='SELECT * FROM places', expected_return_value='EXPLAIN ' - '( FORMAT YAML, TIMING False, ' - 'SUMMARY True, BUFFERS True) ' + '(FORMAT YAML,TIMING False,' + 'SUMMARY True,BUFFERS True) ' 'SELECT * FROM places' ) ),