Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CREATE COLLATION - пара вопросов / 21 сообщений из 21, страница 1 из 1
11.06.2015, 14:46
    #38982323
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Всем привет.

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
11.06.2015, 14:56
    #38982342
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
DarkMaster,

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

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

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

2 - ACCENT INSENSITIVE
1 - CASE INSENSITIVE
0 - PAD SPACE
...
Рейтинг: 0 / 0
11.06.2015, 15:24
    #38982391
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
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
11.06.2015, 15:27
    #38982399
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Симонов Денис,

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

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

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

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

Я про ПОРЯДОК бит. Ты - про значения масок ;)
...
Рейтинг: 0 / 0
11.06.2015, 16:43
    #38982519
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
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
11.06.2015, 17:03
    #38982538
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Симонов Денис,

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

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

эксперимент показал что в системной таблице FROM basecoll что FROM EXTERNAL ('extname') выглядят одинаково. Поэтому хз...
...
Рейтинг: 0 / 0
11.06.2015, 23:35
    #38982743
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Симонов Денис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
12.06.2015, 01:47
    #38982777
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Симонов Денис,

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

Информацию по 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
12.06.2015, 18:02
    #38983054
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
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
12.06.2015, 22:28
    #38983129
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Симонов Дениспричесал немногоУ мну тут пара вопросиков нарисовалась.
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
13.06.2015, 10:43
    #38983187
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
Таблоид,

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

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

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
11.11.2019, 12:27
    #39887409
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
ODS 11.1

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

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

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

При этом в RDB$COLLATIONS оно есть. Какая милая, забавная зверушка. Была.
...
Рейтинг: 0 / 0
11.11.2019, 12:47
    #39887417
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE COLLATION - пара вопросов
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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CREATE COLLATION - пара вопросов / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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