Перейти к содержанию

Metabase 0.48.0

  • The MBQL schema in metabase.mbql.schema now uses Malli instead of Schema. If you were using this namespace in combination with Schema, you'll want to update your code to use Malli instead.

  • Another driver feature has been added: :table-privileges. This feature signals whether we can store the table-level privileges for the database on database sync.

  • The multimethod metabase.driver/current-user-table-privileges has been added. This method is used to get the set of privileges the database connection's current user has. It needs to be implemented if the database supports the :table-privileges feature.

  • The following functions in metabase.query-processor.store (qp.store) are now deprecated

    • qp.store/database
  • qp.store/table
  • qp.store/field

Update usages of the to the corresponding functions in metabase.lib.metadata (lib.metadata):

  (qp.store/database)       => (lib.metadata/database (qp.store/metadata-provider))
  (qp.store/table table-id) => (lib.metadata/table (qp.store/metadata-provider) table-id)
  (qp.store/field field-id) => (lib.metadata/field (qp.store/metadata-provider) field-id)

Note that the new methods return keys as kebab-case rather than snake_case.

  • Similarly, drivers should NOT access the application database directly (via toucan functions or otherwise); use lib.metadata functions instead. This access may be blocked in a future release.
  • SQL drivers that implement metabase.driver.sql.query-processor/->honeysql for metabase.models.table/Table/:model/Table should be updated to implement it for :metadata/table instead. As with the changes above, the main difference is that the new metadata maps use kebab-case keys rather than snake_case keys.
    • metabase.driver.sql.query-processor/cast-field-if-needed now expects a kebab-cased field as returned by lib.metadata/field.
  • metabase.query-processor.store/fetch-and-store-database!, metabase.query-processor.store/fetch-and-store-tables!, and metabase.query-processor.store/fetch-and-store-fields! have been removed. Things are now fetched automatically as needed and these calls are no longer necessary.

  • metabase.models.field/json-field? has been removed, use metabase.lib.field/json-field? instead. Note that the new function takes a Field as returned by lib.metadata/field, i.e. a kebab-case map.
  • Tests should try to avoid using any of the with-temp helpers or application database objects; instead, use the metadata functions above and and the helper metadata providers in metabase.lib, metabase.lib.test-util, and metabase.query-processor.test-util for mocking them, such as mock-metadata-provider, metabase-provider-with-cards-for-queries, remap-metadata-provider, and merged-mock-metadata-provider.
  • metabase.query-processor.util.add-alias-info/field-reference is now deprecated. If your driver implemented it, implement metabase.query-processor.util.add-alias-info/field-reference-mlv2 instead. The only difference between the two is that the latter is passed Field metadata with kebab-case keys while the former is passed legacy metadata with snake_case keys.
  • metabase.driver/current-db-time, deprecated in 0.34, and related methods and helper functions, have been removed. Implement metabase.driver/db-default-timezone instead.
  • metabase.driver.sql-jdbc.sync.interface/db-default-timezone, a helper for writing metabase.driver/db-default-timezone implementations for JDBC-based drivers, has been deprecated, and will be removed in 0.51.0 or later. You can easily implement metabase.driver/db-default-timezone directly, and use metabase.driver.sql-jdbc.execute/do-with-connection-with-options to get a java.sql.Connection for a Database.
  • Added a new multimethod metabase.driver.sql.parameters.substitution/align-temporal-unit-with-param-type, which returns a suitable temporal unit conversion keyword for field, param-type and the given driver. The resulting keyword will be used to call the corresponding metabase.driver.sql.query-processor/date implementation to convert the field. Returns nil if the conversion is not necessary for this field and param-type combination.
  • The multimethod metabase.driver.sql-jdbc.execute/inject-remark has been added. It allows JDBC-based drivers to override the default behavior of how SQL query remarks are added to queries (prepending them as a comment).
  • The arity of multimethod metabase.driver.sql-jdbc.sync.interface/fallback-metadata-query has been updated from 3 to 4, it now takes an additional db argument. The new function arguments are: [driver db-name-or-nil schema table].

Metabase 0.47.0

  • Добавлено новое свойство драйвера: :schemas. Это свойство сигнализирует о том, организует ли база данных таблицы в схемы (также известные как пространства имен) или нет. Большинство баз данных имеют схемы, поэтому это свойство включена по умолчанию. Реализация мультиметода metabase.driver/database-supports? для :schemas требуется только в том случае, если база данных не хранит таблицы в схемах.

  • Добавлена ещё одно свойство драйвера: :uploads. Свойство :uploads сигнализирует, поддерживает ли база данных загрузку CSV-файлов в таблицы базы данных. Для поддержки функции загрузки реализуйте следующие новые мультиметоды: metabase.driver/create-table! (создать таблицу), metabase.driver/drop-table! (удалить таблицу) и metabase.driver/insert-into! (вставить данные в таблицу).

  • Мультиметод metabase.driver/syncable-schemas был добавлен. Этот метод используется для получения списка схем для загрузки CSV-файлов и должен включать все схемы, которые можно синхронизировать. В настоящее время его необходимо реализовать только в том случае, если база данных имеет схему и поддерживает свойство :uploads.

  • Мультиметод metabase.driver/supports? был признан устаревшим и заменён metabase.driver/database-supports?. Существующая реализация по умолчанию database-supports? в настоящее время вызывает supports?, но она будет удалена в версии 0.50.0.

  • metabase.driver.sql-jdbc.execute/connection-with-timezone отмечен как устаревший, его планируется удалить в Metabase 0.50.0. Его заменит новый метод metabase.driver.sql-jdbc.execute/do-with-connection-with-options. Переход на новый метод прост. Для получения информации - см. PR #22166. В дальнейшем рекомендуется использовать metabase.driver.sql-jdbc.execute/do-with-connection-with-options вместо clojure.java.jdbc/with-db-connection или clojure.java.jdbc/get-connection.

  • Добавлены мультиметоды set-role!, set-role-statement и default-database-role. Эти методы используются для включения имперсонализации соединения — новой функции, добавленной в версии 0.47.0. Имперсонализация соединения позволяет назначать пользователям определённые роли базы данных, которые устанавливаются до выполнения любых запросов, так что доступ к таблицам может быть ограничен на уровне базы данных вместо встроенной системы разрешений Metabase (или в сочетании с ней).

  • The multimethod metabase.driver.sql-jdbc.sync.describe-table/get-table-pks is changed to return a vector instead of a set.

  • The function metabase.query-processor.timezone/report-timezone-id-if-supported has been updated to take an additional database argument for the arity which previously had one argument. This function might be used in the implementation of a driver's multimethods.

  • metabase.driver/prettify-native-form was added to enable driver developers use native form formatting specific to their driver. For details see the PR #34991.

Metabase 0.46.0

  • Процесс для сборки драйвера немного изменился в версии 0.46.0. Ваша команда сборки теперь должна выглядеть следующим образом:
# Example for building the driver with bash or similar

# switch to the local checkout of the Metabase repo
cd /path/to/metabase/repo

# get absolute path to the driver project directory
DRIVER_PATH=`readlink -f ~/sudoku-driver`

# Build driver. See explanation in sample Sudoku driver README
clojure \
  -Sdeps "{:aliases {:sudoku {:extra-deps {com.metabase/sudoku-driver {:local/root \"$DRIVER_PATH\"}}}}}"  \
  -X:build:sudoku \
  build-drivers.build-driver/build-driver! \
  "{:driver :sudoku, :project-dir \"$DRIVER_PATH\", :target-dir \"$DRIVER_PATH/target\"}"

Обратите внимание, что хотя эта команда сама по себе довольно длинная, вам больше не нужно указывать псевдоним :build в файле deps.edn вашего драйвера.

