33.12. »ç¿ëÀÚ Á¤ÀÇ ¿¬»êÀÚ

¿¬»êÀÚ´Â, ½ÇÁ¦ÀÇ ÀÛ¾÷À» ½Ç½ÃÇÏ´Â ±âº» ÇÔ¼ö¸¦ È£ÃâÇÏ´Â "±¸¹®»óÀÇ Àå½Ä"ÀÔ´Ï´Ù. ±×·¯´Ï±î, ¿¬»êÀÚ¸¦ ÀÛ¼ºÇϱâ Àü¿¡ ¿ì¼± ÀÌ ±âº» ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¯³ª, ¿¬»êÀÚ´Â ´Ü¼øÇÑ ±¸¹®»óÀÇ Àå½ÄÀÌ ¾Æ´Õ´Ï´Ù . Äõ¸® Ç÷¡³Ê¿¡°¡ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â Äõ¸®ÀÇ ÃÖÀûÈ­ÇÏ´Â °ÍÀ» µµ¿ÍÁÖ´Â, Ãß°¡ Á¤º¸¸¦ ±³È¯Çϱ⠶§¹®ÀÔ´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼­´Â, ÀÌ Ãß°¡ Á¤º¸¿¡ ´ëÇØ ÁßÁ¡ÀûÀ¸·Î ¼³¸íÇÕ´Ï´Ù.

PostgreSQL¿¡¼­´Â ¿ÞÂÊ ´ÜÇ× ¿¬»êÀÚ, ¿À¸¥ÂÊ ´ÜÇ× ¿¬»êÀÚ, 2Ç׿¬»êÀÚ¸¦ Áö¿øÇϰí ÀÖ½À´Ï´Ù. ¿¬»êÀÚ°¡ °úºÎÇ쵃 ¼ö ÀÖ½À´Ï´Ù. Áï, °°Àº ¿¬»êÀÚ¸íÀ» ¼ö¿Í ¿ÀÆÛ·£µåÀÇ ÇüŰ¡ ´Ù¸¥ ¿¬»êÀÚ¿¡ ´ëÇØ¼­ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Äõ¸®°¡ ½ÇÇàµÇ¸é, ½Ã½ºÅÛÀº ÁÖ¾îÁø ¿ÀÆÛ·£µåÀÇ ¼ö¿Í ÇüÅ·ΠȣÃâ ÇÒ ¿¬»êÀÚ¸¦ °áÁ¤ÇÕ´Ï´Ù.

ÀÌÇÏ¿¡ 2°³ÀÇ º¹¼Ò¼öÀÇ °¡»êÀ» ½Ç½ÃÇÏ´Â ¿¬»êÀÚ¸¦ ÀÛ¼ºÇÏ´Â ¿¹¸¦ ³ªÅ¸³À´Ï´Ù. ÀÌ¹Ì complexÇüÀÇ Á¤ÀÇ(Section 33.11¸¦ ÂüÁ¶)¸¦ ÀÛ¼ºÇÑ °ÍÀ» ÀüÁ¦·Î Çϰí ÀÖ½À´Ï´Ù. ¿ì¼±, ÀÛ¾÷À» ½ÇÇàÇÒ ÇÔ¼ö°¡ ÇÊ¿äÇÕ´Ï´Ù. ±× ÈÄ, ¿¬»êÀÚ¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.

CREATE FUNCTION complex_add(complex, complex)
    RETURNS complex
    AS '
filename
', 'complex_add'
    LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR + (
    leftarg = complex,
    rightarg = complex,
    procedure = complex_add,
    commutator = +
);

À̰ÍÀ¸·Î ÀÌÇÏ¿Í °°Àº Äõ¸®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

SELECT (a + b) AS c FROM test_complex;

        c
-----------------
 (5.2,6.05)
 (133.42,144.95)

¿©±â¿¡¼­´Â 2Ç׿¬»êÀÚ¸¦ ¾î¶»°Ô ÀÛ¼ºÇÏ´ÂÁö¸¦ ³ªÅ¸³Â½À´Ï´Ù. ´ÜÇ× ¿¬»êÀÚ¸¦ ÀÛ¼ºÇÏ·Á¸é, ´ÜÁö leftarg(¿ÞÂÊ ´ÜÇ×ÀÇ °æ¿ì) ȤÀº rightarg(¿ìÃø ´ÜÇ×ÀÇ °æ¿ì)¸¦ »ý·« ÇÒ »ÓÀÔ´Ï´Ù. procedure±¸¿Í Àμö¿ëÀÇ ±¸¸¸ÀÌ CREATE OPERATOR¿¡¼­ÀÇ Çʼö Ç׸ñÀÔ´Ï´Ù. ¿¹·Î °¡¸®Å² commutator±¸´Â »ý·« °¡´ÉÇØ, Äõ¸® ÃÖÀûÈ­ÀÇ ÈùÆ®°¡ µË´Ï´Ù. commutator³ª ±× ¿ÜÀÇ ÃÖÀûÈ­ÀÇ ÈùÆ®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ °ÍÀº ´ÙÀ½ ¼½¼Ç¿¡¼­ ¼³¸íÇÕ´Ï´Ù.