Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хотелка к 3.х: вопрос(ы) по контекстным переменным / 25 сообщений из 90, страница 1 из 4
11.11.2013, 15:32:55
    #38460564
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
hi all.

Возможно ли вместо вот этого:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
execute block returns( ctx_con varchar(11), ctx_trn varchar(11) ) as
begin
  rdb$set_context('USER_SESSION','CTX001', cast(rand()*1000 as int));
  rdb$set_context('USER_TRANSACTION','CTX002', cast(rand()*1000 as int));

  ctx_con=rdb$get_context('USER_SESSION','CTX001');
  ctx_trn=rdb$get_context('USER_TRANSACTION','CTX002');
  suspend;
end

- сделать вот такой сахар:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
execute block returns( ctx_con varchar(11), ctx_trn varchar(11) ) as
begin
  $ctx001 = cast(rand()*1000 as int);
  $$ctx002 = cast(rand()*1000 as int);
  ctx_con=$ctx001;
  ctx_trn=$$ctx002;
  suspend;
end



ЗЫ. И еще вопрос, давно мечтал спросить, да всё как-то стеснялся. Возможно ли создание пространства имён, общего для всех коннектов ? То есть, пишем/читаем туда ВСЕ ВМЕСТЕ, кто первый записал - того и тапки.

ЗЗЫ. Сильно не бить! :-)
...
Рейтинг: 0 / 0
11.11.2013, 15:46:10
    #38460582
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

я не очень понял, чем отличается $ от $$. переменная сессии - $, переменная транзакции - $$ ?
И, насчет
$ctx001 = cast(rand()*1000 as int);
то есть, как упоминание переменной, сильно сомневаюсь, особенно потому, что время жизни этих переменных не больше времени жизни коннекта. Были бы они персистентными - тогда еще туда сюда (по аналогии со столбцами таблиц).
...
Рейтинг: 0 / 0
11.11.2013, 15:50:39
    #38460587
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
kdvя не очень понял, чем отличается $ от $$. переменная сессии - $, переменная транзакции - $$ ? Да, именно так.

kdvИ, насчет
$ctx001 = cast(rand()*1000 as int);
то есть, как упоминание переменной, сильно сомневаюсь , особенно потому, что время жизни этих переменных не больше времени жизни коннекта. Были бы они персистентными - тогда еще туда сюда (по аналогии со столбцами таблиц).сомнение - в чём ? время жизни переменных и упрощение синтаксиса - вроде бы не пересекающиеся понятия ?..
...
Рейтинг: 0 / 0
11.11.2013, 15:57:13
    #38460599
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

ты динамику (выражение) заменяешь статикой (идентификатором). А статика у нас проверяется на момент компиляции процедуры, когда нет никаких контекстных переменных.

кроме того, имена переменных - всегда контекстно-зависимы, а имена идентификаторов - только в 3-м диалекте и только с кавычками. Что должно получиться в 1-м диалекте при $myvar = rdb$set_context('USER_SESSION', 'MyVar') и как такой геморрой отлавливать?

как по мне - данунах.
...
Рейтинг: 0 / 0
11.11.2013, 15:57:50
    #38460601
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
dimitrконтекстно-зависимы
регистро-зависимы, пардон
...
Рейтинг: 0 / 0
11.11.2013, 16:05:52
    #38460618
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
dimitrкак по мне - данунах.ну, значит и Кальтенбруннеру будет тоже самое, если не сильнее.
Амэн. :-)
...
Рейтинг: 0 / 0
11.11.2013, 16:11:01
    #38460627
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

здесь было куда лучшее предложение сделать публичные переменные в пакетах. Правда уровня транзакции наверное вряд ли получится. А вот уровня соединения вполне.

в принципе с пакетами можно сделать что-то типа

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create package vars
as
begin
  function getMyVar1 returns integer;
  procedure setMyVar(value integer);
end^

