15
Запросы классов Лебедюк Эдуард

Class queries

Embed Size (px)

Citation preview

Page 1: Class queries

Запросы классовЛебедюк Эдуард

Page 2: Class queries

• Базовые запросы классов

• Кастомные запросы классов

План

Page 3: Class queries

Базовые запросы классовАбстракция над SELECT SQL

Page 4: Class queries

• Метод представления SELECT SQL запросов

• Обрабатываются оптимизатором и компилятором SQL

• В списке аргументов нужно перечислить список аргументов SQL запроса

• Caché Studio предоставляет мастер создания запросов классов

Что такое

Базовые запросы классов

• Абстракция SQL в COS коде

• Упрощение чтения int кода

• Упрощение работы с курсорами

• Уменьшение времени компиляции

• Документирование запросов

Преимущества по сравнению с SQL

Page 5: Class queries

Пример определения

Базовые запросы классов

Query ByName(name As %String = "") As %SQLQuery

(ROWSPEC="ID:%Integer,Name:%String,DOB:%Date,SSN:%String")

[ SqlProc ]

{

SELECT ID, Name, DOB, SSN

FROM Sample.Person

WHERE (Name %STARTSWITH :name)

ORDER BY Name

}

Page 6: Class queries

• %SQL.Statement

• SQL контекст

Как использовать?

Базовые запросы классов

Set statement=##class(%SQL.Statement).%New()

Set status=statement.%PrepareClassQuery("Sample.Person","ByName")

Set resultset=statement.%Execute("A")

While resultset.%Next() {

Write !, resultset.%Get("Name")

}

Call Sample.SP_Sample_By_Name('A')

Select * from Sample.SP_Sample_By_Name('A'')

Page 7: Class queries

Кастомные запросы классов

Page 8: Class queries

• Запрос, логику которого вы пишете сами

Что такое

Кастомные запросы классов

• Сложная логика

• Вы получаете доступ к данным через API, формат которого вас не устраивает

• Данные хранятся в глобалах, без классов

• Для доступа к данным необходима эскалация прав

• Для доступа к данным необходимо запросить внешнее API

• Для доступа к данным необходим доступ к файловой системе

• Необходимы какие-то дополнительные операции перед выполнением самого

запроса (установление соединения, проверка прав и т.д.)

Зачем

Page 9: Class queries

• queryName — похож на базовый запрос класса, предоставляет информацию

• queryNameExecute — конструктор запроса

• queryNameFetch — осуществляет получение следующего результата

• queryNameClose — деструктор запроса

Детали реализации и примеры - habrahabr.ru/company/intersystems/blog/270839

Как?

Кастомные запросы классов

Page 10: Class queries

• Обход глобала

– Данные хранятся в глобалах, без классов

– Нужно уменьшить количество обращений к глобалам

– Результаты должны/могут быть отсортированы по ключу глобала

• Статический SQL

– Упрощение чтения int кода

– Упрощение работы с курсорами

– Уменьшение времени компиляции

• Динамический SQL

– Актуально для случаев, когда кроме собственно запроса, который представим в виде

SQL, нужно производить какие-либо дополнительные действия

Варианты

Логика кастомного запроса

Page 11: Class queries

ПримерEnsLogViewer

Page 12: Class queries

• Просмотр логов Ensemble

• Добавили поддержку областей

• Работает на

– 2013.1

– 2014.1

– 2015.1

– 2015.2

https://github.com/intersystems-ru/EnsLogViewer

EnsLogViewer

Page 13: Class queries

Альтернативный подход%SQL.CustomResultSet

Page 14: Class queries

• Несколько более высокая скорость работы

• Вся метаинформация берётся из определения класса, ROWSPEC не нужен

• Соответствие принципам ООП

Особенности

%SQL.CustomResultSet

Page 15: Class queries

Конецhabrahabr.ru/company/intersystems/blog/270839