Skip to content

Commit 6d3fb2a

Browse files
committed
New FbTrace format for Firebird 3 (DNET-773).
1 parent 0bad7f0 commit 6d3fb2a

File tree

8 files changed

+291
-43
lines changed

8 files changed

+291
-43
lines changed

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbDatabaseTraceConfiguration.cs

Lines changed: 132 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@
1212
* express or implied. See the License for the specific
1313
* language governing rights and limitations under the License.
1414
*
15-
* Copyright (c) 2010-2012 Jiri Cincura ([email protected])
15+
* Copyright (c) 2010-2017 Jiri Cincura ([email protected])
1616
* All Rights Reserved.
1717
*/
1818

1919
using System;
2020
using System.Text;
2121

22-
using FirebirdSql.Data.Common;
23-
2422
namespace FirebirdSql.Data.Services
2523
{
2624
public class FbDatabaseTraceConfiguration : FbTraceConfiguration
@@ -55,11 +53,26 @@ public FbDatabaseTraceConfiguration()
5553
public string IncludeFilter { get; set; }
5654
public string ExcludeFilter { get; set; }
5755

58-
public override string ToString()
56+
public string IncludeGdsCodes { get; set; }
57+
public string ExcludeGdsCodes { get; set; }
58+
59+
public string BuildConfiguration(FbTraceVersion version)
5960
{
60-
StringBuilder sb = new StringBuilder();
61+
switch (version)
62+
{
63+
case FbTraceVersion.Version1:
64+
return BuildConfiguration1();
65+
case FbTraceVersion.Version2:
66+
return BuildConfiguration2();
67+
default:
68+
throw new ArgumentOutOfRangeException(nameof(version));
69+
}
70+
}
71+
string BuildConfiguration1()
72+
{
73+
var sb = new StringBuilder();
6174
sb.Append("<database");
62-
sb.Append((!string.IsNullOrEmpty(DatabaseName) ? " " + WriteString(DatabaseName) : string.Empty));
75+
sb.Append((!string.IsNullOrEmpty(DatabaseName) ? $" {WriteRegEx(DatabaseName)}" : string.Empty));
6376
sb.AppendLine(">");
6477
sb.AppendFormat("enabled {0}", WriteBoolValue(Enabled));
6578
sb.AppendLine();
@@ -73,6 +86,16 @@ public override string ToString()
7386
sb.AppendFormat("exclude_filter {0}", WriteRegEx(ExcludeFilter));
7487
sb.AppendLine();
7588
}
89+
if (!string.IsNullOrEmpty(IncludeGdsCodes))
90+
{
91+
sb.AppendFormat("include_gds_codes {0}", WriteString(IncludeGdsCodes));
92+
sb.AppendLine();
93+
}
94+
if (!string.IsNullOrEmpty(ExcludeGdsCodes))
95+
{
96+
sb.AppendFormat("exclude_gds_codes {0}", WriteString(ExcludeGdsCodes));
97+
sb.AppendLine();
98+
}
7699
sb.AppendFormat("log_connections {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Connections)));
77100
sb.AppendLine();
78101
sb.AppendFormat("connection_id {0}", WriteNumber(ConnectionID));
@@ -91,6 +114,10 @@ public override string ToString()
91114
sb.AppendLine();
92115
sb.AppendFormat("log_procedure_finish {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.ProcedureFinish)));
93116
sb.AppendLine();
117+
sb.AppendFormat("log_function_start {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.FunctionStart)));
118+
sb.AppendLine();
119+
sb.AppendFormat("log_function_finish {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.FunctionFinish)));
120+
sb.AppendLine();
94121
sb.AppendFormat("log_trigger_start {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.TriggerStart)));
95122
sb.AppendLine();
96123
sb.AppendFormat("log_trigger_finish {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.TriggerFinish)));
@@ -99,10 +126,16 @@ public override string ToString()
99126
sb.AppendLine();
100127
sb.AppendFormat("log_errors {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Errors)));
101128
sb.AppendLine();
129+
sb.AppendFormat("log_warnings {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Warnings)));
130+
sb.AppendLine();
131+
sb.AppendFormat("log_initfini {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.InitFini)));
132+
sb.AppendLine();
102133
sb.AppendFormat("log_sweep {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Sweep)));
103134
sb.AppendLine();
104135
sb.AppendFormat("print_plan {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.PrintPlan)));
105136
sb.AppendLine();
137+
sb.AppendFormat("explain_plan {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.ExplainPlan)));
138+
sb.AppendLine();
106139
sb.AppendFormat("print_perf {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.PrintPerf)));
107140
sb.AppendLine();
108141
sb.AppendFormat("log_blr_requests {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.BLRRequests)));
@@ -128,5 +161,98 @@ public override string ToString()
128161
sb.AppendLine("</database>");
129162
return sb.ToString();
130163
}
164+
string BuildConfiguration2()
165+
{
166+
var sb = new StringBuilder();
167+
sb.Append("database");
168+
sb.Append((!string.IsNullOrEmpty(DatabaseName) ? $" = {WriteRegEx(DatabaseName)}" : string.Empty));
169+
sb.AppendLine("{");
170+
sb.AppendFormat("enabled = {0}", WriteBoolValue(Enabled));
171+
sb.AppendLine();
172+
if (!string.IsNullOrEmpty(IncludeFilter))
173+
{
174+
sb.AppendFormat("include_filter = {0}", WriteRegEx(IncludeFilter));
175+
sb.AppendLine();
176+
}
177+
if (!string.IsNullOrEmpty(ExcludeFilter))
178+
{
179+
sb.AppendFormat("exclude_filter = {0}", WriteRegEx(ExcludeFilter));
180+
sb.AppendLine();
181+
}
182+
if (!string.IsNullOrEmpty(IncludeGdsCodes))
183+
{
184+
sb.AppendFormat("include_gds_codes = {0}", WriteString(IncludeGdsCodes));
185+
sb.AppendLine();
186+
}
187+
if (!string.IsNullOrEmpty(ExcludeGdsCodes))
188+
{
189+
sb.AppendFormat("exclude_gds_codes = {0}", WriteString(ExcludeGdsCodes));
190+
sb.AppendLine();
191+
}
192+
sb.AppendFormat("log_connections = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Connections)));
193+
sb.AppendLine();
194+
sb.AppendFormat("connection_id = {0}", WriteNumber(ConnectionID));
195+
sb.AppendLine();
196+
sb.AppendFormat("log_transactions = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Transactions)));
197+
sb.AppendLine();
198+
sb.AppendFormat("log_statement_prepare = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.StatementPrepare)));
199+
sb.AppendLine();
200+
sb.AppendFormat("log_statement_free = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.StatementFree)));
201+
sb.AppendLine();
202+
sb.AppendFormat("log_statement_start = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.StatementStart)));
203+
sb.AppendLine();
204+
sb.AppendFormat("log_statement_finish = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.StatementFinish)));
205+
sb.AppendLine();
206+
sb.AppendFormat("log_procedure_start = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.ProcedureStart)));
207+
sb.AppendLine();
208+
sb.AppendFormat("log_procedure_finish = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.ProcedureFinish)));
209+
sb.AppendLine();
210+
sb.AppendFormat("log_function_start = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.FunctionStart)));
211+
sb.AppendLine();
212+
sb.AppendFormat("log_function_finish = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.FunctionFinish)));
213+
sb.AppendLine();
214+
sb.AppendFormat("log_trigger_start = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.TriggerStart)));
215+
sb.AppendLine();
216+
sb.AppendFormat("log_trigger_finish = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.TriggerFinish)));
217+
sb.AppendLine();
218+
sb.AppendFormat("log_context = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Context)));
219+
sb.AppendLine();
220+
sb.AppendFormat("log_errors = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Errors)));
221+
sb.AppendLine();
222+
sb.AppendFormat("log_warnings = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Warnings)));
223+
sb.AppendLine();
224+
sb.AppendFormat("log_initfini = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.InitFini)));
225+
sb.AppendLine();
226+
sb.AppendFormat("log_sweep = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.Sweep)));
227+
sb.AppendLine();
228+
sb.AppendFormat("print_plan = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.PrintPlan)));
229+
sb.AppendLine();
230+
sb.AppendFormat("explain_plan = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.ExplainPlan)));
231+
sb.AppendLine();
232+
sb.AppendFormat("print_perf = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.PrintPerf)));
233+
sb.AppendLine();
234+
sb.AppendFormat("log_blr_requests = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.BLRRequests)));
235+
sb.AppendLine();
236+
sb.AppendFormat("print_blr = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.PrintBLR)));
237+
sb.AppendLine();
238+
sb.AppendFormat("log_dyn_requests = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.DYNRequests)));
239+
sb.AppendLine();
240+
sb.AppendFormat("print_dyn = {0}", WriteBoolValue(Events.HasFlag(FbDatabaseTraceEvents.PrintDYN)));
241+
sb.AppendLine();
242+
sb.AppendFormat("time_threshold = {0}", WriteNumber((int)TimeThreshold.TotalMilliseconds));
243+
sb.AppendLine();
244+
sb.AppendFormat("max_sql_length = {0}", WriteNumber(MaxSQLLength));
245+
sb.AppendLine();
246+
sb.AppendFormat("max_blr_length = {0}", WriteNumber(MaxBLRLength));
247+
sb.AppendLine();
248+
sb.AppendFormat("max_dyn_length = {0}", WriteNumber(MaxDYNLength));
249+
sb.AppendLine();
250+
sb.AppendFormat("max_arg_length = {0}", WriteNumber(MaxArgumentLength));
251+
sb.AppendLine();
252+
sb.AppendFormat("max_arg_count = {0}", WriteNumber(MaxArgumentsCount));
253+
sb.AppendLine();
254+
sb.AppendLine("}");
255+
return sb.ToString();
256+
}
131257
}
132258
}

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbDatabaseTraceConfigurationCollection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ namespace FirebirdSql.Data.Services
2424
{
2525
public class FbDatabaseTraceConfigurationCollection : List<FbDatabaseTraceConfiguration>
2626
{
27-
public override string ToString()
27+
public string BuildConfiguration(FbTraceVersion version)
2828
{
29-
return string.Join(Environment.NewLine, this.Select(x => x.ToString()));
29+
return string.Join(Environment.NewLine, this.Select(x => x.BuildConfiguration(version)));
3030
}
3131
}
3232
}

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbDatabaseTraceEvents.cs

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* express or implied. See the License for the specific
1313
* language governing rights and limitations under the License.
1414
*
15-
* Copyright (c) 2010-2012 Jiri Cincura ([email protected])
15+
* Copyright (c) 2010-2017 Jiri Cincura ([email protected])
1616
* All Rights Reserved.
1717
*/
1818

@@ -23,24 +23,29 @@ namespace FirebirdSql.Data.Services
2323
[Flags]
2424
public enum FbDatabaseTraceEvents
2525
{
26-
Connections = 0x00001,
27-
Transactions = 0x00002,
28-
StatementPrepare = 0x00004,
29-
StatementFree = 0x00008,
30-
StatementStart = 0x00010,
31-
StatementFinish = 0x00020,
32-
ProcedureStart = 0x00040,
33-
ProcedureFinish = 0x00080,
34-
TriggerStart = 0x00100,
35-
TriggerFinish = 0x00200,
36-
Context = 0x00400,
37-
PrintPlan = 0x00800,
38-
PrintPerf = 0x01000,
39-
BLRRequests = 0x02000,
40-
PrintBLR = 0x04000,
41-
DYNRequests = 0x08000,
42-
PrintDYN = 0x10000,
43-
Errors = 0x20000,
44-
Sweep = 0x40000,
26+
Connections = 0x00_00_01,
27+
Transactions = 0x00_00_02,
28+
StatementPrepare = 0x00_00_04,
29+
StatementFree = 0x00_00_08,
30+
StatementStart = 0x00_00_10,
31+
StatementFinish = 0x00_00_20,
32+
ProcedureStart = 0x00_00_40,
33+
ProcedureFinish = 0x00_00_80,
34+
FunctionStart = 0x00_01_00,
35+
FunctionFinish = 0x00_02_00,
36+
TriggerStart = 0x00_04_00,
37+
TriggerFinish = 0x00_08_00,
38+
Context = 0x00_10_00,
39+
Errors = 0x00_20_00,
40+
Warnings = 0x00_40_00,
41+
InitFini = 0x00_80_00,
42+
Sweep = 0x01_00_00,
43+
PrintPlan = 0x02_00_00,
44+
ExplainPlan = 0x04_00_00,
45+
PrintPerf = 0x08_00_00,
46+
BLRRequests = 0x10_00_00,
47+
PrintBLR = 0x20_00_00,
48+
DYNRequests = 0x40_00_00,
49+
PrintDYN = 0x80_00_00,
4550
}
4651
}

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbServiceTraceConfiguration.cs

Lines changed: 74 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@
1212
* express or implied. See the License for the specific
1313
* language governing rights and limitations under the License.
1414
*
15-
* Copyright (c) 2010-2012 Jiri Cincura ([email protected])
15+
* Copyright (c) 2010-2017 Jiri Cincura ([email protected])
1616
* All Rights Reserved.
1717
*/
1818

1919
using System;
2020
using System.Text;
2121

22-
using FirebirdSql.Data.Common;
23-
2422
namespace FirebirdSql.Data.Services
2523
{
2624
public class FbServiceTraceConfiguration : FbTraceConfiguration
@@ -31,13 +29,30 @@ public FbServiceTraceConfiguration()
3129
}
3230

3331
public bool Enabled { get; set; }
32+
3433
public FbServiceTraceEvents Events { get; set; }
34+
3535
public string IncludeFilter { get; set; }
3636
public string ExcludeFilter { get; set; }
3737

38-
public override string ToString()
38+
public string IncludeGdsCodes { get; set; }
39+
public string ExcludeGdsCodes { get; set; }
40+
41+
public string BuildConfiguration(FbTraceVersion version)
42+
{
43+
switch (version)
44+
{
45+
case FbTraceVersion.Version1:
46+
return BuildConfiguration1();
47+
case FbTraceVersion.Version2:
48+
return BuildConfiguration2();
49+
default:
50+
throw new ArgumentOutOfRangeException(nameof(version));
51+
}
52+
}
53+
string BuildConfiguration1()
3954
{
40-
StringBuilder sb = new StringBuilder();
55+
var sb = new StringBuilder();
4156
sb.AppendLine("<services>");
4257
sb.AppendFormat("enabled {0}", WriteBoolValue(Enabled));
4358
sb.AppendLine();
@@ -51,14 +66,68 @@ public override string ToString()
5166
sb.AppendFormat("exclude_filter {0}", WriteRegEx(ExcludeFilter));
5267
sb.AppendLine();
5368
}
69+
if (!string.IsNullOrEmpty(IncludeGdsCodes))
70+
{
71+
sb.AppendFormat("include_gds_codes {0}", WriteString(IncludeGdsCodes));
72+
sb.AppendLine();
73+
}
74+
if (!string.IsNullOrEmpty(ExcludeGdsCodes))
75+
{
76+
sb.AppendFormat("exclude_gds_codes {0}", WriteString(ExcludeGdsCodes));
77+
sb.AppendLine();
78+
}
5479
sb.AppendFormat("log_services {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.Services)));
5580
sb.AppendLine();
5681
sb.AppendFormat("log_service_query {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.ServiceQuery)));
5782
sb.AppendLine();
5883
sb.AppendFormat("log_errors {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.Errors)));
5984
sb.AppendLine();
85+
sb.AppendFormat("log_warnings {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.Warnings)));
86+
sb.AppendLine();
87+
sb.AppendFormat("log_initfini {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.InitFini)));
88+
sb.AppendLine();
6089
sb.AppendLine("</services>");
6190
return sb.ToString();
6291
}
92+
string BuildConfiguration2()
93+
{
94+
var sb = new StringBuilder();
95+
sb.AppendLine("services");
96+
sb.AppendLine("{");
97+
sb.AppendFormat("enabled = {0}", WriteBoolValue(Enabled));
98+
sb.AppendLine();
99+
if (!string.IsNullOrEmpty(IncludeFilter))
100+
{
101+
sb.AppendFormat("include_filter = {0}", WriteRegEx(IncludeFilter));
102+
sb.AppendLine();
103+
}
104+
if (!string.IsNullOrEmpty(ExcludeFilter))
105+
{
106+
sb.AppendFormat("exclude_filter = {0}", WriteRegEx(ExcludeFilter));
107+
sb.AppendLine();
108+
}
109+
if (!string.IsNullOrEmpty(IncludeGdsCodes))
110+
{
111+
sb.AppendFormat("include_gds_codes = {0}", WriteString(IncludeGdsCodes));
112+
sb.AppendLine();
113+
}
114+
if (!string.IsNullOrEmpty(ExcludeGdsCodes))
115+
{
116+
sb.AppendFormat("exclude_gds_codes = {0}", WriteString(ExcludeGdsCodes));
117+
sb.AppendLine();
118+
}
119+
sb.AppendFormat("log_services = {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.Services)));
120+
sb.AppendLine();
121+
sb.AppendFormat("log_service_query = {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.ServiceQuery)));
122+
sb.AppendLine();
123+
sb.AppendFormat("log_errors = {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.Errors)));
124+
sb.AppendLine();
125+
sb.AppendFormat("log_warnings = {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.Warnings)));
126+
sb.AppendLine();
127+
sb.AppendFormat("log_initfini = {0}", WriteBoolValue(Events.HasFlag(FbServiceTraceEvents.InitFini)));
128+
sb.AppendLine();
129+
sb.AppendLine("}");
130+
return sb.ToString();
131+
}
63132
}
64133
}

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbServiceTraceEvents.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* express or implied. See the License for the specific
1313
* language governing rights and limitations under the License.
1414
*
15-
* Copyright (c) 2010-2012 Jiri Cincura ([email protected])
15+
* Copyright (c) 2010-2017 Jiri Cincura ([email protected])
1616
* All Rights Reserved.
1717
*/
1818

@@ -25,6 +25,8 @@ public enum FbServiceTraceEvents
2525
{
2626
Services = 0x01,
2727
ServiceQuery = 0x02,
28-
Errors = 0x04
28+
Errors = 0x04,
29+
Warnings = 0x08,
30+
InitFini = 0x10,
2931
}
3032
}

0 commit comments

Comments
 (0)