cubrid icon indicating copy to clipboard operation
cubrid copied to clipboard

[CBRD-26429] support to change csql prompt using enviornment variable

Open mhoh3963 opened this issue 1 month ago • 9 comments

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

Purpose

The CSQL (CUBRID SQL Interpreter) prompt display can be modified using the user environment variable CUBRID_CSQL_PROMPT. This environment variable supports special user-defined characters (escape sequences) that the CSQL interpreter will replace with specific runtime values to build the customized prompt string.

  • The user-defined characters (escape sequences) are the follows.

    • /u or /U : replaced with the user name (currently logged in)
    • /d or /D : replaced with the database name (currently connected)
    • /h or /H : replaced with the host name (currently connected)
  • The rest of the string, excluding the escape sequences, is displayed as it is.

mhoh3963 avatar Dec 11 '25 03:12 mhoh3963

/run all

mhoh3963 avatar Dec 11 '25 03:12 mhoh3963

이건 미리 질문 드려보는 것인데 장기적으로 Multi-connection을 지원하게 되면 어떻게 표시해 줘야 하나요?

ctshim avatar Dec 11 '25 23:12 ctshim

프롬프트에 한글을 사용하는 경우, 어떻게 될까요? 경우에 따라서는 한글이 잘려서 깨질 수 있을 것 같습니다.

beyondykk9 avatar Dec 11 '25 23:12 beyondykk9

이건 미리 질문 드려보는 것인데 장기적으로 Multi-connection을 지원하게 되면 어떻게 표시해 줘야 하나요?

만약 csql에서 multi-connection을 지원하게 된다면, 아마도 ;switch 와 같은 command가 추가되어야 할 것 같습니다. 해당 command 수행시 prompt를 변경하면 될 것 같습니다.

mhoh3963 avatar Dec 12 '25 00:12 mhoh3963

프롬프트에 한글을 사용하는 경우, 어떻게 될까요? 경우에 따라서는 한글이 잘려서 깨질 수 있을 것 같습니다. 현재 버퍼의 마지막 부분처리시 한글과 같은 multi-byte 언어에 대해서는 고려하지 않아서 깨질것 같은데, 문제는 문자열안의 한글 코드가 utf8인지 ksc5601인지를 확인하기 힘들어 보입니다.

mhoh3963 avatar Dec 12 '25 00:12 mhoh3963

다음 사항을 추가 반영했습니다.

  • 춘택님이 코드 리뷰해준 것 반영
  • 환경변수에 \u 또는 \U 설정된 경우 call login ()에 의해 user가 변경될 경우 프롬프트가 변경되게 수정
  • 프롬프트의 마지막 문자열이 공백이 아닌 경우 무조건 공백 문자를 넣게 수정

mhoh3963 avatar Dec 12 '25 08:12 mhoh3963

/run all

mhoh3963 avatar Dec 12 '25 08:12 mhoh3963

/run all

mhoh3963 avatar Dec 12 '25 09:12 mhoh3963

LC_ALL 과 LANG 설정 없이 CUBRID_CSQL_PROMPT에 한글 utf8 사용시 csql의 readline() 함수에 segfault를 발생하는데, ascii 코드만 지원해야 할 것 같은데, 의견부탁드립니다.

mhoh3963 avatar Dec 12 '25 09:12 mhoh3963

LC_ALL 과 LANG 설정 없이 CUBRID_CSQL_PROMPT에 한글 utf8 사용시 csql의 readline() 함수에 segfault를 발생하는데, ascii 코드만 지원해야 할 것 같은데, 의견부탁드립니다.

ascii만 지원하자는 것에 찬성합니다. 다만, 사용자가 한글을 썼을 때 체크해서 에러를 낼 것인지요? 아니면 무시?

ctshim avatar Dec 15 '25 01:12 ctshim

/run all

mhoh3963 avatar Dec 15 '25 06:12 mhoh3963

/run all

mhoh3963 avatar Dec 15 '25 23:12 mhoh3963

LC_ALL 과 LANG 설정 없이 CUBRID_CSQL_PROMPT에 한글 utf8 사용시 csql의 readline() 함수에 segfault를 발생하는데, ascii 코드만 지원해야 할 것 같은데, 의견부탁드립니다.

ascii만 지원하자는 것에 찬성합니다. 다만, 사용자가 한글을 썼을 때 체크해서 에러를 낼 것인지요? 아니면 무시?

한글로 만들어진 유저가 있다면 어떻게 처리가 될까요? 예를 들면 create user "홍길동"으로 만들어진 "홍길동"이라는 유저가 있다면, /U를 사용했을 때, "홍길동" 표시가 아예 나타나지 않을 것 같네요.

beyondykk9 avatar Dec 16 '25 01:12 beyondykk9

LC_ALL 과 LANG 설정 없이 CUBRID_CSQL_PROMPT에 한글 utf8 사용시 csql의 readline() 함수에 segfault를 발생하는데, ascii 코드만 지원해야 할 것 같은데, 의견부탁드립니다.

ascii만 지원하자는 것에 찬성합니다. 다만, 사용자가 한글을 썼을 때 체크해서 에러를 낼 것인지요? 아니면 무시?

