Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Тип COMPUTED поля в метаданных (? пользовательский/системный) / 25 сообщений из 34, страница 1 из 2
06.06.2018, 17:33
    #39656745
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Делаю таблицу с вычислимыми полями разных типов
Код: sql
1.
2.
3.
4.
5.
6.
7.
create table test(
ID integer, 
comp1 computed(2+3),
comp2 integer computed(2+3),
comp3 numeric(18,4) computed(2+3),
comp4 double precision computed(2+3)
)


Как в метаданных опознать, что пользователь ЯВНО задал тип вычислимого поля, а он не автоматический по выражению?
Поля реально создаются с указанными типами, но как при представлении DDL к этому адаптироваться...
В rdb$relation_fields ничего не нашел на эту тему.
Ibexpert выдает в таком виде:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE TEST (
    ID     INTEGER,
    COMP1  COMPUTED BY (2+3),
    COMP2  COMPUTED BY (2+3),
    COMP3  NUMERIC(18,4) COMPUTED BY (2+3),
    COMP4  COMPUTED BY (2+3)
);
...
Рейтинг: 0 / 0
06.06.2018, 18:07
    #39656793
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barry,

версия FB какая?
...
Рейтинг: 0 / 0
06.06.2018, 20:34
    #39656910
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barry,

Никак, ибо сервер при создании таких полей эту дополнительную информацию, в т.ч. если в качестве типа указать домен, никак не сохраняет. В трекере есть застарелый тикет на эту тему, проголосуй, может дождемся когда-нибудь.
...
Рейтинг: 0 / 0
06.06.2018, 21:12
    #39656921
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
печально
Симонов Денисверсия FB какая?Смотрел на WI-V3.0.0.32483
...
Рейтинг: 0 / 0
06.06.2018, 21:35
    #39656934
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barryВ rdb$relation_fields ничего не нашел на эту тему.

надо искать в RDB$FIELDS.RDB$FIELD_TYPE
...
Рейтинг: 0 / 0
06.06.2018, 21:46
    #39656940
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Симонов ДенисbarryВ rdb$relation_fields ничего не нашел на эту тему.надо искать в RDB$FIELDS.RDB$FIELD_TYPE
Так точно. Который(е) выбирать по соотв. rdb$relation_fields.rdb$field_source


barryIbexpert выдает в таком виде:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE TEST (
    ID     INTEGER,
    COMP1  COMPUTED BY (2+3),
    COMP2  COMPUTED BY (2+3),
    COMP3  NUMERIC(18,4) COMPUTED BY (2+3),
    COMP4  COMPUTED BY (2+3)
);

Кстати, надо уточнить не "баг" ли это.
...
Рейтинг: 0 / 0
07.06.2018, 03:53
    #39656981
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Гаджимурадов РустамbarryIbexpert выдает в таком виде:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE TEST (
    ID     INTEGER,
    COMP1  COMPUTED BY (2+3),
    COMP2  COMPUTED BY (2+3),
    COMP3  NUMERIC(18,4) COMPUTED BY (2+3),
    COMP4  COMPUTED BY (2+3)
);

Кстати, надо уточнить не "баг" ли это.

Похоже на баг, ага. Если RDB$FIELD_SUB_TYPE = 1, то в определение поля включается и тип в явном виде.
Однако же зачем-то я это сделал... не помню уже.
...
Рейтинг: 0 / 0
07.06.2018, 09:53
    #39657085
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Симонов ДенисbarryВ rdb$relation_fields ничего не нашел на эту тему.
надо искать в RDB$FIELDS.RDB$FIELD_TYPEТип поля вообще... я как бы в курсе...
Речь о ситуации когда пользователь в скрипте явно перекрывает тип, который сервер определяет по выражению.
Код: sql
1.
2.
comp1 computed(2+3),
comp3 numeric(18,4) computed(2+3),


При извлечении метаданных (при сравнении баз) мне надо понять - переопределен ли пользователем тип.
...
Рейтинг: 0 / 0
07.06.2018, 10:03
    #39657097
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barry,

и... RDB$FIELDS.RDB$FIELD_TYPE в данном случае хранит именно переопределённый тип. Ты бы проверил что ли.
...
Рейтинг: 0 / 0
07.06.2018, 10:18
    #39657110
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Симонов ДенисRDB$FIELDS.RDB$FIELD_TYPE в данном случае хранит именно переопределённый тип

Разумеется. Но узнать по нему, задавал ли пользователь тип явно, практически невозможно.
...
Рейтинг: 0 / 0
07.06.2018, 10:35
    #39657126
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barryПри извлечении метаданных (при сравнении баз) мне надо понять - переопределен ли пользователем тип.Зачем ?
...
Рейтинг: 0 / 0
07.06.2018, 11:10
    #39657187
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
hvladbarryПри извлечении метаданных (при сравнении баз) мне надо понять - переопределен ли пользователем тип.Зачем ?Зачем юзер хочет numeric(18,4)? Ну не знаю... может у него проблемы с психикой, но он так решил и так хочет. Вы дали ему в руки такой инструмент и он им воспользовался.
Или зачем мне? Мне ставят проблему соответствующую - типа мы вот сравниваем базу со скриптом, а она все время не совпадает.
comp1 computed(2+3),
comp3 numeric(18,4) computed(2+3),
Мне надо comp1 извлечь без типа, а comp3 с типом. Если я оба поля извлеку без типов у меня совпадет, но юзер будет неудовлетворен игнорированием его типа. Я из базы могу извлечь оба поля с типами, но у меня несовпадение по скрипту.
...
Рейтинг: 0 / 0
07.06.2018, 11:18
    #39657193
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barry,

