1+
2+ // Traceutils assembly
3+ // writen by Locky, 2009.
4+
5+
6+ namespace ExpressProfiler
7+ {
8+
9+
10+ class Sqltokens
11+ {
12+
13+ #region Keywords
14+ private const string Keywords = "ADD,ALTER,AS,ASC,AUTHORIZATION,BACKUP," +
15+ "BEGIN,BREAK,BROWSE,BULK,BY,CASCADE," +
16+ "CHECK,CHECKPOINT,CLOSE,CLUSTERED,COLLATE," +
17+ "COLUMN,COMMIT,COMPUTE,CONSTRAINT,CONTAINS,CONTAINSTABLE," +
18+ "CONTINUE,CREATE,CURRENT,CURSOR,DATABASE," +
19+ "DBCC,DEALLOCATE,DECLARE,DEFAULT,DELETE,DENY,DESC,DISK," +
20+ "DISTINCT,DISTRIBUTED,DOUBLE,DROP,DUMMY,DUMP,ELSE,END," +
21+ "ERRLVL,ESCAPE,EXCEPT,EXEC,EXECUTE,EXIT,FETCH,FILE," +
22+ "FILLFACTOR,FOR,FOREIGN,FORMSOF,FREETEXT,FREETEXTTABLE,FROM,FULL," +
23+ "FUNCTION,GOTO,GRANT,GROUP,HAVING,HOLDLOCK,IDENTITY," +
24+ "IDENTITYCOL,IDENTITY_INSERT,IF,INFLECTIONAL,INDEX,INNER,INSERT," +
25+ "INTERSECT,INTO,IS,ISABOUT,KEY,KILL,LINENO,LOAD," +
26+ "NATIONAL,NOCHECK,NONCLUSTERED,OF,OFF," +
27+ "OFFSETS,ON,OPEN,OPENDATASOURCE,OPENQUERY,OPENROWSET,OPENXML," +
28+ "OPTION,ORDER,OVER,PERCENT,PLAN,PRECISION," +
29+ "PRIMARY,PRINT,PROC,PROCEDURE,PUBLIC,RAISERROR,READ," +
30+ "READTEXT,RECONFIGURE,REFERENCES,REPLICATION,RESTORE," +
31+ "RESTRICT,RETURN,REVOKE,ROLLBACK,ROWCOUNT,ROWGUIDCOL," +
32+ "RULE,SAVE,SCHEMA,SELECT,SET,SETUSER,SHUTDOWN," +
33+ "STATISTICS,TABLE,TEXTSIZE,THEN,TO,TOP,TRAN,TRANSACTION," +
34+ "TRIGGER,TRUNCATE,TSEQUAL,UNION,UNIQUE,UPDATE,UPDATETEXT," +
35+ "USE,VALUES,VARYING,VIEW,WAITFOR,WEIGHT,WHEN,WHERE,WHILE," +
36+ "WITH,WRITETEXT,CURRENT_DATE,CURRENT_TIME" +
37+ ",OUT,NEXT,PRIOR,RETURNS,ABSOLUTE,ACTION,PARTIAL,FALSE" +
38+ ",PREPARE,FIRST,PRIVILEGES,AT,GLOBAL,RELATIVE,ROWS,HOUR,MIN,MAX" +
39+ ",SCROLL,SECOND,SECTION,SIZE,INSENSITIVE,CONNECT,CONNECTION" +
40+ ",ISOLATION,LEVEL,LOCAL,DATE,MINUTE,TRANSLATION" +
41+ ",TRUE,NO,ONLY,WORK,OUTPUT" +
42+ ",ABSOLUTE,ACTION,FREE,PRIOR,PRIVILEGES,AFTER,GLOBAL" +
43+ ",HOUR,RELATIVE,IGNORE,AT,RETURNS,ROLLUP,ROWS,SCROLL" +
44+ ",ISOLATION,SECOND,SECTION,SEQUENCE,LAST,SIZE,LEVEL" +
45+ ",CONNECT,CONNECTION,LOCAL,CUBE,MINUTE,MODIFY,STATIC" +
46+ ",DATE,TEMPORARY,TIME,NEXT,NO,TRANSLATION,TRUE,ONLY" +
47+ ",OUT,DYNAMIC,OUTPUT,PARTIAL,WORK,FALSE,FIRST,PREPARE,GROUPING,FORMAT,INIT,STATS" +
48+ "FORMAT,INIT,STATS,NOCOUNT,FORWARD_ONLY,KEEPFIXED,FORCE,KEEP,MERGE,HASH,LOOP,maxdop,nolock" +
49+ ",updlock,tablock,tablockx,paglock,readcommitted,readpast,readuncommitted,repeatableread,rowlock,serializable,xlock"
50+ + ",delay" ;
51+
52+ #endregion
53+
54+
55+ #region Functions
56+ private const string Functions = "@@CONNECTIONS,@@CPU_BUSY,@@CURSOR_ROWS,@@DATEFIRST,@@DBTS,@@ERROR," +
57+ "@@FETCH_STATUS,@@IDENTITY,@@IDLE,@@IO_BUSY,@@LANGID,@@LANGUAGE," +
58+ "@@LOCK_TIMEOUT,@@MAX_CONNECTIONS,@@MAX_PRECISION,@@NESTLEVEL,@@OPTIONS," +
59+ "@@PACKET_ERRORS,@@PACK_RECEIVED,@@PACK_SENT,@@PROCID,@@REMSERVER," +
60+ "@@ROWCOUNT,@@SERVERNAME,@@SERVICENAME,@@SPID,@@TEXTSIZE,@@TIMETICKS," +
61+ "@@TOTAL_ERRORS,@@TOTAL_READ,@@TOTAL_WRITE,@@TRANCOUNT,@@VERSION," +
62+ "ABS,ACOS,APP_NAME,ASCII,ASIN,ATAN,ATN2,AVG,BINARY_CHECKSUM,CAST," +
63+ "CEILING,CHARINDEX,CHECKSUM,CHECKSUM_AGG,COLLATIONPROPERTY," +
64+ "COLUMNPROPERTY,COL_LENGTH,COL_NAME,COS,COT,COUNT," +
65+ "COUNT_BIG," +
66+ "CURSOR_STATUS,DATABASEPROPERTY,DATABASEPROPERTYEX," +
67+ "DATALENGTH,DATEADD,DATEDIFF,DATENAME,DATEPART,DAY,DB_ID,DB_NAME,DEGREES," +
68+ "DIFFERENCE,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,FILEPROPERTY," +
69+ "FILE_ID,FILE_NAME,FLOOR" +
70+ "" +
71+ "FORMATMESSAGE,FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY," +
72+ "GETANSINULL,GETDATE,GETUTCDATE,HAS_DBACCESS,HOST_ID,HOST_NAME," +
73+ "IDENT_CURRENT,IDENT_INCR,IDENT_SEED,INDEXKEY_PROPERTY,INDEXPROPERTY," +
74+ "INDEX_COL,ISDATE,ISNULL,ISNUMERIC,IS_MEMBER,IS_SRVROLEMEMBER,LEN,LOG," +
75+ "LOG10,LOWER,LTRIM,MONTH,NEWID,OBJECTPROPERTY,OBJECT_ID," +
76+ "OBJECT_NAME,PARSENAME,PATINDEX," +
77+ "PERMISSIONS,PI,POWER,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,REVERSE," +
78+ "ROUND,ROWCOUNT_BIG,RTRIM,SCOPE_IDENTITY,SERVERPROPERTY,SESSIONPROPERTY," +
79+ "SIGN,SIN,SOUNDEX,SPACE,SQL_VARIANT_PROPERTY,SQRT,SQUARE," +
80+ "STATS_DATE,STDEV,STDEVP,STR,STUFF,SUBSTRING,SUM,SUSER_SID,SUSER_SNAME," +
81+ "TAN,TEXTPTR,TEXTVALID,TYPEPROPERTY,UNICODE,UPPER," +
82+ "USER_ID,USER_NAME,VAR,VARP,YEAR" ;
83+
84+ #endregion
85+ #region Types
86+ private const string Types = "bigint,binary,bit,char,character,datetime," +
87+ "dec,decimal,float,image,int," +
88+ "integer,money,nchar,ntext,nvarchar,real," +
89+ "rowversion,smalldatetime,smallint,smallmoney," +
90+ "sql_variant,sysname,text,timestamp,tinyint,uniqueidentifier," +
91+ "varbinary,varchar,NUMERIC" ;
92+ #endregion
93+
94+ private const string Greykeywords = "AND,EXISTS,ALL,ANY,BETWEEN,IN,SOME,JOIN,CROSS,OR,NULL,OUTER,NOT,LIKE" ;
95+ private const string Fukeywords = "CASE,RIGHT,COALESCE,SESSION_USER,CONVERT,SYSTEM_USER,LEFT,CURRENT_TIMESTAMP,CURRENT_USER,NULLIF,USER" ;
96+
97+ private readonly System . Collections . Generic . Dictionary < string , YukonLexer . TokenKind >
98+ m_Words = new System . Collections . Generic
99+ . Dictionary < string , YukonLexer . TokenKind > ( ) ;
100+
101+ public YukonLexer . TokenKind this [ string token ] { get { token = token . ToLower ( ) ; return m_Words . ContainsKey ( token ) ? m_Words [ token ] : YukonLexer . TokenKind . tkUnknown ; } }
102+
103+
104+ private void AddTokens ( string tokens , YukonLexer . TokenKind tokenkind )
105+ {
106+ System . Text . StringBuilder curtoken = new System . Text . StringBuilder ( ) ;
107+ for ( int i = 0 ; i < tokens . Length ; i ++ )
108+ {
109+ if ( tokens [ i ] == ',' )
110+ {
111+ string s = curtoken . ToString ( ) . ToLower ( ) ;
112+ if ( ! m_Words . ContainsKey ( s ) )
113+ m_Words . Add ( s , tokenkind ) ;
114+ curtoken = new System . Text . StringBuilder ( ) ;
115+ }
116+ else
117+ {
118+ curtoken . Append ( tokens [ i ] ) ;
119+ }
120+ }
121+ if ( curtoken . Length != 0 ) m_Words . Add ( curtoken . ToString ( ) , tokenkind ) ;
122+ }
123+
124+
125+ public Sqltokens ( )
126+ {
127+ AddTokens ( Keywords , YukonLexer . TokenKind . tkKey ) ;
128+ AddTokens ( Functions , YukonLexer . TokenKind . tkFunction ) ;
129+ AddTokens ( Types , YukonLexer . TokenKind . tkDatatype ) ;
130+ AddTokens ( Greykeywords , YukonLexer . TokenKind . tkGreyKeyword ) ;
131+ AddTokens ( Fukeywords , YukonLexer . TokenKind . tkFuKeyword ) ;
132+ }
133+
134+
135+ }
136+
137+
138+ }
0 commit comments