Тип таблицы CONNECT INI
Обзор
Тип INI — это один из файлов конфигурации или инициализации, часто встречающийся в системах Windows. Например, предположим, что у вас есть следующий файл контактов contact.ini:
[BER] name=Bertrand forename=Olivier address=21 rue Ferdinand Buisson city=Issy-les-Mlx zipcode=92130 tel=09.54.36.29.60 cell=06.70.06.04.16 [WEL] name=Schmitt forename=Bernard hired=19/02/1985 address=64 tiergarten strasse city=Berlin zipcode=95013 tel=03.43.377.360 [UK1] name=Smith forename=Henry hired=08/11/2003 address=143 Blum Rd. city=London zipcode=NW1 2BP
CONNECT позволяет просматривать его как таблицу двумя различными способами.
Макет столбцов
Первый способ — рассматривать его как таблицу с одной строкой на раздел, столбцами которых являются ключи, которые вы хотите отобразить. В этом случае оператор CREATE может быть следующим:
create table contact ( contact char(16) flag=1, name char(20), forename char(32), hired date date_format='DD/MM/YYYY', address char(64), city char(20), zipcode char(8), tel char(16)) engine=CONNECT table_type=INI file_name='contact.ini';
Столбец, который будет содержать имя раздела, может иметь любое имя, но должен указать flag=1. Все остальные столбцы должны иметь имена ключей, которые мы хотим отобразить (регистр не учитывается). Тип может быть символьным или числовым, в зависимости от типа значения ключа, а длина — это максимальная ожидаемая длина значения ключа. После этого оператор:
select contact, name, hired, city, tel from contact;
Этот оператор отобразит файл в табличном формате.
| contact | name | hired | city | tel |
|---|---|---|---|---|
| BER | Bertrand | 1970-01-01 | Issy-les-Mlx | 09.54.36.29.60 |
| WEL | Schmitt | 1985-02-19 | Berlin | 03.43.377.360 |
| UK1 | Smith | 2003-11-08 | London | NULL |
Видимы только ключи, определенные в операторах создания; ключи, отсутствующие в разделе, отображаются как нулевые или псевдонулевые (пустые для символьных, 01.01.1970 для дат и 0 для числовых) для столбцов, объявленных NOT NULL.
Ко всем реляционным операциям к этой таблице можно применять все реляционные операции. Таблица (и файл) могут быть обновлены, вставлены и условно удалены. Единственное ограничение состоит в том, что при вставке значений имя раздела должно быть первым в списке значений.
Примечание 1: При вставке, если раздел уже существует, новый раздел не будет создан, а новые значения будут добавлены или заменят значения существующего раздела. Таким образом, следующие две команды эквивалентны:
update contact set forename = 'Harry' where contact = 'UK1';
insert into contact (contact,forename) values('UK1','Harry');
Примечание 2: Поскольку разделы представляют собой одну строку, оператор DELETE для ключа раздела удалит весь раздел.
Макет строк
Для того, чтобы файл INI был хорошим кандидатом для табличного представления, в каждом разделе часто должны присутствовать одни и те же ключи. На практике многие файлы, которые часто встречаются в компьютерах, такие как файл win.ini в каталоге Windows или файл my.ini, не могут отображаться таким образом, потому что каждый раздел имеет разные ключи. В этом случае второй способ — рассматривать файл как таблицу, имеющую одну строку на ключ раздела, столбцами которой могут быть имя раздела, имя ключа и значение ключа.
Например, давайте определим таблицу:
create table xcont ( section char(16) flag=1, keyname char(16) flag=2, value char(32)) engine=CONNECT table_type=INI file_name='contact.ini' option_list='Layout=Row';
В этом операторе опция «Макет» устанавливает формат отображения, по умолчанию «Столбец» или любое другое значение, не начинающееся с «С», для отображения макета строки. Имена трех столбцов могут быть выбраны произвольно. Опция «Флаг» указывает смысл столбца. Укажите flag=1 для имени раздела и flag=2 для имени ключа. В противном случае столбец будет содержать значение ключа.
После этого команда:
select * from xcont;
Выведет следующий результат:
| section | keyname | value |
|---|---|---|
| BER | name | Bertrand |
| BER | forename | Olivier |
| BER | address | 21 rue Ferdinand Buisson |
| BER | city | Issy-les-Mlx |
| BER | zipcode | 92130 |
| BER | tel | 09.54.36.29.60 |
| BER | cell | 06.70.06.04.16 |
| WEL | name | Schmitt |
| WEL | forename | Bernard |
| WEL | hired | 19/02/1985 |
| WEL | address | 64 tiergarten strasse |
| WEL | city | Berlin |
| WEL | zipcode | 95013 |
| WEL | tel | 03.43.377.360 |
| UK1 | name | Smith |
| UK1 | forename | Henry |
| UK1 | hired | 08/11/2003 |
| UK1 | address | 143 Blum Rd. |
| UK1 | city | London |
| UK1 | zipcode | NW1 2BP |
Примечание: При обработке таблицы INI все имена разделов извлекаются в буфер размером 8 КБ (2048 байтов до версии 10.0.17). Для больших файлов с множеством разделов этот размер можно увеличить, например:
option_list='seclen=16K';
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-ini-table-type/