|
Вывод 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 |
|
|
start [/forum/topic.php?fid=40&fpage=10&tid=1560164]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 241ms |
total: | 408ms |
0 / 0 |