Add pgut-spi files.
This commit is contained in:
parent
5ee824097e
commit
2f2fa142b8
109
lib/pgut/pgut-spi.c
Executable file
109
lib/pgut/pgut-spi.c
Executable file
@ -0,0 +1,109 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* pgut-spi.c
|
||||
*
|
||||
* Copyright (c) 2009, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "postgres.h"
|
||||
#include "pgut-spi.h"
|
||||
|
||||
static void
|
||||
termStringInfo(StringInfo str)
|
||||
{
|
||||
if (str && str->data)
|
||||
pfree(str->data);
|
||||
}
|
||||
|
||||
/* simple execute */
|
||||
void
|
||||
execute(int expected, const char *sql)
|
||||
{
|
||||
int ret = SPI_execute(sql, false, 0);
|
||||
if ((expected > 0 && ret != expected) || ret < 0)
|
||||
elog(ERROR, "query failed: (sql=%s, code=%d, expected=%d)", sql, ret, expected);
|
||||
}
|
||||
|
||||
/* execute prepared plan */
|
||||
void
|
||||
execute_plan(int expected, SPIPlanPtr plan, Datum *values, const char *nulls)
|
||||
{
|
||||
int ret = SPI_execute_plan(plan, values, nulls, false, 0);
|
||||
if ((expected > 0 && ret != expected) || ret < 0)
|
||||
elog(ERROR, "query failed: (code=%d, expected=%d)", ret, expected);
|
||||
}
|
||||
|
||||
/* execute sql with format */
|
||||
void
|
||||
execute_with_format(int expected, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
StringInfoData sql;
|
||||
int ret;
|
||||
|
||||
initStringInfo(&sql);
|
||||
va_start(ap, format);
|
||||
appendStringInfoVA(&sql, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
ret = SPI_exec(sql.data, 0);
|
||||
if ((expected > 0 && ret != expected) || ret < 0)
|
||||
elog(ERROR, "query failed: (sql=%s, code=%d, expected=%d)", sql.data, ret, expected);
|
||||
|
||||
termStringInfo(&sql);
|
||||
}
|
||||
|
||||
void
|
||||
execute_with_args(int expected, const char *src, int nargs, Oid argtypes[], Datum values[], const bool nulls[])
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
char c_nulls[FUNC_MAX_ARGS];
|
||||
|
||||
for (i = 0; i < nargs; i++)
|
||||
c_nulls[i] = (nulls[i] ? 'n' : ' ');
|
||||
|
||||
ret = SPI_execute_with_args(src, nargs, argtypes, values, c_nulls, false, 0);
|
||||
if ((expected > 0 && ret != expected) || ret < 0)
|
||||
elog(ERROR, "query failed: (sql=%s, code=%d, expected=%d)", src, ret, expected);
|
||||
}
|
||||
|
||||
void
|
||||
execute_with_format_args(int expected, const char *format, int nargs, Oid argtypes[], Datum values[], const bool nulls[], ...)
|
||||
{
|
||||
va_list ap;
|
||||
StringInfoData sql;
|
||||
|
||||
initStringInfo(&sql);
|
||||
va_start(ap, nulls);
|
||||
appendStringInfoVA(&sql, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
execute_with_args(expected, sql.data, nargs, argtypes, values, nulls);
|
||||
|
||||
termStringInfo(&sql);
|
||||
}
|
||||
|
||||
|
||||
#if PG_VERSION_NUM < 80400
|
||||
|
||||
int
|
||||
SPI_execute_with_args(const char *src,
|
||||
int nargs, Oid *argtypes,
|
||||
Datum *values, const char *nulls,
|
||||
bool read_only, long tcount)
|
||||
{
|
||||
SPIPlanPtr plan;
|
||||
int ret;
|
||||
|
||||
plan = SPI_prepare(src, nargs, argtypes);
|
||||
if (plan == NULL)
|
||||
return SPI_result;
|
||||
ret = SPI_execute_plan(plan, values, nulls, read_only, tcount);
|
||||
SPI_freeplan(plan);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
30
lib/pgut/pgut-spi.h
Executable file
30
lib/pgut/pgut-spi.h
Executable file
@ -0,0 +1,30 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* pgut-spi.h
|
||||
*
|
||||
* Copyright (c) 2009, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef PGUT_SPI_H
|
||||
#define PGUT_SPI_H
|
||||
|
||||
#include "executor/spi.h"
|
||||
|
||||
extern void execute(int expected, const char *sql);
|
||||
extern void execute_plan(int expected, SPIPlanPtr plan, Datum *values, const char *nulls);
|
||||
extern void execute_with_format(int expected, const char *format, ...)
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
extern void execute_with_args(int expected, const char *src, int nargs, Oid argtypes[], Datum values[], const bool nulls[]);
|
||||
extern void execute_with_format_args(int expected, const char *format, int nargs, Oid argtypes[], Datum values[], const bool nulls[], ...)
|
||||
__attribute__((format(printf, 2, 7)));
|
||||
|
||||
#if PG_VERSION_NUM < 80400
|
||||
|
||||
extern int SPI_execute_with_args(const char *src, int nargs, Oid *argtypes,
|
||||
Datum *values, const char *nulls, bool read_only, long tcount);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* PGUT_SPI_H */
|
Loading…
x
Reference in New Issue
Block a user