Skip to end of metadata
Go to start of metadata

 

 

개요


본 문서는 APRE*C/C++ 의 새로운 기능과 변경사항 및 SESC 에서 APRE 로 업그레이드하는 절차에 대해 설명한다.

문서의 기준은 APRE*C/C++ 의 Altibase 7.3 기준으로 작성되었다.

 

문서의 이해를 돕기 위해 아래 기술문서를 함께 참조하는 것을 권장한다.설명한다

 

 

Icon

이 문서와 관련된 오류 및 개선사항은 기술지원포털 또는 기술지원센터로 문의주시기 바랍니다.변경사항

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 없음을 미리 말씀드립니다.

이 문서에 포함된 Altibase사의 제품특징이나 기능의 개발, 발표 등의 시기는 Altibase사의 재량입니다.

Altibase사는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적재산권을 보유할 수 있습니다.

 

 

APRE*C/C++


Altibase 의 임베디드 SQL 전처리기에 대하여 설명한다. 요약 형태의 설명으로 기능에 대한 상세 사용법과 같은 구체적인 사항은 [Altibase Precompiler 가이드] 를 참고하도록 한다.

 

용어 설명 


본 문서에서 사용하는 용어에 대하여 간단히 설명한다.

  • 임베디드 SQL 전처리기
    내장 SQL(Embedded SQL)이 포함된 소스코드를 입력받아 해당 내장 SQL을 실행시간 라이브러리 함수 호출로 변환한 소스코드를 생성하는 프로그램. 전처리 범위를 결정한다

  • SES*C/C++
    Altibase 5.1.5 이하 버전의 임베디드 SQL 전처리기의 약어로, 소스코드로 C 와 C++ 을 지원한다.

  • APRE*C/C++
    Altibase 5.3.3 이상 버전의 임베디드 SQL 전처리기의 약어로, 소스코드로 C 와 C++ 을 지원한다.


New Features 요약


SES*C/C++ 에 존재하던 다수의 제약을 대폭 개선하였다.
기능 업데이트 수준을 넘어서는 업그레이드를 적용하면서 명칭 또한 APRE*C/C++(Altibase C/C++ 임베디드 SQL 전처리기) 로 변경되었다.

APRE*C/C++ 에 새롭게 추가된 기능은 아래와 같다.

  • 매크로 처리를 위한 Partial C Preprocessor 탑재
  • 호스트 변수 선언부 외부의 호스트 변수 선언을 위한 C Parser 탑재
  • 호스트 변수 선언 방식 및 사용 제약 완화를 위한 라이브러리 재작성
  • DECLARE STATEMENT 구문 지원

이와 더불어 아래와 같은 개선을 하였다.

  • WHENEVER 구문 사용 시 함수 호출 가능
  • APRE*C/C++ 실행파일(apre) 명령 옵션 변경 및 추가
  • 에러메시지 출력 형태 변경
  • RETURNING INTO 절을 지원
  • FREE 구문은 더 이상 지원하지 않으며 DISCONNECT 구문 사용

 

New Features 상세


APRE*C/C++ 에 추가된 새로운 기능은 다음과 같다.

  • Partial C Preprocessor 탑재
    아래와 같은 대부분의 매크로가 선언 영역에 대한 제한 없이 처리할 수 있게 되었다.

    (tick) #include, #define #if, #ifdef, #ifndef, #endif, #else, #elif

 

  • C Parser 탑재
    소스코드를 C 로 작성하는 경우에 한하여 호스트 변수 선언부 외부(DECLARE SECTION)에서도 호스트 변수 선언이 가능하게 되었다.

 

  • 호스트 변수 선언 방식 및 사용 제약 완화
    호스트 변수 사용과 관련된 다수의 제약이 제거되었다. 상세 내용은 아래와 같다.
  1. 호스트 변수 선언과 동시에 초깃값을 할당 가능

  2. typedef 후 구조체 정의 가능 (역으로도 가능)

  3. 내장 SQL 구문에서 배열형의 호스트 변수 사용 시 배열요소 지정 가능

  4. char *, struct * 외의 다른 데이터형도 포인터형 호스트 변수로 사용 가능

  5. SELECT 구문의 INTO 절에 ":" 없이 출력용 호스트 변수 사용 가능

  6. FOR 절이 포함된 내장 SQL 의 입력 호스트 변수가 배열 타입이 아니더라도 사용 가능

  7. 유니온(Union)형의 호스트 변수 사용 가능

 

  • DECLARE STATEMENT 구문 추가지원
    표준 Embedded SQL 구문으로 DECLARE STATEMENT 구문을 지원한다.
    다른 내장 SQL 구문에 사용될 수 있도록 SQL 구문이나 PL/SQL 블럭에 대한 식별자를 선언할 수 있다.

 

  • WHENEVER 구문 사용 시 함수 호출 가능
    WHENEVER <condition> DO <function> 와 같은 형태로 WHENEVER 구문 사용 시 특정 함수를 호출할 수 있게 개선되었다.

 

  • APRE*C/C++ 실행파일(apre) 명령 옵션 변경
  1. -I
    -include 옵션으로써 -I 로 명칭이 변경되었다.
    precompile 시 include 한 소스코드 파일의 경로를 명시한다.
    이 옵션은 코드 내의 EXEC SQL OPTION(INCLUDE=library_path)와 같은 기능을 한다.

 

  • APRE*C/C++ 실행파일(apre) 명령 옵션 추가
  1. -D
    전처리(Preprocess)시 사용될 매크로를 선언한다. 이 옵션은 코드 내의 #define 과 같은 기능을 한다.

  2. -keyword
    예약된 키워드들을 보여준다.



  • -parse parsing_mode
            a. 파싱모드(parsing_mode)를 지정하여 소스파일에 대한 전처리 범위를 결정한다.
            b. -parse 옵션의 파싱모드와 그에 따른 처리범위는 아래와 같다. 
            c. -parse 옵션 자체를 생략한 경우는 기본적으로 파싱모드가 partial 로 작동한다.
파싱모드내장 SQL(A)매크로(B)선언부외부 / 호스트 변수(C)비고
noneOXX

SES*C/C++ 와 동일하게 작동
#include 형식의 헤더파일은 처리하지 않음

partialOOX

Partial C Processor 추가 작동
#include 형식의 헤더파일까지 처리
APRE*C/C++ 의 기본 파싱모드

fullOOO

C Parser가 추가 작동
#include 형식의 헤더파일까지 처리
단, C++ 스타일로 작성된 소스코드는 선언부외부 호스트 변수 인식불가

