|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
Дано: в таблице "SYS$CONFIG$DATASET" есть поле ID_CREATOR и вычисляемое поле CREATION_INFO, определяемое следующим образом: Код: sql 1.
Так вот, это поле возвращает неверное ФИО пользователя, так как в таблице DIR$SECURITY$DB_USER есть с таким же наименованием и Firebird берет значение этого поля оттуда, как наиболее ближайший контекст. Вопросы: 1. Является ли это поведение абсолютно нормальным? 2. Не должно ли здесь по-хорошему происходить исключение Ambiguous field name? Например, запрос Код: sql 1.
возвращает ошибку, как и следовало ожидать: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 10:45 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 11:50 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, сори, не сразу понял суть. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 11:52 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMaxНе должно ли здесь по-хорошему происходить исключение Ambiguous field name? в первом запросе ты привел только одну таблицу. где там у тебя вторая - х.з. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 11:53 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
kdv, это он вычисляемое поле так определил ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 11:55 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, по хорошему, для таких целей разработчикам Firebird не мешало бы добавить для создаваемой таблицы псевдоним типа THIS, чтобы разработчик БД мог устранить неопределенность используя данный префикс. Ну и, ИМХО, SQLERROR = -204 в подобных случаях должна вылезать, так как действительно есть неопределенность. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 12:02 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
rdb_dev, this в топку. Насчёт генерации ошибки согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 12:06 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
Симонов Денисrdb_dev, this в топку. Меня и SELF вполне устроит... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 12:14 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
Симонов Денис, а, сегодня день невнимательности (не только у меня). Видимо, парсер в этом случае пропускает ambiguous. И вообще, запросы в вычисляемых столбцах - зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 12:40 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
насколько помню, ambiguity ловится только для дубликатов имен на одном уровне вложенности. Для подзапросов и прочих вложенных структур имена резолвятся в приоритете текущего контекста, поэтому ошибки нет. Так было сделано специально, насколько я понимаю. Иначе совсем много всего отломится. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2016, 12:44 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
dimitr, Вообще имеет ли смысл обсудить, действительно ли необходима данная фича? Мое мнение - она отрицательна, так как приводит к тому, что результат вычисляемого поля может поменяться при добавлении такого же поля в таблицу подзапроса, плюс необходимо держать в голове, что у таблиц одинаковое поле и надо обязательно указать таблицу. На подобный случай наступал неоднократно, и каждый раз он вызывал непонимание что, собственно, происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 03:59 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, ИХМО подзапросы в вычисляемых полях это зло ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 09:14 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
Симонов Денис, Вот вы заладили - зло, зло. Отличная вещь, которая значительно упрощает разработку. Надо вывести в подсказке или в таблице информацию о создателе документа в программе в виде "Создано 01.06.2016, пользователь Иванов П.П.". Как, по-вашему, это правильно делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 09:50 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, Код: plsql 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:16 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, 1. запросом, так как в 90% случаев голая таблица неинтересна 2. если используется многократно, то сделать представление ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:23 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
rdb_dev, Молодец. Вместо подзапроса с выборкой из таблицы, ты сделал то же самое, только с оверхедом в виде выборки из ХП (причем с синтаксисом до FB 2.5). Зачем такая сложность? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:37 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
В моем примере потенциальная ошибка с user_id INTEGER NOT NULL и ON DELETE SET NULL. Будьте бдительны! ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:40 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
Симонов Денис1. запросом, так как в 90% случаев голая таблица неинтересна 2. если используется многократно, то сделать представление Зачем городить представление, если ровно то же самое (как логически, так и физически) будет с вычисляемым полем? А если мне эту таблицу обновлять надо, то создавать еще триггера на представление? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:40 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, ты уже на тройку перешёл? Если да, то делай вычисляемое поле через PSQL функцию сразу все неоднозначности пропадут ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:41 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, полагаешь, оверхед вьюшки будет намного меньше? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:42 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
Симонов Денисты уже на тройку перешёл? Если да, то делай вычисляемое поле через PSQL функцию сразу все неоднозначности пропадут Зачем мне PSQL-функция, если можно подзапросом обойтись? А неоднозначность легко устраняется добавлением таблицы к именам полей в подзапросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:43 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
rdb_devCyberMax, полагаешь, оверхед вьюшки будет намного меньше? Полагаю, оверхед в виде ХП, PSQL-функций, вьюшек и прочего нафиг не нужен, так как проблема не в составлении подзапроса, чтобы он формировал правильную выборку, а в том, что FB не считает данную ситуацию ошибкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:45 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
CyberMax, лично я предпочитаю работать с данными в таблицах через интерфейс селективных ХП, так как это позволяет более гибко работать с правами пользователей вплоть до прав на выборку и изменение отдельных записей (документов), так как ХП работает с правами создавшего её пользователя и в самой ХП можно определить алгоритм вычисления эффективных прав текущего (запустившего ХП) пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 10:52 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
rdb_devтак как ХП работает с правами создавшего её пользователя и в самой ХП можно определить алгоритм вычисления эффективных прав текущего (запустившего ХП) пользователя. Это заблуждение. В Firebird ХП работает с правами вызывающего пользователя. Но самой ХП можно дать права на используемые объекты которые будут суммироваться с правами вызывающего пользователя. Возможность указания AUTHID [DEFINER | CURRENT_USER] была бы полезной. Ещё не поздно попросить чтобы сделали в Firebird 4.0. Всё равно там сейчас security сильно переделывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 11:04 |
|
Неоднозначность полей в подзапросе
|
|||
---|---|---|---|
#18+
rdb_dev... так как ХП работает с правами создавшего её пользователя... Похоже, тут меня подвело понимание прав в разрезе MS SQL Server. В FirebirdSQL это права доступа к таблицам из ХП, триггеров и представлений раздаются через GRANT ... TO <object_list> ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2016, 11:07 |
|
|
start [/forum/topic.php?fid=40&msg=39247847&tid=1562147]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 158ms |
0 / 0 |