한글로 만들어진 유저가 있다면 어떻게 처리가 될까요? 예를 들면 create user "홍길동"으로 만들어진 "홍길동"이라는 유저가 있다면, /U를 사용했을 때, "홍길동" 표시가 아예 나타나지 않을 것 같네요.

대체되는 문자열에 대해서는 ignore code가 없어서, LC_ALL 과 LANG 설정이 없으면 segfault가 발생합니다.

mhoh3963 avatar Dec 16 '25 03:12 mhoh3963

LC_ALL 과 LANG 설정 없이 CUBRID_CSQL_PROMPT에 한글 utf8 사용시 csql의 readline() 함수에 segfault를 발생하는데, ascii 코드만 지원해야 할 것 같은데, 의견부탁드립니다.

ascii만 지원하자는 것에 찬성합니다. 다만, 사용자가 한글을 썼을 때 체크해서 에러를 낼 것인지요? 아니면 무시?

한글로 만들어진 유저가 있다면 어떻게 처리가 될까요? 예를 들면 create user "홍길동"으로 만들어진 "홍길동"이라는 유저가 있다면, /U를 사용했을 때, "홍길동" 표시가 아예 나타나지 않을 것 같네요.

대체되는 문자열에 대해서는 ignore code가 없어서, LC_ALL 과 LANG 설정이 없으면 segfault가 발생합니다.

LC_ALL과 LANG 설정이 없으면, 설정을 ko_KR.utf8로 해주면 어떨까요? 그럼, 한글 문제도 해결이 될 것 같습니다.

beyondykk9 avatar Dec 16 '25 03:12 beyondykk9

PR 설명 부분에 환경 변수 옵션을 "/"로 표시하고 있는데, "\"로 수정되어야 합니다. 그리고 한글 관련해서, LC_ALL과 LANG 환경 변수 설정이 안 되어 있는 경우, 사용자가 설정할 수 있도록 가이드 메시지를 출력한 후 종료하는 게 어떨지요.

beyondykk9 avatar Dec 19 '25 00:12 beyondykk9

PR 설명 부분에 환경 변수 옵션을 "/"로 표시하고 있는데, ""로 수정되어야 합니다. 그리고 한글 관련해서, LC_ALL과 LANG 환경 변수 설정이 안 되어 있는 경우, 사용자가 설정할 수 있도록 가이드 메시지를 출력한 후 종료하는 게 어떨지요.

PR 살명은 수정했습니다. change_prompt()에서 multi-byte인 경우 LANG 환경변수가 없는 경우 LANG 설정하라는 메세지를 출력하고 오류를 발생하게 수정해봤는데, 문제는 LANG 환경 변수에 설정을 잘 못한 경우에는 동일하게 segfault 가 발생하네요. libedit에서 segfault 발생하는 것을 수정해야 할 것 같네요.

mhoh3963 avatar Dec 19 '25 00:12 mhoh3963

PR 설명 부분에 환경 변수 옵션을 "/"로 표시하고 있는데, ""로 수정되어야 합니다. 그리고 한글 관련해서, LC_ALL과 LANG 환경 변수 설정이 안 되어 있는 경우, 사용자가 설정할 수 있도록 가이드 메시지를 출력한 후 종료하는 게 어떨지요.

PR 살명은 수정했습니다. change_prompt()에서 multi-byte인 경우 LANG 환경변수가 없는 경우 LANG 설정하라는 메세지를 출력하고 오류를 발생하게 수정해봤는데, 문제는 LANG 환경 변수에 설정을 잘 못한 경우에는 동일하게 segfault 가 발생하네요. libedit에서 segfault 발생하는 것을 수정해야 할 것 같네요.

LC_ALL과 LANG에 설정할 수 있는 내용을 iso88591, utf8, euckr로 한정하고 나머지는 모두 에러 처리하면 어떨지요?

beyondykk9 avatar Dec 19 '25 02:12 beyondykk9

PR 설명 부분에 환경 변수 옵션을 "/"로 표시하고 있는데, ""로 수정되어야 합니다. 그리고 한글 관련해서, LC_ALL과 LANG 환경 변수 설정이 안 되어 있는 경우, 사용자가 설정할 수 있도록 가이드 메시지를 출력한 후 종료하는 게 어떨지요.

PR 살명은 수정했습니다. change_prompt()에서 multi-byte인 경우 LANG 환경변수가 없는 경우 LANG 설정하라는 메세지를 출력하고 오류를 발생하게 수정해봤는데, 문제는 LANG 환경 변수에 설정을 잘 못한 경우에는 동일하게 segfault 가 발생하네요. libedit에서 segfault 발생하는 것을 수정해야 할 것 같네요.

LC_ALL과 LANG에 설정할 수 있는 내용을 iso88591, utf8, euckr로 한정하고 나머지는 모두 에러 처리하면 어떨지요?

현재 사용중인 libedit에서 core 나는 부분은 수정할 예정입니다. change_prompt() 에서 multi-byte인 경우에는 현재 DB의 codeset과 설정된 locale 를 비교해서 다른 경우에는 오류를 발생하게 할 예정입니다. (db codeset이 utf8, euckr 인 경우에만 LANG 설정 이후 multi-byte를 prompt에서 사용할 수 있게할 예정입니다.)

mhoh3963 avatar Dec 19 '25 06:12 mhoh3963