diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 4efa13635aa54c866898e74eb2fbd917887daa7e..dd2809181658ce1a523e31bcf2580caf7e799222 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.74 1999/04/25 03:19:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.75 1999/05/03 19:09:38 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1061,7 +1061,7 @@ GetIndexRelations(Oid main_relation_oid, } } -#define EXT_ATTLEN 5*8192 +#define EXT_ATTLEN 5*BLCKSZ /* returns 1 is c is in s diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c index 66320cd54d2ceddffa4c5a91512b92d9a7b0690d..46c75f932e50805a2b91a3e9c0dcab57373528a2 100644 --- a/src/backend/libpq/be-fsstubs.c +++ b/src/backend/libpq/be-fsstubs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.28 1999/02/13 23:15:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.29 1999/05/03 19:09:39 momjian Exp $ * * NOTES * This should be moved to a more appropriate place. It is here @@ -44,7 +44,9 @@ /* [PA] is Pascal André <andre@via.ecp.fr> */ /*#define FSDB 1*/ -#define MAX_LOBJ_FDS 256 +#define MAX_LOBJ_FDS 256 +#define BUFSIZE 1024 +#define FNAME_BUFSIZE 8192 static LargeObjectDesc *cookies[MAX_LOBJ_FDS]; @@ -257,9 +259,8 @@ lo_import(text *filename) int nbytes, tmp; -#define BUFSIZE 1024 char buf[BUFSIZE]; - char fnamebuf[8192]; + char fnamebuf[FNAME_BUFSIZE]; LargeObjectDesc *lobj; Oid lobjOid; @@ -324,9 +325,8 @@ lo_export(Oid lobjId, text *filename) int nbytes, tmp; -#define BUFSIZE 1024 char buf[BUFSIZE]; - char fnamebuf[8192]; + char fnamebuf[FNAME_BUFSIZE]; LargeObjectDesc *lobj; mode_t oumask; diff --git a/src/backend/parser/Makefile b/src/backend/parser/Makefile index 8fb817c91ff76dc8d9a74ff243f0cef279a5b74a..b9e955e8523de3dbf997c3444477a535ee1e7249 100644 --- a/src/backend/parser/Makefile +++ b/src/backend/parser/Makefile @@ -4,7 +4,7 @@ # Makefile for parser # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/parser/Makefile,v 1.19 1998/07/26 04:30:30 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/backend/parser/Makefile,v 1.20 1999/05/03 19:09:40 momjian Exp $ # #------------------------------------------------------------------------- @@ -37,7 +37,9 @@ gram.c parse.h: gram.y scan.c: scan.l $(LEX) $< - mv lex.yy.c scan.c + sed -e 's/#define YY_BUF_SIZE .*/#define YY_BUF_SIZE 65536/' \ + <lex.yy.c >scan.c + rm -f lex.yy.c # The following dependencies on parse.h are computed by # make depend, but we state them here explicitly anyway because diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 86f737179a36d90b936af33680337ee5ac6bcd7b..b3836e0191d204410a653b2545918b22c1496203 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.71 1999/04/27 13:33:43 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.72 1999/05/03 19:09:41 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -3290,7 +3290,6 @@ Typename: Array opt_array_bounds else $$->setof = FALSE; } - | Character | SETOF Array { $$ = $2; @@ -3301,6 +3300,7 @@ Typename: Array opt_array_bounds Array: Generic | Datetime | Numeric + | Character ; Generic: generic @@ -3425,10 +3425,6 @@ opt_decimal: '(' Iconst ',' Iconst ')' /* SQL92 character data types * The following implements CHAR() and VARCHAR(). - * We do it here instead of the 'Generic' production - * because we don't want to allow arrays of VARCHAR(). - * I haven't thought about whether that will work or not. - * - ay 6/95 */ Character: character '(' Iconst ')' { diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index f87a124f0920b9f4d5c6b6f60a4354ad5533a1f2..d50ee9c62d8ecb8621141bbc6547c799410f8e1e 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.47 1999/03/17 20:17:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.48 1999/05/03 19:09:42 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -32,6 +32,11 @@ #include "parse.h" #include "utils/builtins.h" +#ifdef YY_READ_BUF_SIZE +#undef YY_READ_BUF_SIZE +#endif +#define YY_READ_BUF_SIZE MAX_PARSE_BUFFER + extern char *parseString; static char *parseCh; diff --git a/src/backend/port/hpux/fixade.h b/src/backend/port/hpux/fixade.h index 8a96ad7cf29462a56f9eea94832ad280a67298be..d76c8c256e0d2482c9626382909978ac28a9615d 100644 --- a/src/backend/port/hpux/fixade.h +++ b/src/backend/port/hpux/fixade.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: fixade.h,v 1.5 1999/02/13 23:17:33 momjian Exp $ + * $Id: fixade.h,v 1.6 1999/05/03 19:09:44 momjian Exp $ * * NOTES * This must be included in EVERY source file. @@ -47,11 +47,11 @@ */ struct HP_WAY_BOGUS { - char hpwb_bogus[8192]; + char hpwb_bogus[8191+1]; }; struct HP_TOO_BOGUS { - int hptb_bogus[8192]; + int hptb_bogus[8191+1]; }; #endif /* BROKEN_STRUCT_INIT */ diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 7e596fcc4804816c40e51356b4751436ed92d119..f196e51eaf0de775777151a6178bc0d8f5fadf49 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.109 1999/05/01 17:16:25 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.110 1999/05/03 19:09:54 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -452,14 +452,14 @@ pg_parse_and_plan(char *query_string, /* string to execute */ else { /* Print condensed query string to fit in one log line */ - char buff[8192 + 1]; + char buff[MAX_QUERY_SIZE + 1]; char c, *s, *d; int n, is_space = 1; - for (s = query_string, d = buff, n = 0; (c = *s) && (n < 8192); s++) + for (s = query_string, d = buff, n = 0; (c = *s) && (n < MAX_QUERY_SIZE); s++) { switch (c) { @@ -1539,7 +1539,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.109 $ $Date: 1999/05/01 17:16:25 $\n"); + puts("$Revision: 1.110 $ $Date: 1999/05/03 19:09:54 $\n"); } /* ---------------- diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index a4f1842e5f9362ed0642054d269227eadfa779e1..f8fe7e42229878276d4c7b4f0bdd4d871a15175c 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.38 1999/02/13 23:19:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.39 1999/05/03 19:09:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -15,6 +15,7 @@ #include <ctype.h> #include <stdio.h> #include <string.h> +#include <stdarg.h> #include "postgres.h" @@ -26,6 +27,7 @@ #include "storage/fd.h" #include "fmgr.h" #include "utils/array.h" +#include "utils/elog.h" #include "libpq/libpq-fs.h" #include "libpq/be-fsstubs.h" @@ -614,7 +616,9 @@ array_out(ArrayType *v, Oid element_type) i, j, k, +#ifndef TCL_ARRAYS l, +#endif indx[MAXDIM]; bool dummy_bool; int ndim, @@ -1274,6 +1278,156 @@ array_assgn(ArrayType *array, return (char *) array; } +/* + * array_map() + * + * Map an arbitrary function to an array and return a new array with + * same dimensions and the source elements transformed by fn(). + */ +ArrayType * +array_map(ArrayType *v, + Oid type, + char *(fn)(char *p, ...), + Oid retType, + int nargs, + ...) +{ + ArrayType *result; + void *args[4]; + char **values; + char *elt; + int *dim; + int ndim; + int nitems; + int i; + int nbytes = 0; + int inp_typlen; + bool inp_typbyval; + int typlen; + bool typbyval; + char typdelim; + Oid typelem; + Oid proc; + char typalign; + char *s; + char *p; + va_list ap; + + /* Large objects not yet supported */ + if (ARR_IS_LO(v) == true) { + elog(ERROR, "array_map: large objects not supported"); + } + + /* Check nargs */ + if ((nargs < 0) || (nargs > 4)) { + elog(ERROR, "array_map: invalid nargs: %d", nargs); + } + + /* Copy extra args to local variable */ + va_start(ap, nargs); + for (i=0; i<nargs; i++) { + 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<nitems; 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 diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 39ae06324839b1c5b32c45228fcb6c9a2767507a..4d88413a8e429b29f76b81600563a7654d74faf3 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3,7 +3,7 @@ * 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. * @@ -57,6 +57,7 @@ #include "catalog/pg_opclass.h" #include "fmgr.h" +#define BUFSIZE 8192 /* ---------- * Local data types @@ -331,8 +332,8 @@ pg_get_indexdef(Oid indexrelid) int spirc; int len; int keyno; - char buf[8192]; - char keybuf[8192]; + char buf[BUFSIZE]; + char keybuf[BUFSIZE]; char *sep; /* ---------- @@ -603,7 +604,7 @@ make_ruledef(HeapTuple ruletup, TupleDesc rulettc) * Allocate space for the returned rule definition text * ---------- */ - buf = palloc(8192); + buf = palloc(BUFSIZE); /* ---------- * Get the attribute values from the rules tuple @@ -746,7 +747,7 @@ make_ruledef(HeapTuple ruletup, TupleDesc rulettc) static char * make_viewdef(HeapTuple ruletup, TupleDesc rulettc) { - char buf[8192]; + char buf[BUFSIZE]; Query *query; char ev_type; Oid ev_class; @@ -854,7 +855,7 @@ get_query_def(Query *query, QryHier *parentqh) static char * get_select_query_def(Query *query, QryHier *qh) { - char buf[8192]; + char buf[BUFSIZE]; char *sep; TargetEntry *tle; RangeTblEntry *rte; @@ -1024,7 +1025,7 @@ get_select_query_def(Query *query, QryHier *qh) static char * get_insert_query_def(Query *query, QryHier *qh) { - char buf[8192]; + char buf[BUFSIZE]; char *sep; TargetEntry *tle; RangeTblEntry *rte; @@ -1134,7 +1135,7 @@ get_insert_query_def(Query *query, QryHier *qh) static char * get_update_query_def(Query *query, QryHier *qh) { - char buf[8192]; + char buf[BUFSIZE]; char *sep; TargetEntry *tle; RangeTblEntry *rte; @@ -1187,7 +1188,7 @@ get_update_query_def(Query *query, QryHier *qh) static char * get_delete_query_def(Query *query, QryHier *qh) { - char buf[8192]; + char buf[BUFSIZE]; RangeTblEntry *rte; /* ---------- @@ -1221,7 +1222,7 @@ get_delete_query_def(Query *query, QryHier *qh) 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(""); @@ -1408,7 +1409,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) 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; @@ -1564,7 +1565,7 @@ get_const_expr(Const *constval) FmgrInfo finfo_output; char *extval; bool isnull = FALSE; - char buf[8192]; + char buf[BUFSIZE]; char namebuf[64]; if (constval->constisnull) @@ -1601,7 +1602,7 @@ get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) Expr *expr; List *l; char *sep; - char buf[8192]; + char buf[BUFSIZE]; buf[0] = '\0'; diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 8a06e6f4fd0cd4ce3c9a755798ae9149d45cf0ab..0aa8133b1319a85a01fc9ad775a343010c1bc438 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -7,14 +7,16 @@ * * * 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 <stdio.h> /* for sprintf() */ #include <string.h> #include "postgres.h" +#include "utils/array.h" #include "utils/builtins.h" +#include "catalog/pg_type.h" #ifdef CYR_RECODE char *convertstr(char *, int, int); @@ -200,6 +202,16 @@ bpchar(char *s, int32 len) 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. @@ -396,6 +408,16 @@ varchar(char *s, int32 slen) 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 diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c index df0e9f425ba131caad4615bd393b56e37f6d1af6..6644da87ea808bc5eb92db14094d2636cffaa9db 100644 --- a/src/bin/psql/psql.c +++ b/src/bin/psql/psql.c @@ -7,7 +7,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -115,7 +115,7 @@ static char *has_client_encoding = 0; #define CMD_TERMINATE 2 #define CMD_NEWEDIT 3 -#define MAX_QUERY_BUFFER 20000 +#define MAX_QUERY_BUFFER MAX_QUERY_SIZE #define COPYBUFSIZ 8192 diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 76f9bbf816087972e592e86a656a46a2dcddef53..5b5687dfbd36a0b311d9e82576a6b259e24b182e 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -6,7 +6,7 @@ * * 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 @@ -1553,6 +1553,11 @@ DESCR("convert int8 to text"); 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 - )); diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h index 49d5e01183230d0d19a659b4aa5e78274b735ad5..aa8d703ad2ce47f51a61de12fc9a53f363bc2efa 100644 --- a/src/include/catalog/pg_type.h +++ b/src/include/catalog/pg_type.h @@ -7,7 +7,7 @@ * * 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 @@ -327,6 +327,8 @@ DATA(insert OID = 1010 ( _tid PGUID -1 -1 f b t \054 0 27 array_in array_out 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_ )); diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h index 53542993d870461bfe55736c44c90e255fb325a7..12024b720f4ea307805f2dde2c9c945ac23f70ca 100644 --- a/src/include/libpq/pqcomm.h +++ b/src/include/libpq/pqcomm.h @@ -8,7 +8,7 @@ * * 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 $ * *------------------------------------------------------------------------- */ @@ -27,6 +27,11 @@ #include <netinet/in.h> #endif +/* + * Internal send/receive buffers in libpq. + */ +#define PQ_BUFFER_SIZE 8192 + /* Define a generic socket address type. */ typedef union SockAddr diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index fa5397f070e8303de39ffaa81e48a36b5c1ecd98..1cec52a1a89629679585e1dba20f9a7b9456b3f4 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -11,7 +11,7 @@ * * 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 @@ -100,7 +100,8 @@ extern int SortMem; 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 diff --git a/src/include/postgres.h b/src/include/postgres.h index ab57059295f081fab5da4edcfc4a218e2b091fd5..1edaf853988c4f5102c72ef26541ccfdc8cbf438 100644 --- a/src/include/postgres.h +++ b/src/include/postgres.h @@ -6,7 +6,7 @@ * * 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 $ * *------------------------------------------------------------------------- */ @@ -151,6 +151,7 @@ typedef uint32 CommandId; * ---------------- */ #define MAXPGPATH 128 +#define MAX_QUERY_SIZE (BLCKSZ*2) #define STATUS_OK (0) #define STATUS_ERROR (-1) diff --git a/src/include/utils/array.h b/src/include/utils/array.h index 833727e07fb276d37ecdf9a54b05dfc310ad0018..7ea945bf5fb38e8997f45e3087e203facd5c8329 100644 --- a/src/include/utils/array.h +++ b/src/include/utils/array.h @@ -10,7 +10,7 @@ * * 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 @@ -103,7 +103,7 @@ typedef struct #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 { @@ -126,6 +126,8 @@ extern char *array_set(ArrayType *array, int n, int *indx, char *dataPtr, 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); diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 47dbef4c67b8f7099aa88eff07f205b517e28060..71fb63c77fe77b502e94f99441eb1db46bc793c7 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -6,7 +6,7 @@ * * 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. @@ -23,6 +23,7 @@ #define BUILTINS_H #include <storage/itemptr.h> +#include <utils/array.h> #include <utils/geo_decls.h> #include <utils/datetime.h> #include <utils/nabstime.h> @@ -411,6 +412,7 @@ time_t datetime_timestamp(DateTime *datetime); 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); @@ -429,6 +431,7 @@ extern uint32 hashbpchar(struct varlena * key); 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); diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile index e2025adccac5441330b5c15741d96e6cfd7e44e0..6952b078f84e10ee86f92a745148e895a299eb94 100644 --- a/src/interfaces/ecpg/preproc/Makefile +++ b/src/interfaces/ecpg/preproc/Makefile @@ -38,7 +38,9 @@ ecpg: $(OBJ) pgc.c: pgc.l $(LEX) $< - mv lex.yy.c pgc.c + sed -e 's/#define YY_BUF_SIZE .*/#define YY_BUF_SIZE 65536/' \ + <lex.yy.c >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 diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 0ae219097855a4209407dda01f8babc0f29d5b02..44542cb83bf7b1982bb42579c8de3bffc760bfcf 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -28,6 +28,11 @@ #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 diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index cfc3e36b7f98d86ad0bf9ab448016673b12dae4a..fb78b1ee37106482420b9ab83de0455508e9e56a 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -7,7 +7,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -876,9 +876,9 @@ makeEmptyPGconn(void) 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) { diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index fa358c70d4ef8ac9ce13476ed735d38786a80bb6..25e58bc9501bdeb6dd655cdd10b44b2e124914b3 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -9,7 +9,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -105,7 +105,7 @@ PQprint(FILE *fout, 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 *)))) diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index dfc4dba8500a20c672786cd9781c72c86130ce61..aaeffa3459a2cad4c2fa2230686ebd952f42f7da 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -11,7 +11,7 @@ * * 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 $ * *------------------------------------------------------------------------- */ @@ -255,7 +255,7 @@ extern int pqFlush(PGconn *conn); 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 diff --git a/src/interfaces/odbc/info.c b/src/interfaces/odbc/info.c index 9e019dbba3c4d6f1942a92da50a2e79e85062756..d18620f69be94cdc8168382fd2920374986cab78 100644 --- a/src/interfaces/odbc/info.c +++ b/src/interfaces/odbc/info.c @@ -337,7 +337,7 @@ RETCODE result; 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 */ @@ -348,9 +348,9 @@ RETCODE result; 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 */ diff --git a/src/interfaces/odbc/psqlodbc.h b/src/interfaces/odbc/psqlodbc.h index 8b095e335d0ce60fcc628ae026219abacf4d1e12..6ab559d91ab104c0e89ee8556de75fd6f6b11147 100644 --- a/src/interfaces/odbc/psqlodbc.h +++ b/src/interfaces/odbc/psqlodbc.h @@ -49,7 +49,8 @@ typedef UInt4 Oid; #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 */ diff --git a/src/interfaces/python/pgmodule.c b/src/interfaces/python/pgmodule.c index 2dc8bf593645b9c0713af88be81e24169258d880..34c534e5ce8130cb1cc16cd73deb945d19ad0858 100644 --- a/src/interfaces/python/pgmodule.c +++ b/src/interfaces/python/pgmodule.c @@ -51,7 +51,7 @@ static char *PyPgVersion = "2.2"; #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 */ diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index d95ccb8bee7ef59a62786be301e7953c0a0363cd..9674c52d2d648a70997dc25c1f08d9fa0d8a1459 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -1,5 +1,5 @@ /* - * $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 <float.h> /* faked on sunos */ @@ -319,7 +319,7 @@ funny_dup17() Relation rel; TupleDesc tupdesc; HeapTuple tuple; - char sql[8192]; + char sql[MAX_QUERY_SIZE]; char *when; int inserted; int selected = 0; @@ -563,7 +563,7 @@ ttdummy() { void *pplan; Oid *ctypes; - char sql[8192]; + char sql[MAX_QUERY_SIZE]; /* allocate ctypes for preparation */ ctypes = (Oid *) palloc(natts * sizeof(Oid));