Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CUBVEC-12] Add VECTOR to Lexer and Parser #5693

Merged

Conversation

vimkim
Copy link
Contributor

@vimkim vimkim commented Dec 9, 2024

http://jira.cubrid.org/browse/CUBVEC-12

Purpose

파서에서 VECTOR 데이터 타입을 지원하도록 추가하여, 향후 벡터 처리와 관련된 기능을 구현할 수 있는 기반을 마련합니다.

Implementation

1. VECTOR 타입 토큰 추가

  • 파일: src/parser/csql_lexer.l
  • 변경 내용:
    [vV][eE][cC][tT][oO][rR] { begin_token(yytext); return VECTOR; }

2. VECTOR 토큰 정의

  • 파일: src/parser/csql_grammar.y
  • 변경 내용:
    %token VECTOR
    • VECTOR 키워드가 토큰으로 정의되었습니다.

3. VECTOR 타입 문법 추가

  • 파일: src/parser/csql_grammar.y
  • 변경 내용:
    data_type
      ...
      | VECTOR opt_vector_args
          {{ DBG_TRACE_GRAMMAR(data_type, | vector_type);
            container_2 ctn;
            SET_CONTAINER_2 (ctn, FROM_NUMBER (PT_TYPE_VECTOR), NULL);
            $$ = ctn;
            DBG_PRINT}}
    ;
    • VECTOR 타입을 data_type 문법에 추가했습니다.
    • VECTOR 키워드 뒤에 opt_vector_args(선택적 인자)를 처리할 수 있도록 구현했습니다.
    • 반환 값은 container_2 구조체로 설정되며, 타입은 PT_TYPE_VECTOR로 지정됩니다.
    • NUMERIC을 모방했습니다.

opt_vector_args는 현재 사용되지 않습니다. Syntax Error를 방지하는 역할만 수행하며, dimension과 type에 대한 validation은 추후 다른 마일스톤에 포함될 예정입니다.

4. VECTOR 선택적 인자 처리

  • 파일: src/parser/csql_grammar.y
  • 변경 내용:
    opt_vector_args
      : /* empty */
          ...
      | '(' unsigned_integer ')'
          ...
      | '(' unsigned_integer ',' primitive_type ')'
          ...
    ;
    • VECTOR 뒤에 올 수 있는 선택적 인자를 처리하는 문법 규칙입니다.
    • 세 가지 경우를 처리:
      1. 인자가 없는 경우 (/* empty */).
      2. 정수 하나가 괄호 안에 오는 경우 ((unsigned_integer)).
      3. 정수와 데이터 타입이 함께 오는 경우 ((unsigned_integer, primitive_type)).
    • TODO: primitive_type 처리가 아직 구현되지 않았습니다.

5. 구문 트리 타입 추가

  • 파일: src/parser/parse_tree.h
  • 변경 내용:
    PT_TYPE_VECTOR,
    • 새로운 데이터 타입 PT_TYPE_VECTOR가 구문 트리의 타입(enum)에 추가되었습니다.

코드 실행 흐름

  1. 토큰 처리 (Lexer 단계):
    • 입력에서 VECTOR 키워드를 인식하면 VECTOR 토큰이 반환
  2. 구문 분석 (Parser 단계):
    • data_type 규칙에서 VECTOR opt_vector_args를 인식
    • opt_vector_args는 선택적 인자를 처리
  3. 구문 트리 생성:
    • 타입은 PT_TYPE_VECTOR로 설정

@vimkim vimkim requested review from hgryoo, hornetmj and YeunjunLee and removed request for YeunjunLee December 11, 2024 09:48
@vimkim vimkim marked this pull request as ready for review December 12, 2024 03:37
@vimkim vimkim requested a review from beyondykk9 as a code owner December 12, 2024 03:37
src/parser/csql_grammar.y Outdated Show resolved Hide resolved
opt_vector_args
: /* empty */
{{ DBG_TRACE_GRAMMAR(opt_vector_args, : );

Copy link
Contributor

Choose a reason for hiding this comment

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

NULL VECTOR를 의미한 걸까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

리뷰 감사합니다.

아무 옵션 없이 단순히 "VECTOR" 토큰만으로 테이블의 컬럼 attribute 타입을 지정한다면
기본적으로 float 원소를 담는 2000차원의 벡터를 생성하는 것이 현재 임시 스펙으로 알고 있습니다.
그러나 이번 마일스톤에서는 다루지 않기로 했기에, syntax error만을 방지하고, 구현 내용은 비워두었습니다.

| '(' unsigned_integer ',' primitive_type ')'
{{ DBG_TRACE_GRAMMAR(opt_vector_args, | '(' unsigned_integer ',' primitive_type ')' );

// TODO
Copy link
Contributor

Choose a reason for hiding this comment

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

  • 이슈에서 기술된 구현 범위는 VECTOR(dim, type) 까지로, TODO 부분으로 예상되는 상위로 정보 전달($$ = ctn;) 작업 역시 포함되어야 할 것으로 기대됩니다.
  • 포괄적인 primitive_type 보다는 FLOAT_ 으로 한정한 후 추후 필요에 따라 확장해 가는게 좋을것 같습니다.
  • TODO 주석 - 추후 수행해야할 작업에 대해 기술해 두지 않는다면, 불필요한 주석으로 생각됩니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

리뷰 감사합니다.
말씀하신 바와 같이 상위 룰로 정보를 전달하고, FLOAT_으로 고정한 뒤 TODO를 삭제했습니다.

image

위 사진에 보이는 것처럼 가능한 타입을 FLOAT으로 한정했습니다.
FLOAT을 제외한 primitive type (NUMERIC 등) 타입을 선언하면 신택스 에러가 발생하도록 설정했습니다.

@vimkim vimkim force-pushed the cubvec-12-lexer-parser branch from fcf67f6 to f839479 Compare December 14, 2024 09:34
src/parser/csql_grammar.y Outdated Show resolved Hide resolved
{{ DBG_TRACE_GRAMMAR(data_type, | vector_type);

container_2 ctn;
SET_CONTAINER_2 (ctn, FROM_NUMBER (PT_TYPE_VECTOR), NULL);
Copy link
Contributor

Choose a reason for hiding this comment

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

$2에 대한 처리를 수행하지 않아도 되나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

(참고) 위 질문에 대한 질의응답을 오늘 오후 5시에 구두로 진행했으며, 이번 마일스톤에서 처리를 하지 않아도 괜찮을 것이라는 결론에 함께 도달했습니다. 다만 $2에 대한 처리가 수행되지 않은 이유에 대해 TODO 주석을 추가했습니다.

@vimkim vimkim merged commit 8db4c4a into CUBRID:cubvec/cubvec-create-table Dec 16, 2024
0 of 2 checks passed
vimkim added a commit that referenced this pull request Dec 24, 2024
http://jira.cubrid.org/browse/CUBVEC-12

* feat(parser): add VECTOR token and PT_TYPE_VECTOR to parser

Create Table succeeds

* feat(csql_grammar.y): can create vector table with arguments

* fix(csql_grammar.y): remove unnecessary container initialization for readability

* fix(csql_grammar): get rid of obscure TODO and pass vector options to parent rule

* Update src/parser/csql_grammar.y

Co-authored-by: joonmin83 <[email protected]>

* docs(csql_grammar): todo: dim and type validation later

---------

Co-authored-by: joonmin83 <[email protected]>
vimkim added a commit that referenced this pull request Dec 24, 2024
http://jira.cubrid.org/browse/CUBVEC-12

* feat(parser): add VECTOR token and PT_TYPE_VECTOR to parser

Create Table succeeds

* feat(csql_grammar.y): can create vector table with arguments

* fix(csql_grammar.y): remove unnecessary container initialization for readability

* fix(csql_grammar): get rid of obscure TODO and pass vector options to parent rule

* Update src/parser/csql_grammar.y

Co-authored-by: joonmin83 <[email protected]>

* docs(csql_grammar): todo: dim and type validation later

---------

Co-authored-by: joonmin83 <[email protected]>
vimkim added a commit that referenced this pull request Dec 24, 2024
http://jira.cubrid.org/browse/CUBVEC-12

* feat(parser): add VECTOR token and PT_TYPE_VECTOR to parser

Create Table succeeds

* feat(csql_grammar.y): can create vector table with arguments

* fix(csql_grammar.y): remove unnecessary container initialization for readability

* fix(csql_grammar): get rid of obscure TODO and pass vector options to parent rule

* Update src/parser/csql_grammar.y

Co-authored-by: joonmin83 <[email protected]>

* docs(csql_grammar): todo: dim and type validation later

---------

Co-authored-by: joonmin83 <[email protected]>
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.

5 participants