cubrid icon indicating copy to clipboard operation
cubrid copied to clipboard

[CBRD-26401] (Phase-1) Create/Alter invisible column

Open childyouth opened this issue 1 month ago • 4 comments

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>]
    1. CREATE 문에서 type 바로 뒤에 visibility를 설정할 수 있도록 함.
    • INDEX visibility에 사용되던 csql_grammar.y:opt_invisible 을 VISIBLE 용어 사용이 가능하도록 수정함.
    1. ALTER 와 같이 컬럼 내용을 변경하는 명령에 대해 visibility를 수정할 수 있도록 함.
    1. SHOW COLUMNS / DESC 명령에서 표시되는 테이블의 'Extra' 컬럼에 'INVISIBLE' 용어가 추가로 표시될 수 있도록 함.
    1. 시스템 카탈로그 테이블 _db_attribute에 flags 컬럼을 추가함.
    • SM_ATTFLAG... 에서 SM_ATTFLAG_INVISIBLE_COLUMN을 추가하고, 이후부터 추가될 flag에 대해서 flags 컬럼에 int형으로 표시될 수 있도록 함.
    1. 시스템 카탈로그 뷰 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 avatar Dec 03 '25 08:12 childyouth

@childyouth 이 PR이 [CBRD-26401] 전체를 커버하는 것인가요? 그중 일부만 하는 것이면 하위 이슈를 생성해서 연결해 주면 좋겠습니다.

ctshim avatar Dec 08 '25 02:12 ctshim

@childyouth 이 PR이 [CBRD-26401] 전체를 커버하는 것인가요? 그중 일부만 하는 것이면 하위 이슈를 생성해서 연결해 주면 좋겠습니다.

jira에 페이즈 단위로 하위 이슈를 생성하고 연결하겠습니다. 감사합니다.

childyouth avatar Dec 08 '25 03:12 childyouth

shared 또는 class attribute의 경우에도 invisible 지정이 필요할까요?

ctshim avatar Dec 08 '25 04:12 ctshim

shared 또는 class attribute의 경우에도 invisible 지정이 필요할까요?

  • shared 는 alter가 불가능하여 invisible을 지원하지 않는 편이 좋겠다고 말씀해 주신 부분에 대해 동의하며 invisible은 일반 attribute에서만 지원하도록 하겠습니다.
  • class attribute에 대한 이해가 부족하여 상속 혹은 포인터 같은 형태의 어트리뷰트로 이해하고 있었습니다.

  • 더 찾아본 결과 static 느낌으로 한 개의 레코드만 존재하는 특수 어트리뷰트이고, select * 로는 검색할 수 없는 타입이기에 invisible이 필요없다고 판단됩니다.

-> shared 와 class attribute 둘 다 invisible을 지원하지 않는 방향으로 수정하겠습니다. 감사합니다.

childyouth avatar Dec 08 '25 05:12 childyouth

/run all

childyouth avatar Dec 22 '25 05:12 childyouth

/run shell

childyouth avatar Dec 23 '25 07:12 childyouth