큐브리드 7.3 메뉴얼을 보면서 메소드를 연습해 보고 있습니다.
\"사용자 메뉴얼 2\" - 4장 메소드
- 메소드 정의하기
여기서 나온대로
--------------------------------------------------------
CREATE CLASS business(name string)
METHOD CLASS add_new_business(string) object
FUNCTION new_business
FILE ’/usr/bin/business.o’, ’$CUBRID/lib/libesqlx.a’;
--------------------------------------------------------
이렇게 생성하였습니다.
그리고 다음과 같이 파일을 만들었습니다.
---------------------------------------------------------------------------------
void
new_business(DB_OBJECT *class_object, DB_VALUE *return_arg, DB_VALUE *name)
{
EXEC SQLX BEGIN DECLARE SECTION;
DB_OBJECT *class_obj = class_object;
const char *new_name;
DB_OBJECT *new_instance = NULL;
EXEC SQLX END DECLARE SECTION;
/* 기본 반환 값을 설정한다.*/
DB_MAKE_NULL(return_arg);
new_name = DB_GET_STRING(name);
if (new_name != NULL)
/* 새로운 인스턴스를 생성하고 name 속성을 초기화 한다.*/
/* 그리고 호스트 변수 new_instance에 인스턴스를 저장한다. */
EXEC SQLX INSERT INTO business (name)
VALUES (:new_name)
TO :new_instance;
if (new_instance != NULL)
/* 인스턴스가 있으면 반환 값을 저장한다.*/
DB_MAKE_OBJECT(return_arg, new_instance);
}
---------------------------------------------------------------------------------
그런데 이걸 어디다 어떻게 저장하라는건지 전혀 알수가 없었기에 -_-;;
메뉴얼을 한참동안이나 찾아보다가 결국
business.ec이런 이름으로 저장하고,
-------------------
esqlx business.ec
-------------------
이렇게 해주니 business.c 라는 파일이 생기더군요,
그리고 또 고민하다가 다음과 같이 해봤습니다.
------------------------------------------------------------------------------
cc business.c -I $CUBRID/include -L $CUBRID/lib -lesqlx -lsqlxone -lsqlxutil -lm
------------------------------------------------------------------------------
그런데 오류가 났습니다.
===========================================================================
In function \'new_business\':
warning: incompatible implicit declaration of built-in function \'strlen\'
warning: passing argument 6 of \'uci_put_value\' discards qualifiers from pointer target type
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start\':
(.text+0x18): undefined reference to `main\'
collect2: ld returned 1 exit status
===========================================================================
그래서 한번 -c 옵션을 줘봤는데요....
================================================================
cc: -lesqlx: linker input file unused because linking not done
cc: -lsqlxone: linker input file unused because linking not done
cc: -lsqlxutil: linker input file unused because linking not done
cc: -lm: linker input file unused because linking not done
================================================================
이렇게 나오긴 하지만 business.o 라는 파일이 생성이 되기는 하길래,
------------------------------------------------
call add_new_business(\'test\') on class business;
------------------------------------------------
이렇게 쿼리를 날려보니까
===============================================================
/usr/bin/business.o: only ET_DYN and ET_EXEC can be loaded
===============================================================
이렇게 오류가 납니다.
물론, 새로운 인스턴스 역시 생성되지 않았습니다.
어떻게 해야 하는지 알려주세요..
그리고 대체 메소드에 대한 자세한 설명은 어느 파일을 봐야 나오는겁니까?
|