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

검색 시 '?' 문자열 에러 #797

Open
chanhihi opened this issue Nov 1, 2023 · 4 comments
Open

검색 시 '?' 문자열 에러 #797

chanhihi opened this issue Nov 1, 2023 · 4 comments
Assignees
Labels
bug Something isn't working

Comments

@chanhihi
Copy link
Member

chanhihi commented Nov 1, 2023

재현 방법

image
image

2개 이하까지 SQL에러 발생

3개 이상은 가능

발생 위치

검색

추가 정보

No response

@chanhihi chanhihi added the bug Something isn't working label Nov 1, 2023
@Jake1152
Copy link
Member

Jake1152 commented Nov 2, 2023

SQL LIKE %% 부분에 걸리는 것으로 추정
"C++" 처리했던 것처럼 특수문자 일부를 걸러주어야할 것으로 판단됨 금요일에 수정 예정

@Jake1152
Copy link
Member

Jake1152 commented Nov 2, 2023

%를 입력하는 경우 전체 검색이 됨
SQL LIKE에 걸려서 인것으로 판단됨
%가 붙게 만드는 등 SQL 구문이 아닌 일반 문자열로 인식되게 해야함
image

  • sql LIKE 구절에 ESCAPE를 추가하여 처리 가능
    • 입력된 검색어에 특수문자 앞에는 ESCAPE 조건에 넣은 문자열을 붙여주어야한다, 정규표현식으로 처리해야할 것으로 보인다.
    • 하지만, 모든 특수문자에 대해 처리를 한다고 하면 누더기 코드가 되기 쉬움
    • 처리는 가능하지만 이렇게 처리하는게 맞는가?
      e,g)
SELECT id FROM member WHREE id LIKE '%/_%' ESCAPE '/';

image

image

@Jake1152
Copy link
Member

Jake1152 commented Nov 2, 2023

?의 경우 검색결과 미리보기에서는 error가 없이 결과가 나오는데 검색을 하면 에러 발행함
둘의 로직이 비슷한데 어느 부분에서 차이점이 발생하는지 파악 필요

  • 파악 중
    • 검색결과 미리보기와 검색 로직의 sql query의 차이점이 있음, 어떤 부분에서 문제가 있는지 좀더 query를 보며 파악 필요

image

@Jake1152 Jake1152 self-assigned this Nov 6, 2023
@Jake1152
Copy link
Member

Jake1152 commented Nov 6, 2023

검색어를 토대로 LIKE로 SQL에 select하는 부분에서 특수문자 ?, % 처리가 잘 안되는 것으로 판단하여 SQL의 LIKE와 ESCAPE 조건을 추가하고, 검색어에 특수문자가 있으면 ESCAPE 문자를 추가하여 처리하고자 하였습니다

하지만 그것만으로는 해결되지 않고 여전히 검색결과 미리보기와 검색이 서로 다르게 나오고 있는 상황입니다

  • 검색어에 특수문자이면 escapeSign추가하는 로직 ( /backend/src/v1/utils/processKeywords.ts )
export const addEscapeSignToSpecialCharacters = (input: string, esacpeSign: string) => {
  const regex = /[^a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ\s]/g;
  const modifiedText = input.replace(regex, (match) => `${esacpeSign}${match}`);
  return modifiedText;
};

'?'의 경우 아직 안되는 중
transaction에 이슈가 있는 것으로 판단됩니다

추후에 이어서 디버깅 예정
To be continue...
image

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: 할 일
Development

When branches are created from issues, their pull requests are automatically linked.

2 participants