⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.y

📁 firebird源代码
💻 Y
📖 第 1 页 / 共 5 页
字号:
%{/*  *	PROGRAM:	Dynamic SQL runtime support *	MODULE:		parse.y *	DESCRIPTION:	Dynamic SQL parser * * The contents of this file are subject to the Interbase Public * License Version 1.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy * of the License at http://www.Inprise.com/IPL.html * * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express * or implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code was created by Inprise Corporation * and its predecessors. Portions created by Inprise Corporation are * Copyright (C) Inprise Corporation. * * All Rights Reserved. * Contributor(s): ______________________________________. * 2001.05.20 Neil McCalden: Allow a udf to be used in a 'group by' clause. * 2001.05.30 Claudio Valderrama: DROP TABLE and DROP VIEW lead now to two *   different node types so DDL can tell which is which. * 2001.06.13 Claudio Valderrama: SUBSTRING is being surfaced. * 2001.06.30 Claudio valderrama: Feed (line,column) for each node. See node.h. * 2001.07.10 Claudio Valderrama: Better (line,column) report and "--" for comments. * 2001.07.28 John Bellardo: Changes to support parsing LIMIT and FIRST * 2001.08.03 John Bellardo: Finalized syntax for LIMIT, change LIMIT to SKIP * 2001.08.05 Claudio Valderrama: closed Bug #448062 and other spaces that appear *   in rdb$*_source fields when altering domains plus one unexpected null pointer. * 2001.08.12 Claudio Valderrama: adjust SUBSTRING's starting pos argument here *   and not in gen.c; this closes Bug #450301. * 2001.10.01 Claudio Valderrama: enable explicit GRANT...to ROLE role_name. * 2001.10.06 Claudio Valderrama: Honor explicit USER keyword in GRANTs and REVOKEs. */#if defined(DEV_BUILD) && defined(WIN32) && defined(SUPERSERVER)#include <windows.h>/*#include <wincon.h>*/#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../jrd/common.h"#include <stdarg.h>#include "../jrd/iberror.h"#include "../dsql/dsql.h"#include "../dsql/node.h"#include "../dsql/sym.h"#include "../jrd/gds.h"#include "../jrd/flags.h"#include "../dsql/alld_proto.h"#include "../dsql/errd_proto.h"#include "../dsql/hsh_proto.h"#include "../dsql/make_proto.h"#include "../dsql/parse_proto.h"#include "../jrd/gds_proto.h"#include "../jrd/thd_proto.h"#ifndef WINDOWS_ONLY#include "../wal/wal.h"#endif/* Can't include ../jrd/err_proto.h here because it pulls jrd.h. */#if !defined(_JRD_ERR_PROTO_H_)extern TEXT * DLL_EXPORT ERR_string (TEXT *, int);#endifASSERT_FILENAME/* Remove compiler warning produced by redef of WRITE & READ from WINDOWS.H */#ifdef WINDOWS_ONLY#undef READ#undef WRITE#endif/* since UNIX isn't standard, we have to define   stuff which is in <limits.h> (which isn't available   on all UNIXes... */#define SHRT_POS_MAX		32767#define SHRT_UNSIGNED_MAX	65535#define SHRT_NEG_MAX		32768#define LONG_POS_MAX		2147483647#define POSITIVE		0#define NEGATIVE		1#define UNSIGNED		2#define MIN_CACHE_BUFFERS       250#define DEF_CACHE_BUFFERS       1000#define YYSTYPE		NOD#if defined(DEBUG) || defined(DEV_BUILD)#define YYDEBUG		1#endifstatic CONST UCHAR	INTERNAL_FIELD_NAME [] = "DSQL internal"; /* NTX: placeholder */static CONST UCHAR	NULL_STRING [] = "";	#ifndef SHLIB_DEFSNOD		DSQL_parse;#elseextern NOD	DSQL_parse;#endifstatic FLD	field;static FIL	file;static NOD	field_name;static TEXT	*beginning;static SSHORT	log_defined, cache_defined;static void	yyerror (TEXT *);%}/* token declarations *//* Tokens are organized chronologically by date added.   See dsql/keywords.h for a list organized alphabetically *//* Tokens in v4.0 -- not separated into v3 and v4 tokens */%token ACTIVE%token ADD%token AFTER%token ALL%token ALTER%token AND%token ANY%token AS%token ASC%token AT%token AVG%token AUTO%token BASENAME%token BEFORE%token BEGIN%token BETWEEN%token BLOB%token BY%token CACHE%token CAST%token CHARACTER%token CHECK%token CHECK_POINT_LEN%token COLLATE%token COLLATION%token COMMA%token COMMIT%token COMMITTED%token COMPUTED%token CONCATENATE%token CONDITIONAL%token CONSTRAINT%token CONTAINING%token COUNT%token CREATE%token CSTRING%token CURRENT%token CURSOR%token DATABASE%token DATE%token DB_KEY%token DEBUG%token DECIMAL%token DECLARE%token DEFAULT%token DELETE%token DESC%token DISTINCT%token DO%token DOMAIN%token DROP%token ELSE%token END%token ENTRY_POINT%token EQL%token ESCAPE%token EXCEPTION%token EXECUTE%token EXISTS%token EXIT%token EXTERNAL%token FILTER%token FOR%token FOREIGN%token FROM%token FULL%token FUNCTION%token GDSCODE%token GEQ%token GENERATOR%token GEN_ID%token GRANT%token GROUP%token GROUP_COMMIT_WAIT%token GTR%token HAVING%token IF%token IN%token INACTIVE%token INNER%token INPUT_TYPE%token INDEX%token INSERT%token INTEGER%token INTO%token IS%token ISOLATION%token JOIN%token KEY%token KW_CHAR%token KW_DEC%token KW_DOUBLE%token KW_FILE%token KW_FLOAT%token KW_INT%token KW_LONG%token KW_NULL%token KW_NUMERIC%token KW_UPPER%token KW_VALUE%token LENGTH%token LOGFILE%token LPAREN%token LEFT%token LEQ%token LEVEL%token LIKE%token LOG_BUF_SIZE%token LSS%token MANUAL%token MAXIMUM%token MAX_SEGMENT%token MERGE%token MESSAGE%token MINIMUM%token MODULE_NAME%token NAMES%token NATIONAL%token NATURAL%token NCHAR%token NEQ%token NO%token NOT%token NOT_GTR%token NOT_LSS%token NUM_LOG_BUFS%token OF%token ON%token ONLY%token OPTION%token OR%token ORDER%token OUTER%token OUTPUT_TYPE%token OVERFLOW%token PAGE%token PAGES%token PAGE_SIZE%token PARAMETER%token PASSWORD%token PLAN%token POSITION%token POST_EVENT%token PRECISION%token PRIMARY%token PRIVILEGES%token PROCEDURE%token PROTECTED%token RAW_PARTITIONS%token READ%token REAL%token RECREATE%token REFERENCES%token RESERVING%token RETAIN%token RETURNING_VALUES%token RETURNS%token REVOKE%token RIGHT%token RPAREN%token ROLLBACK%token SEGMENT%token SELECT%token SET%token SHADOW%token SHARED%token SINGULAR%token SIZE%token SMALLINT%token SNAPSHOT%token SOME%token SORT%token SQLCODE%token STABILITY%token STARTING%token STATISTICS%token SUB_TYPE%token SUSPEND%token SUM%token TABLE%token THEN%token TO%token TRANSACTION%token TRIGGER%token UNCOMMITTED%token UNION%token UNIQUE%token UPDATE%token USER%token VALUES%token VARCHAR%token VARIABLE%token VARYING%token VERSION%token VIEW%token WAIT%token WHEN%token WHERE%token WHILE%token WITH%token WORK%token WRITE%token FLOAT NUMBER NUMERIC SYMBOL STRING INTRODUCER /* New tokens added v5.0 */%token ACTION%token ADMIN%token CASCADE%token FREE_IT			/* ISC SQL extension */%token RESTRICT%token ROLE/* New tokens added v6.0 */%token COLUMN%token TYPE%token EXTRACT%token YEAR%token MONTH%token DAY%token HOUR%token MINUTE%token SECOND%token WEEKDAY			/* ISC SQL extension */%token YEARDAY			/* ISC SQL extension */%token TIME%token TIMESTAMP%token CURRENT_DATE%token CURRENT_TIME%token CURRENT_TIMESTAMP/* CVC: Special Firebird additions. */%token CURRENT_USER%token CURRENT_ROLE%token KW_BREAK%token SUBSTRING%token KW_DESCRIPTOR%token FIRST%token SKIP/* special aggregate token types returned by lex in v6.0 */%token NUMBER64BIT SCALEDINT/* precedence declarations for expression evaluation */%left	OR%left	AND%left	NOT%left	'=' '<' '>' LIKE EQL NEQ GTR LSS GEQ LEQ NOT_GTR NOT_LSS%left	'+' '-'%left	'*' '/'%left	CONCATENATE%left	COLLATE/* Fix the dangling IF-THEN-ELSE problem */%nonassoc THEN%nonassoc ELSE/* The same issue exists with ALTER COLUMN now that keywords can be used   in order to change their names.  The syntax which shows the issue is:     ALTER COLUMN where column is part of the alter statement       or     ALTER COLUMN where column is the name of the column in the relation*/%nonassoc ALTER%nonassoc COLUMN%%/* list of possible statements */top		: statement			{ DSQL_parse = $1; }		| statement ';'			{ DSQL_parse = $1; }		;statement	: alter		| blob		| commit		| create		| declare		| delete		| drop		| grant		| insert		| invoke_procedure		| recreate		| revoke		| rollback		| select		| set		| update		| DEBUG signed_short_integer			{ prepare_console_debug ((int) $2, &yydebug);			  $$ = make_node (nod_null, (int) 0, NULL); }		;/* GRANT statement */grant	 	: GRANT privileges ON prot_table_name			TO user_grantee_list grant_option			{ $$ = make_node (nod_grant, (int) e_grant_count, 					$2, $4, make_list($6), $7); }		| GRANT proc_privileges ON PROCEDURE simple_proc_name			TO user_grantee_list grant_option			{ $$ = make_node (nod_grant, (int) e_grant_count, 					$2, $5, make_list($7), $8); }		| GRANT privileges ON prot_table_name			TO grantee_list			{ $$ = make_node (nod_grant, (int) e_grant_count, 					$2, $4, make_list($6), NULL); }		| GRANT proc_privileges ON PROCEDURE simple_proc_name			TO grantee_list			{ $$ = make_node (nod_grant, (int) e_grant_count, 					$2, $5, make_list($7), NULL); }		| GRANT role_name_list TO role_grantee_list role_admin_option			{ $$ = make_node (nod_grant, (int) e_grant_count, 					make_list($2), make_list($4), NULL, $5); }                ; prot_table_name	: simple_table_name		| TABLE simple_table_name			{ $$ = $2; }		;privileges	: ALL			{ $$ = make_node (nod_all, (int) 0, NULL); }		| ALL PRIVILEGES			{ $$ = make_node (nod_all, (int) 0, NULL); }		| privilege_list			{ $$ = make_list ($1); }		;privilege_list	: privilege		| privilege_list ',' privilege			{ $$ = make_node (nod_list, (int) 2, $1, $3); }		;proc_privileges	: EXECUTE			{ $$ = make_list (make_node (nod_execute, (int) 0, NULL)); }		;privilege	: SELECT			{ $$ = make_node (nod_select, (int) 0, NULL); }		| INSERT			{ $$ = make_node (nod_insert, (int) 0, NULL); }		| DELETE			{ $$ = make_node (nod_delete, (int) 0, NULL); }		| UPDATE column_parens_opt			{ $$ = make_node (nod_update, (int) 1, $2); }		| REFERENCES column_parens_opt			{ $$ = make_node (nod_references, (int) 1, $2); }		;grant_option	: WITH GRANT OPTION			{ $$ = make_node (nod_grant, (int) 0, NULL); }		|			{ $$ = 0; }		;role_admin_option   : WITH ADMIN OPTION            { $$ = make_node (nod_grant_admin, (int) 0, NULL); }        |            { $$ = 0; }        ;simple_proc_name: symbol_procedure_name			{ $$ = make_node (nod_procedure_name, (int) 1, $1); }		;/* REVOKE statement */revoke	 	: REVOKE rev_grant_option privileges ON prot_table_name			FROM user_grantee_list			{ $$ = make_node (nod_revoke, 				(int) e_grant_count, $3, $5,				make_list($7), $2); }		| REVOKE rev_grant_option proc_privileges ON			PROCEDURE simple_proc_name FROM user_grantee_list			{ $$ = make_node (nod_revoke, 				(int) e_grant_count, $3, $6,				make_list($8), $2); }		| REVOKE privileges ON prot_table_name			FROM user_grantee_list			{ $$ = make_node (nod_revoke, 				(int) e_grant_count, $2, $4,				make_list($6), NULL); }		| REVOKE proc_privileges ON

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -