1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OutSystems]SQLやAggregateのSQLを開発時に確認する

Posted at

SQL要素やAggregateを使ってEntity検索機能を作る際に、テストデータを使って検索結果のプレビューをすることができます。このプレビューした際に使われたSQLを確認することができます。

SQL要素のプレビュー時SQL

SQL要素をダブルクリックしてダイアログを開き、(必要ならTest Inputsに入力して)、TESTボタンをクリックします。すると、Executed SQLタブ内にSQLが表示されます。
image.png

Aggregateのプレビュー時SQL

Aggregateをダブルクリックして開き、プレビューが表示されるまで待ちます。
右下に表示されるAggregateのプロパティウィンドウ内にExecuted SQLプロパティが表示されます。
image.png

参照列のフィルタで不思議な現象

この機能を使ってプレビュー用SQLを確認しているとたまに不思議な記述が見つかります。
どうも、他Entityを参照する列(他のEntityIdentifier型の列)へのフィルタをすると、条件に「IS NOT NULL」が追加されるようです。

以下のようなDetail Entityを例に確認してみます。MasterId属性はMaster Entityを参照しています。このMasterId、Integer型の属性、Text型の属性それぞれにFilter条件を設定してExecuted SQLを確認。

image.png

@がついているのは、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でしょうか。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?