|
Вывод UUID
|
|||
---|---|---|---|
#18+
WinAPI UuidToString: 6eac0df7-46d2-11eb-8287-2c44fdb89adb Firebird gstat: 0DF76EAC-46D2-11EB-8782-442CB8FDDB9A Firebird UUID_TO_CHAR: F70DAC6E-D246-EB11-8287-2C44FDB89ADB Забавный зоопарк. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 20:03 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Вот и храню прилетающие из всяких ЭДО, црпт, своих сайтов и т.п. ууид-ы прямо в строках, как есть, иначе потом концов хрен сыщешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 12:17 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 13:10 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
hvladMON$GUID {D60E1149-EB9E-415D-C3BE-4035451D3C9D} Код: plaintext 1. 2.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 13:27 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
тот, кто фиксил UUID_TO_CHAR, забил на все остальные места где юзаются GUIDы. А дальше всё шло по накатанной :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 13:54 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitr> забил на все остальные места где юзаются GUIDы Это может чем-то аукнуться конечным пользователям? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 14:02 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Вот поэтому хотя бы fb_info_db_guid стоило отдавать в честном двоичном виде... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 14:05 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, про это я думал. Но нафига, если во всех остальных местах оно юзается как строки. Кто это будет конвертить? А если сконвертит не так, как движок? Щаз пусть и неправильно, но хоть единообразно и совместимо во все стороны :-) ЗЫ. хотя конечно в мажорном релизе все это можно было бы перепахать по-правильному. Ладно 2.5.2, там в rdb$backup_history могли лежать записи и ломать nbackup не стоило. Но вот почему мы на это забили в 3.0 - надо копать архивы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 14:16 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrНо нафига, если во всех остальных местах оно юзается как строки. А я в FireSwarm собираюсь использовать БД UID как часть глобального идентификатора транзакции везде, включая хранилище и сетевой протокол. Поэтому хочется его иметь размером в 16 байт, а не 36. Придётся копипастить код из движка и надеяться, что вам и дальше будет лень этот зоопарк вычищать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 14:30 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Простой вариант без перепахивания - добавить другую функцию. Назвать, например, UUID_TO_STR. И пусть она повторяет поведение WinAPI. А UUID_TO_CHAR пусть останется для совместимости со старыми базами и приложениями. Ivan_Pisarevsky Вот и храню прилетающие из всяких ЭДО, црпт, своих сайтов и т.п. ууид-ы прямо в строках, как есть, иначе потом концов хрен сыщешь. Они жрут много места, не сжимаются, но OCTETS хотя бы раза в 2 меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 17:15 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А я в FireSwarm собираюсь использовать БД UID как часть глобального идентификатора транзакции везде, включая хранилище и сетевой протокол. Поэтому хочется его иметь размером в 16 байт, а не 36. и это правильно Придётся копипастить код из движка и надеяться, что вам и дальше будет лень этот зоопарк вычищать. PR бы лучше замутил, чем многослойные грабли строить... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 21:06 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrPR бы лучше замутил, чем многослойные грабли строить... На ещё один info item?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 21:14 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
на замену GUID_LEGACY_FORMAT на GUID_NEW_FORMAT внутри Guid* функций (и выкидывание GUID_LEGACY_FORMAT к чертовой бабушке). Или я слишком категоричен? ГУИДы у нас через бекап не передаются, так что проблем с совместимостью быть не должно вроде. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 21:26 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrна замену GUID_LEGACY_FORMAT на GUID_NEW_FORMAT внутри Guid* функций (и выкидывание GUID_LEGACY_FORMAT к чертовой бабушке). Или я слишком категоричен? ГУИДы у нас через бекап не передаются, так что проблем с совместимостью быть не должно вроде. Там, видишь ли, проблема несколько более комплексная, чем преобразование. По уму надо бы перепахивать всё, начиная с генерации. Потому что есть такой RFC 4122, который специфицирует платформо-зависимый двоичный формат UUID и его преобразование в строку. В первом посте первая строчка - как раз по этому RFC. И хотя генерация-то UUID в Firebird этому RFC соответствует (по крайней мере на Windows), но вот его преобразование - нет. Ни старое, ни новое. Ещё одна проблема: база-то у нас подразумевается платформо-независимая, а в заголовке у неё - внезапно! - платформо-зависимый UUID. И если всё это разруливать, то PR получится опять неприемлемо большим и много чего ломающим. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 23:04 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я вчера поднял переписку в FD по этому поводу, и генерация и преобразование должны работать по этому RFC (за исключением возможно регистра). Нюансы обсуждались еще и в трекере, см. CORE-3238. Но в плане преобразования правильно работают только CHAR_TO_UUID и UUID_TO_CHAR. Ты в них заглядывал? Там отнюдь не тупой printf/scanf как в StringToGuid / GuidToString, код несколько сложнее. Вот я и предлагаю его перенести в StringToGuid / GuidToString, выкинув оттуда поддержку legacy-формата. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 08:59 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrНо в плане преобразования правильно работают только CHAR_TO_UUID и UUID_TO_CHAR. Ты в них заглядывал? Заглядывал. evlUuidToChar: Код: plaintext 1. 2. 3. 4. 5.
То есть тупо выводится 128-ми разрядное число в big endian. Это соответствует тому, что написано на вики, но не RFC. Хотя я не прослеживал всю цепочку. Возможно, байты где-то тасуются уже после того, как их выдал вызов CoCreateGuid() в guid.cpp. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 13:54 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
PS: Нашёл, они тасуются в evlGenUuid, но все прочие места (включая DB UID) используют результат GenerateGuid "как есть". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 14:06 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
PPS: Хотя вывод и идёт как big endian, GenUuid тасует байты так, что time-часть идёт первыми байтами, что совсем нехорошо для индексов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 14:21 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovчто time-часть идёт первыми байтами, что совсем нехорошо для индексов. я еще в 2006 году писал функцию, которая переворачивает штатный виндовый guid (CreateClassID). Правда, с тех пор вроде CreateClassID стало возвращать guid в более правильном порядке. Казалось бы, если у вас 36 "случайных" символов, ну сделайте порядок групп нормально сортируемым, что за проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 14:27 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
kdvПравда, с тех пор вроде CreateClassID стало возвращать guid в более правильном порядке. Идентификаторы классов это вообще левая вещь, тянущаяся с тёмных веков. Правильные генераторы это UuidCreateSequential() и UuidCreate(). [quot kdv#22255039Казалось бы, если у вас 36 "случайных" символов, ну сделайте порядок групп нормально сортируемым, что за проблема...[/quot] Мелкая такая проблема: они вообще не предназначались для сравнений на больше-меньше, только на равенство. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 14:44 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Я вообще не понял, в чем проблема. Ну выдал не в том порядке - ну и фиг с ним, все равно два сравнения одним способом (будь-то строка или байты) дадут один результат. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 14:55 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
для GUID-ов наверное можно было бы сделать трюк, похожий на DBKEY - внутри движка он специальный тип, а при передаче наружу превращается в BINARY(16). Тогда в индексе ключ можно генерить по-другому, в частности меняя порядок байт для оптимального сжатия. Тут правда фигня в том, что оный порядок байт есть только на винде, а на линуксе просто поток случайных байт. Да и вообще ХЗ кто этот GUID генерил (ФБ или снаружи) и на какой платформе, так что в общем смысле это выглядит довольно бессмысленной затеей. Но пока тут речь вообще не про это :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 14:57 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrТут правда фигня в том, что оный порядок байт есть только на винде, а на линуксе просто поток случайных байт. Это сейчас в Firebird реализовано так, а вообще-то есть https://linux.die.net/man/3/libuuid например... dimitrв общем смысле это выглядит довольно бессмысленной затеей. Без специального типа, торчащего наружу - да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2020, 15:28 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНашёл, они тасуются в evlGenUuid Да, с перетасовкой вывод соответствует RFC: MS = {5b2c1ba0-48fc-11eb-8287-2c44fdb89adb} ODBC = {5B2C1BA0-48FC-11EB-8287-2C44FDB89ADB} gstat = {1BA05B2C-48FC-11EB-8782-442CB8FDDB9A} UUID_TO_CHAR = {5B2C1BA0-48FC-11EB-8287-2C44FDB89ADB} Но менять сейчас эту перетасовку для пущей дружелюбности к индексам, наверное, уже поздно... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 14:07 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
RFC регистр не оговаривает что ли ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 14:12 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНо менять сейчас эту перетасовку для пущей дружелюбности к индексам, наверное, уже поздно... это ещё почему? Вроде как сама генерация ничего обратно совместимого не сломает ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 14:23 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Нет. Допускаются оба, хотя в примерах внутри используется только нижний. Но там примеры кода мутные, они противоречат остальному тексту. Текст гласит The fields are encoded as 16 octets, with the sizes and order of the fields defined above, and with each field encoded with the Most Significant Byte first (known as network byte order). Note that the field names, particularly for multiplexed fields, follow historical practice. В коде написано: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
то есть код плюёт на MSB раскладку и использует платформенную. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 14:25 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Симонов Денисэто ещё почему? Вроде как сама генерация ничего обратно совместимого не сломает У всех баз, которые хранили UUID в двоичном виде, съедет его текстовое представление. Учитывая, что сейчас раскладка хотя бы соответствует тексту RFC - лучше не трогать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 14:30 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrна замену GUID_LEGACY_FORMAT на GUID_NEW_FORMAT внутри Guid* функций (и выкидывание GUID_LEGACY_FORMAT к чертовой бабушке). Или я слишком категоричен? Да нет, в самый раз. Так ты даёшь добро на изменение ODS на RC стадии?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 02:01 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Так ты даёшь добро на изменение ODS на RC стадии? я не вижу там изменения ОДС ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 10:20 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrя не вижу там изменения ОДС А изменение формата UID в заголовке базы с платформенного на независимый?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 13:18 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А изменение формата UID в заголовке базы с платформенного на независимый? формально ты прав. Но учитывая, что базы у нас все равно между LE/BE непереносимы и что получить бинарный GUID снаружи нельзя, то можно хранить и в нативном формате, а байты тасовать непосредственно перед конвертацией в строку. Или я чего-то упускаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 14:52 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
То есть смысл этого патча будет исключительно исправить вывод GuidToString? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 15:06 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov То есть смысл этого патча будет исключительно исправить вывод GuidToString? ну ты же сам показал выше, что сломано только это? Dimitry Sibiryakov MS = {5b2c1ba0-48fc-11eb-8287-2c44fdb89adb} ODBC = {5B2C1BA0-48FC-11EB-8287-2C44FDB89ADB} gstat = {1BA05B2C-48FC-11EB-8782-442CB8FDDB9A} UUID_TO_CHAR = {5B2C1BA0-48FC-11EB-8287-2C44FDB89ADB} Ну и StringToGuid есс-но тоже придется подправить, а то у нас бинарное сравнение сломается. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 15:12 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
dimitrну ты же сам показал выше, что сломано только это? Ну, в принципе, да. Просто я считал, что у нас база LE/BE независимая. Во всяком случае 15 лет назад Аннушка что-то такое рассказывала на конференции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 15:16 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
это она так мечтала вслух :-) Они сделали под одного клиента динамическую перекодировку endianness на основе единой (LE, насколько я помню) ОДС и она предлагала это засунуть в ФБ. Дело ничем так и не кончилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2020, 15:25 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
В общем, запуллил я реквест https://github.com/FirebirdSQL/firebird/pull/305 Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 13:42 |
|
Вывод UUID
|
|||
---|---|---|---|
#18+
я тебе там уже понаписал всего :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 13:46 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560164]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 265ms |
0 / 0 |