29.3. Ä¿¸Çµå ¼öÇà ÇÔ¼ö

ÀÏ´Ü µ¥ÀÌÅͺ£À̽º ¼­¹ö·ÎÀÇ Á¢¼ÓÀÌ ¼º°øÀûÀ¸·Î È®¸³µÇ¸é, ¿©±â¼­ ¼³¸íÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇØ SQL ÀÇ Äõ¸®³ª Ä¿¸Çµå¸¦ ½ÇÇàÇÕ´Ï´Ù.

29.3.1. Main Functions

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À¸·Î »ç¿ëÇßÀ» °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù.

ÀÌ ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

conn

Á¢¼Ó ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. À̰ÍÀ» ÅëÇØ Ä¿¸Çµå¸¦ Àü¼ÛÇÕ´Ï´Ù.

command

½ÇÇàµÇ´Â SQL Ä¿¸Çµå ¹®ÀÚ¿­ÀÔ´Ï´Ù. ÆÄ¶ó¹ÌÅͰ¡ »ç¿ëµÇ´Â °æ¿ì´Â Ä¿¸Çµå ¹®ÀÚ¿­ ³»¿¡¼­$1, $2·Î¼­ ÂüÁ¶µË´Ï´Ù.

nParams

Á¦°øÇÏ´Â ÆÄ¶ó¹ÌÅÍ ¼ýÀÚÀÔ´Ï´Ù. À̰ÍÀº ¹è¿­paramTypes[], paramValues[], paramLengths[], paramFormats[]ÀÇ ±æÀÌÀÔ´Ï´Ù. (ÀÌ ¹è¿­ Æ÷ÀÎÅÍ´Â nParams°¡ 0ÀÏ °æ¿ì, NULL·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. )

paramTypes[]

ÆÄ¶ó¹ÌÅÍ ½Éº¼¿¡ ´ëÀԵǴ µ¥ÀÌÅÍÇüÀ» OID·Î ÁöÁ¤ÇÑ °ÍÀÔ´Ï´Ù. paramTypes°¡NULLÀ̳ª ƯÁ¤ÇÑ ¹è¿­ ¿ä¼Ò°¡ 0ÀÇ °æ¿ì, ¼­¹ö´Â ÇüÅ ÁöÁ¤ÀÌ ¾ø´Â ¸®ÅÍ·² ¹®ÀÚ¿­¿¡ ´ëÇØ¼­ ½Ç½ÃÇÏ´Â ÃßÁ¤ ¹æ¹ý°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇϰí, ÆÄ¶ó¹ÌÅÍ ½Éº¼ÀÇ µ¥ÀÌÅÍÇüÀ» ÃßÁ¤ÇÕ´Ï´Ù.

paramValues[]

ÆÄ¶ó¹ÌÅÍÀÇ ½ÇÁ¦ °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¹è¿­ ³»ÀÇ null Æ÷ÀÎÅÍ´Â ´ëÀÀÇÏ´Â ÆÄ¶ó¹ÌÅͰ¡ NULLÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¾Æ´Ï¸é, ÀÌ Æ÷ÀÎÅÍ´Â 0À¸·Î ³¡³ª´Â ÅØ½ºÆ® ¹®ÀÚ¿­(ÅØ½ºÆ® ¼­½Ä), ¶Ç´Â ¼­¹ö·Î ¿¹»óµÇ´Â ¼­½Ä¿¡ ÀÇÇÑ ¹ÙÀ̳ʸ® µ¥ÀÌÅÍ(¹ÙÀ̳ʸ® ¼­½Ä)¸¦ Áö½ÃÇÕ´Ï´Ù.

paramLengths[]

¹ÙÀ̳ʸ® ¼­½ÄÀÇ ½ÇÁ¦ µ¥ÀÌÅÍ ±æÀ̸¦ ÁöÁ¤ÇÕ´Ï´Ù. null ÆÄ¶ó¹ÌÅÍ ¹× ÅØ½ºÆ® ¼­½ÄÀÇ ÆÄ¶ó¹ÌÅÍ´Â ¹«½ÃµË´Ï´Ù. ¹ÙÀ̳ʸ® ÆÄ¶ó¹ÌÅͰ¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì, ÀÌ ¹è¿­ Æ÷ÀÎÅÍ´Â NULLÀ̶ó°í ÇØµµ ±¦Âú½À´Ï´Ù.

paramFormats[]

ÆÄ¶ó¹ÌÅͰ¡ ÅØ½ºÆ®(ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÀÀÇÏ´Â ¹è¿­ ¿ä¼Ò¿¡ 0À» ¼³Á¤)Àΰ¡, ¹ÙÀ̳ʸ®(ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÀÀÇÏ´Â ¹è¿­ ¿ä¼Ò¿¡ 1À» ¼³Á¤)ÀÎÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¹è¿­ Æ÷ÀÎÅͰ¡ nullÀÇ °æ¿ì, ¸ðµç ÆÄ¶ó¹ÌÅÍ´Â ÅØ½ºÆ® ¹®ÀÚ¿­À̶ó°í °¡Á¤µË´Ï´Ù.

resultFormat

°á°ú¸¦ ÅØ½ºÆ® ¼­½ÄÀ¸·Î ²¨³»°í ½ÍÀº °æ¿ì´Â 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´Â ÀÌÇÏÀÇ ¸î °³ÀÇ °ªÀ» ¹ÝȯÇÕ´Ï´Ù.

PGRES_EMPTY_QUERY

¼­¹ö¿¡ Àü¼ÛµÈ ¹®ÀÚ¿­ÀÌ ºñ¾ú½À´Ï´Ù.

PGRES_COMMAND_OK

¾Æ¹«·± µ¥ÀÌÅ͵µ ¸®ÅÏÇÏÁö ¾Ê´Â Ä¿¸Çµå°¡ Á¤»ó Á¾·áÇß½À´Ï´Ù.

PGRES_TUPLES_OK

µ¥ÀÌÅ͸¦ ¹ÝȯÇÏ´Â Ä¿¸Çµå(SELECT³ª SHOWµî)°¡ Á¤»ó Á¾·áÇß½À´Ï´Ù.

PGRES_COPY_OUT

(¼­¹ö·ÎºÎÅÍÀÇ) º¹»ç ¾Æ¿ô µ¥ÀÌÅÍ Àü¼ÛÀÌ ½ÃÀ۵Ǿú½À´Ï´Ù.

PGRES_COPY_IN

(¼­¹ö·ÎÀÇ) º¹»ç ÀÎ µ¥ÀÌÅÍ Àü¼ÛÀÌ ½ÃÀ۵Ǿú½À´Ï´Ù.

PGRES_BAD_RESPONSE

¼­¹öÀÇ ¹ÝÀÀÀ» ÀÌÇØÇÒ ¼ö ¾ø½À´Ï´Ù.

PGRES_NONFATAL_ERROR

Ä¡¸íÀûÀÌÁö ¾Ê´Â(ÁÖÀÇ È¯±â ȤÀº °æ°í) ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.

PGRES_FATAL_ERROR

Ä¡¸íÀûÀÎ ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.

°á°ú »óŰ¡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¿¡°Ô °Ç³×Á³À» ¶§ °³¹æµË´Ï´Ù.

ÀÌÇÏÀÇ Çʵå Äڵ带 »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

PG_DIAG_SEVERITY

½É°¢µµ. ÀÌ ÇʵåÀÇ ³»¿ëÀº(¿¡·¯ ¸Þ¼¼ÁöÀÇ °æ¿ì)ERROR, FATAL, ȤÀº PANIC, (ÁÖÀÇ È¯±â ¸Þ¼¼ÁöÀÇ °æ¿ì)WARNING, NOTICE, DEBUG, INFO, ȤÀº LOGÀÔ´Ï´Ù. À̰͵éÀº ´Ù¾ð¾îÈ­¿¡ ÀÇÇØ ¹ø¿ªµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. Ç×»ó Á¸ÀçÇÕ´Ï´Ù.

PG_DIAG_SQLSTATE

¿¡·¯ÀÇ SQLSTATE ÄÚµåÀÔ´Ï´Ù. SQLSTATE ÄÚµå´Â ¹ß»ýÇÑ ¿¡·¯ÀÇ Á¾·ù¸¦ ½Äº°ÇÕ´Ï´Ù. ÇÁ·ÐÆ®¿£µå ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ, ƯÁ¤ÇÑ µ¥ÀÌÅͺ£À̽º ¿¡·¯¿¡ ´ëÇØ¼­ ƯÁ¤ÇÑ Á¶ÀÛ(¿¡·¯ 󸮵î)À» ½Ç½ÃÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀϾ ¼ö ÀÖ´Â SQLSTATE ÄÚµåÀÇ ¸®½ºÆ®¿¡ ´ëÇØ¼­´Â Appendix AÀ» ÂüÁ¶ÇØ Áֽʽÿä. ÀÌ Çʵå´Â ´Ù¾ð¾îÈ­ µÇÁö ¾ÊÀ¸¸ç, Ç×»ó Á¸ÀçÇÕ´Ï´Ù.

PG_DIAG_MESSAGE_PRIMARY

ÁÖ·Î °¡µ¶¼ºÀ» ³ôÀÎ ¿¡·¯ ¸Þ¼¼ÁöÀÔ´Ï´Ù. (º¸ÅëÀº 1ÇàÀÔ´Ï´Ù. ) Ç×»ó Á¸ÀçÇÕ´Ï´Ù.

PG_DIAG_MESSAGE_DETAIL

¼¼ºÎ »çÇ×: ¹®Á¦¿¡ °üÇØ º¸´Ù ¼¼ºÎ »çÇ×À» ³ªÅ¸³»´Â º¸Á¶ÀûÀÎ ¿¡·¯ ¸Þ¼¼ÁöÀÔ´Ï´Ù. º¹¼öÇàÀ¸·Î ½ÇÇàµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

PG_DIAG_MESSAGE_HINT

ÈùÆ®: ¹®Á¦ÀÇ Ã³¸®Çϱâ À§ÇÑ ¼±ÅÃÀûÀÎ Á¦¾ÈÀÔ´Ï´Ù. ÀÌ´Â ¼¼ºÎ »çÇ×(detail)°ú´Â ´Þ¸®, ¹®Á¦ÀÇ »ç»óº¸´Ù´Â (ÀûÀýÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖÁö¸¸) Á¶¾ðÀ» Á¦°øÇÏ´Â °ÍÀ» ¸ñÀûÀ¸·Î Çϰí ÀÖ½À´Ï´Ù. º¹¼öÇàÀ¸·Î ½ÇÇàµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

PG_DIAG_STATEMENT_POSITION

¿ø·¡ÀÇ Äõ¸® ¹®ÀÚ¿­ÀÇ À妽º·Î¼­ ¿¡·¯°¡ ¹ß»ýÇÑ Ä¿¼­¸¦ ³ªÅ¸³»´Â 10ÁøÁ¤¼ö¸¦ °¡Áö´Â ¹®ÀÚ¿­ÀÔ´Ï´Ù. ¼±µÎ ¹®ÀÚ°¡ À妽º 1ÀÌ µÇ°í, ¹ÙÀÌÆ®°¡ ¾Æ´Ñ ¹®ÀÚ ¼ö·Î ÃøÁ¤µÈ À§Ä¡ÀÔ´Ï´Ù.

PG_DIAG_INTERNAL_POSITION

ÀÌ Á¤ÀÇ´Â PG_DIAG_STATEMENT_POSITIONÇʵå¿Í °°½À´Ï´Ù. ±×·¯³ª À̴ Ŭ¶óÀÌ¾ðÆ®°¡ ¹ßÇàÇÑ Ä¿¸Çµå´Â ¾Æ´Ï°í, Ä¿¼­ À§Ä¡°¡ ³»ºÎ »ý¼º Ä¿¸Çµå¸¦ ÂüÁ¶ÇÏ´Â °æ¿ì¿¡ »ç¿ëµË´Ï´Ù. ÀÌ Çʵ尡 Á¸ÀçÇÒ ¶§´Â Ç×»óPG_DIAG_INTERNAL_QUERYÇʵ尡 Á¸ÀçÇÕ´Ï´Ù.

PG_DIAG_INTERNAL_QUERY

½ÇÆÐÇÑ ³»ºÎ »ý¼º Ä¿¸ÇµåÀÇ ÅØ½ºÆ®ÀÔ´Ï´Ù. ÀÌ´Â ¿¹¸¦ µé¸é, PL/pgSQL ÇÔ¼ö·Î ¹ßÇàµÈ SQL Äõ¸®°¡ µË´Ï´Ù.

PG_DIAG_CONTEXT

¿¡·¯°¡ ¹ß»ýÇÑ ¹®¸ÆÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. ÇöÀç À̰ÍÀº Ȱµ¿ ÁßÀÇ ¼ö¼Ó ¾ð¾î ÇÔ¼ö³ª ³»ºÎ »ý¼º Äõ¸®ÀÇ È£Ãâ ½ºÅÃÀÇ ÃßÀû Á¤º¸¸¦ Æ÷ÇÔÇÕ´Ï´Ù. ÀÌ ÃßÀûÀº Çึ´Ù 1Ç׸ñÀ̸ç, ±× Â÷·Ê´Â ´ëºÎºÐ ÃÖ±Ù ÀÌ¿ëÇÑ °ÍÀÌ Ã³À½À¸·Î ¿É´Ï´Ù.

PG_DIAG_SOURCE_FILE

¿¡·¯°¡ º¸°íµÈ ¼Ò½º ÄÚµåÀÇ ÆÄÀϸíÀÔ´Ï´Ù.

PG_DIAG_SOURCE_LINE

¿¡·¯°¡ º¸°íµÈ ¼Ò½º ÄÚµåÀÇ Çà ¹øÈ£ÀÔ´Ï´Ù.

PG_DIAG_SOURCE_FUNCTION

¿¡·¯¸¦ º¸°íÇÑ, ¼Ò½º ÄÚµåÀÇ ÇÔ¼ö¸íÀÔ´Ï´Ù.

¿ä±¸¸¦ ÃæÁ·Çϴ ǥ½ÃµÈ Á¤º¸ÀÇ Çü½ÄÀº Ŭ¶óÀ̾ðÆ®ÀÇ Ã¥ÀÓÀÔ´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î Çʿ信 µû¶ó ±ä ÇàÀ» ºÐÇÒÇÕ´Ï´Ù. ¿¡·¯ ¸Þ¼¼Áö ÇÊµå ³» »õ·Î¿î Çà ¹®ÀÚ´Â »õ·Î¿î ÇàÀ¸·Î°¡ ¾Æ´Ñ ´Ü¶ôÀ¸·Î¼­ ³ª´¶ °ÍÀ¸·Î¼­ Ãë±ÞÇØ¾ß ÇÕ´Ï´Ù.

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¸¦ ÀÌ ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­ È£ÃâÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °Í¿¡ ÁÖÀÇÇϽʽÿä.

29.3.2. Äõ¸® °á°ú Á¤º¸¸¦ ²¨³¿

ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇϰí, Á¤»ó Á¾·áÇÑ Äõ¸® °á°ú¸¦ ³ªÅ¸³»´Â(Áï, 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 µ¿ÀÛÇÏ´Â °Í¿¡ ÁÖÀÇÇϽʽÿä.

29.3.3. ´Ù¸¥ Ä¿¸Çµå¿ëÀÇ °á°ú Á¤º¸ÀÇ È¹µæ

ÀÌ·¯ÇÑ ÇÔ¼ö´Â 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 ¼¼ÀÌÇÁ°¡ ¾Æ´Õ´Ï´Ù.

29.3.4. SQL Ä¿¸Çµå¿¡ Æ÷ÇÔÇϱâ À§ÇÑ ¹®ÀÚ¿­ÀÇ À̽ºÄÉÀÌÇÁ ó¸®

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¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ¸·Î ÇÇÇØ¾ß ÇÕ´Ï´Ù.

29.3.5. SQL Ä¿¸Çµå¿¡ Æ÷ÇÔÇϱâ À§ÇÑ ¹ÙÀ̳ʸ® ¹®ÀÚ¿­ÀÇ À̽ºÄÉÀÌÇÁ ó¸®

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()Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö¿Í µ¿ÀÏÇÕ´Ï´Ù.