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

📄 sdbms_sql.y

📁 使用yacc的一个例子
💻 Y
字号:
%{
#include "stdafx.h"
#include "sdbms.h"
#include "Sdbms_GlobalDefines.h"
#include "Sdbms_DataStruct.h"
#include "SqlMsg.h"
#include "sdbms_sql.h"

extern char * g_strSQL;
extern CSdbms g_sdbms;
extern CSqlMessage g_msg;

char g_strRangeItems[1000];
char g_strUserNames[1000];
char g_strRoleNames[1000];
char g_strSystemRights[1000];
char g_strObjectRights[1000];
char g_strTableNames[1000];
char g_strFieldNames[1000];
char g_strTableFieldNames[1000];
char g_strKeyColNames[1000];

struct Operations
{
	ObjectRight	nSqlID;
	CString		strFieldNames;
};

Operations g_opers[10];	//记录操作
int	g_nOpersCount = 0;	//操作个数

CSdbms_Cols g_cols[100];		//最大100列
int	 g_nColsCount = 0;	//实际列数
	
CSdbms_Values g_values[100];	//最大100列
int	g_nValuesCount = 0;	//实际列数

CSdbms_Express* g_expr[100];	//最大100
int	g_nExprCount = 0;	//实际列数

CSdbms_OrderList g_order[100];	//最大100
int g_nOrderCount = 0;	//实际列数

ObjectRight g_obright[10];	//10个应该足够了
int g_nObRightCount = 0;

struct KeyWordTable
{
	char *strKeyWord;
	int  nValue;
};

KeyWordTable g_KeyWordTable[] = 
{
	{"AND",			OPAND},
	{"OR",			OPOR},
	{"NOT",			OPNOT},
	{"CONNECT",		CONNECT},
	{"CREATE",		CREATE},
	{"DROP",		DROP},
	{"ADD",			ADD},
	{"DEL",			DEL},
	{"CHANGE",		CHANGE},
	{"ROLE",		ROLE},
	{"GRANT",		GRANT},
	{"REVOKE",		REVOKE},
	{"SET",			SET},
	{"AUDIT",		AUDIT},
	{"NOAUDIT",		NOAUDIT},
	{"OBJRIGHT",	OBJRIGHT},
	{"SYSRIGHT",	SYSRIGHT},
	{"SELECT",		SELECT},
	{"INSERT",		INSERT},
	{"UPDATE",		UPDATE},
	{"DELETE",		YDELETE},
	{"NULL",		YNULL},
	{"INTO",		INTO},
	{"VALUES",		VALUES},
	{"WHERE",		WHERE},
	{"ORDER",		ORDER},
	{"ASC",			ASC},
	{"DESC",		DESC},
	{"BELIEVED",	BELIEVED},
	{"SELF",		SELF},
	{"DATABASE",	DATABASE},
	{"TABLE",		TABLE},
	{"VIEW",		VIEW},
	{"INDEX",		INDEX},
	{"CHAR",		CHAR},
	{"INT",			INT},
	{"BOOL",		BOOL},
	{"PRIMARY",		PRIMARY},
	{"KEY",			KEY},
	{"WITH",		WITH},
	{"AS",			AS},
	{"OF",			OF},
	{"TO",			TO},
	{"ON",			ON},
	{"BY",			BY},
	{"FROM",		FROM},
	{"FOR",			FOR},
	{"USER",		USER},
	{"ROLE",		ROLE},
	{"CHILD",		CHILD},
	{"PARENT",		PARENT},
	{"TOP",			TOP},
	{"PASSWORD",	PASSWORD},
	{"EXECUTED",	EXECUTED},
	{"OPTION",		OPTION},
	{"CASCADE",		CASCADE},
	{"RESTRICT",	RESTRICT},
	{"SECLEVEL",	SECLEVEL},
	{"SECURITY",	SECURITY},
	{"LEVEL",		LEVEL},
	{"ALLOW",		ALLOW},
	{"CURRENT",		CURRENT},
	{"TRUE",		TRUE},
	{"FALSE",		FALSE}
};

%}

%include {
#include "sdbms.h"
#include "Sdbms_GlobalDefines.h"
#include "Sdbms_DataStruct.h"
#include "SqlMsg.h"
}

%union {      
char* sval;
UINT  nval;
BOOL  bval;
SystemRight srval;
ObjectRight	orval;
CSdbms_SecurityLevel* slval;
CSdbms_Express* exprval;
CSdbms_Condition* condval;
} 

%token CONNECT,CREATE,DROP,ADD,DEL,CHANGE,ROLE,GRANT,REVOKE,SET,AUDIT,NOAUDIT,OBJRIGHT,SYSRIGHT
%token SELECT,INSERT,UPDATE,YDELETE,YNULL,INTO,VALUES,WHERE,ORDER,ASC,DESC,BELIEVED,SELF
%token DATABASE,TABLE,VIEW,INDEX,CHAR,INT,BOOL,PRIMARY,KEY
%token WITH,AS,OF,TO,ON,BY,FROM,FOR,USER,ROLE,CHILD,PARENT,TOP,PASSWORD,EXECUTED,OPTION,CASCADE,RESTRICT
%token SECLEVEL,SECURITY,LEVEL,ALLOW,CURRENT
%token OPADD,OPSUB,OPMUL,OPDIV,OPOR,OPAND,OPNOT,OPEQU,OPUNEQU,OPLESS,OPLESSEQU,OPMORE,OPMOREEQU
%token YTRUE,YFALSE
%token <sval> IDENTIFIER
%token <sval> STRING
%token <nval> INTEGER


%type <sval> dbname
%type <sval> username
%type <sval> usernames
%type <sval> password
%type <sval> rolename
%type <sval> rolenames
%type <nval> class
%type <sval> range
%type <sval> rangeitem
%type <sval> rangeitems
%type <sval> tablename
%type <sval> tablenames
%type <sval> fieldname
%type <sval> fieldnames
//%type <drval> operations1
%type <orval> objectright
%type <orval> objectrights
//%type <sval>  operations2
%type <srval> systemright
%type <srval> auditright
%type <srval> security_right
%type <sval>  systemrights
%type <slval> seclevel
%type <exprval>	expr
%type <exprval>	term
%type <exprval>	factor
%type <exprval>	colref
%type <condval> conditions
%type <condval> condition
%type <condval> condfactor
%type <condval> comp_clause
%type <condval>	where_clause
%type <slval>	believe_clause
%type <bval>	bool_value

%%
sqls		: sqls ';' sql
			| sql
//			| ';'
//			| /* empty */
			;
			
sql			: connect_database		//连接到数据库
			| create_database		//创建数据库
			| drop_database			//删除数据库
			| create_user			//创建用户
			| drop_user				//删除用户
			| create_role			//创建角色
			| drop_role				//删除角色
			| set_parent_role		//设置父角色
			| set_child_role		//设置子角色
			| set_top_role			//设置顶层角色
			| add_user_to_role		//把用户添加到一个角色中
			| del_user_from_role	//把用户从一个角色中删除
			| change_role			//改变用户的角色
			| grant1				//授权定义1
			| revoke1				//回收授权定义1
			| grant2				//授权定义2
			| revoke2				//回收授权定义2
			| set_user_seclevel		//设置用户最大密级
			| set_table_seclevel	//设置表密级
			| set_allow_seclevel	//设置用户在某表上的允许安全级
			| set_current_seclevel	//设置用户在某表上的当然安全

⌨️ 快捷键说明

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