Пожалуйста, проголосуйте за https://ask.clojure.org/index.php/7843/allow-specifying-aliases-coordinates-that-point-projects , что позволит нам упростить команду сборки драйвера в будущем.

  • Мультиметод metabase.driver/sql.query-processor/datetime-diff был добавлен. Этот метод используется в ситуациях, когда GlarusBI требуется ограниченный образец из таблицы, например, при снятии отпечатков. Реализация по умолчанию, определённая в пространстве имён metabase.db.metadata-queries, запускает запрос MBQL с использованием обычного процессора запросов для создания образца строк. Этого достаточно в большинстве случаев, поэтому этот мультиметод не должен быть реализован, если это действительно необходимо. В настоящее время единственный случай, когда используется специальная реализация, - это BigQuery, который не учитывает ограничение классов.

  • Мультиметод metabase.driver.sql.query-processor/->honeysql был добавлен. Этот метод используется имплементацией ->honeysql для :datetime-diff и :datetime-field выражений. Рекомендуется реализовать этот метод, если вы хотите использовать реализацию SQL по умолчанию для ->honeysql для :datetime-diff и :datetime-field, которая включает в себя валидацию типов аргументов для всех единиц.

  • Мультиметод metabase.query-processor.util.add-alias-info/field-reference был добавлен. Этот метод используется для создания ссылки на поле add-alias-info middleware. (Обратите внимание, что этот middleware необязателен, в настоящее время он используется только драйверами SQL и MongoDB.) Реализация по умолчанию возвращает имя экземпляра поля. Он должен быть переопределен, если только имя не является допустимой ссылкой. Например, MongoDB поддерживает вложенные документы, и ссылки на вложенные поля должны содержать весь путь. См. пространство имён metabase.driver.mongo.query-processor для альтернативной реализации.

  • Мультиметод metabase.driver.sql-jdbc.sync.interface/syncable-schemas (синоним metabase.driver.sql-jdbc.sync/syncable-schemas), который был устарел в 0.43.0, был удален. Реализуйте вместо этого metabase.driver.sql-jdbc.sync.interface/filtered-syncable-schemas. См. примечания 0.43.0 ниже для получения дополнительной информации.

  • Мультиметод metabase.driver/format-custom-field-name, который был помечен как устаревший в 0.42.0, был удален. Реализуйте вместо этого metabase.driver/escape-alias. См. примечания 0.42.0 ниже для получения дополнительной информации.

  • Мультиметод metabase.driver.sql-jdbc.execute/read-column, который был помечен как устаревший в 0.35.0, был удален. Реализуйте вместо этого metabase.driver.sql-jdbc.execute/read-column-thunk. См. примечания 0.35.0 ниже для получения дополнительной информации.

Honey SQL 2

Следующее относится только к драйверам SQL; вы можете игнорировать это для недрайверов SQL.

До GlarusBI 0.46.0 драйверы SQL использовали Honey SQL 1 в качестве промежуточной цели при компиляции запросов. В 0.46.0 мы начали процесс миграции на Honey SQL 2 в качестве нашей новой промежуточной цели.

Мы планируем продолжить поддержку Honey SQL 1 до GlarusBI 0.49.0. Пожалуйста, убедитесь, что вы перенесли свои драйверы до этого момента.

В GlarusBI 0.46.x, 0.47.x и 0.48.x вы можете указать, какую версию Honey SQL должен использовать ваш драйвер, реализовав мультиметод metabase.driver.sql.query-processor/honey-sql-version:

