системные переменные в FB2

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

системные переменные в FB2

Сообщение sydenis » 13 ноя 2006, 16:28

читаю release notes, но у меня с туземными языками не очень как-то...
правильно ли я понял, что оперируя RDB$GET_CONTEXT или RDB$SET_CONTEXT можно теперь задавать свои собственные переменные?
А какое у них время жизни будет?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 24 ноя 2006, 13:07

правильно. Соответствующее их контексту (коннект или тр-ция).

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 27 ноя 2006, 16:09

А где бы об это подробнее узнать, в т.ч. про область видимости.
Если, скажем, есть потребность, чтобы все объекты базы знали не только 'NOW' или 'USER', но что-нибудь моё, типа
INITIAL_DATE = 01.01.2006
DEFAULT_USER = 'VANIA' и т.п.
Для этого RDB$SET_CONTEXT подходит? Где бы об этом почитать?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 ноя 2006, 16:29

sydenis писал(а):чтобы все объекты базы знали

Код: Выделить всё

CREATE TABLE MyGlobalParamsTable (
  ID INT,
  ATYPE INT,
  NAME VARCHAR(100)
  VALUE VARCHAR(1000));

select ATYPE, VALUE from MyGlobalParamsTable where NAME = 'DEFAULT_USER';

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 27 ноя 2006, 17:22

спасибо - в курсе
вопрос был о новой функциональности fb2

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 ноя 2006, 18:00

sydenis писал(а):вопрос был о новой функциональности fb2
Дык про то и речь.
Не было такой проблемы, как глобальные для базы переменные.
А вот переменные контекста транзакции и сессии разруливать было геморно очень, так что эти новшества как раз в тему.

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 27 ноя 2006, 21:46

Не было такой проблемы
угу... ну в таком разрезе понятно
тогда нафиг там возможность ещё какие-то свои переменные определять?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 27 ноя 2006, 22:22

sydenis писал(а):Где бы об этом почитать?
в релизных нотах, есс-но

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 28 ноя 2006, 11:02

хм... напомню с чего всё начиналось
читаю release notes...
допускаю, что чел со статусом"разработчик" видит за скупыми строчками гораздо больше, чем простой юзер :)) тогда просто объясните смысл нововведения:
У нас и до этого имелись системные переменные, которые подробно определяли контекст, сейчас их даже ещё прибавилось.
Из предыдущих объяснений я понял, что теперь появилась возможность определить собственную переменную на время одного коннекта/транзакции и видимую только внутри него? Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 ноя 2006, 11:33

sydenis писал(а):Мне не понятно для чего это можно использовать - может быть я упускаю, что-то действительно полезное в своей работе
Не знаешь, зачем применить - значит, не нужно, не используй :wink:
Если мне нужна переменная, видимая не только пока я внутри одной процедуры, я использую RDB$SET/GET_CONTEXT, и я уверен, что её значение не пересечётся с параллельно установленной из той же процедуры другим пользователем / сессией.

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 28 ноя 2006, 12:04

теоретически понятно, а практически... :|
ни разу сталкивался с тем, чтобы переменные, объявленные внутри одной процедуры, как-то конфликтовали в разных коннектах..

можно какой-нть простой пример из жизни библиотекарей, отделов кадров или манагеров с заказами?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 ноя 2006, 12:26

sydenis писал(а):тни разу сталкивался с тем, чтобы переменные, объявленные внутри одной процедуры, как-то конфликтовали в разных коннектах..
Не внутри процедуры! Я только сослался на присвоение значения внутри процедуры, как пример.
Переменные видимы для всей транзакции или сессии. Этих процедур можно запускать много, и в каждой будет видно текущее значение этой переменной.

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 28 ноя 2006, 12:54

да, я это понял, просто не пойму практического смысла.
Скажем одна процедура что-то сделала и с помощью RDB$SET_CONTEXT поставила флаг, типа "я тут табличку заупдатила, просьба никому её по второму разу не трогать" :)
Это понятно, когда всем этот флаг виден. Но если о нём знает только узкий круг лиц из одного коннекта - это вроде бессмысленно. Тем более, что в рамках одной транзакции ты чаще всего и так знаешь где чего делается и флаги вроде особо не нужны

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 ноя 2006, 13:24

Я уже говорил - если не можешь (пока?) придумать применение - не пользуйся.
Например, мне нравится Execute statement, очень мощная штука и может решить казалось бы безвыходную проблему, но в моём достаточно большом проекте я её ни разу не использовал. Потому что не требовалось. Зато если потребуется - вот она! 8)

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 28 ноя 2006, 14:21

Я уже говорил - если не можешь (пока?) придумать применение - не пользуйся.
эдак никто и IB/FB пользоваться бы не стал - нужно чтоб вначале кто-то рассказал как тебе от него сильно хорошо будет, однако :lol:

Ответить