[CBRD-26401] (Phase-1) Create/Alter invisible column
http://jira.cubrid.org/browse/CBRD-26401
Purpose
INVISIBLE COLUMN
Invisible Column은 명시적으로 컬럼 이름이 나열되지 않은 명령에 대해 결과를 숨기도록 하는 컬럼 옵션을 말함.
Invisible Column을 설정함으로서 얕은 부분의 보안성을 향상 시킬 수 있음.
다른 버전의 어플리케이션에 대해 정지없이 컬럼 추가가 가능해 지원성을 높일 수 있음.
시스템 측면에서 보여줄 필요가 없는 컬럼에 대해 설정함으로서 명확성을 높일 수 있음.
Phase 1
CREATE TABLE, ALTER TABLE ADD COLUMN / MODIFY / CHANGE 를 통해 컬럼에 Invisible 옵션을 부여할 수 있음.
컬럼에 Invisible 옵션을 확인할 수 있도록 DESC, SHOW COLUMNS 및 시스템 카탈로그에 해당되는 정보를 표시할 수 있음.
Implementation
CREATE TABLE <table name> ( <col_definition>... )
<col_definition> ::= <col_name> <col_type> [INVISIBLE | VISIBLE] [<ai_shared_default>] [<on_update>] [<col_constraint>]
-
- CREATE 문에서 type 바로 뒤에 visibility를 설정할 수 있도록 함.
- INDEX visibility에 사용되던 csql_grammar.y:opt_invisible 을 VISIBLE 용어 사용이 가능하도록 수정함.
-
- ALTER 와 같이 컬럼 내용을 변경하는 명령에 대해 visibility를 수정할 수 있도록 함.
-
- SHOW COLUMNS / DESC 명령에서 표시되는 테이블의 'Extra' 컬럼에 'INVISIBLE' 용어가 추가로 표시될 수 있도록 함.
-
- 시스템 카탈로그 테이블 _db_attribute에 flags 컬럼을 추가함.
- SM_ATTFLAG... 에서 SM_ATTFLAG_INVISIBLE_COLUMN을 추가하고, 이후부터 추가될 flag에 대해서 flags 컬럼에 int형으로 표시될 수 있도록 함.
-
- 시스템 카탈로그 뷰 db_attribute에 is_invisible 컬럼을 추가함.
- 뷰 이기에 flag를 풀어서 볼 수 있도록 컬럼을 추가하여 'YES' or 'NO' 로 표시되도록 함.
Remarks
[0a29901ade91f3c49ed5835568fe3f5bcaf95632] : CREATE, ALTER에 visibility 관련 문법 추가. 기존에 사용되던 opt_invisible에 VISIBLE 용어 확장. SHOW COLUMNS 구문으로 'Extra' 컬럼에서 invisible 값 확인 가능. error msg를 추가하였으나 경로가 없는 msg라 생각되어 삭제 예정
[1fa31f326173f4b0fecca753e8815d045bf14d7b] : 시스템 카탈로그 테이블, 뷰에서 flags 및 is_invisible 컬럼 추가하여 값 확인 가능.
[c6110b88348ad247d6fe5e00e6d12d3ccbb344df] : 시스템 카탈로그 테이블, 뷰에서 flags 정보가 2048부터 시작하는 대신 1부터 시작하도록 수정.
@childyouth 이 PR이 [CBRD-26401] 전체를 커버하는 것인가요? 그중 일부만 하는 것이면 하위 이슈를 생성해서 연결해 주면 좋겠습니다.
@childyouth 이 PR이 [CBRD-26401] 전체를 커버하는 것인가요? 그중 일부만 하는 것이면 하위 이슈를 생성해서 연결해 주면 좋겠습니다.
jira에 페이즈 단위로 하위 이슈를 생성하고 연결하겠습니다. 감사합니다.
shared 또는 class attribute의 경우에도 invisible 지정이 필요할까요?
shared 또는 class attribute의 경우에도 invisible 지정이 필요할까요?
- shared 는 alter가 불가능하여 invisible을 지원하지 않는 편이 좋겠다고 말씀해 주신 부분에 대해 동의하며 invisible은 일반 attribute에서만 지원하도록 하겠습니다.
-
class attribute에 대한 이해가 부족하여 상속 혹은 포인터 같은 형태의 어트리뷰트로 이해하고 있었습니다.
-
더 찾아본 결과 static 느낌으로 한 개의 레코드만 존재하는 특수 어트리뷰트이고, select * 로는 검색할 수 없는 타입이기에 invisible이 필요없다고 판단됩니다.
-> shared 와 class attribute 둘 다 invisible을 지원하지 않는 방향으로 수정하겠습니다. 감사합니다.
/run all
/run shell