[#include 형식의 헤더파일까지 처리] 의 경우, 해당 헤더파일 내의 #include 형식으로 선언한 또 다른 헤더파일까지도 모두 처리된다.

예를 들어, 위 예제에서의 쿼리를 아래와 같이 매크로를 사용한 선택적인 쿼리로 변경 후

 파싱옵션을 생략하여 기본 파싱모드인 partial 로 precompile 할 경우

실제 생성코드는 아래와 같이 매크로 처리가 완료된 상태로만 남게 된다. (매크로 처리 후 불필요하여 제거된 부분은 공백으로 치환된다.)

기존 SES*C/C++ 와 동일하게 precompile 하기 위해 -parse none 을 지정한 경우에는 매크로 처리 기능이 작동하지 않음으로 변수 중복선언 에러가 발생한다.

 

 

유의사항


SES*C/C++ 에서 APRE*C/C++ 로 변경 시 다음의 내용에 대하여 유의 하여야 한다.

  • 문법(syntax)강화
    기존 SES*C/C++ 는 코드에서 EXEC SQL BEGIN/END DECLARE/ARGUMENT SECTION 을 기술할 경우, 종결자인 “ ; ” 이 누락되어도 무관하였으나 APRE*C/C++ 는 반드시 “ ; “ 가 있어야 한다.
    이는 타 DBMS 전처리기와 동일한 제약 사항이다.
    아래는 END DECLARE SECTION 에 종결자를 기재하지 않은 경우의 에러이다.

  • C++ 스타일의 소스코드 precompile
    호스트 변수 선언부외부에 호스트 변수를 사용하기 위해서는 parse 옵션의 모드를 full 로 해야 한다.
    하지만, 파싱모드를 full 로 설정하면 C 파서가 동작하기 때문에 C++ 스타일의 소스코드는 전처리중 각종 파싱에러를 발생시킬 수 있다.
    즉, C++ 스타일로 작성된 소스코드는 호스트 변수 선언부에만 호스트 변수를 선언하고, -parse옵션을 사용할 경우 파싱모드를 partial 또는 none 으로 해야 한다.

 

  • -D, -I 옵션
    C/C++ 컴파일 단계에서 –D, -I 옵션을 사용한다면 대부분의 경우 APRE*C/C++ 를 통한 전처리 단계에서도 동일한 옵션을 주어야 올바른 전처리가 가능하다.

 

참고사항


SES*C/C++ 에서 APRE*C/C++ 로 변경 시 다음의 내용을 참고해야 한다.

  • -I 옵션
    기존처럼 -include 로 사용하여도 무방하나 향후 유지보수를 고려하여 새로운 옵션으로 변경하여 사용하는 것을 권장한다.

 

  • 이진 데이터 타입 변경
    기존에 사용되었던 SES_CLOB, SES_BLOB, SES_BINARY, SES_BYTES, SES_NIBBLE 타입의 이름이 APRE_CLOB, APRE_BLOB, APRE_BINARY, APRE_BYTES, APRE_NIBBLE 로 변경됐다.
    하위 호환성이 고려되었기에 기존 이름을 사용해도 무방하다.

변경사항


SES*C/C++ 환경에서 ARPE*C/C++ 로의 업그레이드 시 고려사항과 절차에 대해 설명한다.


SES*C/C++ 에서 APRE*C/C++ 로 명칭이 변경되면서 아래와 같이 실행파일, 헤더파일, 라이브러리파일, 링크옵션, 실행파일 명령 옵션 명칭이 일부 변경되었다.

구분SES*C/C++APRE*C/C++관련 파일 경로비고
실행파일sescapre$ALTIBASE_HOME/bin변경
헤더파일ses.hulpLibInterface.h$ALTIBASE_HOME/include변경
라이브러리파일libsesc.alibapre.a$ALTIBASE_HOME/lib변경
libsesc_sl.solibapre_sl.so$ALTIBASE_HOME/lib변경
링크옵션-lsesc-lapre-변경
실행파일 명령 옵션-include-include or -I-추가

위 변경사항은 하위 호환성이 고려되어 있어 별도로 조치할 사항은 없으나, 향후 유지보수를 위해 실행파일명과 링크옵션은 APRE*C/C++ 방식으로 변경을 권장한다.
또한, 필수적인 요소는 아니나 -include 옵션의 경우도 -I 로 변경하는 것을 권장한다.

 

업그레이드 절차


SES*C/C++ 개발환경에서 APRE*C/C++ 로 업그레이드 시 절차는 아래와 같다.


변경사항 섹션의 표를 참조, 아래와 같은 명령문 수행, 링크옵션, makefile 과 같은 컴파일 파일의 옵션을 수정한다.

  • 실행파일명 변경

  • 링크옵션 변경

  • makefile

 

관련 파일의 변경 사항이 복잡하거나 양이 많아 개별 수정이 어려운 경우, 위 예시의 절차를 생략할 수 있다.
다만, 정상적인 업그레이드를 위해 관련 명칭을 변경하는 절차를 수행할 것을 권장한다.

 

유의사항


SEC*C/C++ 에서 APRE*C/C++ 로 업그레이드 시 유의사항을 기술한다.

  • -parse none 옵션 추가
    APRE*C/C++ -> [유의사항] 섹션에서 언급한 문법강화로 인한 사항이 아닌데도 SES*C/C++에서는 이상없이 precompile 되던 소스코드가 APRE*C/C++ 에서는 에러가 발생할 수 있는데,
    이 경우는 APRE*C/C++ 의 파싱모드가 기본적으로 partial 이기 때문에 #include 방식으로 포함된 헤더파일까지 매크로처리를 하면서 발생하는 오류일 가능성이 높다.
    따라서, 에러발생 원인을 쉽게 알 수 없다면 SES*C/C++ 와 동일하게 precompile 을 하기 위한 -parse none 옵션을 추가하여 일차적인 확인을 하는 과정이 필요하다.

 

  • Precompiler 라이브러리 사용으로 인한 오류
    기존의 소스코드가 SES*C/C++ 라이브러리를 직접적으로 사용하도록 작성되었다면 Precompiler 라이브러리 인터페이스 변경으로 인해 컴파일이 되지 않을 수 있다.
    이 경우는 기존 소스코드에서 관련코드를 모두 제거하여야만 한다.
    Precompiler 의 라이브러리 interface 는 변경이 잦은 내부적인 요소로써 원칙적으로 사용자의 직접적인 사용을 금한다.
    따라서, precompile 된 소스코드를 분석, 사용자 임의로 소스코드에 관련 매크로, 구조체 및 함수를 사용하면서 추후 발생되는 오류는 책임지지 않는다.

 

 

 

Icon

구버전 문서: APRE_New_Features_업그레이드_가이드.pdf (Altibase v5 이후 변경)

 

 




 

  • No labels