Author: Marc Munro Copyright (c) 2005 - 2011 Marc Munro License: BSD
Definition in file veil_query.c.
#include <stdio.h>
#include "postgres.h"
#include "catalog/pg_type.h"
#include "executor/spi.h"
#include "veil_version.h"
#include "access/xact.h"
#include "veil_funcs.h"
Go to the source code of this file.
Defines | |
#define | FETCH_SIZE 20 |
The number of records to fetch in one go from the query executor. | |
Typedefs | |
typedef bool( | Fetch_fn )(HeapTuple, TupleDesc, void *) |
A Fetch_fn is a function that processes records, one at a time, returned from a query. | |
Functions | |
int | vl_spi_connect (bool *p_pushed) |
If already connected in this session, push the current connection, and get a new one. | |
int | vl_spi_finish (bool pushed) |
Reciprocal function for vl_spi_connect(). | |
static void | prepare_query (const char *qry, int nargs, Oid *argtypes, Datum *args, bool read_only, void **saved_plan) |
Prepare a query for query(). | |
static int | query (const char *qry, int nargs, Oid *argtypes, Datum *args, bool read_only, void **saved_plan, Fetch_fn process_row, void *fn_param) |
Prepare and execute a query. | |
static bool | fetch_one_bool (HeapTuple tuple, TupleDesc tupdesc, void *p_result) |
Fetch_fn function for processing a single row of a single integer for query. | |
static bool | fetch_one_str (HeapTuple tuple, TupleDesc tupdesc, void *p_result) |
Fetch_fn function for processing a single row of a single integer for query. | |
bool | vl_bool_from_query (const char *qry, bool *result) |
Executes a query that returns a single bool value. | |
static bool | str_from_oid_query (const char *qry, const Oid param, char *result) |
Executes a query by oid, that returns a single string value. | |
bool | vl_db_exists (Oid db_id) |
Determine whether the given oid represents an existing database or not. | |
static bool | exec_init_fn (HeapTuple tuple, TupleDesc tupdesc, void *p_param) |
Fetch_fn function for executing registered veil_init() functions for query. | |
int | vl_call_init_fns (bool param) |
Identify any registered init_functions and execute them. |
int vl_spi_connect | ( | bool * | p_pushed | ) |
If already connected in this session, push the current connection, and get a new one.
We are already connected, if:
Definition at line 46 of file veil_query.c.
Referenced by ensure_init(), and veil_init().
static void prepare_query | ( | const char * | qry, | |
int | nargs, | |||
Oid * | argtypes, | |||
Datum * | args, | |||
bool | read_only, | |||
void ** | saved_plan | |||
) | [static] |
Prepare a query for query().
This creates and executes a plan. The caller must have established SPI_connect. It is assumed that no parameters to the query will be null.
qry | The text of the SQL query to be performed. | |
nargs | The number of input parameters ($1, $2, etc) to the query | |
argtypes | Pointer to an array containing the OIDs of the data | |
args | Actual parameters types of the parameters | |
read_only | Whether the query should be read-only or not | |
saved_plan | Adress of void pointer into which the query plan will be saved. Passing the same void pointer on a subsequent call will cause the saved query plan to be re-used. |
Definition at line 86 of file veil_query.c.
Referenced by query().
static int query | ( | const char * | qry, | |
int | nargs, | |||
Oid * | argtypes, | |||
Datum * | args, | |||
bool | read_only, | |||
void ** | saved_plan, | |||
Fetch_fn | process_row, | |||
void * | fn_param | |||
) | [static] |
Prepare and execute a query.
Query execution consists of a call to process_row for each returned record. Process_row can return a single value to the caller of this function through the fn_param parameter. It is the caller's responsibility to establish an SPI connection with SPI_connect. It is assumed that no parameters to the query, and no results will be null.
qry | The text of the SQL query to be performed. | |
nargs | The number of input parameters ($1, $2, etc) to the query | |
argtypes | Pointer to an array containing the OIDs of the data | |
args | Actual parameters types of the parameters | |
read_only | Whether the query should be read-only or not | |
saved_plan | Adress of void pointer into which the query plan will be saved. Passing the same void pointer on a subsequent call will cause the saved query plan to be re-used. | |
process_row | The Fetch_fn function to be called for each fetched row to process it. If this is null, we simply count the row, doing no processing on the tuples returned. | |
fn_param | An optional parameter to the process_row function. This may be used to return a value to the caller. |
Definition at line 153 of file veil_query.c.
References prepare_query().
Referenced by str_from_oid_query(), and vl_bool_from_query().
static bool fetch_one_bool | ( | HeapTuple | tuple, | |
TupleDesc | tupdesc, | |||
void * | p_result | |||
) | [static] |
Fetch_fn function for processing a single row of a single integer for query.
tuple | The row to be processed | |
tupdesc | Descriptor for the types of the fields in the tuple. | |
p_result | Pointer to an int4 variable into which the value returned from the query will be placed. |
Definition at line 196 of file veil_query.c.
Referenced by vl_bool_from_query().
static bool fetch_one_str | ( | HeapTuple | tuple, | |
TupleDesc | tupdesc, | |||
void * | p_result | |||
) | [static] |
Fetch_fn function for processing a single row of a single integer for query.
tuple | The row to be processed | |
tupdesc | Descriptor for the types of the fields in the tuple. | |
p_result | Pointer to an int4 variable into which the value returned from the query will be placed. |
Definition at line 216 of file veil_query.c.
Referenced by str_from_oid_query().
bool vl_bool_from_query | ( | const char * | qry, | |
bool * | result | |||
) |
Executes a query that returns a single bool value.
qry | The text of the query to be performed. | |
result | Variable into which the result of the query will be placed. |
Definition at line 234 of file veil_query.c.
References fetch_one_bool(), and query().
Referenced by ensure_init(), and veil_init().
static bool str_from_oid_query | ( | const char * | qry, | |
const Oid | param, | |||
char * | result | |||
) | [static] |
Executes a query by oid, that returns a single string value.
qry | The text of the query to be performed. | |
param | The oid of the row to be fetched. | |
result | Variable into which the result of the query will be placed. |
Definition at line 255 of file veil_query.c.
References fetch_one_str(), and query().
bool vl_db_exists | ( | Oid | db_id | ) |
Determine whether the given oid represents an existing database or not.
db_id | Oid of the database in which we are interested. |
Definition at line 277 of file veil_query.c.
Referenced by get_shmem_context().
static bool exec_init_fn | ( | HeapTuple | tuple, | |
TupleDesc | tupdesc, | |||
void * | p_param | |||
) | [static] |
Fetch_fn function for executing registered veil_init() functions for query.
tuple | The row to be processed | |
tupdesc | Descriptor for the types of the fields in the tuple. | |
p_param | Pointer to a boolean value which is the value of the argument to the init function being called. |
Definition at line 296 of file veil_query.c.
int vl_call_init_fns | ( | bool | param | ) |
Identify any registered init_functions and execute them.
param | The boolean parameter to be passed to each init_function. |
Definition at line 341 of file veil_query.c.
Referenced by veil_int4array_get().