+ args[i] = (void *) va_arg(ap, char *);
+ }
+ va_end(ap);
+
+ /* Lookup source and result types. Unneeded variables are reused. */
+ system_cache_lookup(type, false, &inp_typlen, &inp_typbyval,
+ &typdelim, &typelem, &proc, &typalign);
+ system_cache_lookup(retType, false, &typlen, &typbyval,
+ &typdelim, &typelem, &proc, &typalign);
+
+ /* Allocate temporary array for new values */
+ ndim = ARR_NDIM(v);
+ dim = ARR_DIMS(v);
+ nitems = getNitems(ndim, dim);
+ values = (char **) palloc(nitems * sizeof(char *));
+ MemSet(values, 0, nitems * sizeof(char *));
+
+ /* Loop over source data */
+ s = (char *) ARR_DATA_PTR(v);
+ for (i=0; i
+ /* Get source element */
+ if (inp_typbyval) {
+ switch (inp_typlen) {
+ case 1:
+ elt = (char *) ((int) (*(char *) s));
+ break;
+ case 2:
+ elt = (char *) ((int) (*(int16 *) s));
+ break;
+ case 3:
+ case 4:
+ default:
+ elt = (char *) (*(int32 *) s);
+ break;
+ }
+ s += inp_typlen;
+ } else {
+ elt = s;
+ if (inp_typlen > 0) {
+ s += inp_typlen;
+ } else {
+ s += INTALIGN(*(int32 *) s);
+ }
+ }
+
+ /*
+ * Apply the given function to source elt and extra args.
+ * nargs is the number of extra args taken by fn().
+ */
+ switch (nargs) {
+ case 0:
+ p = (char *) (*fn) (elt);
+ break;
+ case 1:
+ p = (char *) (*fn) (elt, args[0]);
+ break;
+ case 2:
+ p = (char *) (*fn) (elt, args[0], args[1]);
+ break;
+ case 3:
+ p = (char *) (*fn) (elt, args[0], args[1], args[2]);
+ break;
+ case 4:
+ default:
+ p = (char *) (*fn) (elt, args[0], args[1], args[2], args[3]);
+ break;
+ }
+
+ /* Update values and total result size */
+ if (typbyval) {
+ values[i] = (char *) p;
+ nbytes += typlen;
+ } else {
+ int len;
+ len = ((typlen > 0) ? typlen : INTALIGN(*(int32 *) p));
+ /* Needed because _CopyArrayEls tries to pfree items */
+ if (p == elt) {
+ p = (char *) palloc(len);
+ memcpy(p, elt, len);
+ }
+ values[i] = (char *) p;
+ nbytes += len;
+ }
+ }
+
+ /* Allocate and initialize the result array */
+ nbytes += ARR_OVERHEAD(ndim);
+ result = (ArrayType *) palloc(nbytes);
+ MemSet(result, 0, nbytes);
+
+ memcpy((char *) result, (char *) &nbytes, sizeof(int));
+ memcpy((char *) ARR_NDIM_PTR(result), (char *) &ndim, sizeof(int));
+ memcpy((char *) ARR_DIMS(result), ARR_DIMS(v), 2 * ndim * sizeof(int));
+
+ /* Copy new values into the result array. values is pfreed. */
+ _CopyArrayEls((char **) values,
+ ARR_DATA_PTR(result), nitems,
+ typlen, typalign, typbyval);
+
+ return result;
+}
+
/*-----------------------------------------------------------------------------
* array_eq :
* compares two arrays for equality
* out of it's tuple
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.9 1999/04/29 15:52:01 wieck Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.10 1999/05/03 19:10:01 momjian Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
#include "catalog/pg_opclass.h"
#include "fmgr.h"
+#define BUFSIZE 8192
/* ----------
* Local data types
int spirc;
int len;
int keyno;
- char buf[8192];
- char keybuf[8192];
+ char buf[BUFSIZE];
+ char keybuf[BUFSIZE];
char *sep;
/* ----------
* Allocate space for the returned rule definition text
* ----------
*/
- buf = palloc(8192);
+ buf = palloc(BUFSIZE);
/* ----------
* Get the attribute values from the rules tuple
static char *
make_viewdef(HeapTuple ruletup, TupleDesc rulettc)
{
- char buf[8192];
+ char buf[BUFSIZE];
Query *query;
char ev_type;
Oid ev_class;
static char *
get_select_query_def(Query *query, QryHier *qh)
{
- char buf[8192];
+ char buf[BUFSIZE];
char *sep;
TargetEntry *tle;
RangeTblEntry *rte;
static char *
get_insert_query_def(Query *query, QryHier *qh)
{
- char buf[8192];
+ char buf[BUFSIZE];
char *sep;
TargetEntry *tle;
RangeTblEntry *rte;
static char *
get_update_query_def(Query *query, QryHier *qh)
{
- char buf[8192];
+ char buf[BUFSIZE];
char *sep;
TargetEntry *tle;
RangeTblEntry *rte;
static char *
get_delete_query_def(Query *query, QryHier *qh)
{
- char buf[8192];
+ char buf[BUFSIZE];
RangeTblEntry *rte;
/* ----------
static char *
get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
{
- char buf[8192];
+ char buf[BUFSIZE];
if (node == NULL)
return pstrdup("");
static char *
get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix)
{
- char buf[8192];
+ char buf[BUFSIZE];
HeapTuple proctup;
Form_pg_proc procStruct;
List *l;
FmgrInfo finfo_output;
char *extval;
bool isnull = FALSE;
- char buf[8192];
+ char buf[BUFSIZE];
char namebuf[64];
if (constval->constisnull)
Expr *expr;
List *l;
char *sep;
- char buf[8192];
+ char buf[BUFSIZE];
buf[0] = '\0';
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.43 1999/02/13 23:19:35 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.44 1999/05/03 19:10:02 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include /* for sprintf() */
#include
#include "postgres.h"
+#include "utils/array.h"
#include "utils/builtins.h"
+#include "catalog/pg_type.h"
#ifdef CYR_RECODE
char *convertstr(char *, int, int);
return result;
} /* bpchar() */
+/* _bpchar()
+ * Converts an array of char() type to a specific internal length.
+ * len is the length specified in () plus VARHDRSZ bytes.
+ */
+ArrayType *
+_bpchar(ArrayType *v, int32 len)
+{
+ return array_map(v, BPCHAROID, bpchar, BPCHAROID, 1, len);
+}
+
/* bpchar_char()
* Convert bpchar(1) to char.
return result;
} /* varchar() */
+/* _varchar()
+ * Converts an array of varchar() type to the specified size.
+ * len is the length specified in () plus VARHDRSZ bytes.
+ */
+ArrayType *
+_varchar(ArrayType *v, int32 len)
+{
+ return array_map(v, VARCHAROID, varchar, VARCHAROID, 1, len);
+}
+
/*****************************************************************************
* Comparison Functions used for bpchar
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.176 1999/04/25 23:10:36 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.177 1999/05/03 19:10:08 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#define CMD_TERMINATE 2
#define CMD_NEWEDIT 3
-#define MAX_QUERY_BUFFER 20000
+#define MAX_QUERY_BUFFER MAX_QUERY_SIZE
#define COPYBUFSIZ 8192
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_proc.h,v 1.96 1999/04/20 03:51:13 tgl Exp $
+ * $Id: pg_proc.h,v 1.97 1999/05/03 19:10:18 momjian Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
DATA(insert OID = 1289 ( text_int8 PGUID 11 f t f 1 f 20 "25" 100 0 0 100 text_int8 - ));
DESCR("convert text to int8");
+DATA(insert OID = 1290 ( _bpchar PGUID 11 f t f 2 f 1014 "1014 23" 100 0 0 100 _bpchar - ));
+DESCR("truncate _char()");
+DATA(insert OID = 1291 ( _varchar PGUID 11 f t f 2 f 1015 "1015 23" 100 0 0 100 _varchar - ));
+DESCR("truncate _varchar()");
+
DATA(insert OID = 1297 ( timestamp_in PGUID 11 f t f 1 f 1296 "0" 100 0 0 100 timestamp_in - ));
DESCR("(internal)");
DATA(insert OID = 1298 ( timestamp_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 timestamp_out - ));
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_type.h,v 1.58 1999/03/28 02:01:39 tgl Exp $
+ * $Id: pg_type.h,v 1.59 1999/05/03 19:10:20 momjian Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
DATA(insert OID = 1011 ( _xid PGUID -1 -1 f b t \054 0 28 array_in array_out array_in array_out i _null_ ));
DATA(insert OID = 1012 ( _cid PGUID -1 -1 f b t \054 0 29 array_in array_out array_in array_out i _null_ ));
DATA(insert OID = 1013 ( _oid8 PGUID -1 -1 f b t \054 0 30 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1014 ( _bpchar PGUID -1 -1 f b t \054 0 1042 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1015 ( _varchar PGUID -1 -1 f b t \054 0 1043 array_in array_out array_in array_out i _null_ ));
DATA(insert OID = 1017 ( _point PGUID -1 -1 f b t \054 0 600 array_in array_out array_in array_out d _null_ ));
DATA(insert OID = 1018 ( _lseg PGUID -1 -1 f b t \054 0 601 array_in array_out array_in array_out d _null_ ));
DATA(insert OID = 1019 ( _path PGUID -1 -1 f b t \054 0 602 array_in array_out array_in array_out d _null_ ));
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pqcomm.h,v 1.34 1999/04/25 03:19:13 tgl Exp $
+ * $Id: pqcomm.h,v 1.35 1999/05/03 19:10:24 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include
#endif
+/*
+ * Internal send/receive buffers in libpq.
+ */
+#define PQ_BUFFER_SIZE 8192
+
/* Define a generic socket address type. */
typedef union SockAddr
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: miscadmin.h,v 1.36 1999/03/17 22:53:30 momjian Exp $
+ * $Id: miscadmin.h,v 1.37 1999/05/03 19:10:09 momjian Exp $
*
* NOTES
* some of the information in this file will be moved to
extern Oid LastOidProcessed; /* for query rewrite */
-#define MAX_PARSE_BUFFER 8192
+/* #define MAX_QUERY_SIZE (BLCKSZ*2) */
+#define MAX_PARSE_BUFFER MAX_QUERY_SIZE
/*
* default number of buffers in buffer pool
*
* Copyright (c) 1995, Regents of the University of California
*
- * $Id: postgres.h,v 1.21 1999/03/25 03:49:28 tgl Exp $
+ * $Id: postgres.h,v 1.22 1999/05/03 19:10:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
* ----------------
*/
#define MAXPGPATH 128
+#define MAX_QUERY_SIZE (BLCKSZ*2)
#define STATUS_OK (0)
#define STATUS_ERROR (-1)
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: array.h,v 1.15 1999/02/13 23:22:15 momjian Exp $
+ * $Id: array.h,v 1.16 1999/05/03 19:10:25 momjian Exp $
*
* NOTES
* XXX the data array should be LONGALIGN'd -- notice that the array
#define RETURN_NULL {*isNull = true; return(0); }
/* #endif *//* irix5 */
#define NAME_LEN 30
-#define MAX_BUFF_SIZE (1 << 13)
+#define MAX_BUFF_SIZE BLCKSZ
typedef struct
{
extern char *array_assgn(ArrayType *array, int n, int *upperIndx,
int *lowerIndx, ArrayType *newArr, int reftype,
int len, bool *isNull);
+extern ArrayType *array_map(ArrayType *v, Oid type, char *(fn)(char *p, ...),
+ Oid retType, int nargs, ...);
extern int array_eq(ArrayType *array1, ArrayType *array2);
extern int _LOtransfer(char **destfd, int size, int nitems, char **srcfd,
int isSrcLO, int isDestLO);
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.77 1999/03/15 03:24:31 tgl Exp $
+ * $Id: builtins.h,v 1.78 1999/05/03 19:10:31 momjian Exp $
*
* NOTES
* This should normally only be included by fmgr.h.
#define BUILTINS_H
#include
+#include
#include
#include
#include
extern char *bpcharin(char *s, int dummy, int32 atttypmod);
extern char *bpcharout(char *s);
extern char *bpchar(char *s, int32 slen);
+extern ArrayType *_bpchar(ArrayType *v, int32 slen);
extern char *char_bpchar(int32 c);
extern int32 bpchar_char(char *s);
extern char *name_bpchar(NameData *s);
extern char *varcharin(char *s, int dummy, int32 atttypmod);
extern char *varcharout(char *s);
extern char *varchar(char *s, int32 slen);
+extern ArrayType *_varchar(ArrayType *v, int32 slen);
extern bool varchareq(char *arg1, char *arg2);
extern bool varcharne(char *arg1, char *arg2);
extern bool varcharlt(char *arg1, char *arg2);
pgc.c: pgc.l
$(LEX) $<
- mv lex.yy.c pgc.c
+ sed -e 's/#define YY_BUF_SIZE .*/#define YY_BUF_SIZE 65536/' \
+ pgc.c
+ rm -f lex.yy.c
preproc.o : preproc.h ../include/ecpgtype.h keywords.c c_keywords.c ecpg_keywords.c
type.o : ../include/ecpgtype.h
#include "preproc.h"
#include "utils/builtins.h"
+#ifdef YY_READ_BUF_SIZE
+#undef YY_READ_BUF_SIZE
+#endif
+#define YY_READ_BUF_SIZE MAX_PARSE_BUFFER
+
/* some versions of lex define this as a macro */
#if defined(yywrap)
#undef yywrap
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.95 1999/03/29 08:19:36 ishii Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.96 1999/05/03 19:10:40 momjian Exp $
*
*-------------------------------------------------------------------------
*/
conn->asyncStatus = PGASYNC_IDLE;
conn->notifyList = DLNewList();
conn->sock = -1;
- conn->inBufSize = 8192;
+ conn->inBufSize = PQ_BUFFER_SIZE;
conn->inBuffer = (char *) malloc(conn->inBufSize);
- conn->outBufSize = 8192;
+ conn->outBufSize = PQ_BUFFER_SIZE;
conn->outBuffer = (char *) malloc(conn->outBufSize);
if (conn->inBuffer == NULL || conn->outBuffer == NULL)
{
* didn't really belong there.
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.21 1999/04/25 18:16:47 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.22 1999/05/03 19:10:41 momjian Exp $
*
*-------------------------------------------------------------------------
*/
int usePipe = 0;
pqsigfunc oldsigpipehandler = NULL;
char *pagerenv;
- char buf[8192 * 2 + 1];
+ char buf[MAX_QUERY_SIZE + 1];
nTups = PQntuples(res);
if (!(fieldNames = (char **) calloc(nFields, sizeof(char *))))
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: libpq-int.h,v 1.6 1999/02/13 23:22:42 momjian Exp $
+ * $Id: libpq-int.h,v 1.7 1999/05/03 19:10:42 momjian Exp $
*
*-------------------------------------------------------------------------
*/
extern int pqWait(int forRead, int forWrite, PGconn *conn);
/* max length of message to send */
-#define MAX_MESSAGE_LEN 8193
+#define MAX_MESSAGE_LEN MAX_QUERY_SIZE
/* maximum number of fields in a tuple */
#define MAX_FIELDS 512
case SQL_MAX_ROW_SIZE: /* ODBC 2.0 */
len = 4;
- value = 8192;
+ value = BLCKSZ;
break;
case SQL_MAX_ROW_SIZE_INCLUDES_LONG: /* ODBC 2.0 */
break;
case SQL_MAX_STATEMENT_LEN: /* ODBC 2.0 */
- /* maybe this should be 8192? */
+ /* maybe this should be 0? */
len = 4;
- value = 0;
+ value = MAX_QUERY_SIZE;
break;
case SQL_MAX_TABLE_NAME_LEN: /* ODBC 1.0 */
#endif
/* Limits */
-#define MAX_MESSAGE_LEN 8192
+#define MAX_QUERY_SIZE (BLCKSZ*2)
+#define MAX_MESSAGE_LEN MAX_QUERY_SIZE
#define MAX_CONNECT_STRING 4096
#define ERROR_MSG_LENGTH 4096
#define FETCH_MAX 100 /* default number of rows to cache for declare/fetch */
#define CHECK_OPEN 1
#define CHECK_CLOSE 2
-#define MAX_BUFFER_SIZE 8192 /* maximum transaction size */
+#define MAX_BUFFER_SIZE MAX_QUERY_SIZE /* maximum transaction size */
#ifndef NO_DIRECT
#define DIRECT_ACCESS 1 /* enables direct access functions */
/*
- * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.30 1999/02/21 03:49:55 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.31 1999/05/03 19:10:48 momjian Exp $
*/
#include /* faked on sunos */
Relation rel;
TupleDesc tupdesc;
HeapTuple tuple;
- char sql[8192];
+ char sql[MAX_QUERY_SIZE];
char *when;
int inserted;
int selected = 0;
{
void *pplan;
Oid *ctypes;
- char sql[8192];
+ char sql[MAX_QUERY_SIZE];
/* allocate ctypes for preparation */
ctypes = (Oid *) palloc(natts * sizeof(Oid));