create package body vars
as
begin
  function getMyVar1 returns integer
  as
  begin
     return rdb$get_context('USER_SESSION', 'MyVar1');
  end

  procedure setMyVar1(value integer)
  as
  begin
     rdb$set_context('USER_SESSION', 'MyVar1', value);
  end
end^
...
Рейтинг: 0 / 0
11.11.2013, 16:16:25
    #38460636
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Симонов Денисв принципе с пакетами можно сделать что-то типаНе вижу в этом коде "революционной новизны", позволяющей всем коннектам видеть/менять одну и ту же контекстную переменную. Это же просто две функции-обёртки, позволяющие каждому коннекту манипулировать СВОИМ СОБСТВЕННЫМ "инстансом" этой самой MyVar, нет ?
...
Рейтинг: 0 / 0
11.11.2013, 16:21:31
    #38460644
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

я про новизну ничего не говорил. Я говорил про упрощение синтаксиса + как бонус контроль типов.

Таблоидпозволяющей всем коннектам видеть/менять одну и ту же контекстную переменную

нафига это надо? В прицепе можно вывернуться и сохранять и считывать значения из постоянной таблицы, естественно поимев ряд недостатков.
...
Рейтинг: 0 / 0
11.11.2013, 16:22:55
    #38460647
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

По идее, чтобы все коннекты "видели" переменные друг друга - им нужна общая таблица. In-memory для классика не прокатит, разве что memory mapped file (для Windows, для *nix - хз). Ну а MMF по сути недалеко ушло от отдельной таблицы. Примерно так.
...
Рейтинг: 0 / 0
11.11.2013, 16:25:46
    #38460653
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
В отрыве от контекстных переменных (мечтательно).

Эх, вот был-бы какой-нить отдельный процесс, на который можно было бы таймер/шедулер повесить....
...
Рейтинг: 0 / 0
11.11.2013, 16:47:50
    #38460692
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Симонов ДенисТаблоидпозволяющей всем коннектам видеть/менять одну и ту же контекстную переменнуюнафига это надо? В прицепе можно вывернуться и сохранять и считывать значения из постоянной таблицы, естественно поимев ряд недостатков.Держать в одном shared-списке инфу, существование которой без подключений к базе невозможно. Как пример - вопрос вида "кто сейчас подключен к базе и чё они там делают ?", задаваемый НЕ админом, а каким-нибудь там руководителем, кадровиком, СБшником и проч.

Юзать mon$attachments годится только для случая, когда юзера различимы на уровне базы. Для случая, когда они прописаны в какой-нить справочной таблице и все лезут под одним именем - не катит. К тому же, все коннекты видны только sysdba или владельцу.
Юзать mon$statements - лишняя нагрузка на ФБ. Содержимое mon$sql_text всё равно никто из юзеров не поймёт. Видимость чужих активностей - также как для mon$att.

Толкать сведения по юзерам и их деятельности в приложении в fixed-таблицу - не айс. Лишние телодвижения ФБ при обращении даже к rdb$database широко известны в узких кругах. Да и мусор там будет копиться.
...
Рейтинг: 0 / 0
11.11.2013, 16:51:44
    #38460698
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
DarkMasterIn-memory для классика не прокатитCS, тем не менее, использует shared-область памяти для разруливания блокировок. Значит, когда надо - прокатывает... ;-)
...
Рейтинг: 0 / 0
11.11.2013, 16:53:03
    #38460702
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

пиши свой препроцессор.
...
Рейтинг: 0 / 0
11.11.2013, 16:56:14
    #38460708
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
kdvпиши свой препроцессор.Чё ?! Хорош издевацца-то...
...
Рейтинг: 0 / 0
11.11.2013, 16:57:22
    #38460710
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
По сабжу:

Синтаксический сахар в сад, конечно, не только потому
что регистронезависимость, но и потому что невкусный.

