티스토리 뷰
진행 중인 개발 프로젝트에서 Scala 를 활용해서 개발하는 중 MariaDB 연동은 Slick 을 통하여 진행하고 있다. 이슈가 된 건, DB Column 의 Default value 를 설정하고 나서 json 으로 들어오는 입력값이 없을 때 기존 default value 가 DB에 insert 되지 않는 현상 --> Spray-Json 은 필드가 option 으로 설정된 schema 에 대해서는 입력이 없더라도 None 으로 처리해서 전달해 주기 때문에 Slick 도 None 으로 insert 를 수행한다.
문제는 Plain SQL 관점에서 봤을 때 INSERT TO + ? 에서 달라진다는 점이다.
일반적인 SQL Query 를 통한 column 삽입 방법은 아래 코드처럼 INSERT INTO ~ VALUES 형태인데 이 구문은 col <> val 간 tuple 의 count 가 일치하여야 한다. null 값을 입력할 수는 있지만 일단 '입력'은 되는 구조
INSERT INTO
(col1, col2, ...)
VALUES
(val1, val2, ...);
그래서 이 방법으로 null을 입력하더라도 DB에는 Default value 가 아닌 null 이 채워지게 된다. null을 채우지 않고 default 를 활용하려면 해당 column 에 입력 자체가 없어야 하는 것. 그 때는 아래 코드를 쓴다.
INSERT INTO
(col1, col2, ...)
SET col1=val1, col2=val2;
INSERT INTO ~ SET Query 는 각 column 별로 입력 값을 특정할 수 있으며 모든 column 을 다 명시하지 않더라도 명시되지 않은 column 은 제외된 채로 Row 를 생성해 준다. 그 결과 명시되지 않은 column 은 Default value 로 채워지게 되는 것.
결국 Slick 이 INSERT INTO ~ VALUES 와 SET 을 구분하는 가의 문제로 봐야 하는데 아직까지 살펴 본 바로는 Slick 은 전자로만 column insert 를 수행하기 때문에 Default 로 null 을 넣는 것 외에 추가적인 암묵적 초기화는 불가능 하다고 판단된다.
'Scala' 카테고리의 다른 글
[Scala] List 그리고 cons operator (0) | 2017.07.25 |
---|
- Total
- Today
- Yesterday
- 망손
- 무접점
- 750R
- K945P
- 정전압키보드
- 리솜
- 감금리조트
- 인도 항공
- 레오폴드
- 홍콩택시
- 클룩
- 테슬라
- 노뿌
- 우버
- 텐키레스
- 녹투아
- 리얼포스
- cons
- 키보드
- scala
- 적축
- 앱코
- 리솜리조트
- 키캡
- FOR Loop
- klook
- 아이콘 호텔
- for comprehension
- pbt
- 우버블랙
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |