Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

쿼리 복잡도 버그 수정 및 결과 값 수정 #16

Merged
merged 11 commits into from
Sep 5, 2024

Conversation

1e16miin
Copy link

@1e16miin 1e16miin commented Aug 30, 2024

root 쿼리에 selections가 없을 경우. 즉 root query의 result가 scala 타입일 경우에 에러가 발생하던 것을 수정하였습니다.

summarize-selection 함수에서 selection이 leaf field일 경우에 nil을 반환하게 되는데, calculate-complexity 함수에서 nil을 계산하면서 에러가 발생했던 것을 수정하였습니다.

해당 testcase도 추가하였습니다.

추가로 option으로 max-complexity 대신 analyze-query 를 입력 받고,
analyze-query가 true일 경우에 분석결과를 extensions.analysis 에 담아서 반환하도록 수정하였습니다.

현재는 analysis 내부에 complexity만 존재하지만 추후 depth나, 호출한 리졸버 갯수 등등을 추가하면 좋을 거 같다고 생각중입니다.

@1e16miin 1e16miin requested a review from namenu August 30, 2024 04:12
@namenu
Copy link
Member

namenu commented Aug 30, 2024

네이밍 관련된 의견입니다.

기존 코드가
::tracing/enabled? => ::tracing/validation 이렇게 된 것과 비슷하게
::query-analizer/enable? => ::query-analyzer/complexity 처럼 옵션명과 결과물의 포멧을 맞추면 좋을 것 같습니다.

Comment on lines +161 to +166
(testing "If return type of root query is scala, then complexity is 0"
(is (= {:data {:root nil}
:extensions {:analysis {:complexity 0}}}
(q "query root{
root
}" nil)))))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼

@1e16miin
Copy link
Author

1e16miin commented Aug 30, 2024

::tracing/enabled? => ::tracing/validation 이렇게 된 것과 비슷하게
::query-analizer/enable? => ::query-analyzer/complexity 처럼 옵션명과 결과물의 포멧을 맞추면 좋을 것 같습니다.

말씀해주신대로 하는게 좋을거 같네요 수정해둘게요!

(atom []))
*extensions (atom {})
*warnings (atom [])
*extensions (if (::query-analyzer/enable? context)
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존에는 execute 되기 전에 최대 복잡도를 초과하면 에러를 발생시킬 목적으로 validation 과 execute 사이에서 함수를 호출하였는데요.
execute 될 때 metadata인 extensions에만 넣어줄 거라면 execute 되는 지점에서 옵션이 true 라면 계산되어도 될것 같아서
executor.clj 내부로 함수호출을 변경하였습니다.

Comment on lines +79 to +80
context' (cond-> context
(:analyze-query options) query-analyzer/enable-query-analyzer)
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@namenu 리뷰를 반영하여,
lacinia.clj execute 함수를 호출할 때 options 값에 :analyze-query 가 trucy 하다면 ::query-analyzer/enable? 라는 key를 context에 true로 assoc 하도록 수정하였습니다.

@1e16miin 1e16miin merged commit 20296bc into master Sep 5, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants