캐스케이드..과 메서드체이닝.

pharmDev·2025년 1월 23일

두 코드의 주요 차이점

첫 번째 코드 (올바른 버전):

await (db.update(db.pharmacyCalculations)
  ..where((tbl) => tbl.id.equals(calculationId)))
  .write(PharmacyCalculationsCompanion(...));

두 번째 코드 (잘못된 버전):

await db.update(db.pharmacyCalculations)
  .where((tbl) => tbl.id.equals(calculationId))
  .write(PharmacyCalculationsCompanion(...));

차이점 요약

  1. 캐스케이드 연산자 사용 여부 (..)
    • 첫 번째 코드(올바른 방법):
      ..where()를 사용해 조건을 update 구문에 포함시킵니다. 이 방식은 Drift에서 올바르게 작동하며, 원하는 조건에 맞는 레코드만 업데이트됩니다.
    • 두 번째 코드(잘못된 방법):
      where()를 체이닝으로 사용했는데, Drift는 이를 지원하지 않습니다. 조건이 무시되거나 동작하지 않을 위험이 있습니다.

잘못된 코드의 위험성

  • 메서드 체이닝을 잘못 사용하면 where 조건이 무시되어 테이블 전체가 업데이트되는 치명적인 오류를 발생시킬 수 있습니다.
  • Drift에서 update 구문은 ..(캐스케이드 연산자)를 사용해 조건을 설정해야만 올바르게 작동합니다.

쉽게 설명: 비유

잘못된 방법 (체이닝)
db.update(db.pharmacyCalculations).where(...).write(...);

🛠 음식점에서 주문하는 상황:

  • "비빔밥 주세요. 고추장은 적게 주세요. 계산할게요."
  • 여기서 고추장을 적게 넣어달라는 요청이 누락될 수 있음.
  • 결과적으로 비빔밥 전체(모든 레코드)가 기본값으로 처리될 위험.

올바른 방법 (캐스케이드 연산자)
(await db.update(db.pharmacyCalculations)..where(...)).write(...);

🛠 음식점에서 주문하는 상황:

  • "(비빔밥인데, 고추장은 적게 넣은 것으로) 이걸로 계산할게요."
  • 주문이 하나의 세트로 묶여 전달되므로, 요청사항이 확실히 반영됨.
  • Drift에서는 캐스케이드 연산자(..)를 사용해야 조건과 함께 업데이트가 안전하게 이루어짐.

실제 동작의 차이

  1. 잘못된 방법 (체이닝)

    • where 조건이 무시될 가능성이 있음.
    • 테이블의 모든 레코드가 업데이트될 수 있음.
  2. 올바른 방법 (캐스케이드 연산자)

    • where 조건이 올바르게 반영됨.
    • 특정 레코드에만 업데이트가 적용됨.

결론

  1. Drift에서 업데이트 쿼리 작성 시, 반드시 ..(캐스케이드 연산자)를 사용해야 함.
  2. ..조건과 작업을 묶어서 하나의 완성된 명령으로 처리할 수 있게 해줌.
  3. 잘못된 체이닝은 치명적인 데이터 손실이나 수정 오류를 초래할 수 있으므로 주의.

추가 팁

코드 작성 후에는 반드시 테스트 환경에서 update 쿼리가 의도한 레코드만 업데이트되는지 확인해야 합니다. Drift의 where() 조건은 캐스케이드(..)로 설정하지 않으면 무시될 수 있습니다.

profile
코딩을 배우는 초보

0개의 댓글