| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 29. libpq - C ¶óÀ̺귯¸® | Fast Forward | Next |
Postgres´Â ¼¹ö·ÎÀÇ °£´ÜÇÑ ÇÔ¼ö È£ÃâÀ» Àü¼ÛÇÏ´Â ºü¸¥ °æ·Î (fast-path) ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÕ´Ï´Ù.
Tip: ÀÌ ÇÔ¼ö´Â ´Ù¼Ò ¾µ¸ð¾ø½À´Ï´Ù. ºñ½ÁÇÑ ¼º´ÉÀ̳ª ±× ÀÌ»óÀÇ ¼º´ÉÀº, ÁغñµÈ ¹®Àå¿¡¼ ÇÔ¼ö È£ÃâÀ» Á¤ÀǸ¦ ¼³Á¤ÇÏ¿© ´Þ¼ºÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ±×¸®°í ±× ¹®ÀåÀº ÆÄ¶ó¹ÌÅÍ¿Í °á°ú¸¦ ¹ÙÀ̳ʸ® Àü¼Û Çϵµ·Ï ½ÇÇàÇϸé, ºü¸¥ °æ·Î ÇÔ¼ö È£ÃâµË´Ï´Ù.
PQfnÇÔ¼ö´Â ºü¸¥ °æ·Î ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇØ ¼¹ö ÇÔ¼öÀÇ ½ÇÇàÀ» ¿ä±¸ÇÕ´Ï´Ù.
PGresult *PQfn(PGconn *conn,
int fnid,
int *result_buf,
int *result_len,
int result_is_int,
const PQArgBlock *args,
int nargs);
typedef struct {
int len;
int isint;
union {
int *ptr;
int integer;
} u;
} PQArgBlock;
fnidÀÎÀÚ´Â ½ÇÇàÇÏ´Â ÇÔ¼öÀÇ OIDÀÔ´Ï´Ù. args¿Í nargs´Â ÇÔ¼ö¿¡ °Ç³×ÁÖ´Â ÆÄ¶ó¹ÌÅ͸¦ Á¤ÀÇÇÕ´Ï´Ù. À̰͵éÀº ÇÔ¼ö ¼±¾ðÀÇ ÀÎÀÚ ¸®½ºÆ®¿¡ ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù. ÆÄ¶ó¹ÌÅÍ ±¸Á¶ÀÇisint°¡ trueÀÎ °æ¿ì, u.integerÀÇ °ªÀº ¼¹ö·Î ÁöÁ¤µÈ ±æÀÌÀÇ Á¤¼ö·Î¼ Àü¼ÛµË´Ï´Ù. (À̰ÍÀº 1, 2ȤÀº 4¹ÙÀÌÆ®°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù. ) ÀÌ ¶§, ÀûÀýÇÑ ¹ÙÀÌÆ® ±³È¯ÀÌ ÇàÇØÁý´Ï´Ù. isint°¡ falseÀÎ °æ¿ì, *u.ptr·Î ÁöÁ¤µÈ ¹ÙÀÌÆ® ¼ö°¡ 󸮵ÇÁö ¾Ê°í Àü¼ÛµË´Ï´Ù. ÇÔ¼öÀÇ ÆÄ¶ó¹ÌÅÍ µ¥ÀÌÅÍÇüÀ» ¹ÙÀ̳ʸ® Àü¼ÛÀ¸·Î ½Ç½ÃÇϱâ À§Çؼ, ÀÌ µ¥ÀÌÅÍ´Â ¼¹ö°¡ ¿¹»óÇÏ´Â ¼½ÄÀÏ Çʿ䰡 ÀÖ½À´Ï´Ù. result_buf ´Â ¹Ýȯ °ªÀ» ÀúÀåÇÏ´Â ¹öÆÛÀÔ´Ï´Ù. È£ÃâÃøÀº ¹Ýȯ °ªÀ» ÀúÀåÇϴµ¥ ÃæºÐÇÑ ¿µ¿ªÀ» È®º¸ÇØ µÎÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù (¶óÀ̺귯¸®Ãø¿¡¼´Â ÀÌ °Ë»ç¸¦ Çϰí ÀÖÁö ¾Ê½À´Ï´Ù! ). ½ÇÁ¦ °á°ú ±æÀÌ´Â result_len°¡ °¡¸®Å°´Â Á¤¼ö·Î ¹ÝȯµË´Ï´Ù. °á°ú°¡ 1, 2, 4¹ÙÀÌÆ® Á¤¼ö·Î ¿¹»óµË´Ï´Ù¸éresult_is_int¸¦ 1¿¡, ±×·¸Áö ¾ÊÀ¸¸é 0À» ¼³Á¤ÇÕ´Ï´Ù. result_is_int¸¦ 1À¸·Î Çϸé, Çʿ信 µû¶ó¼ °ªÀÇ ¹ÙÀÌÆ®¼ø¼¸¦ ¹Ù²ã ³Öµµ·Ïlibpq¿¡ Áö½ÃÇÏ°Ô µË´Ï´Ù. ±×¸®°í Ŭ¶óÀÌ¾ðÆ® ¸Ó½Å»ó¿¡¼ ¿Ã¹Ù¸¥int °ªÀÌ µÇµµ·Ï Àü¼Û ÇÕ´Ï´Ù. result_is_int°¡ 0ÀÏ °æ¿ì´Â ¼¹ö°¡ º¸³½ ¹ÙÀ̳ʸ® ¼½ÄÀÇ ¹ÙÀÌÆ®¿À» ¾Æ¹«°Íµµ ¼öÁ¤ÇÏÁö ¾Ê°í ¹ÝȯÇÕ´Ï´Ù.
PQfn´Â Ç×»ó À¯È¿ÇÑ PGresult* ¸¦ ¹ÝȯÇÕ´Ï´Ù.
°á°ú°¡ »ç¿ëÇϱâ Àü¿¡´Â ¿ì¼±, °á°ú »óŸ¦ Á¶»çÇØ¾ß ÇÕ´Ï´Ù.
°á°ú°¡ ÇÊ¿ä¾ø°Ô µÈ ½ÃÁ¡¿¡¼, PQclear¿¡ ÀÇÇØ, PGresult ¸¦ ÇØÁ¦ÇÏ´Â °ÍÀº È£ÃâÃøÀÇ Ã¥ÀÓÀÔ´Ï´Ù.
ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇßÀ» °æ¿ì, NULL ÀÎÀÚ ¸®½ºÆ®³ª NULL °á°ú, ¼¼Æ® °ª °á°ú¸¦ Ãë±ÞÇÏÁö ¸øÇÏ´Â °Í¿¡ ÁÖÀÇÇϽʽÿä.