[OutSystems]SQLやAggregateのSQLを開発時に確認する
SQL要素やAggregateを使ってEntity検索機能を作る際に、テストデータを使って検索結果のプレビューをすることができます。このプレビューした際に使われたSQLを確認することができます。
SQL要素のプレビュー時SQL
SQL要素をダブルクリックしてダイアログを開き、(必要ならTest Inputsに入力して)、TESTボタンをクリックします。すると、Executed SQLタブ内にSQLが表示されます。
Aggregateのプレビュー時SQL
Aggregateをダブルクリックして開き、プレビューが表示されるまで待ちます。
右下に表示されるAggregateのプロパティウィンドウ内にExecuted SQLプロパティが表示されます。
参照列のフィルタで不思議な現象
この機能を使ってプレビュー用SQLを確認しているとたまに不思議な記述が見つかります。
どうも、他Entityを参照する列(他のEntityIdentifier型の列)へのフィルタをすると、条件に「IS NOT NULL」が追加されるようです。
以下のようなDetail Entityを例に確認してみます。MasterId属性はMaster Entityを参照しています。このMasterId、Integer型の属性、Text型の属性それぞれにFilter条件を設定してExecuted SQLを確認。
@がついているのは、Local Variableの値を渡している部分です。MasterIdについてだけ、Local Variablerとの一致条件による検索の後に「AND ([ENDETAIL1].[MASTERID] IS NOT NULL)」という条件が追加されています。
SELECT TOP (32) [ENDETAIL1].[ID] o0, [ENDETAIL1].[MASTERID] o1, [ENDETAIL1].[DETAIL1INTEGER] o2, [ENDETAIL1].[DETAIL1TEXT] o3
FROM [ALQGU5013].DBO.[OSUSR_W8T_DETAIL1] [ENDETAIL1]
WHERE (([ENDETAIL1].[MASTERID] = @MasterId)
AND ([ENDETAIL1].[MASTERID] IS NOT NULL))
AND ([ENDETAIL1].[DETAIL1INTEGER] = @Detail1Integer)
AND ([ENDETAIL1].[DETAIL1TEXT] = @Detail1Text)
ちょっと意味がわかっていないんですが、記録の為残しておきます。
運用中のSQL
実際にPublishしてサーバーで動作したときのSQLはこの方法では確認できないようです。
Service StudioでExecuted SQLを確認すると、実行時のSQLは、最適化がかかったものに変化するとのこと。
また、私の知る限りでは、SQLやAggregateに運用中に実際に実行された際のSQLをログ出力するような機能がありません。
よって、問題確認のためにSQLを見たいときは、DB側で実行されたSQLをトレースする機能を使うことになりますね。SQL ServerならSQL Profilerでしょうか。
Author And Source
この問題について([OutSystems]SQLやAggregateのSQLを開発時に確認する), 我々は、より多くの情報をここで見つけました https://qiita.com/jyunji_watanabe/items/9c608ffe5c8af70a6075著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .