Динамические столбцы из MariaDB 10
MariaDB 10.0.1 внесла следующие улучшения в функцию динамических столбцов.
Поддержка имён столбцов
Теперь можно ссылаться на столбцы по имени. Имена можно использовать везде, где в MariaDB 5.3 можно было использовать только строки:
- Создать динамический столбец blob:
COLUMN_CREATE('int_col', 123 as int, 'double_col', 3.14 as double, 'string_col', 'text-data' as char);
- Установить значение столбца:
COLUMN_ADD(dyncol_blob, 'intcol', 1234);
- Получить значение столбца:
COLUMN_GET(dynstr, 'column1' as char(10));
- Проверить, существует ли столбец
COLUMN_EXISTS(dyncol_blob, 'column_name');
Изменения в поведении
- Вывод списка столбцов теперь включает кавычки:
select column_list(column_create(1, 22, 2, 23));
+------------------------------------------+
| column_list(column_create(1, 22, 2, 23)) |
+------------------------------------------+
| `1`,`2` |
+------------------------------------------+
select column_list(column_create('column1', 22, 'column2', 23));
+----------------------------------------------------------+
| column_list(column_create('column1', 22, 'column2', 23)) |
+----------------------------------------------------------+
| `column1`,`column2` |
+----------------------------------------------------------+
- Интерпретация имён столбцов изменена, теперь строка не преобразуется в число. Таким образом, некоторые "волшебные" трюки больше не работают, например, "1test" и "1" теперь являются разными именами столбцов:
select column_list(column_add(column_create('1a', 22), '1b', 23));
+------------------------------------------------------------+
| column_list(column_add(column_create('1a', 22), '1b', 23)) |
+------------------------------------------------------------+
| `1a`,`1b` |
+------------------------------------------------------------+
- Старое поведение:
select column_list(column_add(column_create('1a', 22), '1b', 23));
+------------------------------------------------------------+
| column_list(column_add(column_create('1a', 22), '1b', 23)) |
+------------------------------------------------------------+
| 1 |
+------------------------------------------------------------+
Новые функции
В MariaDB 10 были добавлены следующие новые функции для динамических столбцов
COLUMN_CHECK
COLUMN_CHECK используется для проверки целостности столбца. При обнаружении ошибки она не возвращает ошибки неверного формата, а возвращает false. Также она более тщательно проверяет целостность и находит ошибки во внутренней структуре динамического столбца, которые могут не быть обнаружены другими функциями.
select column_check(column_create('column1', 22));
+--------------------------------------------+
| column_check(column_create('column1', 22)) |
+--------------------------------------------+
| 1 |
+--------------------------------------------+
select column_check('abracadabra');
+-----------------------------+
| column_check('abracadabra') |
+-----------------------------+
| 0 |
+-----------------------------+
COLUMN_JSON
COLUMN_JSON преобразует содержимое всех записей динамических столбцов в JSON-объект.
select column_json(column_create('column1', 1, 'column2', "two"));
+------------------------------------------------------------+
| column_json(column_create('column1', 1, 'column2', "two")) |
+------------------------------------------------------------+
| {"column1":1,"column2":"two"} |
+------------------------------------------------------------+
Другие изменения
- Всем функциям API добавлен префикс mariadb_dyncol_ (старый префикс dynamic_column_ устарел)
- API изменено для работы с новым форматом (*_named функции).
- Удалена функция 'delete', поскольку удаление можно выполнить, добавив значение NULL.
- В новом формате значения 'Time' и 'datetime' хранятся без микросекунд, если они равны 0.
- Добавлена новая функция в API (кроме двух, представляющих функции уровня SQL):
- Распаковать содержимое динамических столбцов в массивы значений и имён.
- 3 функции для получения любого значения столбца как строки, целого числа (long long) или числа с плавающей точкой (double).
- Добавлен новый тип строки "динамический столбец" на уровне API (на уровне SQL он является строкой, но если вы используете функции динамического столбца для создания объекта, он будет добавлен как значение динамического столбца), который позволяет добавлять динамические столбцы внутри динамических столбцов. Функция JSON корректно представляет такие рекурсивные конструкции, но ограничивает глубину представления, как это ограничено текущей реализацией (внутренне глубина вложения динамических столбцов не ограничена).
Интерфейс с Cassandra
CassandraSE больше не развивается и был удалён в MariaDB 10.6. См. MDEV-23024.
В динамические столбцы были внесены некоторые внутренние изменения, чтобы разрешить использование их в качестве интерфейса к динамическим столбцам Apache Cassandra. Двигатель Cassandra может упаковывать все столбцы, которые не указаны в определении таблицы интерфейса MariaDB, и даже возвращать изменения в содержимом динамических столбцов обратно в семейства столбцов Cassandra (аналог таблицы в Cassandra).
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/dynamic-columns-from-mariadb-10/