📄 sdbms_sql.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 + -