Skip to content

Conversation

@childyouth
Copy link
Contributor

@childyouth childyouth commented Dec 3, 2025

http://jira.cubrid.org/browse/CBRD-26447

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' 용어가 추가로 표시될 수 있도록 함.

  • Object Representation 의 flags 한 개 비트를 invisible로 사용.

    • SM_ATTRIBUTE_FLAG에 SM_ATTFLAG_INVISIBLE_COLUMN 추가.
  • 시스템 카탈로그 테이블 _db_attribute에 flags 컬럼을 추가함.

    • flags 컬럼은 int형으로 비트값으로 해석하도록 함.
    • Constraint가 아닌 옵션들 - 0번 비트부터 { Auto Increment, Invisible Column, Partitioning Key } 을 표시.
    • 해당 비트값은 DB_ATTRIBUTE_OPTION_TYPE 에서 확인 가능.
  • 시스템 카탈로그 뷰 db_attribute에 is_invisible 컬럼을 추가함.

    • 뷰 이기에 flag를 풀어서 볼 수 있도록 컬럼을 추가하여 'YES' or 'NO' 로 표시되도록 함.

Remarks

[0a29901] : CREATE, ALTER에 visibility 관련 문법 추가. 기존에 사용되던 opt_invisible에 VISIBLE 용어 확장. SHOW COLUMNS 구문으로 'Extra' 컬럼에서 invisible 값 확인 가능.
error msg를 추가하였으나 경로가 없는 msg라 생각되어 삭제 예정

[1fa31f3] : 시스템 카탈로그 테이블, 뷰에서 flags 및 is_invisible 컬럼 추가하여 값 확인 가능.

[c6110b8] : 시스템 카탈로그 테이블, 뷰에서 flags 정보가 2048부터 시작하는 대신 1부터 시작하도록 수정.

@ctshim
Copy link
Contributor

ctshim commented Dec 8, 2025

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

@childyouth
Copy link
Contributor Author

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

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

@ctshim
Copy link
Contributor

ctshim commented Dec 8, 2025

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


/* add whitespace character if saved is not an empty string */
const char *is_invisible_string = "invisible";
size_t str_len = len + strlen (is_invisible_string) + 1;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strlen (is_invisible_string)의 값은 변하지 않는 값이므로 한번만 구할 수 있도록 변경해 두면 좋겠습니다.
static const invisible_str_length = strlen("invisible");와 같이 처리해 주는 것을 검토해 봐 주세요

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 함수인 qexec_execute_build_columns 내부에 이러한 방식으로 strlen 하는 경우가 많이 있습니다.

아마도 해당 함수를 부르는 DESC / SHOW [FULL] COLUMNS 명령어가 자주 사용될 일이 없다보니 계산 코스트보단 메모리 사용을 없애려 한 것은 아닐까 생각됩니다.

해당 함수내에서 모두 static size_t로 변경을 진행해도 괜찮을까요?

@childyouth
Copy link
Contributor Author

childyouth commented Dec 8, 2025

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

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

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

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

@childyouth childyouth marked this pull request as draft December 8, 2025 08:38
m_buf (" NOT NULL");
}

// If the hidden column flag - 'system added invisible column' - is added to attribute.flags, the hidden column flag must be checked first.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석 내용에 hidden column와 invisible column 두가지 용어가 사용되고 있습니다. 의도한 용어 인지요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네, 오라클에선 system이 생성한 invisible column을 hidden column으로 지칭하고 있습니다. 기능적으로 hidden column은 invisible -> visible 설정이 불가능하게 되어있어 구분되어있습니다.

@childyouth childyouth changed the title [CBRD-26401] (Phase-1) Create/Alter invisible column [CBRD-26447] (Phase-1) Create/Alter invisible column Dec 19, 2025
@childyouth childyouth marked this pull request as ready for review December 19, 2025 07:11
@shparkcubrid shparkcubrid removed their request for review December 20, 2025 06:19
@childyouth
Copy link
Contributor Author

/run all

@childyouth
Copy link
Contributor Author

/run shell

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants