| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 29. libpq - C ¶óÀ̺귯¸® | Fast Forward | Next |
ÀÏ´Ü µ¥ÀÌÅͺ£À̽º ¼¹ö·ÎÀÇ Á¢¼ÓÀÌ ¼º°øÀûÀ¸·Î È®¸³µÇ¸é, ¿©±â¼ ¼³¸íÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇØ SQL ÀÇ Äõ¸®³ª Ä¿¸Çµå¸¦ ½ÇÇàÇÕ´Ï´Ù.
PQexec
Ä¿¸Çµå¸¦ ¼¹ö¿¡ Àü¼ÛÇϰí, °á°ú¸¦ ´ë±âÇÕ´Ï´Ù.
PGresult *PQexec(PGconn *conn, const char *command);
¹ÝȯµÇ´Â °ÍÀº PGresult Æ÷ÀÎÅͳª null Æ÷ÀÎÅÍÀÔ´Ï´Ù.
¸Þ¸ð¸® ºÎÁ· »óÅÂÀ̳ª ¼¹öÀÇ Ä¿¸Çµå Àü¼ÛÀÌ ºÒ°¡´ÉÇÑ °Í°ú °°ÀÌ ½É°¢ÇÑ ¿¡·¯ÀÇ °æ¿ì¸¦ Á¦¿ÜÇϸé, º¸Åë NULLÀÌ ¾Æ´Ñ Æ÷ÀÎÅͰ¡ µ¹¾Æ°©´Ï´Ù.
¹Ýȯ °ªÀÌ null Æ÷ÀÎÅÍÀÇ °æ¿ì¿¡´Â PGRES_FATAL_ERROR °á°ú¿Í °°ÀÌ ´Ù·ç¾îÁ®¾ß ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ ¿¡·¯ÀÇ ÀÚ¼¼ÇÑ Á¤º¸´Â PQerrorMessage ·Î ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
Ä¿¸Çµå ¹®ÀÚ¿¿¡´Â(¼¼¹ÌÄÝ·ÐÀ¸·Î ºÐ¸®µÈ) º¹¼öÀÇ SQL Ä¿¸Çµå¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÜÀÏÀÇPQexecÈ£Ãâ·Î Àü¼ÛµÈ º¹¼öÀÇ Äõ¸®´Â ÇϳªÀÇ Æ®·£Àè¼ÇÀ¸·Î 󸮵˴ϴÙ.
´Ù¸¸, Äõ¸® ¹®ÀÚ¿ ³»¿¡ ¸í½ÃÀûÀÎBEGIN/COMMIT°¡ ÀÖ´Â °æ¿ì´Â º¹¼öÀÇ Æ®·£Àè¼ÇÀ¸·Î ºÐ¸®µË´Ï´Ù.
±×·¯³ª ¹ÝȯµÇ´Â PGresult±¸Á¶´Â ±× ¹®ÀÚ¿ ³»¿¡¼ ¸¶Áö¸·¿¡ ½ÇÇàµÈ Ä¿¸ÇµåÀÇ °á°ú¸¸À» Æ÷ÇÔÇÏ´Â °ÍÀ» ÁÖÀÇÇϽʽÿä.
±× Ä¿¸ÇµåÀÇ Çϳª°¡ ½ÇÆÐÇÕ´Ï´Ù.°í Çϸé, ¹®ÀÚ¿ 󸮴 °Å±â¼ Áß´ÜÇϰí, ¿¡·¯ Á¶°ÇÀ» Æ÷ÇÔÇÏ´Â PGresult°¡ ¹ÝȯµË´Ï´Ù.
PQexecParams
¼¹ö¿¡ Ä¿¸Çµå¸¦ Àü¼ÛÇϰí, °á°ú¸¦ ±â´Ù¸³´Ï´Ù. ´Ù¸¸, SQL Ä¿¸Çµå ÅØ½ºÆ®¿Í´Â º°µµ·Î ÆÄ¶ó¹ÌÅ͸¦ °Ç³×ÁÙ ¼ö ÀÖ½À´Ï´Ù.
PGresult *PQexecParams(PGconn *conn,
const char *command,
int nParams,
const Oid *paramTypes,
const char * const *paramValues,
const int *paramLengths,
const int *paramFormats,
int resultFormat);
PQexecParams¿Í PQexec´Â À¯»çÇÏÁö¸¸, ÀüÀÚ´Â ´ÙÀ½ÀÇ ±â´ÉÀÌ Ãß°¡µÇ°í ÀÖ½À´Ï´Ù.
ÆÄ¶ó¹ÌÅÍ °ªÀ» Ä¿¸Çµå ¹®ÀÚ¿°ú´Â º°µµ·Î ÀûÀýÈ÷ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç, Äõ¸®ÀÇ °á°ú¸¦ ÅØ½ºÆ®³ª ¹ÙÀ̳ʸ® ¼½ÄÀ¸·Î ¿ä±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQexecParams´Â ÇÁ·ÎÅäÄÝ 3.0ÀÌÈÄ¿¡¼¸¸ Áö¿øµÇ¹Ç·Î ÇÁ·ÎÅäÄÝ 2.0À¸·Î »ç¿ëÇßÀ» °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù.
ÀÌ ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.
Á¢¼Ó ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. À̰ÍÀ» ÅëÇØ Ä¿¸Çµå¸¦ Àü¼ÛÇÕ´Ï´Ù.
½ÇÇàµÇ´Â SQL Ä¿¸Çµå ¹®ÀÚ¿ÀÔ´Ï´Ù. ÆÄ¶ó¹ÌÅͰ¡ »ç¿ëµÇ´Â °æ¿ì´Â Ä¿¸Çµå ¹®ÀÚ¿ ³»¿¡¼$1, $2·Î¼ ÂüÁ¶µË´Ï´Ù.
Á¦°øÇÏ´Â ÆÄ¶ó¹ÌÅÍ ¼ýÀÚÀÔ´Ï´Ù. À̰ÍÀº ¹è¿paramTypes[], paramValues[], paramLengths[], paramFormats[]ÀÇ ±æÀÌÀÔ´Ï´Ù. (ÀÌ ¹è¿ Æ÷ÀÎÅÍ´Â nParams°¡ 0ÀÏ °æ¿ì, NULL·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. )
ÆÄ¶ó¹ÌÅÍ ½Éº¼¿¡ ´ëÀԵǴ µ¥ÀÌÅÍÇüÀ» OID·Î ÁöÁ¤ÇÑ °ÍÀÔ´Ï´Ù. paramTypes°¡NULLÀ̳ª ƯÁ¤ÇÑ ¹è¿ ¿ä¼Ò°¡ 0ÀÇ °æ¿ì, ¼¹ö´Â ÇüÅ ÁöÁ¤ÀÌ ¾ø´Â ¸®ÅÍ·² ¹®ÀÚ¿¿¡ ´ëÇØ¼ ½Ç½ÃÇÏ´Â ÃßÁ¤ ¹æ¹ý°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇϰí, ÆÄ¶ó¹ÌÅÍ ½Éº¼ÀÇ µ¥ÀÌÅÍÇüÀ» ÃßÁ¤ÇÕ´Ï´Ù.
ÆÄ¶ó¹ÌÅÍÀÇ ½ÇÁ¦ °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¹è¿ ³»ÀÇ null Æ÷ÀÎÅÍ´Â ´ëÀÀÇÏ´Â ÆÄ¶ó¹ÌÅͰ¡ NULLÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¾Æ´Ï¸é, ÀÌ Æ÷ÀÎÅÍ´Â 0À¸·Î ³¡³ª´Â ÅØ½ºÆ® ¹®ÀÚ¿(ÅØ½ºÆ® ¼½Ä), ¶Ç´Â ¼¹ö·Î ¿¹»óµÇ´Â ¼½Ä¿¡ ÀÇÇÑ ¹ÙÀ̳ʸ® µ¥ÀÌÅÍ(¹ÙÀ̳ʸ® ¼½Ä)¸¦ Áö½ÃÇÕ´Ï´Ù.
¹ÙÀ̳ʸ® ¼½ÄÀÇ ½ÇÁ¦ µ¥ÀÌÅÍ ±æÀ̸¦ ÁöÁ¤ÇÕ´Ï´Ù. null ÆÄ¶ó¹ÌÅÍ ¹× ÅØ½ºÆ® ¼½ÄÀÇ ÆÄ¶ó¹ÌÅÍ´Â ¹«½ÃµË´Ï´Ù. ¹ÙÀ̳ʸ® ÆÄ¶ó¹ÌÅͰ¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì, ÀÌ ¹è¿ Æ÷ÀÎÅÍ´Â NULLÀ̶ó°í ÇØµµ ±¦Âú½À´Ï´Ù.
ÆÄ¶ó¹ÌÅͰ¡ ÅØ½ºÆ®(ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÀÀÇÏ´Â ¹è¿ ¿ä¼Ò¿¡ 0À» ¼³Á¤)Àΰ¡, ¹ÙÀ̳ʸ®(ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÀÀÇÏ´Â ¹è¿ ¿ä¼Ò¿¡ 1À» ¼³Á¤)ÀÎÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¹è¿ Æ÷ÀÎÅͰ¡ nullÀÇ °æ¿ì, ¸ðµç ÆÄ¶ó¹ÌÅÍ´Â ÅØ½ºÆ® ¹®ÀÚ¿À̶ó°í °¡Á¤µË´Ï´Ù.
°á°ú¸¦ ÅØ½ºÆ® ¼½ÄÀ¸·Î ²¨³»°í ½ÍÀº °æ¿ì´Â 0À», ¹ÙÀ̳ʸ® ¼½ÄÀ¸·Î ²¨³»°í ½ÍÀº °æ¿ì´Â 1À» ÁöÁ¤ÇÕ´Ï´Ù. (Çö½ÃÁ¡¿¡¼´Â ÇÁ·ÎÅäÄÝ ³»ºÎ¿¡¼´Â ½ÇÇö °¡´ÉÇÏÁö¸¸, °á°ú ¿À» ´Ù¸¥ ¼½ÄÀ¸·Î ÁöÁ¤ÇØ ²¨³»´Â Á¶Ç×Àº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. )
PQexec¿¡ ´ëÇÑPQexecParamsÀÇ ÁÖµÈ ÀÌÁ¡Àº Ä¿¸Çµå ¹®ÀÚ¿·ÎºÎÅÍ ÆÄ¶ó¹ÌÅÍ °ªÀÌ ºÐ¸® °¡´ÉÇÏ´Ù´Â Á¡ÀÔ´Ï´Ù.
À̰Ϳ¡ ÀÇÇØ, Áö·çÇÑ ¿¡·¯¸¦ ºÎ¸£±â ½¬¿î ÀοëºÎÈ£³ª À̽ºÄÉÀÌÇÁ 󸮸¦ ÇàÇÒ Çʿ䰡 ¾ø¾îÁý´Ï´Ù.
PQexec¿Í ´Þ¸®, PQexecParams´Â ¹®ÀÚ¿ ³»¿¡ ÃÖ´ë 1°³ÀÇ SQL Ä¿¸Çµå¸¦ ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù.
(¼¼¹ÌÄÝ·ÐÀ» ³ÖÀ» ¼ö ÀÖÁö¸¸, °ø¹éÀÌ ¾Æ´Ñ Ä¿¸Çµå¸¦ 1°³ ÀÌ»ó ³ÖÀ» ¼ö ¾ø½À´Ï´Ù. )
ÀÌ´Â ÇÁ·ÎÅäÄÝ ÀÚüÀÇ Á¦¾àÀÌÁö¸¸, SQL ÁÖÀÔ °ø°Ý¿¡ ´ëÇÑ Ãß°¡ ¹æ¾î·Î ´Ù¼Ò µµ¿òÀÌ µË´Ï´Ù.
Tip: OID¸¦ °ÅÄ¡´Â ÆÄ¶ó¹ÌÅÍÇüÀÇ ÁöÁ¤Àº ƯÈ÷ ÇÁ·Î±×·¥À¸·Î ƯÁ¤ÇÑ OID °ªÀ» Æí¼ºÇÏ´Â °ÍÀ» ¼±È£ÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â Áö·çÇÕ´Ï´Ù. ±×·¸Áö¸¸, ÆÄ¶ó¹ÌÅÍÀÇ ÇüŸ¦ ¼¹ö ÀÚ½ÅÀ¸·Î °áÁ¤ÇÒ ¼ö ¾ø°Å³ª, ¹Ù¶ó´Â ÇüÅÂ¿Í ´Ù¸¥ ÇüŸ¦ ¼±ÅÃÇÏ´Â °æ¿ì¿¡´Â À̰ÍÀ» ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù. SQL Ä¿¸Çµå ÅØ½ºÆ®·Î ¾î¶² µ¥ÀÌÅÍÇüÀ» Àü¼ÛÇÏ´ÂÁö¸¦ ³ªÅ¸³»±â À§Çؼ ÆÄ¶ó¹ÌÅÍ ½Éº¼¿¡ ¸í½ÃÀûÀ¸·Î ij½ºÆ®¸¦ ºÙ¿© Áֽʽÿä. ÀÌÇϰ¡ ¿¹ÀÔ´Ï´Ù.
select * from mytable where x = $1::bigint;µðÆúÆ®¿¡¼ ÆÄ¶ó¹ÌÅÍ$1ÀÇ ÇüÅ´ x¿Í °°Àº µ¥ÀÌÅÍÇü¿¡ ÇÒ´çÇÒ ¼ö ÀÖÁö¸¸, À̰Ϳ¡ ÀÇÇØ °Á¦ÀûÀ¸·Îbigint·Î¼ ´Ù·ç¾îÁý´Ï´Ù. ÀÌ ¹æ¹ý ¶Ç´Â ¼öÄ¡Çü OID¸¦ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº, ÆÄ¶ó¹ÌÅÍ Å¸ÀÔÀÇ °áÁ¤À» °¿äÇÏ´Â µ¥ ÀÖ¾î¼, ¹ÙÀ̳ʸ® Çü½ÄÀ¸·Î ÆÄ¶ó¹ÌÅÍ °ªÀ» º¸³¾ ¶§ °·ÂÈ÷ ÃßõµË´Ï´Ù. ÀÌ´Â ¹ÙÀ̳ʸ® Æ÷¸ËÀÌ ÅØ½ºÆ® Æ÷¸Ëº¸´Ù Á¤º¸°¡ Àû°í, ±× ¶§¹®¿¡, ¼¹ö°¡ ÇüÅÂÀÇ ºÒÀÏÄ¡¶ó°í ÇÏ´Â ¹®Á¦¸¦ °ËÃâÇÒ ±âȸ°¡ Àû±â ¶§¹®ÀÔ´Ï´Ù.
PQprepare
ÁöÁ¤ ÆÄ¶ó¹ÌÅ͸¦ °¡Áö´Â ÁغñµÈ ¹®ÀåÀÇ »ý¼º ¿ä±¸¸¦ Àü¼ÛÇϰí, ±× ¿Ï·á¸¦ ±â´Ù¸³´Ï´Ù.
PGresult *PQprepare(PGconn *conn,
const char *stmtName,
const char *query,
int nParams,
const Oid *paramTypes);
PQprepare´Â ´ÙÀ½¿¡PQexecPrepared¸¦ »ç¿ëÇØ ½ÇÇàÇÒ ÁغñµÈ ¹®ÀåÀ» »ý¼ºÇÕ´Ï´Ù.
ÀÌ ±â´ÉÀ» »ç¿ëÇØ¼ ¹Ýº¹ »ç¿ëµÇ´Â Ä¿¸ÇµåÀÇ ÇØ¼®°ú °èȹ »ý¼ºÀ» ½ÇÇàÇÒ ¶§¸¶´Ù ¸Å¹ø ½Ç½ÃÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, 1ȸ¸¸ ½Ç½ÃÇϵµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQprepare´Â ÇÁ·ÎÅäÄÝ 3.0ÀÌÈÄ¿¡¼¸¸ Áö¿øµÇ¹Ç·Î ÇÁ·ÎÅäÄÝ 2.0À» »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù.
ÀÌ ÇÔ¼ö´Â query¹®ÀÚ¿À¸·ÎºÎÅÍstmtName¶ó´Â À̸§ÀÇ ÁغñµÈ ¹®ÀåÀ» »ý¼ºÇÕ´Ï´Ù.
query´Â ´ÜÀÏÀÇ SQL Ä¿¸Çµå°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.
stmtName¸¦""·Î ÇØ, À̸§ ¾ø´Â ¹®ÀåÀ» »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸¸¾à, À̸§ ¾ø´Â ¹®ÀåÀÌ ÀÌ¹Ì Á¸ÀçÇϰí ÀÖÀ» °æ¿ì´Â ÀÚµ¿À¸·Î ±³Ã¼µË´Ï´Ù.
±× ¿ÜÀÇ °æ¿ì, ¹®Àå À̸§ÀÌ ÇöÀçÀÇ ¼¼¼Ç¿¡ ÀÌ¹Ì Á¤ÀǵǾî ÀÖÀ¸¸é ¿¡·¯°¡ ³³´Ï´Ù.
¾î¶°ÇÑ ÆÄ¶ó¹ÌÅͰ¡ »ç¿ëµÇ´Â °æ¿ì, À̵éÀº Äõ¸® ³»¿¡¼ $1, $2 µîÀ¸·Î ÂüÁ¶µË´Ï´Ù.
nParams´Â ÆÄ¶ó¹ÌÅÍ ¼ýÀÚÀÔ´Ï´Ù.
±× ÇüÅ¿¡ ´ëÇØ¼´Â »çÀü¿¡paramTypes[]¹è¿·Î ÁöÁ¤µÇ°í ÀÖ½À´Ï´Ù.
(nParams°¡ 0ÀÏ °æ¿ì, ÀÌ ¹è¿ Æ÷ÀÎÅÍ´Â NULL·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. )
paramTypes[]´Â OID¿¡ ÀÇÇØ ÆÄ¶ó¹ÌÅÍ ½Éº¼¿¡ ÇÒ´çÇÏ´Â µ¥ÀÌÅÍÇüÀ» ÁöÁ¤ÇÕ´Ï´Ù.
paramTypes°¡NULLÀ̰ųª ¹è¿ ³»ÀÇ Æ¯Á¤ ¿ä¼Ò°¡ 0ÀÏ °æ¿ì,
¼¹ö´Â ±× ÆÄ¶ó¹ÌÅÍ ½Éº¼¿¡ ´ëÇØ, ÇüÅ ÁöÁ¤ÀÌ ¾ø´Â ¸®ÅÍ·² ¹®ÀÚ¿¿¡ ´ëÇÑ Ã³¸®¿Í °°Àº ¹æ¹ýÀ¸·Î µ¥ÀÌÅÍÇüÀ» ÇÒ´çÇÕ´Ï´Ù.
¶ÇÇÑ, Äõ¸®¿¡¼´Â nParamsº¸´Ù ¸¹Àº ÆÄ¶ó¹ÌÅÍ ½Éº¼À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ½Éº¼¿¡ ´ëÇÑ µ¥ÀÌÅÍÇüµµ ÀÌ¿Í °°ÀÌ ÃßÃøµË´Ï´Ù.
(¾î¶°ÇÑ µ¥ÀÌÅÍÇüÀÌ ÃßÃøµÇ´ÂÁö¸¦ °ËÃâÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼´Â PQdescribePrepared¸¦ ÂüÁ¶ÇØ Áֽʽÿä. )
PQexec°°ÀÌ, °á°ú´Â º¸ÅëPGresult¿ÀºêÁ§Æ®·Î, ±× ³»¿ëÀº ¼¹öÃøÀÇ ¼º°øÀ̳ª ½ÇÆÐ¸¦ ³ªÅ¸³À´Ï´Ù.
null °á°ú´Â ¸Þ¸ð¸® ºÎÁ·À̳ª ÀüÇô Ä¿¸Çµå¸¦ Àü¼ÛÇÒ ¼ö ¾ø¾ú´ø °ÍÀ» ³ªÅ¸³À´Ï´Ù.
ÀÌ·¯ÇÑ ¿¡·¯ÀÇ ¼¼ºÎ »çÇ× Á¤º¸¸¦ ÀÔ¼öÇÏ·Á¸éPQerrorMessage¸¦ »ç¿ëÇØ Áֽʽÿä.
PQexecPrepared·Î »ç¿ëÇϱâ À§ÇÑ ÁغñµÈ ¹®ÀåÀº
PREPARE
SQL¹®À» ½ÇÇàÇÏ´Â °Íµµ »ý¼º °¡´ÉÇÕ´Ï´Ù.
(±×·¯³ª PQprepare´Â ÆÄ¶ó¹ÌÅÍÀÇ ÇüŸ¦ »çÀü¿¡ Á¤ÀÇÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡, º¸´Ù À¯¿¬¼ºÀÌ ÀÖ½À´Ï´Ù. )
¶ÇÇÑ, ÁغñµÈ ¹®ÀåÀ» »èÁ¦ÇÏ´Â libpqÇÔ¼ö´Â ¾øÁö¸¸, ÀÌ ¸ñÀûÀ» À§Çؼ
DEALLOCATE
SQL¹®À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQexecPrepared
ÁöÁ¤ ÆÄ¶ó¹ÌÅ͸¦ °¡Áø ÁغñµÈ ¹®ÀåÀÇ ½ÇÇà ¿ä±¸¸¦ Àü¼ÛÇϰí, °á°ú¸¦ ±â´Ù¸³´Ï´Ù.
PGresult *PQexecPrepared(PGconn *conn,
const char *stmtName,
int nParams,
const char * const *paramValues,
const int *paramLengths,
const int *paramFormats,
int resultFormat);
PQexecPrepared¿Í PQexecParams´Â À¯»çÇÏÁö¸¸, ÀüÀÚ¿¡¼ ½ÇÇàµÇ´Â Ä¿¸Çµå´Â Äõ¸® ¹®ÀÚ¿À» ÁÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, »çÀü¿¡ ÁغñµÈ ¹®ÀåÀ» Áö¸íÇÏ´Â °ÍÀ¸·Î ÁöÁ¤µË´Ï´Ù.
ÀÌ ±â´ÉÀº Ä¿¸Çµå°¡ ½ÇÇàµÉ ¶§¸¶´Ù°¡ ¾Æ´Ñ ¹Ýº¹ÀûÀ¸·Î »ç¿ëµÉ Ä¿¸ÇµåÀÇ ºÐ¼®, °èȹÇÒ ¶§ Çѹø¸¸ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¹®ÀåÀº ÇöÀçÀÇ ¼¼¼ÇÀ¸·Î »çÀü¿¡ ÁغñµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
PQexecPrepared´Â ÇÁ·ÎÅäÄÝ 3.0ÀÌÈÄÀÇ Á¢¼Ó¿¡¼¸¸ ¼Æ÷Æ®µË´Ï´Ù.
ÇÁ·ÎÅäÄÝ 2.0À¸·Î »ç¿ëÇßÀ» °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù.
ÆÄ¶ó¹ÌÅÍ´Â Äõ¸® ¹®ÀÚ¿ ´ë½Å¿¡ ÁÖ¾îÁø ÁغñµÈ ¹®ÀåÀÇ À̸§À» ÁÖ´Â Á¡À» Á¦¿ÜÇϰí, PQexecParams¿Í °°½À´Ï´Ù.
¶ÇÇÑ, paramTypes[]ÆÄ¶ó¹ÌÅÍ´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.
(ÁغñµÈ ¹®ÀåÀÇ ÆÄ¶ó¹ÌÅÍÇüÀº ±× »ý¼º ½ÃÁ¡¿¡¼ °áÁ¤µÇ±â ¶§¹®¿¡, À̰ÍÀº ºÒÇÊ¿äÇÕ´Ï´Ù. )
PQdescribePrepared
ÁÖ¾îÁø ÁغñµÈ ¹®Àå¿¡ °üÇÑ Á¤º¸ ÀÔ¼ö ¿ä±¸¸¦ º¸³»°í, ¿Ï·áµÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
PGresult *PQdescribePrepared(PGconn *conn, const char *stmtName);
PQdescribePrepared¿¡ ÀÇÇØ, ¾îÇø®ÄÉÀ̼ÇÀº »çÀü¿¡ ÁغñµÈ ¹®Àå¿¡ °üÇÑ Á¤º¸¸¦ ÀÔ¼öÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQdescribePrepared´Â ÇÁ·ÎÅäÄÝ 3.0ÀÌÈÄÀÇ Á¢¼Ó¿¡¼¸¸ ¼Æ÷Æ®µË´Ï´Ù.
ÇÁ·ÎÅäÄÝ 2.0À¸·Î »ç¿ëÇÏ¸é ½ÇÆÐÇÕ´Ï´Ù.
stmtName¸¦""¶Ç´Â NULL·Î ÇÏ´Â °ÍÀ¸·Î, À̸§ ¾ø´Â ¹®ÀåÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.
À̿ܿ¡´Â Á¸ÀçÇÏ´Â ÁغñµÈ ¹®ÀåÀÇ À̸§ÀÌ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.
¼º°øÇϸé, PGRES_COMMAND_OK »óÅÂÀÇ PGresult°¡ ¹ÝȯµË´Ï´Ù.
ÇÔ¼öPQnparams ¹× PQparamtype¸¦ ÀÌPGresult¿¡ Àû¿ëÇØ, ÁغñµÈ ¹®ÀåÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ °üÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ, ÇÔ¼öPQnfields, PQfname, PQftypeµîÀ» »ç¿ëÇϰí, ¹®ÀåÀÇ °á°ú¿(¸¸¾à ÀÖÀ¸¸é)¿¡ °üÇÑ Á¤º¸¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQdescribePortal
ÁöÁ¤ÇÑ Æ÷Åп¡ °üÇÑ Á¤º¸ ÀÔ¼ö ¿ä±¸¸¦ Àü¼ÛÇϰí, ¿Ï·áµÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
PGresult *PQdescribePortal(PGconn *conn, const char *portalName);
PQdescribePortal¿¡ ÀÇÇØ, ¾îÇø®ÄÉÀ̼ÇÀº »çÀü¿¡ »ý¼ºµÈ Æ÷ÅÐÀÇ Á¤º¸¸¦ ÀÔ¼öÇÒ ¼ö ÀÖ½À´Ï´Ù.
(libpq´Â Æ÷Åп¡ Á÷Á¢ ¾×¼¼½º ÇÏ´Â ¹æ¹ýÀ» Á¦°øÇϰí ÀÖÁö¸¸, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇØDECLARE CURSOR SQL Ä¿¸Çµå·Î »ý¼ºÇÑ Ä¿¼ÀÇ ¼Ó¼ºÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. )
PQdescribePortal´Â ÇÁ·ÎÅäÄÝ 3.0ÀÌÈÄÀÇ Á¢¼Ó¿¡¼¸¸ ¼Æ÷Æ®µË´Ï´Ù.
ÇÁ·ÎÅäÄÝ 2.0À¸·Î »ç¿ëÇÏ¸é ½ÇÆÐÇÕ´Ï´Ù.
portalName¿¡""¶Ç´Â NULL¸¦ ÁöÁ¤ÇØ, À̸§ ¾ø´Â Æ÷ÅÐÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.
À̿ܿ¡¼´Â Á¸ÀçÇÏ´Â Æ÷ÅÐÀÇ À̸§ÀÌ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.
¼º°øÇϸé, PGRES_COMMAND_OK »óÅÂÀÇPGresult°¡ ¹ÝȯµË´Ï´Ù.
ÇÔ¼öPQnfields, PQfname, PQftypeµîÀ» ÀÌPGresult¿¡ Àû¿ëÇØ, Æ÷ÅÐÀÇ °á°ú¿(¸¸¾à ÀÖÀ¸¸é)¿¡ °üÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
PGresult±¸Á¶´Â ¼¹ö·ÎºÎÅÍ ¸®ÅÏµÈ °á°ú¸¦ ĸ½¶ÈÇÕ´Ï´Ù. libpq¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¸Ó´Â ÁÖÀÇÇØ¼ PGresult Ãß»óȸ¦ À¯ÁöÇØ Áֽʽÿä. ÀÌÇÏÀÇ ¾×¼¼¼ ÇÔ¼ö¸¦ »ç¿ëÇϰí, PGresultÀÇ ³»¿ëÀ» ²¨³» Áֽʽÿä. ÇâÈÄ º¯°æ¿¡ ¿µÇâÀ» ¹Þ±â ¶§¹®¿¡, PGresult±¸Á¶ÀÇ Çʵ带 Á÷Á¢ ÂüÁ¶ÇÏ´Â °ÍÀº ÇÇÇØ Áֽʽÿä.
PQresultStatus
Ä¿¸ÇµåÀÇ °á°ú »óŸ¦ ¹ÝȯÇÕ´Ï´Ù.
ExecStatusType PQresultStatus(const PGresult *res);
PQresultStatus´Â ÀÌÇÏÀÇ ¸î °³ÀÇ °ªÀ» ¹ÝȯÇÕ´Ï´Ù.
¼¹ö¿¡ Àü¼ÛµÈ ¹®ÀÚ¿ÀÌ ºñ¾ú½À´Ï´Ù.
¾Æ¹«·± µ¥ÀÌÅ͵µ ¸®ÅÏÇÏÁö ¾Ê´Â Ä¿¸Çµå°¡ Á¤»ó Á¾·áÇß½À´Ï´Ù.
µ¥ÀÌÅ͸¦ ¹ÝȯÇÏ´Â Ä¿¸Çµå(SELECT³ª SHOWµî)°¡ Á¤»ó Á¾·áÇß½À´Ï´Ù.
(¼¹ö·ÎºÎÅÍÀÇ) º¹»ç ¾Æ¿ô µ¥ÀÌÅÍ Àü¼ÛÀÌ ½ÃÀ۵Ǿú½À´Ï´Ù.
(¼¹ö·ÎÀÇ) º¹»ç ÀÎ µ¥ÀÌÅÍ Àü¼ÛÀÌ ½ÃÀ۵Ǿú½À´Ï´Ù.
¼¹öÀÇ ¹ÝÀÀÀ» ÀÌÇØÇÒ ¼ö ¾ø½À´Ï´Ù.
Ä¡¸íÀûÀÌÁö ¾Ê´Â(ÁÖÀÇ È¯±â ȤÀº °æ°í) ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.
Ä¡¸íÀûÀÎ ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.
°á°ú »óŰ¡PGRES_TUPLES_OKÀ̸é, ÀÌÇÏ¿¡ ¼³¸íÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇØ Äõ¸®°¡ µ¹·ÁÁØ ÇàÀ» ²¨³¾ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¸, ¿ì¿¬È÷SELECTÄ¿¸Çµå°¡ µ¹·ÁÁÖ´Â ÇàÀÌ 0°³¿´´ø °Í °°Àº °æ¿ì¿¡¼µµPGRES_TUPLES_OK°¡ µÇ´Â °Í¿¡ ÁÖÀÇÇϽʽÿä. PGRES_COMMAND_OK´Â ÇàÀ» ÀüÇô µ¹·ÁÁÖÁö ¾Ê´Â(INSERT, UPDATEµîÀÇ) Ä¿¸Çµå¿ëÀÔ´Ï´Ù. PGRES_EMPTY_QUERY ÀÀ´äÀº Ŭ¶óÀÌ¾ðÆ® ¼ÒÇÁÆ®¿þ¾îÀÇ ºÒÆíÀ» ³ªÅ¸³»°í ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù.
PGRES_NONFATAL_ERROR»óÅÂÀÇ °á°ú´Â PQexec³ª ´Ù¸¥ Äõ¸® ½ÇÇà ÇÔ¼ö¿¡ ÀÇÇØ Á÷Á¢ ¹ÝȯµÇÁö ¾Ê½À´Ï´Ù.
±× ´ë½Å¿¡, ÀÌ·± Á¾·ùÀÇ °á°ú´Â ÁÖÀÇ ÇÁ·Î¼¼¼(Section 29.11ÂüÁ¶)¿¡°Ô °Ç³×Áý´Ï´Ù.
PQresStatus
PQresultStatus°¡ µ¹·ÁÁÖ´Â ¿°ÅÇüÀ¸·ÎºÎÅÍ »óÅ Äڵ带 ¼³¸íÇÏ´Â ¹®ÀÚ¿ Á¤¼ö·Î º¯È¯ÇÕ´Ï´Ù.
È£ÃâÇÏ´Â ÃøÀº ÀÌ °á°ú¸¦ ÇØÁ¦Çؼ´Â ¾ÈµË´Ï´Ù.
char *PQresStatus(ExecStatusType status);
PQresultErrorMessage
Ä¿¸Çµå¿¡ °üÇÑ ¿¡·¯ ¸Þ¼¼Áö¸¦ ¹ÝȯÇÕ´Ï´Ù. ¿¡·¯°¡ ¾øÀ¸¸é, ºñ¾îÀÖ´Â ¹®ÀÚ¿À» ¹ÝȯÇÕ´Ï´Ù.
char *PQresultErrorMessage(const PGresult *res);
¿¡·¯°¡ ÀÖ¾úÀ» °æ¿ì, ¹ÝȯµÇ´Â ¹®ÀÚ¿ÀÇ ¸¶Áö¸·¿¡´Â »õ·Î¿î ÇàÀÌ Æ÷ÇԵ˴ϴÙ.
È£ÃâÇÏ´Â ÃøÀº ÀÌ °á°ú¸¦ Á÷Á¢ ÇØÁ¦Çؼ´Â ¾ÈµË´Ï´Ù.
°ü·ÃÇÏ´Â PGresultÇÚµéÀÌPQclear¿¡°Ô °Ç³×Á³À» ¶§ ÇØÁ¦µË´Ï´Ù.
(Á¢¼Ó¿¡¼)PQerrorMessageµµ, PQexec ¶Ç´Â PQgetResultÈ£Ãâ Á÷ÈĶó¸é
(°á°ú·Î)PQresultErrorMessage¿Í °°Àº ¹®ÀÚ¿À» ¹ÝȯÇÕ´Ï´Ù.
±×·¯³ª Á¢¼Ó¿¡ ´ëÇÑ ¿¡·¯ ¸Þ¼¼Áö´Â ¿¬¼ÓµÇ´Â Á¶ÀÛÀ» ½ÇÇàÇÏ¸é º¯°æµÇ´Âµ¥ ¹ÝÇØ, PGresult´Â ¿ÀºêÁ§Æ®°¡ ÆÄ±âµÉ ¶§±îÁö ±× ¿¡·¯ ¸Þ¼¼Áö¸¦ °è¼Ó À¯ÁöÇÕ´Ï´Ù.
ÀÌPQresultErrorMessage´Â °³°³ÀÇPGresult¿¡ ¿¬°üµÈ »óŸ¦ º¸°í ½ÍÀ» ¶§,
±×¸®°íPQerrorMessage´Â Á¢¼Ó¿¡ ÀÖ¾î¼ÀÇ ¸¶Áö¸· Á¶ÀÛ »óŸ¦ º¸°í ½ÍÀ» ¶§ »ç¿ëÇØ Áֽʽÿä.
PQresultErrorField
¿¡·¯ º¸°í¿¡¼ µ¶¸³ÀûÀÎ Çʵ带 ¹ÝȯÇÕ´Ï´Ù.
char *PQresultErrorField(const PGresult *res, int fieldcode);
fieldcode´Â ¿¡·¯ ÇÊµå ½Äº°ÀÚÀÔ´Ï´Ù.
ÀÌÇÏ¿¡ ³ªÅ¸³»´Â ½Éº¼À» ÂüÁ¶ÇØ Áֽʽÿä.
PGresult°¡ ¿¡·¯°¡ ¾Æ´Ï°Å³ª °æ°í ÷ºÎÀÇ °á°úÀÎ °æ¿ì, ÁöÁ¤ÇÑ Çʵ带 Æ÷ÇÔÇÏÁö ¾Ê´Â °æ¿ì, NULL°¡ ¹ÝȯµË´Ï´Ù.
º¸Åë ÇÊµå °ªÀº »õ·Î¿î ÇàÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.
ÇʵåÄ¡´Â °ü·ÃÇÏ´Â PGresultÇÚµéÀÌPQclear¿¡°Ô °Ç³×Á³À» ¶§ °³¹æµË´Ï´Ù.
ÀÌÇÏÀÇ Çʵå Äڵ带 »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
½É°¢µµ. ÀÌ ÇʵåÀÇ ³»¿ëÀº(¿¡·¯ ¸Þ¼¼ÁöÀÇ °æ¿ì)ERROR, FATAL, ȤÀº PANIC, (ÁÖÀÇ È¯±â ¸Þ¼¼ÁöÀÇ °æ¿ì)WARNING, NOTICE, DEBUG, INFO, ȤÀº LOGÀÔ´Ï´Ù. À̰͵éÀº ´Ù¾ð¾îÈ¿¡ ÀÇÇØ ¹ø¿ªµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. Ç×»ó Á¸ÀçÇÕ´Ï´Ù.
¿¡·¯ÀÇ SQLSTATE ÄÚµåÀÔ´Ï´Ù. SQLSTATE ÄÚµå´Â ¹ß»ýÇÑ ¿¡·¯ÀÇ Á¾·ù¸¦ ½Äº°ÇÕ´Ï´Ù. ÇÁ·ÐÆ®¿£µå ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ, ƯÁ¤ÇÑ µ¥ÀÌÅͺ£À̽º ¿¡·¯¿¡ ´ëÇØ¼ ƯÁ¤ÇÑ Á¶ÀÛ(¿¡·¯ 󸮵î)À» ½Ç½ÃÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀϾ ¼ö ÀÖ´Â SQLSTATE ÄÚµåÀÇ ¸®½ºÆ®¿¡ ´ëÇØ¼´Â Appendix AÀ» ÂüÁ¶ÇØ Áֽʽÿä. ÀÌ Çʵå´Â ´Ù¾ð¾îÈ µÇÁö ¾ÊÀ¸¸ç, Ç×»ó Á¸ÀçÇÕ´Ï´Ù.
ÁÖ·Î °¡µ¶¼ºÀ» ³ôÀÎ ¿¡·¯ ¸Þ¼¼ÁöÀÔ´Ï´Ù. (º¸ÅëÀº 1ÇàÀÔ´Ï´Ù. ) Ç×»ó Á¸ÀçÇÕ´Ï´Ù.
¼¼ºÎ »çÇ×: ¹®Á¦¿¡ °üÇØ º¸´Ù ¼¼ºÎ »çÇ×À» ³ªÅ¸³»´Â º¸Á¶ÀûÀÎ ¿¡·¯ ¸Þ¼¼ÁöÀÔ´Ï´Ù. º¹¼öÇàÀ¸·Î ½ÇÇàµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
ÈùÆ®: ¹®Á¦ÀÇ Ã³¸®Çϱâ À§ÇÑ ¼±ÅÃÀûÀÎ Á¦¾ÈÀÔ´Ï´Ù. ÀÌ´Â ¼¼ºÎ »çÇ×(detail)°ú´Â ´Þ¸®, ¹®Á¦ÀÇ »ç»óº¸´Ù´Â (ÀûÀýÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖÁö¸¸) Á¶¾ðÀ» Á¦°øÇÏ´Â °ÍÀ» ¸ñÀûÀ¸·Î Çϰí ÀÖ½À´Ï´Ù. º¹¼öÇàÀ¸·Î ½ÇÇàµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
¿ø·¡ÀÇ Äõ¸® ¹®ÀÚ¿ÀÇ À妽º·Î¼ ¿¡·¯°¡ ¹ß»ýÇÑ Ä¿¼¸¦ ³ªÅ¸³»´Â 10ÁøÁ¤¼ö¸¦ °¡Áö´Â ¹®ÀÚ¿ÀÔ´Ï´Ù. ¼±µÎ ¹®ÀÚ°¡ À妽º 1ÀÌ µÇ°í, ¹ÙÀÌÆ®°¡ ¾Æ´Ñ ¹®ÀÚ ¼ö·Î ÃøÁ¤µÈ À§Ä¡ÀÔ´Ï´Ù.
ÀÌ Á¤ÀÇ´Â PG_DIAG_STATEMENT_POSITIONÇʵå¿Í °°½À´Ï´Ù. ±×·¯³ª À̴ Ŭ¶óÀÌ¾ðÆ®°¡ ¹ßÇàÇÑ Ä¿¸Çµå´Â ¾Æ´Ï°í, Ä¿¼ À§Ä¡°¡ ³»ºÎ »ý¼º Ä¿¸Çµå¸¦ ÂüÁ¶ÇÏ´Â °æ¿ì¿¡ »ç¿ëµË´Ï´Ù. ÀÌ Çʵ尡 Á¸ÀçÇÒ ¶§´Â Ç×»óPG_DIAG_INTERNAL_QUERYÇʵ尡 Á¸ÀçÇÕ´Ï´Ù.
½ÇÆÐÇÑ ³»ºÎ »ý¼º Ä¿¸ÇµåÀÇ ÅØ½ºÆ®ÀÔ´Ï´Ù. ÀÌ´Â ¿¹¸¦ µé¸é, PL/pgSQL ÇÔ¼ö·Î ¹ßÇàµÈ SQL Äõ¸®°¡ µË´Ï´Ù.
¿¡·¯°¡ ¹ß»ýÇÑ ¹®¸ÆÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. ÇöÀç À̰ÍÀº Ȱµ¿ ÁßÀÇ ¼ö¼Ó ¾ð¾î ÇÔ¼ö³ª ³»ºÎ »ý¼º Äõ¸®ÀÇ È£Ãâ ½ºÅÃÀÇ ÃßÀû Á¤º¸¸¦ Æ÷ÇÔÇÕ´Ï´Ù. ÀÌ ÃßÀûÀº Çึ´Ù 1Ç׸ñÀ̸ç, ±× Â÷·Ê´Â ´ëºÎºÐ ÃÖ±Ù ÀÌ¿ëÇÑ °ÍÀÌ Ã³À½À¸·Î ¿É´Ï´Ù.
¿¡·¯°¡ º¸°íµÈ ¼Ò½º ÄÚµåÀÇ ÆÄÀϸíÀÔ´Ï´Ù.
¿¡·¯°¡ º¸°íµÈ ¼Ò½º ÄÚµåÀÇ Çà ¹øÈ£ÀÔ´Ï´Ù.
¿¡·¯¸¦ º¸°íÇÑ, ¼Ò½º ÄÚµåÀÇ ÇÔ¼ö¸íÀÔ´Ï´Ù.
¿ä±¸¸¦ ÃæÁ·Çϴ ǥ½ÃµÈ Á¤º¸ÀÇ Çü½ÄÀº Ŭ¶óÀ̾ðÆ®ÀÇ Ã¥ÀÓÀÔ´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î Çʿ信 µû¶ó ±ä ÇàÀ» ºÐÇÒÇÕ´Ï´Ù. ¿¡·¯ ¸Þ¼¼Áö ÇÊµå ³» »õ·Î¿î Çà ¹®ÀÚ´Â »õ·Î¿î ÇàÀ¸·Î°¡ ¾Æ´Ñ ´Ü¶ôÀ¸·Î¼ ³ª´¶ °ÍÀ¸·Î¼ Ãë±ÞÇØ¾ß ÇÕ´Ï´Ù.
libpq·Î ³»ºÎ¿¡¼ »ý¼ºµÈ ¿¡·¯´Â ½É°¢µµ¿Í ÁÖ¿ä ¸Þ¼¼Áö¸¦ °¡ÁöÁö¸¸, º¸ÅëÀº ´Ù¸¥ Çʵ带 °¡ÁöÁö ¾Ê½À´Ï´Ù. 3.0 ÀÌÀü ÇÁ·ÎÅäÄÝÀÇ ¼¹ö·Î ¹ÝȯµÇ´Â ¿¡·¯´Â ½É°¢µµ¿Í ÁÖ¿ä ¸Þ¼¼Áö, °æ¿ì¿¡ µû¶ó ¼¼ºÎ »çÇ× ¸Þ¼¼Áö¸¦ °¡ÁöÁö¸¸, ´Ù¸¥ Çʵ带 °¡ÁöÁö´Â ¾Ê½À´Ï´Ù.
¿¡·¯ Çʵå´Â PGresult·ÎºÎÅÍ ÀÌ¿ëÇÒ ¼ö ÀÖÀ¸³ª PGconn·ÎºÎÅÍ´Â ÀÌ¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
PQerrorField¶ó°í ÇÏ´Â ÇÔ¼ö´Â ¾ø½À´Ï´Ù.
PQclear
PGresult ¿¡ ÇÒ´çÇÒ ¼ö ÀÖ¾ú´ø ÀúÀå ¿µ¿ªÀ» ÇØÁ¦ÇÕ´Ï´Ù.
°³°³ÀÇ Äõ¸® °á°ú´Â ´õÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀ¸¸é, PQclear·Î ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù.
void PQclear(PGresult *res);
PGresult¿ÀºêÁ§Æ®´Â ÇÊ¿äÇÑ ¸¸Å º¸°üÇÒ ¼ö ÀÖ½À´Ï´Ù.
»õ·Î¿î Äõ¸®¸¦ ¹ßÇàÇÏ´Â °æ¿ì¿¡¼µµ, Á¢¼ÓÀ» ´Ý¾Æ ¹ö¸± ¶§±îÁö´Â PGresult´Â »ç¶óÁöÁö ¾Ê½À´Ï´Ù.
PGresult¸¦ ÇØÁ¦ÇÏ·Á¸é , PQclear¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù.
±× Á¶ÀÛ¿¡ ½ÇÆÐÇϸé, ¾îÇø®ÄÉÀ̼ÇÀÇ ¸Þ¸ð¸® ¸®Å©¸¦ ÀÏÀ¸ÄÑ ¹ö¸³´Ï´Ù.
PQmakeEmptyPGresult
ÁÖ¾îÁø »óŸ¦ °¡Áø, ºñ¾îÀÖ´Â PGresult¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÕ´Ï´Ù.
PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
À̰ÍÀº ºñ¾îÀÖ´Â PGresult ¿ÀºêÁ§Æ®¸¦ ÇÒ´çÇϰí ÃʱâÈÇÏ´Â libpqÀÇ ³»ºÎ ÇÔ¼öÀÔ´Ï´Ù.
ÀÌ ÇÔ¼ö´Â ¸Þ¸ð¸®¸¦ È®º¸ÇÒ ¼ö ¾øÀ¸¸é, NULL¸¦ ¹ÝȯÇÕ´Ï´Ù.
ÀϺΠ¾îÇø®ÄÉÀ̼ǿ¡¼´Â ÀÚ½ÅÀÌ PGresult¿ÀºêÁ§Æ®(ƯÈ÷ ¿¡·¯ »óŸ¦ Æ÷ÇÔÇÑ ¿ÀºêÁ§Æ®)¸¦ »ý¼ºÇÒ ¼ö ÀÖÀ¸¸é À¯¿ëÇϱ⠶§¹®¿¡, ÀÌ ÇÔ¼ö°¡ export µÇ°í ÀÖ½À´Ï´Ù.
conn°¡ NULLÀÌ ¾Æ´Ï°í, status°¡ ¿¡·¯¸¦ ³ªÅ¸³»°í ÀÖ´Â °æ¿ì, Á¢¼ÓÀÇ ÇöÀç ¿¡·¯ ¸Þ¼¼Áö°¡PGresult¿¡ º¹»çµË´Ï´Ù.
µ¡ºÙ¿©libpqÀÚü°¡ µ¹·ÁÁÖ´Â PGresult¿Í °°ÀÌ, ¸¶Áö¸·¿¡PQclear¸¦ ÀÌ ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼ È£ÃâÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °Í¿¡ ÁÖÀÇÇϽʽÿä.
ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇϰí, Á¤»ó Á¾·áÇÑ Äõ¸® °á°ú¸¦ ³ªÅ¸³»´Â(Áï, PGRES_TUPLES_OK»óŸ¦ °¡Áø) PGresult¿ÀºêÁ§Æ®·ÎºÎÅÍ Á¤º¸¸¦ ÃßÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ¼º°øÇÑ Describe Á¶ÀÛÀ¸·ÎºÎÅÍ Á¤º¸¸¦ ÃßÃâÇÒ ¼öµµ ÀÖ½À´Ï´Ù. DescribeÀÇ °á°ú´Â ¸ðµÎ, ½ÇÁ¦·Î Äõ¸®¸¦ ½ÇÇàÇßÀ» ¶§ Á¦°øµÇ´Â °Í°ú °°Àº ¿Á¤º¸¸¦ °¡Áý´Ï´Ù¸¸, ÇàÀº ¾ø½À´Ï´Ù. ´Ù¸¥ »óÅ °ªÀ» °¡Áö´Â ¿ÀºêÁ§Æ®¿¡¼´Â ÀÌ·¯ÇÑ ÇÔ¼ö´Â °á°ú°¡ 0Çà 0¿À¸·Î µ¿ÀÛÇÕ´Ï´Ù.
PQntuples
Äõ¸® °á°ú ³»ÀÇ Çà(Æ©ÇÃ) ¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù.
int PQntuples(const PGresult *res);
PQnfields
Äõ¸® °á°úÀÇ °¢ ÇàÀÇ ¿(Çʵå)ÀÇ ¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù.
int PQnfields(const PGresult *res);
PQfname
ÁöÁ¤ÇÑ ¿¹øÈ£¿¡ ´ëÀÀÇÏ´Â ¿ÀÇ À̸§À» ¹ÝȯÇÕ´Ï´Ù.
¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
È£ÃâÇÑ Ãø¿¡¼´Â ÀÌ °á°ú¸¦ Á÷Á¢ ÇØÁ¦Çؼ´Â ¾ÈµË´Ï´Ù.
°ü·ÃÇÏ´Â PGresultÇÚµéÀÌPQclear¿¡°Ô °Ç³×Á³À» ¶§ À̰ÍÀº ÇØÁ¦µË´Ï´Ù.
char *PQfname(const PGresult *res,
int column_number);
¿¹øÈ£°¡ ¹üÀ§ ¹ÛÀÏ °æ¿ì, NULL °¡ µ¹¾Æ°©´Ï´Ù.
PQfnumber
ÁöÁ¤ÇÑ ¿¸í¿¡ °ü·ÃµÇ´Â ¿¹øÈ£¸¦ ¹ÝȯÇÕ´Ï´Ù.
int PQfnumber(const PGresult *res,
const char *column_name);
ÁöÁ¤ÇÑ À̸§¿¡ ÀÏÄ¡ÇÏ´Â ¿ÀÌ ¾øÀ¸¸é,-1ÀÌ ¸®Åϵ˴ϴÙ.
ÁöÁ¤ÇÑ À̸§Àº SQL Ä¿¸ÇµåÀÇ ½Äº°ÀÚó·³ ´Ù·ç¾îÁý´Ï´Ù. Áï, ÀÌÁß ÀοëºÎÈ£µÇÁö ¾Ê´Â ÇÑ, ¼Ò¹®ÀÚ°¡ µË´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏÀÇ SQl·Î »ý¼ºµÈ Äõ¸® °á°ú¸¦ »ý°¢ÇØ º¾½Ã´Ù.
select 1 as FOO, 2 as "BAR";
ÀÌÇÏ¿¡ ÀÇÇØ, °á°ú¸¦ °¡Áú ¼ö ÀÖ½À´Ï´Ù.
PQfname(res, 0) foo PQfname(res, 1) BAR PQfnumber(res, "FOO") 0 PQfnumber(res, "foo") 0 PQfnumber(res, "BAR") -1 PQfnumber(res, "\"BAR\"") 1
PQftable
ÁöÁ¤ÇÑ ¿ÀÌ ÃßÃâµÈ Å×À̺íÀÇ OID¸¦ ¹ÝȯÇÕ´Ï´Ù. ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
Oid PQftable(const PGresult *res,
int column_number);
¿¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³ª°Å³ª ÁöÁ¤ÇÑ ¿ÀÌ Å×ÀÌºí ¿ÀÇ ´Ü¼ø ÂüÁ¶°¡ ¾Æ´Ñ °æ¿ì, ¶Ç´Â 3.0 ÀüÀÇ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â InvalidOid°¡ ¹ÝȯµË´Ï´Ù. pg_class½Ã½ºÅÛ Å×ÀÌºí¿¡ Äõ¸®ÇØ ¾î´À Å×À̺íÀÌ ÂüÁ¶µÇ°í ÀÖ´ÂÁö¸¦ Á¤È®ÇÏ°Ô ¿ä±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
libpqÇì´õ ÆÄÀÏÀ» Æ÷ÇÔÇϸé, OidÇü°ú InvalidOidÁ¤¼ö°¡ Á¤Àǵ˴ϴÙ. À̵éÀº ¸ðµÎ ÀÓÀÇÀÇ Á¤¼öÇüÀÔ´Ï´Ù.
PQftablecol
ÁöÁ¤ÇÑ Äõ¸® °á°ú ¿À» »ý¼ºÇÑ ¿ÀÇ(±×°ÍÀÌ ¼ÓÇÏ´Â Å×ÀÌºí ³»¿¡¼ÀÇ) ¿¹øÈ£¸¦ ¹ÝȯÇÕ´Ï´Ù. Äõ¸® °á°úÀÇ ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù. Å×À̺í¿Àº 0 ÀÌ¿ÜÀÇ ¼ýÀÚ¸¦ °¡Áý´Ï´Ù.
int PQftablecol(const PGresult *res,
int column_number);
¿¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³ª°Å³ª ÁöÁ¤ÇÑ ¿ÀÌ Å×À̺í¿ÀÇ ´Ü¼ø ÂüÁ¶°¡ ¾Æ´Ï´Ñ °æ¿ì, ¶Ç´Â 3.0 ÀÌÀüÀÇ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϰí ÀÖ´Â °æ¿ì 0ÀÌ ¹ÝȯµË´Ï´Ù.
PQfformat
ÁöÁ¤ÇÑ ¿ÀÇ ¼½ÄÀ» ³ªÅ¸³»´Â ¼½Ä Äڵ尡 ¸®Åϵ˴ϴÙ. ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
int PQfformat(const PGresult *res,
int column_number);
0À» °¡¸®Å°´Â ¼½Ä ÄÚµå´Â ÅØ½ºÆ® µ¥ÀÌÅÍ Ç¥ÇöÀ» ³ªÅ¸³», 1À̶ó°í ÇÏ´Â ¼½Ä ÄÚµå´Â ¹ÙÀ̳ʸ® Ç¥ÇöÀ» ³ªÅ¸³À´Ï´Ù. (´Ù¸¥ ÄÚµå´Â ÇâÈÄ Á¤ÀǸ¦ À§ÇØ ¿¹¾àµÇ¾ú½À´Ï´Ù. )
PQftype
ÁöÁ¤ÇÑ ¿¹øÈ£¿¡ °ü·ÃÇÑ µ¥ÀÌÅÍÇüÀ» ¹ÝȯÇÕ´Ï´Ù. ¹ÝȯµÈ Á¤¼ö´Â ±× ÇüÅÂÀÇ ³»ºÎ OID ¹øÈ£ÀÔ´Ï´Ù. ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
Oid PQftype(const PGresult *res,
int column_number);
pg_type½Ã½ºÅÛ Å×ÀÌºí¿¡ Äõ¸®ÇØ, °¢Á¾ µ¥ÀÌÅÍÇüÀÇ À̸§À̳ª ¼Ó¼ºÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ³»Àå µ¥ÀÌÅÍÇüÀÇOID´Â ¼Ò½º Æ®¸®ÀÇ src/include/catalog/pg_type.hÆÄÀϳ»¿¡¼ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
PQfmod
ÁöÁ¤ÇÑ ¿¹øÈ£¿¡ °ü·ÃÇÑ ¿ÀÇ ÇüÅ ¼öÁ¤ÀÚ(modifier)¸¦ ¹ÝȯÇÕ´Ï´Ù. ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
int PQfmod(const PGresult *res,
int column_number);
¼öÁ¤ÀÚ °ªÀÇ ÇØ¼®Àº ÇüÅ¿¡ °íÀ¯ÇÑ °ÍÀÔ´Ï´Ù. º¸Åë, À̰͵éÀº Á¤¹Ðµµ³ª Å©±âÀÇ Á¦¾àÀ» ³ªÅ¸³À´Ï´Ù. -1 °ªÀº"»ç¿ëÇÒ ¼ö ÀÖ´Â Á¤º¸°¡ ¾ø´Â "°ÍÀ» ³ªÅ¸³À´Ï´Ù. ´ëºÎºÐÀÇ µ¥ÀÌÅÍÇüÀº ¼öÁ¤ÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ °æ¿ì´Â Ç×»ó-1À̶ó°í ÇÏ´Â °ªÀÌ µË´Ï´Ù.
PQfsize
ÁöÁ¤ÇÑ ¿¹øÈ£¿¡ °ü·ÃÇÑ ¿ÀÇ ¹ÙÀÌÆ® ´ÜÀ§ÀÇ Å©±â¸¦ ¹ÝȯÇÕ´Ï´Ù. ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
int PQfsize(const PGresult *res,
int column_number);
PQfsize´Â µ¥ÀÌÅͺ£À̽º ÀºÇà ³»¿¡¼ ±× ¿À» À§ÇØ ÇÒ´çÇÒ ¼ö ÀÖ´Â ¿µ¿ªÀ» ¹ÝȯÇÕ´Ï´Ù.
¹Ù²ã ¸»Çϸé, ±× µ¥ÀÌÅÍÇü¿¡ ´ëÇÑ ¼¹ö¿¡¼ÀÇ ³»ºÎ Ç¥ÇöÀÇ Å©±âÀÔ´Ï´Ù.
(µû¶ó¼, ½ÇÁ¦·Î´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô´Â ¸¹ÀÌ À¯¿ëÇÏÁö ¾Ê½À´Ï´Ù.)
À½ÀÇ °ªÀº °¡º¯ ±æÀÌ µ¥ÀÌÅÍÇüÀ» ³ªÅ¸³À´Ï´Ù.
PQbinaryTuples
PGresult°¡ ¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ °¡Áö´Â °æ¿ì´Â 1À», ÅØ½ºÆ® µ¥ÀÌÅ͸¦ °¡Áö´Â °æ¿ì´Â 0À» ¹ÝȯÇÕ´Ï´Ù.
int PQbinaryTuples(const PGresult *res);
ÀÌ ÇÔ¼ö´Â ¾µ¸ð¾ø°Ô µÈ °ÍÀÔ´Ï´Ù.
(COPY¸¦ °¡Áö´Â Á¢¼ÓÀÇ »ç¿ëÀ» Á¦¿ÜÇÕ´Ï´Ù. )
´ÜÀÏÀÇPGresult°¡ ¾î´À ¿Àº ÅØ½ºÆ® µ¥ÀÌÅ͸¦ Æ÷ÇÔÇϰí, ´Ù¸¥ ¿¿¡¼ ¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ °¡Áö´Â °ÍÀÌ °¡´ÉÇϱ⠶§¹®¿¡ÀÔ´Ï´Ù.
PQfformat ÀÇ ÀÌ¿ëÀÌ ÃßõµË´Ï´Ù.
°á°úÀÇ ¸ðµç ¿ÀÌ ¹ÙÀ̳ʸ®(¼½Ä 1)ÀÏ °æ¿ì¸¸ PQbinaryTuples°¡ 1À» ¹ÝȯÇÕ´Ï´Ù.
PQgetvalue
PGresultÀÇ 1Çà¿¡ ÀÖ¾î¼ÀÇ ´ÜÀÏ ÇʵåÀÇ °ªÀ» ¹ÝȯÇÕ´Ï´Ù.
Çà ¹øÈ£¿Í ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
È£ÃâÇÏ´Â ÃøÀº ÀÌ °á°ú¸¦ Á÷Á¢ ÇØÁ¦Çؼ´Â ¾ÈµË´Ï´Ù.
°ü·ÃÇÏ´Â PGresultÇÚµéÀÌPQclear¿¡°Ô °Ç³×Á³À» ¶§ À̰ÍÀº ÇØÁ¦µË´Ï´Ù.
char *PQgetvalue(const PGresult *res,
int row_number,
int column_number);
ÅØ½ºÆ® ¼½ÄÀÇ µ¥ÀÌÅÍ¿¡¼´Â PQgetvalue·Î ¹ÝȯµÇ´Â °ªÀº ÇÊµå °ªÀ» null·Î ³¡³ª´Â ¹®ÀÚ¿·Î Ç¥ÇöµË´Ï´Ù.
¹ÙÀ̳ʸ® ¼½ÄÀÇ µ¥ÀÌÅÍ¿¡¼ ÀÌ °ªÀº µ¥ÀÌÅÍÇüÀÇtypsendÇÔ¼ö¿ÍtypreceiveÇÔ¼ö·Î Á¤ÇØÁö´Â ¹ÙÀ̳ʸ® Ç¥ÇöÀÌ µË´Ï´Ù.
(½ÇÁ¦·Î´Â ÀÌ °æ¿ì¿¡¼µµ °ªÀÇ ¸¶Áö¸·¿¡ 0 ¹ÙÀÌÆ®°¡ ºÎ¿©µË´Ï´Ù.
±×·¯³ª ÀÌ °ªÀÇ ³»ºÎ¿¡´Â ´ëü·Î nullÀ» Æ÷ÇÔÇϱ⠶§¹®¿¡, º¸Åë ÀÌ´Â À¯¿ëÇÏÁö ¾Ê½À´Ï´Ù. )
ÇÊµå °ªÀÌ NULLÀÇ °æ¿ì, ºñ¾îÀÖ´Â ¹®ÀÚ¿ÀÌ ¹ÝȯµË´Ï´Ù.
NULL°ª°ú °ø¹®ÀÚ¿ÀÇ °ªÀ» ±¸º°ÇÏ´Â ¹æ¹ýÀºPQgetisnull¸¦ ÂüÁ¶ÇØ Áֽʽÿä.
PQgetvalue¿¡ ÀÇÇØ ¹ÝȯµÇ´Â Æ÷ÀÎÅÍ´Â PGresult±¸Á¶ÀÇ ÀϺΠÀúÀå ¿µ¿ªÀ» Áö½ÃÇÕ´Ï´Ù.
ÀÌ Æ÷ÀÎÅͰ¡ Áö½ÃÇÏ´Â µ¥ÀÌÅ͸¦ º¯°æÇØ¾ß ÇÏÁö´Â ¾Ê½À´Ï´Ù.
¶ÇÇÑ, PGresult±¸Á¶ÀÇ Á¸¼Ó ±â°£ÀÌ Áö³ ÈÄ¿¡µµ »ç¿ëÇÏ´Â °æ¿ì, µ¥ÀÌÅ͸¦ ´Ù¸¥ ÀúÀå ¿µ¿ª¿¡ ¸í½ÃÀûÀ¸·Î º¹»çÇØ¾ß ÇÕ´Ï´Ù.
PQgetisnull
Çʵ尡 null °ªÀÎÁö °Ë»çÇÕ´Ï´Ù. Çà ¹øÈ£¿Í ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
int PQgetisnull(const PGresult *res,
int row_number,
int column_number);
ÀÌ ÇÔ¼ö´Â Çʵ尡 NULLÀÎ °æ¿ì¿¡ 1À», Çʵ尡 NULLÀÌ ¾Æ´Ñ °ª¸¦ °¡Áö´Â °æ¿ì´Â 0À» ¹ÝȯÇÕ´Ï´Ù.
(PQgetvalue¿¡¼´Â NULL Çʵå´Â null Æ÷ÀÎÅͰ¡ ¾Æ´Ñ °ø¹®ÀÚ¿À» ¸®ÅÏÇÏ´Â °ÍÀ» ÁÖÀÇÇϽʽÿä. )
PQgetlength
½ÇÁ¦ ÇÊµå °ªÀÇ ±æÀ̸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ¹ÝȯÇÕ´Ï´Ù. Çà ¹øÈ£¿Í ¿¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
int PQgetlength(const PGresult *res,
int row_number,
int column_number);
À̰ÍÀº ƯÁ¤ÇÑ µ¥ÀÌÅÍ °ª¿¡ ´ëÇÑ ½ÇÁ¦ µ¥ÀÌÅÍ ±æÀÌÀÔ´Ï´Ù.
Áï, PQgetvalue¿¡ ÀÇÇØ Áö½ÃµÇ´Â ¿ÀºêÁ§Æ®ÀÇ Å©±âÀÔ´Ï´Ù.
ÅØ½ºÆ® µ¥ÀÌÅÍ ¼½Ä¿¡¼´Â strlen()¿Í µ¿ÀÏÇÕ´Ï´Ù.
¹ÙÀ̳ʸ® ¼½Ä¿¡¼´Â À̰ÍÀº Áß¿äÇÑ Á¤º¸ÀÔ´Ï´Ù.
½ÇÁ¦ µ¥ÀÌÅÍ ±æÀ̸¦ ²¨³»±â À§ÇؼPQfsize¸¦ ÀÇÁ¸
ÇÏÁö´Â ¾Ê½À´Ï´Ù
.
PQnparams
ÁغñµÈ ¹®ÀåÀÇ ÆÄ¶ó¹ÌÅÍ ¼ýÀÚ¸¦ ¹ÝȯÇÕ´Ï´Ù.
int PQnparams(const PGresult *res);
ÀÌ ÇÔ¼ö´Â PQdescribePreparedÀÇ °á°ú¸¦ È®ÀÎÇÒ °æ¿ì¿¡¸¸ À¯¿ëÇÕ´Ï´Ù.
´Ù¸¥ Á¾·ùÀÇ Äõ¸®¿¡¼´Â 0À» ¹ÝȯÇÕ´Ï´Ù.
PQparamtype
ÁöÁ¤µÈ ¹®ÀåÀÇ µ¥ÀÌÅÍÇüÀ» ¹ÝȯÇÕ´Ï´Ù. ÆÄ¶ó¹ÌÅÍ ¹øÈ£´Â 0À¸·Î ½ÃÀÛÇÕ´Ï´Ù.
Oid PQparamtype(const PGresult *res, int param_number);
ÀÌ ÇÔ¼ö´Â PQdescribePreparedÀÇ °á°ú¸¦ È®ÀÎÇÒ °æ¿ì¿¡¸¸ À¯¿ëÇÕ´Ï´Ù.
´Ù¸¥ Á¾·ùÀÇ Äõ¸®¿¡¼´Â 0À» ¹ÝȯÇÕ´Ï´Ù.
PQprint
¸ðµç Çà°ú ¿¸í(»ý·« °¡´É)À» ÁöÁ¤ÇÑ Ãâ·Â ½ºÆ®¸²¿¡ Ç¥½ÃÇÕ´Ï´Ù.
void PQprint(FILE *fout, /* output stream */
const PGresult *res,
const PQprintOpt *po);
typedef struct {
pqbool header; /* print output field headings and row count */
pqbool align; /* fill align the fields */
pqbool standard; /* old brain dead format */
pqbool html3; /* output HTML tables */
pqbool expanded; /* expand tables */
pqbool pager; /* use pager for output if needed */
char *fieldSep; /* field separator */
char *tableOpt; /* attributes for HTML table element */
char *caption; /* HTML table caption */
char **fieldName; /* null-terminated array of replacement field names */
} PQprintOpt;
-->
void PQprint(FILE *fout, /* Ãâ·Â ½ºÆ®¸² */
const PGresult *res,
const PQprintOpt *po);
typedef struct {
pqbool header; /* Çʵå Çì´õ Á¤º¸¿Í Çà ¼öÀÇ Ç¥½Ã Ãâ·Â */
pqbool align; /* Çʵ带 Á¤¿Çؼ ä¿ò */
pqbool standard; /* ³°¾Æ ¾ø¾îÁú °Í °°Àº ¼½Ä */
pqbool html3; /* HTML Ç¥Ãâ·Â */
pqbool expanded; /* È®Àå Å×À̺í */
pqbool pager; /* ÇÊ¿äÇÒ °æ¿ì Ãâ·ÂÀ» À§ÇÑ pager »ç¿ë */
char *fieldSep; /* ÇÊµå ´Ü¶ô ¹®ÀÚ */
char *tableOpt; /* HTML Ç¥ ¿ä¼ÒÀÇ ¼Ó¼º */
char *caption; /* HTML Ç¥ÀÇ Ç¥Á¦ */
char **fieldName; /* Çʵå¸íÀ» ±³Ã¼ÇÏ´Â null·Î ³¡³ª´Â ¹è¿ */
} PQprintOpt;
ÀÌ ÇÔ¼ö´Â ÀÌÀü Äõ¸® °á°ú¸¦ Ç¥½ÃÇϱâ À§Çؼpsql·Î »ç¿ëµÇ¾úÁö¸¸, Áö±ÝÀº »ç¿ëµÇ°í ÀÖÁö ¾Ê½À´Ï´Ù. À̰ÍÀº ¸ðµç µ¥ÀÌÅͰ¡ ÅØ½ºÆ® ¼½ÄÀ̶ó´Â Àü0 µ¿ÀÛÇÏ´Â °Í¿¡ ÁÖÀÇÇϽʽÿä.
ÀÌ·¯ÇÑ ÇÔ¼ö´Â SELECT°á°ú ÀÌ¿ÜÀÇPGresult¿ÀºêÁ§Æ®·ÎºÎÅÍ Á¤º¸¸¦ ²¨³»±â À§Çؼ »ç¿ëµË´Ï´Ù.
PQcmdStatus
PGresult¸¦ »ý¼ºÇÏ´Â SQL Ä¿¸ÇµåÀÇ Ä¿¸Çµå »óŠű׸¦ ¹ÝȯÇÕ´Ï´Ù.
char *PQcmdStatus(PGresult *res);
À̰ÍÀº º¸Åë ´Ü¼øÇÑ Ä¿¸Çµå¸íÀÌÁö¸¸, ó¸®µÈ ÇàÀÇ ¼ö¿Í °°Àº Ãß°¡ µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
È£ÃâÇÏ´Â ÃøÀº ÀÌ ¹Ýȯ °ªÀ» Á÷Á¢ ÇØÁ¦Çؼ´Â ¾ÈµË´Ï´Ù.
°ü·ÃÇÏ´Â PGresultÇÚµéÀÌPQclear¿¡°Ô °Ç³×Á³À» ¶§ À̰ÍÀº ÇØÁ¦µË´Ï´Ù.
PQcmdTuples
SQL Ä¿¸Çµå¿¡ ÀÇÇØ ¿µÇâÀ» ¹ÞÀº Çà¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù.
char *PQcmdTuples(PGresult *res);
PGresult¸¦ »ý¼ºÇÑSQLÄ¿¸Çµå¿¡ ÀÇÇØ ¿µÇâÀ» ¹ÞÀº Çà ¼ö¸¦ Æ÷ÇÔÇÏ´Â ¹®ÀÚ¿À» ¹ÝȯÇÕ´Ï´Ù.
ÀÌ ÇÔ¼ö´Â INSERT, UPDATE, DELETE, MOVE, FETCH, COPYÄõ¸® ½ÇÇà,
ȤÀº INSERT, UPDATE, DELETE¸¦ Æ÷ÇÔÇÒ ÁغñµÈ Äõ¸®ÀÇEXECUTEÄõ¸® ´ÙÀ½¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
PGresult¸¦ »ý¼ºÇÑ Ä¿¸Çµå°¡ ´Ù¸¥ Ä¿¸Çµå¿´À» °æ¿ì, PQcmdTuples´Â °ø¹®ÀÚ¿À» ¹ÝȯÇÕ´Ï´Ù.
È£ÃâÇÏ´Â ÃøÀº ÀÌ ¹Ýȯ °ªÀ» Á÷Á¢ ÇØÁ¦Çؼ´Â ¾ÈµË´Ï´Ù.
°ü·ÃÇÏ´Â PGresultÇÚµéÀÌPQclear¿¡°Ô °Ç³×Á³À» ¶§ À̰ÍÀº ÇØÁ¦µË´Ï´Ù.
PQoidValue
SQLÄ¿¸Çµå°¡, OID¸¦ °¡Áö´Â Å×ÀÌºí ³»¿¡ 1ÇุÀ» »ðÀÔÇÏ´Â INSERT¿´´ø °æ¿ì, ȤÀº ÀûÀýÇÑINSERT¸¦ °¡Áú ÁغñµÈ Äõ¸®ÀÇEXECUTE¿´´ø °æ¿ì¿¡, »ðÀÔµÈ ÇàÀÇ OID¸¦ ¹ÝȯÇÕ´Ï´Ù. ¾Æ´Ï¸éInvalidOid¸¦ ¹ÝȯÇÕ´Ï´Ù. ¶ÇÇÑ, INSERTÄõ¸® ¿µÇâÀ» ¹ÞÀº Å×À̺íÀÌ OID¸¦ °¡ÁöÁö ¾ÊÀº °æ¿ì, ÀÌ ÇÔ¼ö´Â InvalidOid¸¦ ¹ÝȯÇÕ´Ï´Ù.
Oid PQoidValue(const PGresult *res);
PQoidStatus
SQLÄ¿¸Çµå°¡ 1ÇุÀ» »ðÀÔÇÏ´Â INSERT¿´À» °æ¿ì, ȤÀº ÀûÀýÇÑINSERT¸¦ °¡Áú ÁغñµÈ ¹®ÀåÀÇEXECUTE¿´À» °æ¿ì, »ðÀÔµÈ ÇàÀÇ OID¸¦ ¹®ÀÚ¿À¸·Î ¹ÝȯÇÕ´Ï´Ù. (INSERT°¡ º¹¼öÇàÀ» »ðÀÔÇßÀ» °æ¿ì³ª ´ë»ó Å×À̺íÀÌ OID¸¦ °¡ÁöÁö ¾Ê´Â °æ¿ì´Â 0À̶ó°í ÇÏ´Â ¹®ÀÚ¿À» ¹ÝȯÇÕ´Ï´Ù. ) Ä¿¸Çµå°¡INSERT°¡ ¾Æ´Ï¸é, °ø¹®ÀÚ¿À» ¹ÝȯÇÕ´Ï´Ù.
char *PQoidStatus(const PGresult *res);
ÀÌ ÇÔ¼ö´Â PQoidValue¸¦ À§Çؼ ¾µ¸ð¾ø°Ô µÇ¾ú½À´Ï´Ù.
À̰ÍÀº thread ¼¼ÀÌÇÁ°¡ ¾Æ´Õ´Ï´Ù.
PQescapeStringConn´Â SQL Ä¿¸Çµå ³»¿¡¼ »ç¿ëÇϱâ À§ÇØ ¹®ÀÚ¿À» À̽ºÄÉÀÌÇÁÇÕ´Ï´Ù.
ÀÌ´Â SQL Ä¿¸Çµå ³»ÀÇ ¸®ÅÍ·² Á¤¼ö·Î¼ µ¥ÀÌÅÍ °ªÀ» »ðÀÔÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù.
ƯÁ¤ÇÑ ¹®ÀÚ(ÀοëºÎÈ£³ª backslash)´Â SQL ÆÄ¼¿¡ ÀÇÇØ Ư¼öÇÑ ÇØ¼®ÀÌ ÀÌ·ç¾îÁöÁö ¾Ê°Ô À̽ºÄÉÀÌÇÁ µÇ¾î¾ß ÇÕ´Ï´Ù.
PQescapeStringConn´Â ÀÌ Á¶ÀÛÀ» ½ÇÇàÇÕ´Ï´Ù.
Tip: ½Å¿ëÇÒ ¼ö ¾ø´Â ÀԷ¿øÀ¸·ÎºÎÅÍ ¹ÞÀº ¹®ÀÚ¿À» Ãë±ÞÇÏ´Â °æ¿ì¿¡ ÀûÀýÇÑ À̽ºÄÉÀÌÇÁ 󸮸¦ ½ÇÇàÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ¾Æ´Ï¸é, º¸¾È»óÀÇ À§Ç輺ÀÌ ¹ß»ýÇÕ´Ï´Ù. "SQL »ðÀÔ" °ø°Ý¿¡ »óóÀԱ⠽¬¿ö, ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº SQL Ä¿¸Çµå°¡ µ¥ÀÌÅͺ£À̽º¿¡ µé¾î°©´Ï´Ù.
PQexecParams³ª ±× ÆÄ»ý ·çƾÀ» »ç¿ëÇØ ºÐ¸®µÈ ÆÄ¶ó¹ÌÅͷμ µ¥ÀÌÅÍ °ªÀ» °Ç³×ÁÖ´Â °æ¿ì, À̽ºÄÉÀÌÇÁ 󸮴 ÇÊ¿ä¾øÀ¸¸ç ºÎÁ¤È®ÇÏÁö ¾Êµµ·Ï ÁÖÀÇÇϽʽÿä.
size_t PQescapeStringConn (PGconn *conn,
char *to, const char *from, size_t length,
int *error);
PQescapeStringConn ´Â from¹®ÀÚ¿, Ư¼ö ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁÇØ ¹®Á¦°¡ ÀϾÁö ¾Êµµ·Ï, 0À¸·Î ³¡³ª´Â ¹ÙÀÌÆ®¸¦ Ãß°¡ÇØto¹öÆÛ¿¡ ±âÀÔÇÕ´Ï´Ù.
PostgreSQLÀÇ ¹®ÀÚ ¸®ÅÍ·²·Î¼ µÑ·¯½Î¿©¾ß ÇÒ ´ÜÀÏ ÀοëºÎÈ£´Â °á°ú ¹®ÀÚ¿¿¡ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. ÀÌ´Â °á°ú¸¦ SQL Ä¿¸Çµå¿¡ »ðÀÔÇÒ °æ¿ì¿¡ ºÎ¿©ÇØ¾ß ÇÕ´Ï´Ù.
fromÆÄ¶ó¹ÌÅÍ´Â À̽ºÄÉÀÌÇÁ ´ë»óÀÇ ¹®ÀÚ¿ÀÇ ¼±µÎ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÔ´Ï´Ù.
lengthÆÄ¶ó¹ÌÅÍ´Â ÀÌ ¹®ÀÚ¿ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
0¹ÙÀÌÆ®·Î ³¡³ªµµ·Ï ¿ä±¸µÇÁö ¾ÊÀ¸¸ç, lenth¿¡¼´Â À̰ÍÀ» ¼¼Áö ¾Ê½À´Ï´Ù.
(¸¸¾àlength¹ÙÀÌÆ® 󸮵DZâ Àü¿¡ 0À¸·Î ³¡³ª´Â ¹ÙÀÌÆ®°¡ Á¸ÀçÇϸé, PQescapeStringConn´Â 0¿¡¼ Á¾·áÇÕ´Ï´Ù.
ÀÌ µ¿ÀÛÀºstrncpy¿Í °°½À´Ï´Ù. )
to Àº length 2¹èº¸´Ù ÃÖ¼ÒÇÑ 1¹ÙÀÌÆ® ¸¹Àº ¹®ÀÚ¸¦ º¸°üÇÒ ¼ö ÀÖ´Â ¹öÆÛÀÇ Æ÷ÀÎÅÍ·Î ÇØ¾ß ÇÕ´Ï´Ù.
±×·¸Áö ¾ÊÀ¸¸é, µ¿ÀÛÀº Á¤ÀǵÇÁö ¾Ê½À´Ï´Ù.
to ¿Ífrom¹®ÀÚ ¿µ¿ªÀÌ °ãÄ¡´Â °æ¿ì, µ¿ÀÛÀº Á¤ÀǵÇÁö ¾Ê½À´Ï´Ù.
error ÆÄ¶ó¹ÌÅͰ¡ NULLÀÌ ¾Æ´Ï¸é, *error ´Â ¼º°øÇÒ °æ¿ì 0À¸·Î, ¿¡·¯ÀÏ °æ¿ì 0ÀÌ ¾Æ´Ñ °ªÀ¸·Î ¼³Á¤µË´Ï´Ù. ÇöÀç À¯ÀÏÇÏ°Ô °¡´ÉÇÑ ¿¡·¯ Á¶°ÇÀº ¼Ò½º ¹®ÀÚ¿¿¡ ¹«È¿ÀÎ ¸ÖƼ ¹ÙÀÌÆ® ºÎÈ£°¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ìÀÔ´Ï´Ù. Ãâ·Â ¹®ÀÚ¿Àº ¿¡·¯¿©µµ »ý¼ºµÇÁö¸¸, ¼¹ö°¡ ¿ÀÀÛµ¿À¸·Î °ÅÀýÇÒ °ÍÀÔ´Ï´Ù. ¿¡·¯¿¡¼, ÀûÀýÇÑ ¸Þ¼¼Áö´Â error°¡ NULLÀÎÁö¿Í °ü°è¾øÀÌconn¿ÀºêÁ§Æ® ³»¿¡ ÀúÀåµË´Ï´Ù.
PQescapeStringConn´Â to¿¡ ÀÔ·ÂµÈ ¹ÙÀÌÆ® ¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù.
´Ù¸¸, ¹®ÀÚ ¼ö¿¡´Â 0À¸·Î ³¡³ª´Â ¹ÙÀÌÆ®´Â Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.
size_t PQescapeString (char *to, const char *from, size_t length);
PQescapeStringÀºPQescapeStringConnÀÇ ÃßõµÇÁö ¾Ê´Â ¿À·¡µÈ ¹öÀüÀÔ´Ï´Ù.
µÑÀÇ Â÷ÀÌ´Â conn³ª errorÆÄ¶ó¹ÌÅ͸¦ ÃëÇÏÁö ¾Ê´Â °ÍÀÔ´Ï´Ù.
ÀÌ·Î ÀÎÇØ PQescapeString°¡(¹®ÀÚ ÀÎÄÚµù°ú °°Àº) Á¢¼Ó ÇÁ·ÎÆÛƼ¿¡ ÀÇÇÑ ÇൿÀ» Á¶Á¤ÇÒ ¼ö ¾ø´Â °Í°ú ±×¿¡ µû¸¥
À߸øÇÑ °á°ú¸¦ ¹ÝȯÇÒ °¡´É¼º
ÀÌ ÀÖ½À´Ï´Ù.
¶ÇÇÑ, ¿¡·¯ »óŸ¦ Å뺸ÇÏ´Â ±â´ÉÀÌ ¾ø½À´Ï´Ù.
PQescapeString´Â ÇÑ ¹ø¿¡ ÇϳªÀÇ Á¢¼Ó¸¸ ÇÏ´Â single-threaded Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¿¡¼ ¾ÈÀüÇÏ°Ô ÀÌ¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
(ÀÌ °æ¿ì, ¾Ë¾Æ¾ß ÇÏ´Â "µÚ¿¡ ¼û°ÜÁø Á¤º¸"°¡ ¹«¾ùÀÎÁö ¹ß°ßÇÒ ¼ö ÀÖ½À´Ï´Ù.)
´Ù¸¥ °æ¿ì¿¡´Â º¸¾È ¿äÀÎÀ̸çPQescapeStringConn¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ¸·Î ÇÇÇØ¾ß ÇÕ´Ï´Ù.
PQescapeByteaConn
byteaÇüÀ¸·Î¼ SQL Ä¿¸Çµå ³»¿¡¼ »ç¿ëÇÏ´Â ¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ À̽ºÄÉÀÌÇÁÇÕ´Ï´Ù.
PQescapeStringConn¿Í °°ÀÌ, ÀÌ´Â SQL Ä¿¸Çµå ¹®ÀÚ¿¿¡ µ¥ÀÌÅ͸¦ Á÷Á¢ Æ÷ÇÔÇÏ´Â °æ¿ì¿¡¸¸ »ç¿ëµË´Ï´Ù.
unsigned char *PQescapeByteaConn(PGconn *conn,
const unsigned char *from,
size_t from_length,
size_t *to_length);
SQL³» bytea¸®ÅÍ·²ÀÇ ÀϺημ »ç¿ëÇÏ´Â °æ¿ì, ƯÁ¤ÇÑ ¹ÙÀÌÆ® °ªÀº À̽ºÄÉÀÌÇÁ
µÇÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù
.
(¸ðµç ¹ÙÀÌÆ® °ªÀ» À̽ºÄÉÀÌÇÁÇØµµ
»ó°üÇÏÁö ¾Ê½À´Ï´Ù
. )
ÀϹÝÀûÀ¸·Î ¹ÙÀÌÆ®¸¦ À̽ºÄÉÀÌÇÁÇÏ·Á¸é , º¸Åë 2°³ÀÇ backslashÀÇ µÚ¿¡ 8 Áø¼öÄ¡¿Í µ¿ÀÏÇÑ 3ÀÚ¸®¼öÀÇ 8 Áø¼ö·Î º¯È¯ÇÕ´Ï´Ù.
´ÜÀÏ ÀοëºÎÈ£(')¿Í backslash(\)´Â Ưº°È÷ ´Ù¸¥ À̽ºÄÉÀÌÇÁ 󸮸¦ ÇÕ´Ï´Ù.
ÀÚ¼¼ÇÑ »çÇ×Àº Section 8.4À» ÂüÁ¶ÇØ Áֽʽÿä.
PQescapeByteaConn´Â ÃÖ¼Ò·Î ÇÊ¿äÇÑ ¹ÙÀÌÆ®¸¸À» À̽ºÄÉÀÌÇÁÇÏ¿©, Á¶ÀÛÀ» ½Ç½ÃÇÕ´Ï´Ù.
fromÆÄ¶ó¹ÌÅÍ´Â À̽ºÄÉÀÌÇÁ ´ë»ó ¹®ÀÚ¿ÀÇ ¼±µÎ ¹ÙÀÌÆ®¸¦ Áö½ÃÇÏ´Â Æ÷ÀÎÅÍÀÔ´Ï´Ù. from_lengthÆÄ¶ó¹ÌÅÍ´Â ÀÌ ¹ÙÀ̳ʸ® ¹®ÀÚ¿ ³»ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. (0À¸·Î ³¡³ª´Â ¹ÙÀÌÆ®´Â ºÒÇÊ¿äÇϸç, ¼¿ ¼ö ¾ø½À´Ï´Ù. ) to_lengthÆÄ¶ó¹ÌÅÍ´Â °á°ú°¡ µÇ´Â À̽ºÄÉÀÌÇÁ µÈ ¹®ÀÚ¿ÀÇ ±æÀ̸¦ º¸°üÇÏ´Â º¯¼öÀÇ Æ÷ÀÎÅÍÀÔ´Ï´Ù. ÀÌ °á°ú ¹®ÀÚ¿ ±æÀÌ´Â °á°ú·Î 0À¸·Î ³¡³ª´Â ¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
PQescapeByteaConn´Â fromÆÄ¶ó¹ÌÅͰ¡ °¡¸®Å°´Â ¹ÙÀ̳ʸ® ¹®ÀÚ¿À» À̽ºÄÉÀÌÇÁÇÑ °ÍÀ»malloc()·Î È®º¸ÇÑ ¸Þ¸ð¸® ³»¿¡ ¹ÝȯÇÕ´Ï´Ù.
±× °á°ú°¡ ºÒÇÊ¿äÇÏ°Ô µÇ¸é, ÀÌ ¸Þ¸ð¸®¸¦PQfreemem¸¦ »ç¿ëÇØ ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù.
¹ÝȯµÇ´Â ¹®ÀÚ¿Àº PostgreSQL¸®ÅÍ·² ¹®ÀÚ¿ ÆÄ¼¿ÍbyteaÀÔ·Â ÇÔ¼ö¿¡ ÀÇÇØ ÀûÀýÈ÷ ó¸®ÇÒ ¼ö ÀÖµµ·Ï, ¸ðµç Ư¼öÇÑ ¹®ÀÚ°¡ ġȯµÇ°í ÀÖ½À´Ï´Ù.
0À¸·Î ³¡³ª´Â ¹ÙÀÌÆ®µµ Ãß°¡µË´Ï´Ù.
PostgreSQLÀÇ ¸®ÅÍ·² ¹®ÀÚ¿À» µÑ·¯ ½Ñ ÀοëºÎÈ£´Â °á°ú ¹®ÀÚ¿¿¡ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.
¿¡·¯½Ã, NULL Æ÷ÀÎÅ͸¦ µ¹·ÁÁÖ¾î ÀûÀýÇÑ ¿¡·¯ ¸Þ¼¼Áö¸¦conn¿ÀºêÁ§Æ®¿¡ ÀúÀåÇÕ´Ï´Ù. ÇöÀç, À¯ÀÏÇÑ ¿¡·¯´Â °á°ú ¹®ÀÚ¿ÀÇ ¸Þ¸ð¸® ºÎÁ·ÀÔ´Ï´Ù.
PQescapeBytea
PQescapeBytea´Â PQescapeByteaConnÀÇ ÃßõµÇÁö ¾Ê´Â ¿À·¡µÈ °ÍÀÔ´Ï´Ù.
unsigned char *PQescapeBytea(const unsigned char *from,
size_t from_length,
size_t *to_length);
PQescapeByteaÀÇPQescapeByteaConn¿ÍÀÇ À¯ÀÏÇÑ Â÷ÀÌ´Â PGconnÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.
ÀÌ´Â PQescapeBytea°¡ Á¢¼Ó ÇÁ·ÎÆÛƼ(±Ô°Ý¿¡ ÀûÇÕÇÏ´Â ¹®ÀÚ¿ÀÌ ¾Æ´Ï¾îµµ)¿¡ ÀÇÇÑ ÇൿÀ» Á¶Á¤ÇÒ ¼ö ¾ø¾î, ±×·Î ÀÎÇØ
À߸øÇÑ °á°ú¸¦ ¹ÝȯÇÒ
¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ, ½ÇÆÐÀÇ ¿¡·¯ ¸Þ¼¼Áö¸¦ Å뺸ÇÏ´Â ±â´ÉÀº ¾ø½À´Ï´Ù.
PQescapeBytea´Â ÇÑ ¹ø¿¡ ÇϳªÀÇ Á¢¼Ó¸¸ ÇÏ´Â single-threadedÀÇ Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¿¡¼´Â ¾ÈÀüÇÏ°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
(ÀÌ °æ¿ì, ¾Ë¾Æ¾ß ÇÏ´Â "µÚ¿¡ ¼û°ÜÁø Á¤º¸"°¡ ¹«¾ùÀÎÁö ¹ß°ßÇÒ ¼ö ÀÖ½À´Ï´Ù.)
´Ù¸¥ °æ¿ì´Â º¸¾È ¿äÀÎÀ̸ç PQescapeByteaConn ÀÌ¿ëÀ» ÇÇÇØ¾ß ÇÕ´Ï´Ù.
PQunescapeBytea
¹ÙÀ̳ʸ® µ¥ÀÌÅÍÀÇ ¹®ÀÚ¿ Ç¥ÇöÀ» ¹ÙÀ̳ʸ® µ¥ÀÌÅÍ·Î º¯È¯ÇÕ´Ï´Ù.
Áï, PQescapeByteaÀÇ ¹Ý´ëÀÔ´Ï´Ù.
ÀÌ´Â byteaµ¥ÀÌÅ͸¦ ÅØ½ºÆ® ¼½Ä¿¡¼ ¹Þ¾ÒÀ» °æ¿ì¿¡ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
±×·¯³ª ¹ÙÀ̳ʸ® ¼½Ä¿¡¼ ¹Þ¾ÒÀ» °æ¿ì´Â ºÒÇÊ¿äÇÕ´Ï´Ù.
unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);
fromÆÄ¶ó¹ÌÅÍ´Â ¿¹¸¦ µé¸é, bytea¿¿¡PQgetvalue¸¦ ÇàÇßÀ» °æ¿ì¿¡ µ¹·ÁÁÖ¾îÁú °¡´É¼ºÀÌ ÀÖ´Â ¹®ÀÚ¿À» Áö½ÃÇÏ´Â Æ÷ÀÎÅÍÀÔ´Ï´Ù.
PQunescapeBytea´Â ÀÌ ¹®ÀÚ¿ Ç¥ÇöÀ» ¹ÙÀ̳ʸ® Ç¥ÇöÀ¸·Î º¯È¯ÇÕ´Ï´Ù.
malloc()·Î È®º¸ÇÑ ¹öÆÛÀÇ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÕ´Ï´Ù.
¿¡·¯½Ã´Â null Æ÷ÀÎÅÍÀÔ´Ï´Ù.
¶ÇÇÑ, ÀÌ ¹öÆÛÀÇ Å©±â¸¦to_length¿¡ ÀúÀåÇÕ´Ï´Ù.
ºÒÇÊ¿äÇÏ°Ô µÇ¸é, ÀÌ °á°ú¸¦PQfreemem¸¦ »ç¿ëÇØ ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù.
ÀÌ º¯È¯Àº PQescapeByteaÀÇ ¹Ý´ë°¡ ¾Æ´Õ´Ï´Ù. ¹®ÀÚ¿ÀºPQgetvalue ·ÎºÎÅÍ ¹Þ´Â °æ¿ì"À̽ºÄÉÀÌÇÁ µÈ"ÀÏÀ» ¿¹»óÇÏÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.
ƯÈ÷ ÀÌ´Â ¹®ÀÚ¿ÀÇ ÀοëºÎÈ£¸¦ ÀǽÄÇÒ Çʿ䰡 ¾ø°í, ±× ¶§¹®¿¡PGconnÆÄ¶ó¹ÌÅ͸¦ °¡Áú Çʿ䰡 ¾ø´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
PQfreemem
libpq·Î È®º¸ÇÑ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÕ´Ï´Ù.
void PQfreemem(void *ptr);
libpq, ±¸Ã¼ÀûÀ¸·Î PQescapeByteaConn, PQescapeBytea, PQunescapeBytea, PQnotifies·Î È®º¸µÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÕ´Ï´Ù.
Microsoft Windows¿¡¼´Â free()°¡ ¾Æ´Ñ, ÀÌ ÇÔ¼ö°¡ »ç¿ëµË´Ï´Ù´Â Á¡ÀÌ Æ¯È÷ Áß¿äÇÕ´Ï´Ù.
DLL·Î ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î ÇØÁ¦ÇÏ´Â °ÍÀº multithreaded/single-threaded, release/debug, static/dynamic Ç÷¡±×°¡ ±× DLL¿Í ¾îÇø®ÄÉÀ̼ÇÀ¸·Î µ¿ÀÏÇÑ °æ¿ì¿¡¸¸ °¡´ÉÇϱ⠶§¹®ÀÔ´Ï´Ù.
Microsoft Windows ÀÌ¿ÜÀÇ Ç÷§Æû¿¡¼´Â ÀÌ ÇÔ¼ö´Â free()Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö¿Í µ¿ÀÏÇÕ´Ï´Ù.