Skip to content

Commit 334ec44

Browse files
committed
Added syntax highlighting, and fixed getting the text correctly from pg_sql protocol buffer
1 parent b39a3c6 commit 334ec44

11 files changed

Lines changed: 1737 additions & 12 deletions

File tree

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+

2+
namespace ExpressProfiler
3+
{
4+
5+
6+
public class ConsoleOutputWriter
7+
: OutputWriter
8+
{
9+
private static bool s_isWindows;
10+
private static System.Collections.Generic.Dictionary<
11+
System.Drawing.Color, System.ConsoleColor> s_colorDict;
12+
13+
14+
private System.ConsoleColor m_backupForeground;
15+
private System.ConsoleColor m_backupBackground;
16+
17+
18+
static ConsoleOutputWriter()
19+
{
20+
s_isWindows = System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(
21+
System.Runtime.InteropServices.OSPlatform.Windows
22+
);
23+
24+
s_colorDict = SetupColorDictionary();
25+
}
26+
27+
28+
29+
public ConsoleOutputWriter()
30+
{
31+
this.m_backupForeground = System.Console.ForegroundColor;
32+
this.m_backupBackground = System.Console.BackgroundColor;
33+
}
34+
35+
36+
private static System.Collections.Generic.Dictionary<
37+
System.Drawing.Color, System.ConsoleColor>
38+
SetupColorDictionary()
39+
{
40+
System.Collections.Generic.Dictionary<System.Drawing.Color, System.ConsoleColor>
41+
dict = new System.Collections.Generic.Dictionary<
42+
System.Drawing.Color, System.ConsoleColor
43+
>();
44+
45+
dict.Add(System.Drawing.Color.Black, System.ConsoleColor.Black);
46+
dict.Add(System.Drawing.Color.DarkBlue, System.ConsoleColor.DarkBlue);
47+
dict.Add(System.Drawing.Color.DarkGreen, System.ConsoleColor.DarkGreen);
48+
dict.Add(System.Drawing.Color.DarkCyan, System.ConsoleColor.DarkCyan);
49+
dict.Add(System.Drawing.Color.DarkRed, System.ConsoleColor.DarkRed);
50+
dict.Add(System.Drawing.Color.DarkMagenta, System.ConsoleColor.DarkMagenta);
51+
dict.Add(System.Drawing.Color.FromArgb(215, 195, 42), System.ConsoleColor.DarkYellow);
52+
dict.Add(System.Drawing.Color.Gray, System.ConsoleColor.Gray);
53+
dict.Add(System.Drawing.Color.DarkGray, System.ConsoleColor.DarkGray);
54+
dict.Add(System.Drawing.Color.Blue, System.ConsoleColor.Blue);
55+
dict.Add(System.Drawing.Color.Green, System.ConsoleColor.Green);
56+
dict.Add(System.Drawing.Color.Cyan, System.ConsoleColor.Cyan);
57+
dict.Add(System.Drawing.Color.Red, System.ConsoleColor.Red);
58+
dict.Add(System.Drawing.Color.Magenta, System.ConsoleColor.Magenta);
59+
dict.Add(System.Drawing.Color.Yellow, System.ConsoleColor.Yellow);
60+
dict.Add(System.Drawing.Color.White, System.ConsoleColor.White);
61+
dict.Add(System.Drawing.Color.Fuchsia, System.ConsoleColor.Magenta); // Correct ?
62+
63+
return dict;
64+
}
65+
66+
67+
public override System.Drawing.Color ForeColor
68+
{
69+
70+
71+
set
72+
{
73+
// if (!s_colorDict.ContainsKey(value)) System.Console.WriteLine(value);
74+
System.Console.ForegroundColor = s_colorDict[value];
75+
}
76+
}
77+
78+
79+
public override System.Drawing.Color BackColor
80+
{
81+
set
82+
{
83+
// if (!s_colorDict.ContainsKey(value)) System.Console.WriteLine(value);
84+
System.Console.BackgroundColor = s_colorDict[value];
85+
//this.AppendLine();
86+
}
87+
}
88+
89+
90+
public override void AppendLine()
91+
{
92+
// Finish the line with empty color
93+
System.Console.Write(new string(' ', System.Console.BufferWidth - System.Console.CursorLeft));
94+
95+
if (!s_isWindows)
96+
System.Console.Write(System.Environment.NewLine);
97+
//else System.Console.WriteLine();
98+
}
99+
100+
101+
public override void Append(string text)
102+
{
103+
System.Console.Write(text);
104+
}
105+
106+
107+
public override string ToString()
108+
{
109+
System.Console.ForegroundColor = this.m_backupForeground;
110+
System.Console.BackgroundColor = this.m_backupBackground;
111+
112+
return "";
113+
}
114+
115+
116+
}
117+
118+
119+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+

2+
namespace ExpressProfiler
3+
{
4+
5+
6+
public class HtmlOutputWriter
7+
: OutputWriter
8+
{
9+
private static System.Collections.Generic.Dictionary<
10+
System.Drawing.Color, System.ConsoleColor> s_colorDict;
11+
12+
13+
private System.ConsoleColor m_backupForeground;
14+
private System.ConsoleColor m_backupBackground;
15+
16+
17+
static HtmlOutputWriter()
18+
{
19+
s_colorDict = SetupColorDictionary();
20+
}
21+
22+
23+
24+
public HtmlOutputWriter()
25+
{
26+
this.m_backupForeground = System.Console.ForegroundColor;
27+
this.m_backupBackground = System.Console.BackgroundColor;
28+
}
29+
30+
31+
private static System.Collections.Generic.Dictionary<
32+
System.Drawing.Color, System.ConsoleColor>
33+
SetupColorDictionary()
34+
{
35+
System.Collections.Generic.Dictionary<System.Drawing.Color, System.ConsoleColor>
36+
dict = new System.Collections.Generic.Dictionary<
37+
System.Drawing.Color, System.ConsoleColor
38+
>();
39+
40+
dict.Add(System.Drawing.Color.Black, System.ConsoleColor.Black);
41+
dict.Add(System.Drawing.Color.DarkBlue, System.ConsoleColor.DarkBlue);
42+
dict.Add(System.Drawing.Color.DarkGreen, System.ConsoleColor.DarkGreen);
43+
dict.Add(System.Drawing.Color.DarkCyan, System.ConsoleColor.DarkCyan);
44+
dict.Add(System.Drawing.Color.DarkRed, System.ConsoleColor.DarkRed);
45+
dict.Add(System.Drawing.Color.DarkMagenta, System.ConsoleColor.DarkMagenta);
46+
dict.Add(System.Drawing.Color.FromArgb(215, 195, 42), System.ConsoleColor.DarkYellow);
47+
dict.Add(System.Drawing.Color.Gray, System.ConsoleColor.Gray);
48+
dict.Add(System.Drawing.Color.DarkGray, System.ConsoleColor.DarkGray);
49+
dict.Add(System.Drawing.Color.Blue, System.ConsoleColor.Blue);
50+
dict.Add(System.Drawing.Color.Green, System.ConsoleColor.Green);
51+
dict.Add(System.Drawing.Color.Cyan, System.ConsoleColor.Cyan);
52+
dict.Add(System.Drawing.Color.Red, System.ConsoleColor.Red);
53+
dict.Add(System.Drawing.Color.Magenta, System.ConsoleColor.Magenta);
54+
dict.Add(System.Drawing.Color.Yellow, System.ConsoleColor.Yellow);
55+
dict.Add(System.Drawing.Color.White, System.ConsoleColor.White);
56+
57+
return dict;
58+
}
59+
60+
61+
public override System.Drawing.Color ForeColor
62+
{
63+
set { System.Console.ForegroundColor = s_colorDict[value]; }
64+
}
65+
66+
67+
public override System.Drawing.Color BackColor
68+
{
69+
set
70+
{
71+
System.Console.BackgroundColor = s_colorDict[value];
72+
System.Console.WriteLine(new string(' ', System.Console.BufferWidth));
73+
}
74+
}
75+
76+
77+
public override void AppendLine()
78+
{
79+
System.Console.WriteLine();
80+
}
81+
82+
83+
public override void Append(string text)
84+
{
85+
System.Console.Write(text);
86+
}
87+
88+
89+
public override string ToString()
90+
{
91+
System.Console.ForegroundColor = this.m_backupForeground;
92+
System.Console.BackgroundColor = this.m_backupBackground;
93+
94+
return "";
95+
}
96+
97+
98+
}
99+
100+
101+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+

2+
namespace ExpressProfiler
3+
{
4+
5+
6+
public abstract class OutputWriter
7+
{
8+
public abstract System.Drawing.Color ForeColor { set; }
9+
public abstract System.Drawing.Color BackColor { set; }
10+
public abstract void AppendLine();
11+
public abstract void Append(string text);
12+
public new abstract string ToString();
13+
}
14+
15+
16+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
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

Comments
 (0)