(require '[metabase.driver.sql.query-processor :as sql.qp])

;;; use Honey SQL 2 for :my-driver
(defmethod sql.qp/honey-sql-version :my-driver
  [_driver]
  2)

Этот метод должен вернуть либо 1, либо 2. В настоящее время реализация по умолчанию возвращает 1. Фактически это означает, что в настоящее время вам нужно включить компиляцию Honey SQL 2. Это хорошая идея сделать это как можно скорее, чтобы ваш драйвер заранее был готов к 0.49.0.

В GlarusBI 0.47.x или 0.48.x мы, вероятно, изменим версию Honey SQL по умолчанию на 2, чтобы убедиться, что все знают о предстоящих изменениях в 0.49.0 и дать им один или два цикла выпуска, чтобы обновить свои драйверы для Honey SQL 2. Вы Всё ещё сможете включить использование Honey SQL 1 до 0.49.0, реализовав sql.qp/honey-sql-version и возвращая 1.

Что вам нужно изменить

В нашей утилите Honey SQL, пространство имён metabase.util.honeysql-extensions, обычно псевдонимизируемом как hx, было обновлено для генерации форм, соответствующих Honey SQL 1 или Honey SQL 2. Это делается автоматически на основе вашего драйвера honey-sql-version. metabase.driver.sql.query-processor также поддерживает обе цели аналогичным образом.

Фактические изменения, которые вам нужно будет внести в свой код драйвера, вероятно, будут довольно незначительными. Обратите внимание на следующие вещи при портировании драйвера:

  1. Избегайте использования вещей из пространства имён Honey SQL 1, таких, как honeysql.core или honeysql.format. Если это все таки необходимо, то используйте вместо этого Honey SQL honey.sql; вам может не понадобиться ни одного из них.

  2. Пока ещё вы можете использовать metabase.util.honeysql-extensions, так как он может быть направлен на любую версию Honey SQL, но мы, вероятно, удалим это пространство имён в какой-то момент в будущем. Обновите свой код для использования metabase.util.honey-sql-2. Пространства имён реализуют почти идентичный набор вспомогательных функций, поэтому все, что вам нужно сделать, это переключиться на тот, который вы :require в своей форме ns.

  3. honeysql.core/call больше не существует, поэтому вместо конструкций (hsql/call :my_function 1 2) вы просто должны вернуть плоский вектор [:my_function 1 2]. (hsql/raw "x") сейчас [:raw "x"]. Новые обработчики могут быть зарегистрированы с Honey SQL 2 с помощью honey.sql/register-fn!. Нет эквивалента протокола Honey SQL 1 honeysql.format./ToSql, поэтому вы больше не должны определять одноразовые типы для реализации пользовательских правил компиляции SQL. Вместо этого используйте honey.sql/register-fn!.

  4. В Honey SQL 1 существовала возможность зарегистрировать свои функции с ограниченным скоупом путём реализации мультиметода honeysql.format/fn-handler. GlarusBI регистрировал функции :extract, :distinct-count и :percentile-cont таким образом. Для Honey SQL 2 мы зарегистрировали эти функции как квалифицированные ключевые слова в пространстве имён metabase.util.honey-sql-2, чтобы избежать путаницы в том, где они определены. Таким образом, вам нужно будет обновить ключевое слово, если вы используете эти функции.

;;; Honey SQL 1
(hsql/call :distinct-count expr)

преобразуется в

;;; Honey SQL 2
(require '[metabase.util.honey-sql-2 :as h2x])

[::h2x/distinct-count expr]
  1. Так как пользовательские выражеения стали просто текстом вроде [:my_function 1], вам может понадобиться обернуть выражения в дополнительный вектор, если они появляются внутри :select, :from, или в других местах, где вектор может быть интерпретирован как [expression alias], например:
;; Honey SQL 1
(honeysql.core/format {:select [[:my_function 1]]})
;; => ["SELECT my_function AS 1"]

;; Honey SQL 2
;;
;; WRONG
(honey.sql/format {:select [[:my_function 1]]})
;; => ["SELECT my_function AS ?" 1]

;; CORRECT
(honey.sql/format {:select [[[:my_function 1]]]})
;; => ["SELECT MY_FUNCTION(?)" 1]

Процессор запросов SQL делает это автоматически для форм, которые он генерирует, поэтому вам нужно беспокоиться об этом только в том случае, если вы переопределяете способ, которым он генерирует :select или другие верхнеуровневые выражения.

  1. Числа теперь по умолчанию параметризованы, т.е. {:select [1]} становится SELECT ? вместо SELECT 1. Вы можете использовать :inline, чтобы принудительно сгенерировать SQL встроенным образом: {:select [[[:inline 1]]]} становится SELECT 1. Числа сгенерированные SQL процессором запросов должны автоматически встраиваться, но вам может потребоваться убедиться, что любые числа, которые вы генерируете, обернуты в :inline, если они могут оказаться выражениями внутри выражения GROUP BY. Некоторые базы данных могут распознавать выражения как одно и то же только тогда, когда они не параметризованы:
-- This is okay
SELECT x  1
FROM table
GROUP BY x  1

-- Bad: DB doesn't know whether the two x  ? expressions are the same thing
SELECT x  ?
FROM table
GROUP BY x  ?

Используйте :inline с осторожностью - не используйте его для ненадежных строк или других способов внедрения SQL. Встраивание только тех вещей, которые являются number? - это более безопасный выбор.

Обратитесь к Различиям между Honey SQL 1.x и 2.x для получения дополнительной информации о различиях между версиями библиотеки.

Важные изменения в 0.46.0, связанные с переходом на Honey SQL 2

Инфо: эти изменения будут исправлены до того, как 0.46.0 будет выпущен. Мы обновим информацию соответственно.

Классы metabase.util.honeysql_extensions.Identifer и metabase.util.honeysql_extensions.TypedHoneySQLForm были перемещены в metabase.util.honey_sql_1.Identifer и metabase.util.honey_sql_1.TypedHoneySQLForm соответственно. На всякий случай, если ваш драйвер напрямую ссылается на эти имена классов, вам может потребоваться обновить их, чтобы использовать новые имена классов.

Аналогичным образом metabase.util.honeysql-extensions/->AtTimeZone был удален; используйте вместо него metabase.util.honeysql-extensions/at-time-zone.

Журнал изменений интерфейса драйвера

GlarusBI 0.45.0

  • metabase.driver.sql-jdbc.connection/details->connection-spec-for-testing-connection был удален из GlarusBI 0.45.0, из-за проблемы с SSH. См.#24445. Если вы используете эту функцию, обновите свой код, чтобы вместо этого использовать metabase.driver.sql-jdbc.connection/with-connection-spec-for-testing-connection, который правильно очищает данные.

Новые методы

  • Добавлено metabase.driver.sql-jdbc.sync.describe-table-fields. Реализуйте этот метод, если вы хотите переопределить поведение по умолчанию для выборки метаданных поля (например, типов) для таблицы.
  • metabase.driver.sql-jdbc.sync.describe-table/get-table-pks has been added. This methods is used to get a set of pks given a table.

GlarusBI 0.43.0

  • Карта :expressions в запросе MBQL теперь использует строки в качестве ключей, а не ключевые слова (см. #14647). Вам нужно беспокоиться об этом только в том случае, если вы напрямую обращаетесь к этой карте или изменяте ее. Драйверы, производные от :sql, реализующие ->honeysql для [<driver>:expression], возможно, нуждаются в обновлении. Вспомогательная функция metabase.mbql.util/expression-with-name доступна по крайней мере начиная с GlarusBI 0.35.0 и обрабатывает оба типа ключей. Настоятельно рекомендуется использовать эту функцию вместо прямого доступа к :expressions, так как это может сделать ваш драйвер совместимым как с 0.42.0, так и с 0.43.0 и новее.

  • Теперь в пространстве имён sql-jdbc.sync существует метод describe-nested-field-columns, который возвращает экземпляр NestedFCMetadata. Это сделано для того, чтобы разрешить JSON столбцы в Postgres и, в других БД, которые обычно являются обычными СУБД, но иногда имеют денормализованный столбец с JSON или какой-либо другой семантикой. Учитывая таблицу с денормализованными столбцами, которые имеют семантику вложенных полей (то есть типизированные подполя, которые Всё ещё денормализованы, но имеют стабильный тип сток), возвращаемое значение должно быть NestedFCMetadata, картой путей к обнаруженному подполю. Обнаружение полей при синхронизации будет дополнено этими вложенными типами. Это существенно отличается от того, как мы делаем для MongoDB, потому что хотя каждый тип столбца JSON и различается, но он будет выполняться при каждой синхронизации, поэтому он не может быть слишком медленным, даже на огромных таблицах и огромных денормализованных столбцах.

GlarusBI 0.42.0

Изменения в GlarusBI 0.42.0 затрагивает драйвера :sql (включая :sql-jdbc). Non-SQL драйвера не требуют изменений.

0.42.0 вносит несколько существенных изменений в способ, которым процессор запросов SQL компилирует и определяет псевдонимы для предложений MBQL :field. Для получения дополнительной информации см. PR #19384.

Если вы изменяли псевдонимы полей или таблиц, мы объединили множество перекрывающихся переменных и методов. Это означает, что вам может потребоваться удалить устаревшие реализации методов.

Значительные изменения

  • Метод metabase.driver.sql.query-processor/->honeysql для сущности Field, например,
(defmethod sql.qp/->honeysql [:my-driver (class Field)]
  [driver field]
  ...)

больше не вызывается. Вся компиляция теперь обрабатывается методом предложения MBQL :field, например.

(defmethod sql.qp/->honeysql [:my-driver :field]
  [driver field-clause]
  ...)

Если вы делали здесь что-то особенное, вам нужно вместо этого переместить этот специальный логин в [<driver> :field]. (Однако вам может больше не понадобиться эта специальная логика - см. ниже.)

  • Предложения :field, :expression и :aggregation-options теперь содержат информацию о том, какие псевдонимы вы должны использовать для ссылки на них как в левой, так и в правой части SQL AS или в другом месте запроса. См. PR #19610 для подробного обсуждения новой информации, далее именуемой /#19610/.

  • Если у вас есть собственная реализация ->honeysql для :field или (class Field): методы ->honeysql для :field должны использовать или заменить #19610, а не пытаться определить или переопределить его каким-либо другим способом.

Новые методы

  • metabase.driver/escape-alias (перемещенный из metabase.driver.sql.query-processor/escape-alias, который был представлен в версии 0.41.0) теперь используется для генерации #19610 и постоянно используется в коде SQL QP. Если вам нужно преобразовать сгенерированные псевдонимы полей по какой-либо причине (например, для экранирования запрещенных символов), реализуйте этот метод.

  • Был добавлен metabase.driver.sql-jdbc.sync.interface/filtered-syncable-schemas, который со временем заменит metabase.driver.sql-jdbc.sync.interface/syncable-schemas. Он служит той же цели, за исключением того, что он также передает шаблоны включения и исключения (например: auth*,data*) в дальнейшие схемы фильтрации, которые будут синхронизированы.

Устаревшие методы и переменные

Следующие методы и переменные планируется удалить в GlarusBI 0.45.0, если не указано иное.

  • metabase.driver/format-custom-field-name теперь не используется. Вместо этого реализуйте metabase.driver/escape-alias.

  • metabase.driver.sql.query-processor/escape-alias был переименован в metabase.driver/escape-alias. Все остальное то же самое.

  • metabase.driver.sql.query-processor/field-clause->alias больше не использует необязательный параметр unique-name-fn. Псевдонимы теперь делаются уникальными автоматически после экранирования; реализуйте metabase.driver/escape-alias, если вам нужно сделать что-то дополнительно, прежде чем они станут уникальными. (Уникальные псевдонимы также экранируются во второй раз, если вам нужно сделать что-то /действительно/ особенное.)

  • metabase.driver.sql.query-processor/field->alias, который устарел в 0.41.0, теперь не используется в 0.42.0.

Реализация этого метода больше не имеет никакого эффекта. Реализуйте metabase.driver/escape-alias вместо этого, если вам нужно сделать что-то особенное; используйте #19610, если вам нужно избежать псевдонима по той или иной причине. Этот метод Всё ещё планируется удалить в GlarusBI 0.44.0.

  • metabase.driver.sql.query-processor/*field-options* теперь не используется и больше не связывается автоматически. Если по какой-либо причине вам нужны параметры поля, см. наш драйвер SQL Server для примера того, как его создать.

  • metabase.driver.sql.query-processor/*table-alias* теперь не используется и больше не связывается автоматически. Вместо этого используйте или переопределите :metabase.query-processor.util.add-alias-info/source-table из #19610.

  • metabase.driver.sql.query-processor/*source-query* теперь не используется и больше не связывается автоматически. Вместо этого используйте metabase.driver.sql.query-processor/*inner-query*, который всегда связан, даже если мы не находимся внутри исходного запроса.

  • metabase.driver.sql.query-processor/field->identifier теперь не используется. Внедрение этого метода больше не должно быть необходимым ни при каких обстоятельствах. Переопределите ->honeysql для [<driver> :field] и манипулируйте #19610, если вам нужно сделать здесь что-то особенное.

  • metabase.driver.sql.query-processor/prefix-field-alias больше не используется. Раньше это было доступно, чтобы дать драйверам возможность избежать автоматически сгенерированных псевдонимов для объединенных полей. В этом больше нет необходимости, потому что metabase.driver/escape-alias автоматически генерирует псевдонимы. Имплементируйте metabase.driver/escape-alias, если вам нужно сделать что-то дополнительно.

  • metabase.driver.sql-jdbc.sync.interface/syncable-schemas устарела в пользу metabase.driver.sql-jdbc.sync.interface/filtered-syncable-schemas (см. выше). Существующая реализация syncable-schemas по умолчанию в настоящее время вызывает filtered-syncable-schemasnil фильтрами, т. е. операция фильтрации фактически не выполняется), но в конечном итоге она будет удалена.

удалённые методы и переменные

  • metabase.mbql.schema/DatetimeFieldUnit, объявленный устаревшим в версии 0.39.0, теперь удален.

Старые версии

До 0.42.0 эта информация отслеживалась в нашей Wiki. Вы можете найти изменения для версий до 0.42.0 в таблице ниже:

Версия Wiki страница
0.41.0 изменения
0.40.0 Без изменений.
0.39.0 Без изменений.
0.38.0 изменения
0.37.0 изменения
0.36.0 изменения
0.35.0 изменения