Добавить ручку для EXPLAIN

На текущий момент работа с EXPLAIN выглядит следующим образом:

sql_query = "EXPLAIN SELECT COUNT(*) FROM TEST_TABLE WHERE ID = 1"

res = await client.fetch(sql_query)

for row in res:
    # search what you need in row
    if 'motion [policy: full]' in row.get('QUERY PLAN'):
        pass

Пример того, как выглядит план, полученный прямо в пикодате:

(admin) sql> EXPLAIN SELECT ID FROM TEST_TABLE WHERE ID = 61555355;

projection ("test_table"."id"::integer -> "id")
    selection ROW("test_table"."id"::integer) = ROW(61555355::unsigned)
        scan "test_table"
execution options:
    sql_vdbe_opcode_max = 45000
    sql_motion_row_max = 5000
buckets = [322]

Каждая строка в выводе -- row в коде

Также в пикодате появился explain (raw) с планом исполнения. Нужно подумать над дизайном со стороны плагина, как там поддержать и эту фичу

Что надо сделать:

  • добавить ручку explain, которая будет возвращать план целиком, а не построчно
  • поддержка explain (raw)
  • подумать над сериализацией -- можно ли ее сделать более удобной для автоматической работы
Edited by Asya Lomakina