mirror of
https://github.com/postgres/postgres.git
synced 2026-02-14 00:03:18 -05:00
pass-by-ref data types --- eg, an index on lower(textfield) --- no longer leak memory during index creation or update. Clean up a lot of redundant code ... did you know that copy, vacuum, truncate, reindex, extend index, and bootstrap each basically duplicated the main executor's logic for extracting information about an index and preparing index entries? Functional indexes should be a little faster now too, due to removal of repeated function lookups. CREATE INDEX 'opt_type' clause is deimplemented by these changes, but I haven't removed it from the parser yet (need to merge with Thomas' latest change set first).
142 lines
2.9 KiB
Text
142 lines
2.9 KiB
Text
%{
|
|
/*-------------------------------------------------------------------------
|
|
*
|
|
* bootscanner.lex
|
|
* a lexical scanner for the bootstrap parser
|
|
*
|
|
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
*
|
|
* IDENTIFICATION
|
|
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootscanner.l,v 1.18 2000/07/14 22:17:38 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#include <time.h>
|
|
|
|
#include "postgres.h"
|
|
|
|
#include "access/attnum.h"
|
|
#include "access/htup.h"
|
|
#include "access/itup.h"
|
|
#include "access/skey.h"
|
|
#include "access/strat.h"
|
|
#include "access/tupdesc.h"
|
|
#include "bootstrap/bootstrap.h"
|
|
#include "catalog/pg_am.h"
|
|
#include "catalog/pg_attribute.h"
|
|
#include "catalog/pg_class.h"
|
|
#include "nodes/nodes.h"
|
|
#include "nodes/parsenodes.h"
|
|
#include "nodes/pg_list.h"
|
|
#include "nodes/primnodes.h"
|
|
#include "parser/scansup.h"
|
|
#include "rewrite/prs2lock.h"
|
|
#include "storage/block.h"
|
|
#include "storage/fd.h"
|
|
#include "storage/itemptr.h"
|
|
#include "storage/off.h"
|
|
#include "utils/nabstime.h"
|
|
#include "utils/rel.h"
|
|
|
|
#include "bootstrap_tokens.h"
|
|
|
|
#define YY_NO_UNPUT
|
|
|
|
/* some versions of lex define this as a macro */
|
|
#if defined(yywrap)
|
|
#undef yywrap
|
|
#endif /* yywrap */
|
|
|
|
YYSTYPE yylval;
|
|
int yyline; /* keep track of the line number for error reporting */
|
|
|
|
%}
|
|
|
|
D [0-9]
|
|
oct \\{D}{D}{D}
|
|
Exp [Ee][-+]?{D}+
|
|
id ([A-Za-z0-9_]|{oct}|\-)+
|
|
sid \"([^\"])*\"
|
|
arrayid [A-Za-z0-9_]+\[{D}*\]
|
|
|
|
%%
|
|
|
|
open { return(OPEN); }
|
|
|
|
close { return(XCLOSE); }
|
|
|
|
create { return(XCREATE); }
|
|
|
|
OID { return(OBJ_ID); }
|
|
bootstrap { return(XBOOTSTRAP); }
|
|
_null_ { return(NULLVAL); }
|
|
|
|
insert { return(INSERT_TUPLE); }
|
|
|
|
"," { return(COMMA); }
|
|
"=" { return(EQUALS); }
|
|
"(" { return(LPAREN); }
|
|
")" { return(RPAREN); }
|
|
|
|
[\n] { yyline++; }
|
|
[\t] ;
|
|
" " ;
|
|
|
|
^\#[^\n]* ; /* drop everything after "#" for comments */
|
|
|
|
|
|
"declare" { return(XDECLARE); }
|
|
"build" { return(XBUILD); }
|
|
"indices" { return(INDICES); }
|
|
"unique" { return(UNIQUE); }
|
|
"index" { return(INDEX); }
|
|
"on" { return(ON); }
|
|
"using" { return(USING); }
|
|
{arrayid} {
|
|
yylval.ival = EnterString(MapArrayTypeName((char*)yytext));
|
|
return(ID);
|
|
}
|
|
{id} {
|
|
char *newid = scanstr((char*)yytext);
|
|
yylval.ival = EnterString(newid);
|
|
pfree(newid);
|
|
return(ID);
|
|
}
|
|
{sid} {
|
|
char *newid;
|
|
yytext[strlen(yytext)-1] = '\0'; /* strip off quotes */
|
|
newid = scanstr((char*)yytext+1);
|
|
yylval.ival = EnterString(newid);
|
|
pfree(newid);
|
|
yytext[strlen(yytext)] = '"'; /* restore quotes */
|
|
return(ID);
|
|
}
|
|
|
|
(-)?{D}+"."{D}*({Exp})? |
|
|
(-)?{D}*"."{D}+({Exp})? |
|
|
(-)?{D}+{Exp} {
|
|
yylval.ival = EnterString((char*)yytext);
|
|
return(CONST);
|
|
}
|
|
|
|
. {
|
|
printf("syntax error %d : -> %s\n", yyline, yytext);
|
|
}
|
|
|
|
|
|
|
|
%%
|
|
|
|
int
|
|
yywrap(void)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
void
|
|
yyerror(const char *str)
|
|
{
|
|
fprintf(stderr,"\tsyntax error %d : %s",yyline, str);
|
|
}
|