class queries
Post on 22-Jan-2018
191 Views
Preview:
TRANSCRIPT
Запросы классовЛебедюк Эдуард
• Базовые запросы классов
• Кастомные запросы классов
План
Базовые запросы классовАбстракция над SELECT SQL
• Метод представления SELECT SQL запросов
• Обрабатываются оптимизатором и компилятором SQL
• В списке аргументов нужно перечислить список аргументов SQL запроса
• Caché Studio предоставляет мастер создания запросов классов
Что такое
Базовые запросы классов
• Абстракция SQL в COS коде
• Упрощение чтения int кода
• Упрощение работы с курсорами
• Уменьшение времени компиляции
• Документирование запросов
Преимущества по сравнению с SQL
Пример определения
Базовые запросы классов
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
}
• %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'')
Кастомные запросы классов
• Запрос, логику которого вы пишете сами
Что такое
Кастомные запросы классов
• Сложная логика
• Вы получаете доступ к данным через API, формат которого вас не устраивает
• Данные хранятся в глобалах, без классов
• Для доступа к данным необходима эскалация прав
• Для доступа к данным необходимо запросить внешнее API
• Для доступа к данным необходим доступ к файловой системе
• Необходимы какие-то дополнительные операции перед выполнением самого
запроса (установление соединения, проверка прав и т.д.)
Зачем
• queryName — похож на базовый запрос класса, предоставляет информацию
• queryNameExecute — конструктор запроса
• queryNameFetch — осуществляет получение следующего результата
• queryNameClose — деструктор запроса
Детали реализации и примеры - habrahabr.ru/company/intersystems/blog/270839
Как?
Кастомные запросы классов
• Обход глобала
– Данные хранятся в глобалах, без классов
– Нужно уменьшить количество обращений к глобалам
– Результаты должны/могут быть отсортированы по ключу глобала
• Статический SQL
– Упрощение чтения int кода
– Упрощение работы с курсорами
– Уменьшение времени компиляции
• Динамический SQL
– Актуально для случаев, когда кроме собственно запроса, который представим в виде
SQL, нужно производить какие-либо дополнительные действия
Варианты
Логика кастомного запроса
ПримерEnsLogViewer
• Просмотр логов Ensemble
• Добавили поддержку областей
• Работает на
– 2013.1
– 2014.1
– 2015.1
– 2015.2
https://github.com/intersystems-ru/EnsLogViewer
EnsLogViewer
Альтернативный подход%SQL.CustomResultSet
• Несколько более высокая скорость работы
• Вся метаинформация берётся из определения класса, ROWSPEC не нужен
• Соответствие принципам ООП
Особенности
%SQL.CustomResultSet
top related