а ну ка погоди. Судя по твоему сообщению для NUMERIC(x, y) тип то как раз в скрипте IBE присутствует. Он теряется для других типов (double precision)
...
Рейтинг: 0 / 0
07.06.2018, 11:22
    #39657198
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barryЯ из базы могу извлечь оба поля с типами, но у меня несовпадение по скрипту.Ну так исправят свой скрипт один раз, раз оно им ТАК надо
...
Рейтинг: 0 / 0
07.06.2018, 11:25
    #39657200
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Если же оно тебе надо больше - препарируй селект с нужным выражением и узнаешь тот тип, который сервер сам вычислил.
...
Рейтинг: 0 / 0
07.06.2018, 15:29
    #39657488
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Симонов Денисbarry,
а ну ка погоди. Судя по твоему сообщению для NUMERIC(x, y) тип то как раз в скрипте IBE присутствует. Он теряется для других типов (double precision)Зачем мне IBE, у меня своя приблуда. Но проблема у нас одна с IBE. Нам надо показать скрипт таблицы в том виде, как задал пользователь. Смотри мой самый первый скрипт с 4-мя полями у таблицы. Там перекрыт тип у трех полей, а не у одного. IBE NUMERIC показывает, но остальные переопределенные поля без типа. И он показывает NUMERIC не по здравой логике, а по "женской"...
IBExpertПохоже на баг, ага. Если RDB$FIELD_SUB_TYPE = 1, то в определение поля включается и тип в явном виде.
Однако же зачем-то я это сделал... не помню уже.
...
Рейтинг: 0 / 0
07.06.2018, 15:33
    #39657496
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
hvladЕсли же оно тебе надо больше - препарируй селект с нужным выражением и узнаешь тот тип, который сервер сам вычислил.Я знаю тип и так из системных таблиц, я же для обычных полей все равно тип достаю. Мне не проблема узнать тип вообще... моя проблема - серверный авто-тип или пользовательский перекрытый тип.
...
Рейтинг: 0 / 0
07.06.2018, 15:53
    #39657518
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barry> Нам надо показать скрипт таблицы в том виде, как задал пользователь.

Я щас глянул - ИМХО никак, даже с ручным prepare для перевычисления,
ибо computed_source и blr у них идентичный. Так что смириться с тем, что
сервер "приводит" типы. Ну или предложить пользователям хранить тип
или выражение целиком в description и вытаскивать оттуда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2018, 16:14
    #39657549
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
barryЯ знаю тип и так из системных таблиц, я же для обычных полей все равно тип достаю. Мне не проблема узнать тип вообще... моя проблема - серверный авто-тип или пользовательский перекрытый тип.

Ну так взял выражение, засунул его в select, препарировал, узнал тип результата. Сравнил с тем, что в RDB$FIELDS лежит.
Не совпадает - значит, пользователь его переопределил.
Лично я этим заниматься не буду. Надо пользователю - пусть кастит явно результат прямо в выражении.
...
Рейтинг: 0 / 0
07.06.2018, 16:28
    #39657562
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
IBExpert> Ну так взял выражение, засунул его в select, препарировал, узнал тип результата.

Вытащить исходный всё равно не получится.
Исходное выражение (текст) сохраняется не целиком.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2018, 16:32
    #39657567
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Гаджимурадов РустамВытащить исходный всё равно не получится.
Исходное выражение (текст) сохраняется не целиком.


В смысле? Выражение COMPUTED BY сохраняется целиком, так что теоретически его можно засунуть в селект и препарировать.
...
Рейтинг: 0 / 0
07.06.2018, 16:42
    #39657580
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
IBExpert> В смысле? Выражение COMPUTED BY сохраняется целиком,

Да, но без типа.

IBExpert> так что теоретически его можно засунуть в селект и препарировать.

И вернёмся к исходному вопросу - как отличить авто-тип от ручного. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2018, 16:47
    #39657594
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Гаджимурадов РустамИ вернёмся к исходному вопросу - как отличить авто-тип от ручного. :)


Выше писал: cравнить результат препарирования с тем, что в RDB$FIELDS лежит.
...
Рейтинг: 0 / 0
07.06.2018, 16:58
    #39657620
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Господи, Саш, не тормози. Я эту идею понял уже когда Влад про препаре подсказал.
Но *отличить* соотв. типы не получится, если они будут совпадать. Чтобы вам всем
было проще Бориса понять, я упрощу его пример:

Код: sql
1.
2.
3.
4.
5.
create table test(
ID integer, 
comp1 computed(2+3),
comp2 bigint computed(2+3)
)




Последние 2 поля вы никак не отличите, ни по систаблицам, ни по препаре computed-выражения.

Ферштейн?

P.S. Не спрашивай меня, нафига это ему (или его пользователям) нужно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2018, 17:02
    #39657631
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип COMPUTED поля в метаданных (? пользовательский/системный)
Гаджимурадов РустамГосподи, Саш, не тормози. Я эту идею понял уже когда Влад про препаре подсказал.
Но *отличить* соотв. типы не получится, если они будут совпадать.


Тормозит тут кто-то другой, а не я. Когда типы совпадают, никаких проблем нет.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Тип COMPUTED поля в метаданных (? пользовательский/системный) / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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