programing

ActiveRecord는 쿼리 끝에 'AND(1=0)'를 추가합니다.

javamemo 2023. 9. 27. 16:48
반응형

ActiveRecord는 쿼리 끝에 'AND(1=0)'를 추가합니다.

저는 일을 해결하려고 레일 콘솔에서 장난을 쳤는데, 제 쿼리 중 하나가 실행되지 않을 때 계속 0이 되는 것을 알게 되었습니다.생성된 SQL 쿼리를 보면 다음과 같은 정보가 있음을 알 수 있습니다.AND (1=0)그것에 매번 첨부됩니다.이건 좀 귀찮고, 왜 이러는지 모르겠어요.

참고: 작동 가능한 보석을 사용합니다.

재생하는 단계:

(레일 콘솔의 테이블에 연결 후)

2.1.2 :xxxx > @parent = Parent.take
Parent Load (38.1ms)  SELECT  `parents`.* FROM `parents`  LIMIT 1
 => #<Parent id: 37, ...>

2.1.2 :xxxx > @child = Child.where(id: @parent.actable_id)
SQL (0.7ms)  SELECT `childs`.`id` AS t0_r0, `childs`.`attribute` AS t0_r1, FROM `childs`
...
LEFT OUTER JOIN `parents` ON `parents`.`actable_id` = `childs`.`id` AND `parents`.`actable_type` = 'child type' WHERE `childs`.`id` = 20 AND (1=0)
 => #<ActiveRecord::Relation []>

왜 이런 일이 생기는 건가요?어떻게 하면 멈출 수 있을까요?

레일은 SQL 다음과 같이 생성합니다.AND (1=0)값이 빈 배열에 있는 열을 쿼리할 때:

Child.where(id: [])

직관적으로, 다음과 같은 SQL을 생성할 것으로 예상할 수 있습니다.SELECT * FROM children WHERE id IN (),그렇지만()실제로 유효한 SQL이 아닙니다.그러나 해당 쿼리와 일치하는 행이 없으므로 Rails는 이 문제를 해결하기 위해 동일한 쿼리를 생성하고 행을 반환하지 않습니다.

SELECT * FROM children WHERE 1=0;

언급URL : https://stackoverflow.com/questions/25816792/activerecord-appends-and-1-0-to-end-of-queries

반응형