티스토리 뷰

진행 중인 개발 프로젝트에서 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
«   2024/05   »
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 29 30 31
글 보관함