powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CREATE COLLATION - пара вопросов
21 сообщений из 21, страница 1 из 1
CREATE COLLATION - пара вопросов
    #38982323
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

1) Пояните плиз, как "разворачивается" RDB$COLLATIONS.RDB$COLLATION_ATTRIBUTES.
Пока понял что (Attr & 2) - CASE INSENSITIVE, (Attr & 4) - ACCENT INSENSITIVE. Где указывается [NO PAD | PAD SPACE]?
2) FROM EXTERNAL ('.....') - оно в RDB$BASE_COLLATION_NAME + бит в аттрибуте или нет?
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982342
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

опа. А доке там по системным таблицам у меня ошибочка кстати. По RDB$COLLATION_ATTRIBUTES вообще чушь написана. Так что тоже интересно
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982352
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Кстати, еще вопрос - CASE SENSITIVE / ACCENT SENSITIVE можно не указывать в CREATE?
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982366
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

По идее (могу ошибатся) биты в RDB$COLLATION_ATTRIBUTES:

2 - ACCENT INSENSITIVE
1 - CASE INSENSITIVE
0 - PAD SPACE
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982391
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE COLLATION collname
FOR charset
[FROM basecoll | FROM EXTERNAL ('extname')]
[NO PAD | PAD SPACE]
[CASE [IN]SENSITIVE]
[ACCENT [IN]SENSITIVE]
['<specific-attributes>'];

согласно формальному описанию всё что в [] является необязательным

DarkMaster2 - ACCENT INSENSITIVE
1 - CASE INSENSITIVE
0 - PAD SPACE

вряд ли. Скорее всего там битовая маска из флагов. Надо уточнить
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982399
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Ну я ж и говорю - биты 0,1,2
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982413
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

биты они могут быть 1, 2, 4 потому как могут сочетаться сочетаться. Но уж никак не 0, 1, 2

типа если 7 то сразу все три признака, если 5 то 1 и 3. Ну ты понял. А про то какие именно там числа надо проверять

З.Ы. Достал sql.ru глючить
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982418
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Я про ПОРЯДОК бит. Ты - про значения масок ;)
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982519
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

нашёл

Код: plaintext
1.
2.
3.
4.
/* attributes passed by the engine to texttype entry-point */
#define TEXTTYPE_ATTR_PAD_SPACE                1
#define TEXTTYPE_ATTR_CASE_INSENSITIVE	  2
#define TEXTTYPE_ATTR_ACCENT_INSENSITIVE	  4
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982538
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ОК, спасибо. Еще б понять откуда FROM EXTERNAL ('...') выцепить.
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982559
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterСимонов Денис,

ОК, спасибо. Еще б понять откуда FROM EXTERNAL ('...') выцепить.

эксперимент показал что в системной таблице FROM basecoll что FROM EXTERNAL ('extname') выглядят одинаково. Поэтому хз...
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982743
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисDarkMaster,

нашёл

Код: plaintext
1.
2.
3.
4.
/* attributes passed by the engine to texttype entry-point */
#define TEXTTYPE_ATTR_PAD_SPACE                1
#define TEXTTYPE_ATTR_CASE_INSENSITIVE	  2
#define TEXTTYPE_ATTR_ACCENT_INSENSITIVE	  4



это добавил в документацию по системным таблицам
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38982777
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Кстати, пробежался по разделу системные таблицы - с твоими последними правками все должно быть в норме. Во всяком случае явных неточностей не заметил - завтра еще перечитаю.
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38983008
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправьте, если что:

Информацию по COLLATION можно извлечь таким вот запросом:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT RDB$COLLATIONS.*,RDB$CHARACTER_SETS.RDB$CHARACTER_SET_NAME,
       rc1.rdb$collation_name EXT_BASE_COLL
FROM RDB$COLLATIONS
join rdb$character_sets on (rdb$character_sets.rdb$character_set_id=rdb$collations.rdb$character_set_id)
left join rdb$collations rc1 on (rc1.rdb$collation_name=rdb$collations.rdb$base_collation_name)
WHERE UPPER(rdb$collations.rdb$collation_name)='LAT_UNI';



Причем если в поле EXT_BASE_COLL NULL - то это EXTERNAL collation, иначе - collation на основе уже существующей...

P.S. Запрос не причесывал, выглядит страшновато ;)
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38983054
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT
    c.rdb$collation_name AS collation_name,
    c.rdb$collation_id AS collation_id,
    c.rdb$character_set_id AS character_set_id,
    c.rdb$collation_attributes AS collation_attributes,
    IIF(BIN_AND(c.rdb$collation_attributes, 1) > 0, 1, 0) AS PAD_SPACE,
    IIF(BIN_AND(c.rdb$collation_attributes, 2) > 0, 1, 0) AS CASE_INSENSETIVE,
    IIF(BIN_AND(c.rdb$collation_attributes, 4) > 0, 1, 0) AS ACCENT_INSENSETIVE,
    c.rdb$system_flag AS system_flag,
    c.rdb$description AS description,
    c.rdb$function_name AS function_name,
    c.rdb$base_collation_name AS base_collation_name,
    c.rdb$specific_attributes AS specific_attributes,
    c.rdb$security_class AS security_class,
    c.rdb$owner_name AS owner_name,
    cs.rdb$character_set_name AS character_set,
    IIF(EXISTS(SELECT
                   *
               FROM
                   rdb$collations ec
               WHERE
                     c.rdb$collation_name = ec.rdb$collation_name), 0, 1) AS external_flag
FROM
    rdb$collations c
    JOIN rdb$character_sets cs ON cs.rdb$character_set_id = c.rdb$character_set_id



причесал немного
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38983129
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениспричесал немногоУ мну тут пара вопросиков нарисовалась.
1) почему-то мерещится, что надо бы добавить
Код: sql
1.
where c.rdb$collation_name  <> cs.rdb$character_set_name

- иначе там лезут не только коллации, а сами чарсеты;
2) почему-то не видно в поле external_flag ничего, кроме нулей (в 2.5 и в 3.0); создал две коллации:
Код: sql
1.
2.
create collation coll_es for iso8859_1 from external ('ES_ES_CI_AI') 'SPECIALS-FIRST=1';
create collation coll_fr for iso8859_1 from external ('FR_FR') CASE INSENSITIVE accent insensitive 'SPECIALS-FIRST=1';

Ввожу твой запрос - и не вижу ничего особенного ни для одного из пп. ES_ES_CI_AI, FR_FR, COLL_ES, COLL_FR.

ЗЫ. в 2.5 нет полей
Код: plaintext
1.
    --c.rdb$security_class AS security_class,
    --c.rdb$owner_name AS owner_name,
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #38983187
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

я на трёшке делал.

Про экстернал. Оно будет там если в списке существующий коллейтов не найден базовый. Иначе абсолютно пофиг указываешь ты предложение FROM EXTERNAL или нет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
CREATE COLLATION - пара вопросов
    #39887403
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот в порядке некропостинга.
Не критично, но интересно.

FB 2.1.7

Обнаруживаю отсутствие UNICODE_CI_AI
Читаю доку

https://www.firebirdsql.org/refdocs/langrefupd21-ddl-collation.html

http://www.firebirdtest.com/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-ddl-collation.html

Код: sql
1.
2.
3.
CREATE COLLATION UNICODE_CI_AI
FOR UTF8 FROM UNICODE_CI
   accent INSENSITIVE



Код: plaintext
1.
2.
This operation is not defined for system tables.
unsuccessful metadata update.
Invalid collation attributes.

Причем один раз (воспроизвести не смог) вообще ругнулось на неизвестный токен accent

При этом в RDB$COLLATIONS вообще-то есть строки с аттрибутом 7
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #39887409
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ODS 11.1

Открыл в FB 2.5.1 Embedded (да, я знаю) из комплекта IBE - запрос прошёл без проблем...
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #39887416
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переоткрыл в 2.1.7

При попытке чтения/записи в таблицу

Undefined name.
COLLATION UNICODE_CI_AI for CHARACTER SET UTF8 is not installed.

При этом в RDB$COLLATIONS оно есть. Какая милая, забавная зверушка. Была.
...
Рейтинг: 0 / 0
CREATE COLLATION - пара вопросов
    #39887417
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

http://www.ibase.ru/unicode_faq/
"Внимание! В версиях 2.1 и 2.5 есть ряд багов, связанных с unicode_ci, как исправленных, так и нет. Например, 2457, 3239, 1989. Поэтому использовать unicode_ci в версиях ниже 2.5.1 не рекомендуется."

http://tracker.firebirdsql.org/browse/CORE-2457
http://tracker.firebirdsql.org/browse/CORE-3239
http://tracker.firebirdsql.org/browse/CORE-1989
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CREATE COLLATION - пара вопросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]