Skip to content

Commit 0a4bf9e

Browse files
committed
Initial release: LiveSQL — Real-time SQL query execution visualizer
- Blazor Server web UI with dark theme and animated SVG flow diagrams - SQL Server and PostgreSQL execution plan parsing - Bottleneck detection, index recommendations, plan comparison - 6 demo plans with step-by-step animation (no database required) - 91 passing tests with full coverage
0 parents  commit 0a4bf9e

84 files changed

Lines changed: 9460 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main, develop]
6+
pull_request:
7+
branches: [main]
8+
9+
concurrency:
10+
group: ci-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
build-and-test:
15+
name: Build & Test
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Setup .NET
23+
uses: actions/setup-dotnet@v4
24+
with:
25+
dotnet-version: '8.0.x'
26+
27+
- name: Restore dependencies
28+
run: dotnet restore
29+
30+
- name: Build
31+
run: dotnet build --no-restore --configuration Release
32+
33+
- name: Test
34+
run: dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./TestResults
35+
36+
- name: Upload coverage
37+
if: always()
38+
uses: actions/upload-artifact@v4
39+
with:
40+
name: coverage-report
41+
path: ./TestResults/**/coverage.cobertura.xml
42+
retention-days: 14
43+
44+
security-scan:
45+
name: Dependency Security Scan
46+
runs-on: ubuntu-latest
47+
48+
steps:
49+
- name: Checkout
50+
uses: actions/checkout@v4
51+
52+
- name: Setup .NET
53+
uses: actions/setup-dotnet@v4
54+
with:
55+
dotnet-version: '8.0.x'
56+
57+
- name: Restore
58+
run: dotnet restore
59+
60+
- name: Check for vulnerable packages
61+
run: dotnet list package --vulnerable --include-transitive 2>&1 | tee vulnerability-report.txt
62+
63+
- name: Upload vulnerability report
64+
if: always()
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: vulnerability-report
68+
path: vulnerability-report.txt
69+
retention-days: 14

.gitignore

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Build results
2+
[Bb]in/
3+
[Oo]bj/
4+
[Oo]ut/
5+
[Bb]uild[Ll]og.*
6+
publish/
7+
8+
# Visual Studio
9+
.vs/
10+
*.user
11+
*.suo
12+
*.userosscache
13+
*.sln.docstates
14+
15+
# JetBrains Rider
16+
.idea/
17+
*.sln.DotSettings.user
18+
*.sln.iml
19+
20+
# VS Code
21+
.vscode/
22+
23+
# NuGet
24+
packages/
25+
*.nupkg
26+
*.snupkg
27+
**/[Pp]ackages/*
28+
!**/[Pp]ackages/build/
29+
30+
# Test results
31+
TestResults/
32+
*.trx
33+
coverage*.xml
34+
coverage*.json
35+
lcov.info
36+
37+
# App settings (local overrides and secrets)
38+
appsettings.Development.json
39+
appsettings.Local.json
40+
appsettings.*.local.json
41+
secrets.json
42+
43+
# Environment files
44+
.env
45+
.env.*
46+
47+
# OS files
48+
.DS_Store
49+
Thumbs.db
50+
51+
# Misc
52+
*.log
53+
*.swp
54+
*~

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 mcandiri
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

LiveSQL.sln

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31903.59
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{1AFAE7C0-D4C3-4C39-A11A-0B61E3216114}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveSQL.Core", "src\LiveSQL.Core\LiveSQL.Core.csproj", "{1E27D310-D79D-4F11-A19C-846CE88D89E2}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveSQL.Web", "src\LiveSQL.Web\LiveSQL.Web.csproj", "{C5332BD1-AE97-469F-85F5-0F09305539EA}"
11+
EndProject
12+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{956C391C-1DD1-4594-976A-1DF9F6F8168A}"
13+
EndProject
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveSQL.Core.Tests", "tests\LiveSQL.Core.Tests\LiveSQL.Core.Tests.csproj", "{55A64AAB-36F4-49FE-8634-08DA53A82D8D}"
15+
EndProject
16+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveSQL.Web.Tests", "tests\LiveSQL.Web.Tests\LiveSQL.Web.Tests.csproj", "{CA9C0BED-1D76-4D49-BCF5-4B01559C87F1}"
17+
EndProject
18+
Global
19+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
20+
Debug|Any CPU = Debug|Any CPU
21+
Release|Any CPU = Release|Any CPU
22+
EndGlobalSection
23+
GlobalSection(SolutionProperties) = preSolution
24+
HideSolutionNode = FALSE
25+
EndGlobalSection
26+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
27+
{1E27D310-D79D-4F11-A19C-846CE88D89E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
28+
{1E27D310-D79D-4F11-A19C-846CE88D89E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
29+
{1E27D310-D79D-4F11-A19C-846CE88D89E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
30+
{1E27D310-D79D-4F11-A19C-846CE88D89E2}.Release|Any CPU.Build.0 = Release|Any CPU
31+
{C5332BD1-AE97-469F-85F5-0F09305539EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
32+
{C5332BD1-AE97-469F-85F5-0F09305539EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
33+
{C5332BD1-AE97-469F-85F5-0F09305539EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
34+
{C5332BD1-AE97-469F-85F5-0F09305539EA}.Release|Any CPU.Build.0 = Release|Any CPU
35+
{55A64AAB-36F4-49FE-8634-08DA53A82D8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
36+
{55A64AAB-36F4-49FE-8634-08DA53A82D8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
37+
{55A64AAB-36F4-49FE-8634-08DA53A82D8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
38+
{55A64AAB-36F4-49FE-8634-08DA53A82D8D}.Release|Any CPU.Build.0 = Release|Any CPU
39+
{CA9C0BED-1D76-4D49-BCF5-4B01559C87F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40+
{CA9C0BED-1D76-4D49-BCF5-4B01559C87F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
41+
{CA9C0BED-1D76-4D49-BCF5-4B01559C87F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
42+
{CA9C0BED-1D76-4D49-BCF5-4B01559C87F1}.Release|Any CPU.Build.0 = Release|Any CPU
43+
EndGlobalSection
44+
GlobalSection(NestedProjects) = preSolution
45+
{1E27D310-D79D-4F11-A19C-846CE88D89E2} = {1AFAE7C0-D4C3-4C39-A11A-0B61E3216114}
46+
{C5332BD1-AE97-469F-85F5-0F09305539EA} = {1AFAE7C0-D4C3-4C39-A11A-0B61E3216114}
47+
{55A64AAB-36F4-49FE-8634-08DA53A82D8D} = {956C391C-1DD1-4594-976A-1DF9F6F8168A}
48+
{CA9C0BED-1D76-4D49-BCF5-4B01559C87F1} = {956C391C-1DD1-4594-976A-1DF9F6F8168A}
49+
EndGlobalSection
50+
EndGlobal

0 commit comments

Comments
 (0)