From 39f10882c6bbc6fbe4fb34278d23fee4c7dcc2a0 Mon Sep 17 00:00:00 2001 From: electricvampire Date: Sun, 15 Sep 2024 16:43:28 +0530 Subject: [PATCH] Added support for oracle database --- README.md | 6 +- doc/OraclePlan.png | Bin 0 -> 77770 bytes .../EFCore.Visualizer.csproj | 4 + .../Resources/Oracle/template.html | 95 ++++++++++++++++++ .../source.extension.vsixmanifest | 2 +- .../DatabaseProvider.cs | 20 ++++ .../EFCoreQueryableObjectSource.cs | 1 + 7 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 doc/OraclePlan.png create mode 100644 src/EFCore.Visualizer/Resources/Oracle/template.html diff --git a/README.md b/README.md index 2d8f012..a07fdb4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ View Entity Framework Core query plan directly inside Visual Studio. ## Introduction -With Entity Framework Core query plan debugger visualizer, you can view the query plan of your queries directly inside Visual Studio. Currently, the visualizer supports SQL Server and PostgreSQL. +With Entity Framework Core query plan debugger visualizer, you can view the query plan of your queries directly inside Visual Studio. Currently, the visualizer supports SQL Server, PostgreSQL and Oracle. > [!IMPORTANT] > The visualizer requires **Visual Studio Version 17.9.0 ([Released on February 13th](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-9-now-available/)) or newer** and supports **EF Core 7 or newer**. @@ -36,6 +36,10 @@ Click on 'Query Plan Visualizer' and the query plan will be displayed for your q ![PostgreSQL Plan](doc/PostgreSQLPlan1.png) +### Oracle: + +![Oracle Plan](doc/OraclePlan.png) + ## Known Issues: - If query plan extraction takes more than 5 seconds, you will get [Evaluation timed out error](https://github.com/Giorgi/EFCore.Visualizer/issues/25) diff --git a/doc/OraclePlan.png b/doc/OraclePlan.png new file mode 100644 index 0000000000000000000000000000000000000000..360c9098bf994293ade08363b50b7e95b5d0f996 GIT binary patch literal 77770 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 literal 0 HcmV?d00001 diff --git a/src/EFCore.Visualizer/EFCore.Visualizer.csproj b/src/EFCore.Visualizer/EFCore.Visualizer.csproj index db21671..6eb2dbf 100644 --- a/src/EFCore.Visualizer/EFCore.Visualizer.csproj +++ b/src/EFCore.Visualizer/EFCore.Visualizer.csproj @@ -11,6 +11,7 @@ + @@ -54,6 +55,9 @@ true + + true + diff --git a/src/EFCore.Visualizer/Resources/Oracle/template.html b/src/EFCore.Visualizer/Resources/Oracle/template.html new file mode 100644 index 0000000..d1ad284 --- /dev/null +++ b/src/EFCore.Visualizer/Resources/Oracle/template.html @@ -0,0 +1,95 @@ + + + + + + Query and Execution Plan + + + + +
+
+

+        
+ +
+ +
+

+        
+
+ + + + + diff --git a/src/EFCore.Visualizer/source.extension.vsixmanifest b/src/EFCore.Visualizer/source.extension.vsixmanifest index b0e584f..df8f706 100644 --- a/src/EFCore.Visualizer/source.extension.vsixmanifest +++ b/src/EFCore.Visualizer/source.extension.vsixmanifest @@ -8,7 +8,7 @@ https://github.com/Giorgi/EFCore.Visualizer https://github.com/Giorgi/EFCore.Visualizer/blob/main/README.md#usage Images\IconSmall.png - EFCore, SQL Server, PostgreSQL, Visualizer, Query Plan + EFCore, SQL Server, PostgreSQL, Oracle, Visualizer, Query Plan diff --git a/src/IQueryableObjectSource/DatabaseProvider.cs b/src/IQueryableObjectSource/DatabaseProvider.cs index 8c2a460..d700209 100644 --- a/src/IQueryableObjectSource/DatabaseProvider.cs +++ b/src/IQueryableObjectSource/DatabaseProvider.cs @@ -83,4 +83,24 @@ protected override string ExtractPlanInternal(DbCommand command) } internal override string GetPlanDirectory(string baseDirectory) => Path.Combine(baseDirectory, "Postgres"); +} + +class OracleDatabaseProvider(DbCommand command) : DatabaseProvider(command) +{ + protected override string ExtractPlanInternal(DbCommand command) + { + command.CommandText = "EXPLAIN PLAN FOR " + command.CommandText; + command.ExecuteNonQuery(); + + // Querying the execution plan using DBMS_XPLAN + command.CommandText = "SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY())"; + using var reader = command.ExecuteReader(); + + // Fetching the plan output + var plan = string.Join(Environment.NewLine, reader.Cast().Select(r => r.GetString(0))); + + return plan; + } + + internal override string GetPlanDirectory(string baseDirectory) => Path.Combine(baseDirectory, "Oracle"); } \ No newline at end of file diff --git a/src/IQueryableObjectSource/EFCoreQueryableObjectSource.cs b/src/IQueryableObjectSource/EFCoreQueryableObjectSource.cs index e5c9cdb..7763ba0 100644 --- a/src/IQueryableObjectSource/EFCoreQueryableObjectSource.cs +++ b/src/IQueryableObjectSource/EFCoreQueryableObjectSource.cs @@ -77,6 +77,7 @@ private static DatabaseProvider GetDatabaseProvider(DbCommand command) { "Microsoft.Data.SqlClient.SqlCommand" => new SqlServerDatabaseProvider(command), "Npgsql.NpgsqlCommand" => new PostgresDatabaseProvider(command), + "Oracle.ManagedDataAccess.Client.OracleCommand" => new OracleDatabaseProvider(command), _ => null }; }