Thread: create function pl/pgsql c langauge

create function pl/pgsql c langauge

From
Muhammad Shariq Muzaffar
Date:
hi
I have created a function in pl/pgsql for xid data
type

CREATE FUNCTION xid_neq(xid, xid) RETURNS bool AS
'BEGIN
IF $2 IS NULL THEN
return ''f'';
ELSE
  IF $1 IS NULL THEN
    return ''f'';
  ELSE return float4in(xidout($1)) <>
float4in(xidout($2));
  END IF;
END IF;
END'  LANGUAGE 'plpgsql' IMMUTABLE;

with the operator <>

CREATE OPERATOR public.<> (
PROCEDURE = xid_neq,
LEFTARG = xid,
RIGHTARG = xid,
COMMUTATOR ='<>',
NEGATOR ='=',
RESTRICT = neqsel,
JOIN = neqjoinsel);

Now, to implement above code I need Pl/PgSql installed
on the database. To solve this problem i need to
create this function in C language. As I am novice to
linux and pgsql, i have tried my best to implement the
above code in c language but unable to do so.
According to the online help i got, i think i have to
write the code in a file outside pgsql and then i have
to compile it through gcc. Also i think i need
postgres.h to complete the opeartion which is
available only in the distribution code.

The code i come up with for c langauage is

bool xid_neq(xid arg1,xid arg2)
{
    if(arg1 isnull){
        return (false);
    }
    else
        if(arg2 isnull){
            return(false);
        }
        else
            return (arg1 != arg2);
}

How am i supoose to create the function now. I think i
am very much confused in this new environment.

please help...

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

Re: create function pl/pgsql c langauge

From
Renê Salomão
Date:
Muhammad,

 If I understood correctly you need create the language Pl/PgSql... why
dont you just check for CREATELANG...

Ex: prompt># createlang pgplsql database


On Wed, 12 Mar 2003 14:38:44 +0000
(GMT) Muhammad Shariq Muzaffar <shariq77@yahoo.com> wrote:

> hi
> I have created a function in pl/pgsql for xid data
> type
>
> CREATE FUNCTION xid_neq(xid, xid) RETURNS bool AS
> 'BEGIN
> IF $2 IS NULL THEN
> return ''f'';
> ELSE
>   IF $1 IS NULL THEN
>     return ''f'';
>   ELSE return float4in(xidout($1)) <>
> float4in(xidout($2));
>   END IF;
> END IF;
> END'  LANGUAGE 'plpgsql' IMMUTABLE;
>
> with the operator <>
>
> CREATE OPERATOR public.<> (
> PROCEDURE = xid_neq,
> LEFTARG = xid,
> RIGHTARG = xid,
> COMMUTATOR ='<>',
> NEGATOR ='=',
> RESTRICT = neqsel,
> JOIN = neqjoinsel);
>
> Now, to implement above code I need Pl/PgSql installed
> on the database. To solve this problem i need to
> create this function in C language. As I am novice to
> linux and pgsql, i have tried my best to implement the
> above code in c language but unable to do so.
> According to the online help i got, i think i have to
> write the code in a file outside pgsql and then i have
> to compile it through gcc. Also i think i need
> postgres.h to complete the opeartion which is
> available only in the distribution code.
>
> The code i come up with for c langauage is
>
> bool xid_neq(xid arg1,xid arg2)
> {
>     if(arg1 isnull){
>         return (false);
>     }
>     else
>         if(arg2 isnull){
>             return(false);
>         }
>         else
>             return (arg1 != arg2);
> }
>
> How am i supoose to create the function now. I think i
> am very much confused in this new environment.
>
> please help...
>
> __________________________________________________
> Do You Yahoo!?
> Everything you'll ever need on one web page
> from News and Sport to Email and Music Charts
> http://uk.my.yahoo.com
>
> ---------------------------(end of
> broadcast)--------------------------- TIP 5: Have you checked our
> extensive FAQ?
>
> http://www.postgresql.org/docs/faqs/FAQ.html
>


-----------------------------
Renê Salomão
Ibiz Tecnologia -- www.ibiz.com.br
(011) 5579-3178 - R. 211

Re: create function pl/pgsql c langauge

From
Muhammad Shariq Muzaffar
Date:
Well actually i have already install Pl/PgSql and i
have succesfully implement the code using this
language. Pl/PgSql does not install by defualt on any
database especially when i try to dump and restore the
database to some other server. To solve this problem i
need to implement it in C langauge so that the code of
operator and function restore itself without any
problem. and i dont know how to implement it in C
langauge on Linux.



 --- Renê_Salomão <rene@ibiz.com.br> wrote: >
Muhammad,
>
>  If I understood correctly you need create the
> language Pl/PgSql... why
> dont you just check for CREATELANG...
>
> Ex: prompt># createlang pgplsql database
>
>
> On Wed, 12 Mar 2003 14:38:44 +0000
> (GMT) Muhammad Shariq Muzaffar <shariq77@yahoo.com>
> wrote:
>
> > hi
> > I have created a function in pl/pgsql for xid data
> > type
> >
> > CREATE FUNCTION xid_neq(xid, xid) RETURNS bool AS
> > 'BEGIN
> > IF $2 IS NULL THEN
> > return ''f'';
> > ELSE
> >   IF $1 IS NULL THEN
> >     return ''f'';
> >   ELSE return float4in(xidout($1)) <>
> > float4in(xidout($2));
> >   END IF;
> > END IF;
> > END'  LANGUAGE 'plpgsql' IMMUTABLE;
> >
> > with the operator <>
> >
> > CREATE OPERATOR public.<> (
> > PROCEDURE = xid_neq,
> > LEFTARG = xid,
> > RIGHTARG = xid,
> > COMMUTATOR ='<>',
> > NEGATOR ='=',
> > RESTRICT = neqsel,
> > JOIN = neqjoinsel);
> >
> > Now, to implement above code I need Pl/PgSql
> installed
> > on the database. To solve this problem i need to
> > create this function in C language. As I am novice
> to
> > linux and pgsql, i have tried my best to implement
> the
> > above code in c language but unable to do so.
> > According to the online help i got, i think i have
> to
> > write the code in a file outside pgsql and then i
> have
> > to compile it through gcc. Also i think i need
> > postgres.h to complete the opeartion which is
> > available only in the distribution code.
> >
> > The code i come up with for c langauage is
> >
> > bool xid_neq(xid arg1,xid arg2)
> > {
> >     if(arg1 isnull){
> >         return (false);
> >     }
> >     else
> >         if(arg2 isnull){
> >             return(false);
> >         }
> >         else
> >             return (arg1 != arg2);
> > }
> >
> > How am i supoose to create the function now. I
> think i
> > am very much confused in this new environment.
> >
> > please help...
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Everything you'll ever need on one web page
> > from News and Sport to Email and Music Charts
> > http://uk.my.yahoo.com
> >
> > ---------------------------(end of
> > broadcast)--------------------------- TIP 5: Have
> you checked our
> > extensive FAQ?
> >
> > http://www.postgresql.org/docs/faqs/FAQ.html
> >
>
>
> -----------------------------
> Renê Salomão
> Ibiz Tecnologia -- www.ibiz.com.br
> (011) 5579-3178 - R. 211

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com