Запросы классов в InterSystems Caché

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

Transcript of Запросы классов в InterSystems Caché

Page 1: Запросы классов в InterSystems Caché

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

Page 2: Запросы классов в InterSystems Caché

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

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

План

Page 3: Запросы классов в InterSystems Caché

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

Page 4: Запросы классов в InterSystems Caché

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

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

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

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

Что такое

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

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

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

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

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

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

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

Page 5: Запросы классов в InterSystems Caché

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

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

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: Запросы классов в InterSystems Caché

• %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: Запросы классов в InterSystems Caché

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

Page 8: Запросы классов в InterSystems Caché

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

Что такое

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

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

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

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

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

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

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

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

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

Зачем

Page 9: Запросы классов в InterSystems Caché

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

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

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

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

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

Как?

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

Page 10: Запросы классов в InterSystems Caché

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

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

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

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

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

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

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

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

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

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

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

Варианты

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

Page 11: Запросы классов в InterSystems Caché

Пример EnsLogViewer

Page 13: Запросы классов в InterSystems Caché

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

Page 14: Запросы классов в InterSystems Caché

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

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

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

Особенности

%SQL.CustomResultSet