Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как используете Query в классах? / 9 сообщений из 9, страница 1 из 1
11.02.2019, 17:10
    #39772403
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
С наступающими!
Вот тут увидел про "Например теже Query в классах" и немного задумался.
Кто может поделиться, как используете и в чем фича?
А то я, может и к собственному стыду, писал их только под сложные запросы, где эти самые Query пишутся в четыре метода - но такие нужны три раза на всю систему. Иногда один ;)
А у вас?
...
Рейтинг: 0 / 0
11.02.2019, 17:36
    #39772427
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
Query можно писать вместо любых других запросов, любой сложности
но плюсы Query еще и в том что они могут быть не только SQL, а и программные.
Например в ZEN приложении удобно, когда все через Query. Вплоть для сгенерированных результатов.
У меня есть варианты, когда query должен вернуть список классов и он генерируется во время компиляции, и в runtime уже нет никаких вычислений, потому что уже нет необходимости (код меняется только у разработчика, и никогда на продакшене).

И так же большим плюсом идет, то что все query сразу становятся функциями, довольно быстро и легко их вызывать.
Код: sql
1.
2.
3.
4.
set rs = ##class(%File).FileSetFunc("/tmp")
while rs.%Next() {
  write rs.Name
}
...
Рейтинг: 0 / 0
11.02.2019, 17:55
    #39772447
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
Продолжим традицию поиска недостатков в разных способах выполнения запросов.
В данном случае недостаток в том, что запросов может быть миллион всяких разных, затрагивающих разные классы, зачастую похожих, но не одинаковых. Со временем вы можете захламить класс. Править их страшно, потому что где, откуда используются (я понимаю, можно поискать, но что даст список из десятков результатов - и что с этим делать?)

kolesovгде эти самые Query пишутся в четыре метода - но такие нужны три раза на всю систему. Иногда один ;)Не всем так везет :-)
Хотя первый раз все равно самый страшный.

DAiMorИ так же большим плюсом идет, то что все query сразу становятся функциями, довольно быстро и легко их вызывать.Прикольно, не знал.
Но вспомнил фишку, которые тоже, наверное, не все знают. Что классметоды после добавления признака sqlproc можно использовать в запросах как процедуру, возвращающую значение.
...
Рейтинг: 0 / 0
11.02.2019, 18:20
    #39772473
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
Блок А.Н.В данном случае недостаток в том, что запросов может быть миллион всяких разных, затрагивающих разные классы, зачастую похожих, но не одинаковых. Со временем вы можете захламить класс. Править их страшно, потому что где, откуда используются (я понимаю, можно поискать, но что даст список из десятков результатов - и что с этим делать?)Вообще то же справедливо для любых sql запросов, а в некоторых случаях начинается еще и дублирование. И часто запросы даже почти ничем не отличаются, и можно было бы сделать один вместо такого количества
...
Рейтинг: 0 / 0
11.02.2019, 18:54
    #39772488
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
DAiMor,

Если это ESQL запрос, то он не шарится, по сути используется внутри метода.
Если это динамический запрос, то он скорее всего создается в месте использования (т.е. в другом классе), а запросы как элемент класса именно что его в максимальной степени захламляют.

Да, захламить можно и методами по той же причине (захотелось - сделал новый метод), но методы при минимальной дисциплине получаются более атомарными, а запросы атомарными не сделаешь.

Кстати, запросы как элемент класса - это по своей сути динамические(кэшированные) или ESQL(прекомпилированные) запросы? Как они при изменении структуры класса работают? У меня ощущение, что они динамические.
...
Рейтинг: 0 / 0
11.02.2019, 19:57
    #39772501
Sheonn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
Блок А.Н.,

Вроде эти запросы преобразуются в создание объекта SQLStatement
...
Рейтинг: 0 / 0
13.02.2019, 19:06
    #39773548
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
DAiMor,

Хм... как то этот способ прошел мимо меня.
Правда предварительные тесты показали существенное замедление супротив обычного
Код: c#
1.
2.
		set rs = ##class(%ResultSet).%New("classname:queryname")
		set sc=rs.Execute(arg1,arg2,...)



Возможно дело в том что у нас принято все данные запроса сразу запихивать в многомерный qHandle от Execute метода, нужно будет еще покапаться.
...
Рейтинг: 0 / 0
13.02.2019, 21:41
    #39773606
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
Ptnпоказали существенное замедление супротив обычногоЭто вроде справедливо для старых версий, в новых вроде должно быть лучше.
...
Рейтинг: 0 / 0
22.02.2019, 11:20
    #39777789
alatalo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как используете Query в классах?
Блок А.Н.Прикольно, не знал.
Но вспомнил фишку, которые тоже, наверное, не все знают. Что классметоды после добавления признака sqlproc можно использовать в запросах как процедуру, возвращающую значение.

Тут помнится был полезный список автогенерированных методов: https://community.intersystems.com/post/useful-auto-generated-methods
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как используете Query в классах? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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