А вот глобальный неймспейс мог бы быть удобен - щас
вариантов только два обычные таблицы и ET, первые
транзакционно-зависимы, вторые - нет, но у них есть
другие "недостатки и ограничения". И если неймспейс
GLOBAL был бы ещё и с хорошейпроизводительностью -
было бы отлично, ИМХО.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.11.2013, 16:59:59
    #38460721
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

ТаблоидК тому же, все коннекты видны только sysdba или владельцу.
В 3.0 вроде как обещали спец роль RDB$MONITOR

ТаблоидЮзать mon$statements - лишняя нагрузка на ФБ. Содержимое mon$sql_text всё равно никто из юзеров не поймёт. Видимость чужих активностей - также как для mon$att.
Кроме админа никому не нужно. Да и тому редко требуется.

ТаблоидЛишние телодвижения ФБ при обращении даже к rdb$database широко известны в узких кругах.
Мною был предложен вариант из стандарта и dimitr с ним согласился. Но в тройке сделать он не обещал.

P.S. Про in-memory таблицу хотелка хорошая, но сомневаюсь что будет реализовано в рамках 3.0
...
Рейтинг: 0 / 0
11.11.2013, 17:03:27
    #38460728
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Симонов Денис> Мною был предложен вариант из стандарта и dimitr с ним согласился.

О чём речь? Если можно, ссылкой.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.11.2013, 17:11:57
    #38460738
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Гаджимурадов Рустам,

вот это 12634419 . Ну и читай далее что там написали.
...
Рейтинг: 0 / 0
11.11.2013, 17:15:53
    #38460746
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
А, оффтопом на оффтоп, как обычно. То обсуждение я помню.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.11.2013, 17:17:52
    #38460749
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Симонов ДенисТаблоидЮзать mon$statements - лишняя нагрузка на ФБ. Содержимое mon$sql_text всё равно никто из юзеров не поймёт. Видимость чужих активностей - также как для mon$att.Кроме админа никому не нужно. Да и тому редко требуется.Нужен не сам sql-текст деяний, а "кто в какой режим приложения вошёл". Этим интересуются, когда хотят кого-то отследить, что-то предотвратить, короче - когда начинаются всякие шпионские игры.
Ясен пень, что mon$-таблицы тут вообще рядом не лежат. Никак.
...
Рейтинг: 0 / 0
11.11.2013, 17:18:32
    #38460751
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Гаджимурадов Рустам,

ну в общем-то как я понял у Таблоида к rdb$database именно эта претензия. Или я не въехал в суть?
...
Рейтинг: 0 / 0
11.11.2013, 17:19:51
    #38460756
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

все возможные запросы не отследишь. Один фиг можно чего нибудь гадкого наваять.
...
Рейтинг: 0 / 0
11.11.2013, 17:39:09
    #38460801
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Симонов Денисну в общем-то как я понял у Таблоида к rdb$database именно эта претензия. Или я не въехал в суть?Хотелось бы иметь таблицу:
1) хранимую всегда только в памяти сервера;
2) организованную как Map (точнее: TreeMap, чтобы можно было обходить её в порядке возрастания ключей);
3) внетранзакционную (иначе опять версии, мусор и проч);
4) содержимое которой было бы видно всем коннектам и могло бы ими меняться.
...
Рейтинг: 0 / 0
11.11.2013, 17:45:36
    #38460819
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хотелка к 3.х: вопрос(ы) по контекстным переменным
Таблоид,

погоди. Иметь таблицу в памяти с кучей записей это одно. Совсем другое иметь возможность получения констант без обращения к таблицам. In-memory таблица вещь хорошая, но в тройке и так дофига чего ещё делать. Может в каком нибудь 3.1 и будет. Оформи хотелку в трекер. Кстати тут тоже кроется недостаток. Как за памятью такой таблицы следить?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хотелка к 3.х: вопрос(ы) по контекстным переменным / 25 сообщений из 90, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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