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

멀티컬럼인덱스를 생성할때 unique 인덱스가 생성되지 않습니다. #1778

Closed
pocketoy opened this issue Aug 25, 2021 · 7 comments
Labels
bug 버그로 확인된 사항 patch available 패치 있음 표시 (bug와 함께 사용)

Comments

@pocketoy
Copy link

pocketoy commented Aug 25, 2021

스키마가 다음과 같다고 할때

<\table name="my_documents">
<\column name="doc_srl" type="number" notnull="notnull" primary_key="primary_key" auto_increment="auto_increment"/>
<\column name="cat1" type="varchar" size="100" notnull="notnull" unique="main_idx"/>
<\column name="cat2" type="varchar" size="100" unique="main_idx"/>
<\column name="cat3" type="varchar" size="100" unique="main_idx"/>
<\column name="idx" type="varchar" size="100" notnull="notnull" unique="main_idx"/>
<\column name="title" type="varchar" size="300"/>
<\column name="content" type="text"/>
<\column name="etcinfo" type="text"/>
<\column name="status" type="number" notnull="notnull" default="0"/>
<\column name="addr" type="varchar" size="300" notnull="notnull"/>
<\column name="dt" type="timestamp" notnull="notnull"/>
</table>

여러개의 컬럼에 걸쳐서 unique값을 주어 멀티컬럼인덱스를 생성했는데
나중에 확인해보니까 멀티컬럼인덱스가 생성되긴 했는데 unique index가 아니라 그냥 index였습니다.
이걸 버그라고 해야할지 구현되지 않은 기능이라고 해야할지 모르겠는데
일단 멀티컬럼 인덱스가 의도대로 만들어진다면 제대로 unique로 생성되어져야 하는게 아닐까 싶습니다.

@kijin
Copy link
Member

kijin commented Aug 25, 2021

멀티컬럼 unique 인덱스를 선언하는 문법은 #1332 패치의 "복합 인덱스를 별도로 선언할 수 있음" 부분을 참고하시기 바랍니다.

<index name="main_idx" columns="cat1,idx" type="unique" />

일반 인덱스와 unique 인덱스를 막론하고 여러 컬럼에 동일한 인덱스명을 넣는 방식은 XE 자료와의 호환성을 위해 제공하는 레거시 문법입니다. 이 문법은 동일한 컬럼을 참조하는 복합인덱스를 여러 개 선언할 수 없고 순서를 지정할 수 없는 등 여러 가지 단점이 있으므로 더이상 권장하지 않으며, 호환성 유지에 필요한 최소한의 범위 이상으로 특별히 더 확장할 계획도 없습니다.

@kijin kijin added the question 단순 질문 label Aug 25, 2021
@pocketoy
Copy link
Author

아.. 새로운 문법이 생겼군요.
그데 이거 검색해보니까 라이믹스 안에서도 옛날문법이 엄청나게 많이 쓰이고 있는데
unique로 의도한게 unique가 아니어도 되는건가요..?
옛날문법으로 unique로 생성하려는 멀티컬럼 인덱스가 열 몇개는 되는거 같은데요..?

@kijin
Copy link
Member

kijin commented Aug 25, 2021

1.9 버전에서는 멀티컬럼 unique 인덱스가 정상적으로 생성되나요? 만약 XE나 구 버전에서 정상 작동했는데 현재 버전에서 안 된다면 호환성 관련 버그로 취급할 수 있습니다.

@pocketoy
Copy link
Author

라이믹스 1.9.10 버젼으로 테스트해본 결과 정상적으로 unique로 생성됩니다.

@kijin
Copy link
Member

kijin commented Aug 25, 2021

흠 예전에는 지원했었나 보군요. 그렇다면 라이믹스 2.0에서도 지원하겠습니다.^^

@kijin kijin added bug 버그로 확인된 사항 and removed question 단순 질문 labels Aug 25, 2021
@kijin kijin self-assigned this Aug 25, 2021
@pocketoy
Copy link
Author

pocketoy commented Aug 25, 2021

참고하시라고 약간 디버깅한 정보를 남겨둡니다.
table.php 101라인
$index->type 정보만으로 unique 인덱스인지 아닌지를 결정하는 것 같은데
이 시점에서 $index->type은 null이고 $index->is_unique가 true로 되어있습니다.
입력으로 사용한 스키마는 저 위에 제가 예로 올렸던 스키마입니다.

@kijin
Copy link
Member

kijin commented Aug 25, 2021

알려주신 내용을 참고하여 다시 확인해 보니, 멀티컬럼 unqiue 인덱스 지원이 누락된 것은 의도적인 결정이 아니라 단순한 코딩 실수였던 것 같습니다. is_unique 속성은 index가 아닌 column에 추가해야 하고, index에는 type을 넣어줘야 하는데 뒤바뀌었네요.

develop 브랜치에서 패치 적용하였고 추후 동일한 문제가 재발하는 것을 막기 위해 유닛 테스트도 추가했습니다. 이제는 1.9 버전과 동일하게 작동할 것으로 보입니다.

@kijin kijin added the patch available 패치 있음 표시 (bug와 함께 사용) label Aug 25, 2021
@kijin kijin removed their assignment Aug 26, 2021
@kijin kijin closed this as completed in f7146a4 Sep 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 버그로 확인된 사항 patch available 패치 있음 표시 (bug와 함께 사용)
Projects
None yet
Development

No branches or pull requests

2 participants