Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,22 @@ DROP EVENT SESSION [{sessionName}] ON DATABASE

CREATE EVENT SESSION [{sessionName}] ON DATABASE
ADD EVENT sqlserver.attention(
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.nt_username,sqlserver.query_hash,sqlserver.server_principal_name,sqlserver.session_id)
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.username,sqlserver.query_hash,sqlserver.session_id)
WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.existing_connection(SET collect_options_text=(1)
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.nt_username,sqlserver.server_principal_name,sqlserver.session_id)),
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.username,sqlserver.session_id)),
ADD EVENT sqlserver.login(SET collect_options_text=(1)
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.nt_username,sqlserver.server_principal_name,sqlserver.session_id)),
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.username,sqlserver.session_id)),
ADD EVENT sqlserver.logout(
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.nt_username,sqlserver.server_principal_name,sqlserver.session_id)),
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.username,sqlserver.session_id)),
ADD EVENT sqlserver.rpc_completed(
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.nt_username,sqlserver.query_hash,sqlserver.server_principal_name,sqlserver.session_id)
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.username,sqlserver.query_hash,sqlserver.session_id)
WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sql_batch_completed(
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.nt_username,sqlserver.query_hash,sqlserver.server_principal_name,sqlserver.session_id)
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.username,sqlserver.query_hash,sqlserver.session_id)
WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sql_batch_starting(
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.nt_username,sqlserver.query_hash,sqlserver.server_principal_name,sqlserver.session_id)
ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.username,sqlserver.query_hash,sqlserver.session_id)
WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0))))
ADD TARGET package0.ring_buffer(SET max_events_limit=(1001))
WITH (EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=5 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,8 @@ private async Task SaveRecentConnection()
var authMode = (Shared.Enums.AuthenticationMode)selectedAuthenticationMode;
var newConnection = new Connection(0, view.Database ?? "master", DateTime.UtcNow, view.Server, view.User?.Length == 0, view.Password, view.User, _currentEngineType, authMode);
var existingConnection = await _connectionRepository.Find(f => string.Equals(f.DataSource, newConnection.DataSource, StringComparison.InvariantCultureIgnoreCase)
&& string.Equals(f.UserId, newConnection.UserId, StringComparison.InvariantCultureIgnoreCase));
&& string.Equals(f.UserId, newConnection.UserId, StringComparison.InvariantCultureIgnoreCase)
&& string.Equals(f.InitialCatalog, newConnection.InitialCatalog, StringComparison.InvariantCultureIgnoreCase));
if (existingConnection == null)
{
await _connectionRepository.AddAsync(newConnection);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using LightQueryProfiler.Shared.Models;
using LightQueryProfiler.Shared.Enums;
using LightQueryProfiler.Shared.Models;
using LightQueryProfiler.Shared.Repositories.Interfaces;
using LightQueryProfiler.WinFormsApp.Views;
using System.Data;
Expand Down Expand Up @@ -31,13 +32,32 @@ private void View_CellDoubleClick(object? sender, EventArgs e)
var row = view.RecentConnectionsGridView.Rows[dataGridViewCellEventArgs.RowIndex];
if (row != null)
{
// Read EngineType and AuthenticationMode from grid cells
DatabaseEngineType? engineType = null;
var engineTypeValue = row.Cells[nameof(Connection.EngineType)].Value;
if (engineTypeValue != null &&
engineTypeValue != DBNull.Value &&
!string.IsNullOrWhiteSpace(engineTypeValue.ToString()))
{
engineType = (DatabaseEngineType)Enum.Parse(typeof(DatabaseEngineType), engineTypeValue.ToString()!);
}

AuthenticationMode authenticationMode = AuthenticationMode.WindowsAuth;
if (row.Cells[nameof(Connection.AuthenticationMode)].Value != null &&
row.Cells[nameof(Connection.AuthenticationMode)].Value != DBNull.Value)
{
authenticationMode = (AuthenticationMode)Convert.ToInt32(row.Cells[nameof(Connection.AuthenticationMode)].Value);
}

Connection connection = new(Convert.ToInt32(row.Cells[nameof(Connection.Id)].Value),
string.Empty,
Convert.ToDateTime(row.Cells["Creation Date"].Value),
row.Cells[nameof(Connection.DataSource)].Value?.ToString() ?? string.Empty,
Convert.ToBoolean(row.Cells[nameof(Connection.IntegratedSecurity)].Value),
row.Cells[nameof(Connection.Password)].Value?.ToString() ?? string.Empty,
row.Cells[nameof(Connection.UserId)].Value?.ToString() ?? string.Empty
row.Cells[nameof(Connection.UserId)].Value?.ToString() ?? string.Empty,
engineType,
authenticationMode
);
SetConnection(connection);
view.Form.DialogResult = DialogResult.OK;
Expand Down Expand Up @@ -126,6 +146,7 @@ private DataTable GetDataTable(List<Connection> connections)
table.Columns.Add(nameof(Connection.IntegratedSecurity), typeof(bool));
table.Columns.Add("Creation Date", typeof(DateTime));
table.Columns.Add(nameof(Connection.EngineType), typeof(string));
table.Columns.Add(nameof(Connection.AuthenticationMode), typeof(int));

if (connections?.Count > 0)
{
Expand All @@ -139,6 +160,7 @@ private DataTable GetDataTable(List<Connection> connections)
row[nameof(Connection.IntegratedSecurity)] = c.IntegratedSecurity;
row["Creation Date"] = c.CreationDate;
row[nameof(Connection.EngineType)] = c.EngineType;
row[nameof(Connection.AuthenticationMode)] = (int)c.AuthenticationMode;
table.Rows.Add(row);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,52 @@ public void CreateTemplate_BothTemplates_ReturnSameDefaultView()
Assert.Equal("DefaultProfilerViewTemplate", sqlServerView);
Assert.Equal("DefaultProfilerViewTemplate", azureView);
}

[Fact]
public void CreateTemplate_WhenAzureSqlDatabaseTemplate_UsesUsernameNotNtUsername()
{
// Arrange
var engineType = DatabaseEngineType.AzureSqlDatabase;
var sessionName = "TestSession";

// Act
var template = ProfilerSessionTemplateFactory.CreateTemplate(engineType);
var sqlStatement = template.CreateSQLStatement(sessionName);

// Assert
Assert.Contains("sqlserver.username", sqlStatement);
Assert.DoesNotContain("sqlserver.nt_username", sqlStatement);
}

[Fact]
public void CreateTemplate_WhenAzureSqlDatabaseTemplate_DoesNotUseServerPrincipalName()
{
// Arrange
var engineType = DatabaseEngineType.AzureSqlDatabase;
var sessionName = "TestSession";

// Act
var template = ProfilerSessionTemplateFactory.CreateTemplate(engineType);
var sqlStatement = template.CreateSQLStatement(sessionName);

// Assert
Assert.DoesNotContain("sqlserver.server_principal_name", sqlStatement);
}

[Fact]
public void CreateTemplate_WhenSqlServerTemplate_UsesNtUsernameAndServerPrincipalName()
{
// Arrange
var engineType = DatabaseEngineType.SqlServer;
var sessionName = "TestSession";

// Act
var template = ProfilerSessionTemplateFactory.CreateTemplate(engineType);
var sqlStatement = template.CreateSQLStatement(sessionName);

// Assert
Assert.Contains("sqlserver.nt_username", sqlStatement);
Assert.Contains("sqlserver.server_principal_name", sqlStatement);
Assert.DoesNotContain("sqlserver.username", sqlStatement);
}
}
Loading
Loading