Consistently use "superuser" instead of "super user"
[pgsql.git] / src / pl / plperl / SPI.xs
blobb2db3bd6949c86bd093afb044c8cf31f8acffcff
1 /**********************************************************************
2  * PostgreSQL::InServer::SPI
3  *
4  * SPI interface for plperl.
5  *
6  *    src/pl/plperl/SPI.xs
7  *
8  **********************************************************************/
10 /* this must be first: */
11 #include "postgres.h"
13 /* perl stuff */
14 #define PG_NEED_PERL_XSUB_H
15 #include "plperl.h"
16 #include "plperl_helpers.h"
19 MODULE = PostgreSQL::InServer::SPI PREFIX = spi_
21 PROTOTYPES: ENABLE
22 VERSIONCHECK: DISABLE
24 SV*
25 spi_spi_exec_query(sv, ...)
26         SV* sv;
27         PREINIT:
28                 HV *ret_hash;
29                 int limit = 0;
30                 char *query;
31         CODE:
32                 if (items > 2)
33                         croak("Usage: spi_exec_query(query, limit) "
34                                   "or spi_exec_query(query)");
35                 if (items == 2)
36                         limit = SvIV(ST(1));
37                 query = sv2cstr(sv);
38                 ret_hash = plperl_spi_exec(query, limit);
39                 pfree(query);
40                 RETVAL = newRV_noinc((SV*) ret_hash);
41         OUTPUT:
42                 RETVAL
44 void
45 spi_return_next(rv)
46         SV *rv;
47         CODE:
48                 plperl_return_next(rv);
50 SV *
51 spi_spi_query(sv)
52         SV *sv;
53         CODE:
54                 char* query = sv2cstr(sv);
55                 RETVAL = plperl_spi_query(query);
56                 pfree(query);
57         OUTPUT:
58                 RETVAL
60 SV *
61 spi_spi_fetchrow(sv)
62         SV* sv;
63         CODE:
64                 char* cursor = sv2cstr(sv);
65                 RETVAL = plperl_spi_fetchrow(cursor);
66                 pfree(cursor);
67         OUTPUT:
68                 RETVAL
70 SV*
71 spi_spi_prepare(sv, ...)
72         SV* sv;
73         CODE:
74                 int i;
75                 SV** argv;
76                 char* query = sv2cstr(sv);
77                 if (items < 1)
78                         Perl_croak(aTHX_ "Usage: spi_prepare(query, ...)");
79                 argv = ( SV**) palloc(( items - 1) * sizeof(SV*));
80                 for ( i = 1; i < items; i++)
81                         argv[i - 1] = ST(i);
82                 RETVAL = plperl_spi_prepare(query, items - 1, argv);
83                 pfree( argv);
84                 pfree(query);
85         OUTPUT:
86                 RETVAL
88 SV*
89 spi_spi_exec_prepared(sv, ...)
90         SV* sv;
91         PREINIT:
92                 HV *ret_hash;
93         CODE:
94                 HV *attr = NULL;
95                 int i, offset = 1, argc;
96                 SV ** argv;
97                 char *query = sv2cstr(sv);
98                 if ( items < 1)
99                         Perl_croak(aTHX_ "Usage: spi_exec_prepared(query, [\\%%attr,] "
100                                            "[\\@bind_values])");
101                 if ( items > 1 && SvROK( ST( 1)) && SvTYPE( SvRV( ST( 1))) == SVt_PVHV)
102                 {
103                         attr = ( HV*) SvRV(ST(1));
104                         offset++;
105                 }
106                 argc = items - offset;
107                 argv = ( SV**) palloc( argc * sizeof(SV*));
108                 for ( i = 0; offset < items; offset++, i++)
109                         argv[i] = ST(offset);
110                 ret_hash = plperl_spi_exec_prepared(query, attr, argc, argv);
111                 RETVAL = newRV_noinc((SV*)ret_hash);
112                 pfree( argv);
113                 pfree(query);
114         OUTPUT:
115                 RETVAL
118 spi_spi_query_prepared(sv, ...)
119         SV * sv;
120         CODE:
121                 int i;
122                 SV ** argv;
123                 char *query = sv2cstr(sv);
124                 if ( items < 1)
125                         Perl_croak(aTHX_ "Usage: spi_query_prepared(query, "
126                                            "[\\@bind_values])");
127                 argv = ( SV**) palloc(( items - 1) * sizeof(SV*));
128                 for ( i = 1; i < items; i++)
129                         argv[i - 1] = ST(i);
130                 RETVAL = plperl_spi_query_prepared(query, items - 1, argv);
131                 pfree( argv);
132                 pfree(query);
133         OUTPUT:
134                 RETVAL
136 void
137 spi_spi_freeplan(sv)
138         SV *sv;
139         CODE:
140                 char *query = sv2cstr(sv);
141                 plperl_spi_freeplan(query);
142                 pfree(query);
144 void
145 spi_spi_cursor_close(sv)
146         SV *sv;
147         CODE:
148                 char *cursor = sv2cstr(sv);
149                 plperl_spi_cursor_close(cursor);
150                 pfree(cursor);
152 void
153 spi_spi_commit()
154         CODE:
155                 plperl_spi_commit();
157 void
158 spi_spi_rollback()
159         CODE:
160                 plperl_spi_rollback();
162 BOOT:
163     items = 0;  /* avoid 'unused variable' warning */