@libredb/studio 0.9.7 → 0.9.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-34YQUUCM.mjs +319 -0
- package/dist/chunk-34YQUUCM.mjs.map +1 -0
- package/dist/chunk-4LVB3K53.mjs +37 -0
- package/dist/chunk-4LVB3K53.mjs.map +1 -0
- package/dist/chunk-6DRZXXNT.mjs +100 -0
- package/dist/chunk-6DRZXXNT.mjs.map +1 -0
- package/dist/chunk-CZVV3JJB.mjs +160 -0
- package/dist/chunk-CZVV3JJB.mjs.map +1 -0
- package/dist/chunk-D4WVWWWF.js +332 -0
- package/dist/chunk-D4WVWWWF.js.map +1 -0
- package/dist/chunk-DY3KXE44.mjs +3 -0
- package/dist/chunk-DY3KXE44.mjs.map +1 -0
- package/dist/chunk-DZ2UB3C6.mjs +6679 -0
- package/dist/chunk-DZ2UB3C6.mjs.map +1 -0
- package/dist/chunk-FYSE52VB.js +242 -0
- package/dist/chunk-FYSE52VB.js.map +1 -0
- package/dist/chunk-G4WYE6TI.js +4 -0
- package/dist/chunk-G4WYE6TI.js.map +1 -0
- package/dist/chunk-JOGLIOFO.js +1310 -0
- package/dist/chunk-JOGLIOFO.js.map +1 -0
- package/dist/chunk-JZO5KRZN.js +165 -0
- package/dist/chunk-JZO5KRZN.js.map +1 -0
- package/dist/chunk-KV356UXJ.js +253 -0
- package/dist/chunk-KV356UXJ.js.map +1 -0
- package/dist/chunk-PPODO6HX.mjs +237 -0
- package/dist/chunk-PPODO6HX.mjs.map +1 -0
- package/dist/chunk-PTIRB2JO.js +258 -0
- package/dist/chunk-PTIRB2JO.js.map +1 -0
- package/dist/chunk-Q6LRDBK7.js +42 -0
- package/dist/chunk-Q6LRDBK7.js.map +1 -0
- package/dist/chunk-QJP5FZRY.mjs +255 -0
- package/dist/chunk-QJP5FZRY.mjs.map +1 -0
- package/dist/chunk-R3POCJK6.mjs +248 -0
- package/dist/chunk-R3POCJK6.mjs.map +1 -0
- package/dist/chunk-RBVDMLFV.js +6747 -0
- package/dist/chunk-RBVDMLFV.js.map +1 -0
- package/dist/chunk-RCQB4FCE.js +186 -0
- package/dist/chunk-RCQB4FCE.js.map +1 -0
- package/dist/chunk-SR5DRGBX.mjs +174 -0
- package/dist/chunk-SR5DRGBX.mjs.map +1 -0
- package/dist/chunk-VLCRUZX7.js +102 -0
- package/dist/chunk-VLCRUZX7.js.map +1 -0
- package/dist/chunk-VWVRUCQO.mjs +1289 -0
- package/dist/chunk-VWVRUCQO.mjs.map +1 -0
- package/dist/components.d.mts +273 -0
- package/dist/components.d.ts +273 -0
- package/dist/components.js +59 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +6 -0
- package/dist/components.mjs.map +1 -0
- package/dist/custom-BNDOYC5P.js +134 -0
- package/dist/custom-BNDOYC5P.js.map +1 -0
- package/dist/custom-S2EKFMP3.mjs +132 -0
- package/dist/custom-S2EKFMP3.mjs.map +1 -0
- package/dist/gemini-4ASHNK4H.js +81 -0
- package/dist/gemini-4ASHNK4H.js.map +1 -0
- package/dist/gemini-C5RBLQEJ.mjs +79 -0
- package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mongodb-XMZEZA4A.mjs +748 -0
- package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
- package/dist/mongodb-YQJJTLX3.js +750 -0
- package/dist/mongodb-YQJJTLX3.js.map +1 -0
- package/dist/mssql-PMOU4D36.js +916 -0
- package/dist/mssql-PMOU4D36.js.map +1 -0
- package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
- package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
- package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
- package/dist/mysql-I3WJQXN2.mjs.map +1 -0
- package/dist/mysql-Y3MSA5QY.js +833 -0
- package/dist/mysql-Y3MSA5QY.js.map +1 -0
- package/dist/ollama-26BYLVEV.mjs +115 -0
- package/dist/ollama-26BYLVEV.mjs.map +1 -0
- package/dist/ollama-HVWAGKQC.js +117 -0
- package/dist/ollama-HVWAGKQC.js.map +1 -0
- package/dist/openai-4U56KPG7.mjs +111 -0
- package/dist/openai-4U56KPG7.mjs.map +1 -0
- package/dist/openai-AK3R37BS.js +113 -0
- package/dist/openai-AK3R37BS.js.map +1 -0
- package/dist/oracle-L6VEAVXO.js +917 -0
- package/dist/oracle-L6VEAVXO.js.map +1 -0
- package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
- package/dist/oracle-P2G7T4P4.mjs.map +1 -0
- package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
- package/dist/postgres-O5KOQUVP.mjs.map +1 -0
- package/dist/postgres-RLCWNFFX.js +971 -0
- package/dist/postgres-RLCWNFFX.js.map +1 -0
- package/dist/providers.d.mts +149 -0
- package/dist/providers.d.ts +149 -0
- package/dist/providers.js +44 -0
- package/dist/providers.js.map +1 -0
- package/dist/providers.mjs +7 -0
- package/dist/providers.mjs.map +1 -0
- package/dist/redis-4WMQOVLX.mjs +435 -0
- package/dist/redis-4WMQOVLX.mjs.map +1 -0
- package/dist/redis-QVQ6YU62.js +441 -0
- package/dist/redis-QVQ6YU62.js.map +1 -0
- package/dist/sqlite-4I2P2OGQ.js +554 -0
- package/dist/sqlite-4I2P2OGQ.js.map +1 -0
- package/dist/sqlite-OA4YJX5S.mjs +531 -0
- package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
- package/dist/types-BJvJfxSY.d.mts +141 -0
- package/dist/types-BJvJfxSY.d.ts +141 -0
- package/dist/types-ClAg_v5k.d.mts +343 -0
- package/dist/types-Der_X8E8.d.ts +343 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/dist/workspace.d.mts +80 -0
- package/dist/workspace.d.ts +80 -0
- package/dist/workspace.js +4182 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.mjs +4155 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +60 -5
- package/.claude/settings.local.json +0 -127
- package/.cursorrules +0 -426
- package/.devin/wiki.json +0 -143
- package/.dockerignore +0 -80
- package/.env.example +0 -159
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
- package/.github/workflows/ci.yml +0 -185
- package/.github/workflows/codeql.yml +0 -57
- package/.github/workflows/docker-build-push.yml +0 -118
- package/.github/workflows/helm-release.yml +0 -113
- package/CLAUDE.md +0 -265
- package/CODE_OF_CONDUCT.md +0 -124
- package/CONTRIBUTING.md +0 -154
- package/Dockerfile +0 -73
- package/SECURITY.md +0 -107
- package/artifacthub-repo.yml +0 -4
- package/bun.lock +0 -1714
- package/bunfig.toml +0 -3
- package/charts/libredb-studio/.helmignore +0 -11
- package/charts/libredb-studio/Chart.lock +0 -6
- package/charts/libredb-studio/Chart.yaml +0 -50
- package/charts/libredb-studio/README.md +0 -206
- package/charts/libredb-studio/templates/NOTES.txt +0 -59
- package/charts/libredb-studio/templates/_helpers.tpl +0 -135
- package/charts/libredb-studio/templates/configmap.yaml +0 -37
- package/charts/libredb-studio/templates/deployment.yaml +0 -184
- package/charts/libredb-studio/templates/hpa.yaml +0 -32
- package/charts/libredb-studio/templates/ingress.yaml +0 -41
- package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
- package/charts/libredb-studio/templates/pdb.yaml +0 -18
- package/charts/libredb-studio/templates/pvc.yaml +0 -23
- package/charts/libredb-studio/templates/secret.yaml +0 -30
- package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
- package/charts/libredb-studio/templates/service.yaml +0 -22
- package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
- package/charts/libredb-studio/values.schema.json +0 -246
- package/charts/libredb-studio/values.yaml +0 -286
- package/components.json +0 -22
- package/conductor/code_styleguides/typescript.md +0 -43
- package/conductor/product-guidelines.md +0 -43
- package/conductor/product.md +0 -3
- package/conductor/setup_state.json +0 -1
- package/conductor/tech-stack.md +0 -39
- package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
- package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
- package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
- package/conductor/tracks.md +0 -8
- package/conductor/workflow.md +0 -333
- package/database-compose.yml +0 -55
- package/docker/postgres-init/01-extensions.sql +0 -10
- package/docker/postgres-init/02-sample-data.sql +0 -585
- package/docker/postgres.yml +0 -68
- package/docker-compose.yml +0 -38
- package/docs/AI_PLAN.md +0 -74
- package/docs/API_DOCS.md +0 -875
- package/docs/ARCHITECTURE.md +0 -218
- package/docs/DATABASE_PROVIDERS.md +0 -358
- package/docs/FEATURES.md +0 -116
- package/docs/HELM_CHART.md +0 -252
- package/docs/LOGIN_PAGE.md +0 -178
- package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
- package/docs/OIDC_ARCH.md +0 -681
- package/docs/OIDC_SETUP.md +0 -322
- package/docs/POSTGRES_METRICS.md +0 -516
- package/docs/QUERY_OPTIMIZATION.md +0 -370
- package/docs/SEED_CONNECTIONS.md +0 -468
- package/docs/SQL_ALIAS_COMPLETION.md +0 -190
- package/docs/STORAGE_ARCHITECTURE.md +0 -565
- package/docs/STORAGE_QUICK_SETUP.md +0 -419
- package/docs/TECHNICAL_PLAN.md +0 -36
- package/docs/THEMING.md +0 -345
- package/docs/adding-a-new-database-provider.md +0 -642
- package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
- package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
- package/docs/backlogs/002-DATA_IMPORT.md +0 -215
- package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
- package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
- package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
- package/docs/backlogs/006-DATA_MASKING.md +0 -418
- package/docs/enterprise-features.md +0 -718
- package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
- package/docs/medium-koyeb-article-en.md +0 -215
- package/docs/plans/test-plans.md +0 -445
- package/docs/releases/RELEASE.V0.3.0.md +0 -22
- package/docs/releases/RELEASE.V0.4.0.md +0 -154
- package/docs/releases/RELEASE.V0.5.0.md +0 -252
- package/docs/releases/RELEASE_v0.5.6.md +0 -145
- package/docs/releases/RELEASE_v0.6.1.md +0 -303
- package/docs/releases/RELEASE_v0.6.7.md +0 -292
- package/docs/releases/RELEASE_v0.7.0.md +0 -332
- package/docs/releases/RELEASE_v0.8.0.md +0 -521
- package/docs/sampledb/titanic.sql +0 -1379
- package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
- package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
- package/e2e/admin-dashboard.spec.ts +0 -64
- package/e2e/connection-management.spec.ts +0 -58
- package/e2e/export.spec.ts +0 -34
- package/e2e/login.spec.ts +0 -85
- package/e2e/query-execution.spec.ts +0 -35
- package/e2e/tab-management.spec.ts +0 -64
- package/eslint.config.mjs +0 -28
- package/fly.toml +0 -43
- package/next.config.ts +0 -32
- package/playwright.config.ts +0 -34
- package/postcss.config.mjs +0 -7
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +0 -1
- package/public/globe.svg +0 -1
- package/public/logo.svg +0 -32
- package/public/next.svg +0 -1
- package/public/screenshots/code-generator.png +0 -0
- package/public/screenshots/connection-modal.png +0 -0
- package/public/screenshots/data-profiler.png +0 -0
- package/public/screenshots/erd-diagram.png +0 -0
- package/public/screenshots/hero-editor.png +0 -0
- package/public/screenshots/nl2sql.png +0 -0
- package/public/vercel.svg +0 -1
- package/public/window.svg +0 -1
- package/render.yaml +0 -58
- package/scripts/merge-lcov.mjs +0 -239
- package/sonar-project.properties +0 -16
- package/src/app/admin/error.tsx +0 -46
- package/src/app/admin/page.tsx +0 -10
- package/src/app/api/admin/audit/route.ts +0 -52
- package/src/app/api/admin/fleet-health/route.ts +0 -81
- package/src/app/api/ai/autopilot/route.ts +0 -105
- package/src/app/api/ai/chat/route.ts +0 -132
- package/src/app/api/ai/describe-schema/route.ts +0 -52
- package/src/app/api/ai/explain/route.ts +0 -86
- package/src/app/api/ai/impact/route.ts +0 -97
- package/src/app/api/ai/index-advisor/route.ts +0 -98
- package/src/app/api/ai/nl2sql/route.ts +0 -87
- package/src/app/api/ai/query-safety/route.ts +0 -87
- package/src/app/api/auth/login/route.ts +0 -62
- package/src/app/api/auth/logout/route.ts +0 -25
- package/src/app/api/auth/me/route.ts +0 -10
- package/src/app/api/auth/oidc/callback/route.ts +0 -82
- package/src/app/api/auth/oidc/login/route.ts +0 -43
- package/src/app/api/connections/managed/route.ts +0 -35
- package/src/app/api/db/cancel/route.ts +0 -42
- package/src/app/api/db/disconnect/route.ts +0 -28
- package/src/app/api/db/health/route.ts +0 -49
- package/src/app/api/db/maintenance/route.ts +0 -72
- package/src/app/api/db/monitoring/route.ts +0 -62
- package/src/app/api/db/multi-query/route.ts +0 -116
- package/src/app/api/db/pool-stats/route.ts +0 -37
- package/src/app/api/db/profile/route.ts +0 -144
- package/src/app/api/db/provider-meta/route.ts +0 -49
- package/src/app/api/db/query/route.ts +0 -50
- package/src/app/api/db/schema/route.ts +0 -47
- package/src/app/api/db/schema-snapshot/route.ts +0 -42
- package/src/app/api/db/test-connection/route.ts +0 -55
- package/src/app/api/db/transaction/route.ts +0 -111
- package/src/app/api/storage/[collection]/route.ts +0 -67
- package/src/app/api/storage/config/route.ts +0 -17
- package/src/app/api/storage/migrate/route.ts +0 -45
- package/src/app/api/storage/route.ts +0 -32
- package/src/app/error.tsx +0 -49
- package/src/app/global-error.tsx +0 -55
- package/src/app/globals.css +0 -146
- package/src/app/icon.svg +0 -42
- package/src/app/layout.tsx +0 -34
- package/src/app/login/login-form.tsx +0 -301
- package/src/app/login/page.tsx +0 -11
- package/src/app/monitoring/page.tsx +0 -8
- package/src/app/not-found.tsx +0 -29
- package/src/app/page.tsx +0 -5
- package/src/components/AIAutopilotPanel.tsx +0 -238
- package/src/components/CodeGenerator.tsx +0 -271
- package/src/components/CommandPalette.tsx +0 -227
- package/src/components/ConnectionModal.tsx +0 -759
- package/src/components/CreateTableModal.tsx +0 -281
- package/src/components/DataCharts.tsx +0 -962
- package/src/components/DataImportModal.tsx +0 -582
- package/src/components/DataProfiler.tsx +0 -335
- package/src/components/DatabaseDocs.tsx +0 -251
- package/src/components/MaskingSettings.tsx +0 -414
- package/src/components/MobileNav.tsx +0 -50
- package/src/components/NL2SQLPanel.tsx +0 -281
- package/src/components/PivotTable.tsx +0 -257
- package/src/components/QueryEditor.tsx +0 -760
- package/src/components/QueryHistory.tsx +0 -344
- package/src/components/QuerySafetyDialog.tsx +0 -290
- package/src/components/ResultsGrid.tsx +0 -644
- package/src/components/SaveQueryModal.tsx +0 -104
- package/src/components/SavedQueries.tsx +0 -128
- package/src/components/SchemaDiagram.tsx +0 -473
- package/src/components/SchemaDiff.tsx +0 -473
- package/src/components/SnapshotTimeline.tsx +0 -116
- package/src/components/Studio.tsx +0 -639
- package/src/components/TestDataGenerator.tsx +0 -261
- package/src/components/VisualExplain.tsx +0 -820
- package/src/components/admin/AdminDashboard.tsx +0 -163
- package/src/components/admin/tabs/AuditTab.tsx +0 -531
- package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
- package/src/components/admin/tabs/OperationsTab.tsx +0 -646
- package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
- package/src/components/admin/tabs/SecurityTab.tsx +0 -284
- package/src/components/community-section.tsx +0 -92
- package/src/components/icons/db-icons.tsx +0 -84
- package/src/components/libredb-logo.tsx +0 -61
- package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
- package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
- package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
- package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
- package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
- package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
- package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
- package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
- package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
- package/src/components/results-grid/ResultCard.tsx +0 -111
- package/src/components/results-grid/RowDetailSheet.tsx +0 -178
- package/src/components/results-grid/StatsBar.tsx +0 -201
- package/src/components/results-grid/index.ts +0 -1
- package/src/components/results-grid/utils.ts +0 -23
- package/src/components/schema-explorer/ColumnList.tsx +0 -53
- package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
- package/src/components/schema-explorer/TableItem.tsx +0 -210
- package/src/components/schema-explorer/index.ts +0 -1
- package/src/components/sidebar/ConnectionItem.tsx +0 -105
- package/src/components/sidebar/ConnectionsList.tsx +0 -62
- package/src/components/sidebar/Sidebar.tsx +0 -130
- package/src/components/sidebar/index.ts +0 -2
- package/src/components/studio/BottomPanel.tsx +0 -286
- package/src/components/studio/QueryToolbar.tsx +0 -180
- package/src/components/studio/StudioDesktopHeader.tsx +0 -114
- package/src/components/studio/StudioMobileHeader.tsx +0 -340
- package/src/components/studio/StudioTabBar.tsx +0 -82
- package/src/components/studio/index.ts +0 -5
- package/src/components/ui/accordion.tsx +0 -66
- package/src/components/ui/alert-dialog.tsx +0 -157
- package/src/components/ui/alert.tsx +0 -66
- package/src/components/ui/aspect-ratio.tsx +0 -11
- package/src/components/ui/avatar.tsx +0 -53
- package/src/components/ui/badge.tsx +0 -46
- package/src/components/ui/breadcrumb.tsx +0 -109
- package/src/components/ui/button-group.tsx +0 -83
- package/src/components/ui/button.tsx +0 -60
- package/src/components/ui/calendar.tsx +0 -216
- package/src/components/ui/card.tsx +0 -92
- package/src/components/ui/carousel.tsx +0 -241
- package/src/components/ui/chart.tsx +0 -357
- package/src/components/ui/checkbox.tsx +0 -32
- package/src/components/ui/collapsible.tsx +0 -33
- package/src/components/ui/command.tsx +0 -184
- package/src/components/ui/context-menu.tsx +0 -252
- package/src/components/ui/dialog.tsx +0 -143
- package/src/components/ui/drawer.tsx +0 -135
- package/src/components/ui/dropdown-menu.tsx +0 -257
- package/src/components/ui/empty.tsx +0 -104
- package/src/components/ui/field.tsx +0 -248
- package/src/components/ui/form.tsx +0 -167
- package/src/components/ui/hover-card.tsx +0 -44
- package/src/components/ui/input-group.tsx +0 -170
- package/src/components/ui/input-otp.tsx +0 -77
- package/src/components/ui/input.tsx +0 -21
- package/src/components/ui/item.tsx +0 -193
- package/src/components/ui/kbd.tsx +0 -28
- package/src/components/ui/label.tsx +0 -24
- package/src/components/ui/menubar.tsx +0 -276
- package/src/components/ui/navigation-menu.tsx +0 -168
- package/src/components/ui/pagination.tsx +0 -127
- package/src/components/ui/popover.tsx +0 -48
- package/src/components/ui/progress.tsx +0 -31
- package/src/components/ui/radio-group.tsx +0 -45
- package/src/components/ui/resizable.tsx +0 -56
- package/src/components/ui/scroll-area.tsx +0 -58
- package/src/components/ui/select.tsx +0 -187
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/sheet.tsx +0 -139
- package/src/components/ui/sidebar.tsx +0 -726
- package/src/components/ui/skeleton.tsx +0 -13
- package/src/components/ui/slider.tsx +0 -63
- package/src/components/ui/sonner.tsx +0 -40
- package/src/components/ui/spinner.tsx +0 -16
- package/src/components/ui/switch.tsx +0 -31
- package/src/components/ui/table.tsx +0 -116
- package/src/components/ui/tabs.tsx +0 -66
- package/src/components/ui/textarea.tsx +0 -18
- package/src/components/ui/toggle-group.tsx +0 -83
- package/src/components/ui/toggle.tsx +0 -47
- package/src/components/ui/tooltip.tsx +0 -61
- package/src/exports/components.ts +0 -15
- package/src/exports/index.ts +0 -4
- package/src/exports/providers.ts +0 -4
- package/src/exports/types.ts +0 -26
- package/src/hooks/use-ai-chat.ts +0 -182
- package/src/hooks/use-all-connections.ts +0 -66
- package/src/hooks/use-api-call.ts +0 -71
- package/src/hooks/use-auth.ts +0 -51
- package/src/hooks/use-connection-form.ts +0 -349
- package/src/hooks/use-connection-manager.ts +0 -169
- package/src/hooks/use-connection-payload.ts +0 -15
- package/src/hooks/use-inline-editing.ts +0 -109
- package/src/hooks/use-mobile.ts +0 -20
- package/src/hooks/use-monitoring-data.ts +0 -270
- package/src/hooks/use-provider-metadata.ts +0 -62
- package/src/hooks/use-query-execution.ts +0 -478
- package/src/hooks/use-storage-sync.ts +0 -259
- package/src/hooks/use-tab-manager.ts +0 -231
- package/src/hooks/use-toast.ts +0 -20
- package/src/hooks/use-transaction-control.ts +0 -64
- package/src/lib/api/error-codes.ts +0 -30
- package/src/lib/api/errors.ts +0 -236
- package/src/lib/api/with-error-handler.ts +0 -41
- package/src/lib/audit.ts +0 -105
- package/src/lib/auth.ts +0 -87
- package/src/lib/connection-string-parser.ts +0 -172
- package/src/lib/data-masking.ts +0 -385
- package/src/lib/db/base-provider.ts +0 -325
- package/src/lib/db/errors.ts +0 -317
- package/src/lib/db/factory.ts +0 -324
- package/src/lib/db/index.ts +0 -123
- package/src/lib/db/providers/document/index.ts +0 -6
- package/src/lib/db/providers/document/mongodb.ts +0 -992
- package/src/lib/db/providers/keyvalue/redis.ts +0 -554
- package/src/lib/db/providers/sql/index.ts +0 -11
- package/src/lib/db/providers/sql/sql-base.ts +0 -174
- package/src/lib/db/providers/sql/sqlite.ts +0 -721
- package/src/lib/db/types.ts +0 -437
- package/src/lib/db/utils/pool-manager.ts +0 -287
- package/src/lib/db/utils/query-limiter.ts +0 -239
- package/src/lib/db-ui-config.ts +0 -86
- package/src/lib/editor/mongodb-completions.ts +0 -172
- package/src/lib/editor/sql-completions.ts +0 -280
- package/src/lib/llm/base-provider.ts +0 -117
- package/src/lib/llm/factory.ts +0 -102
- package/src/lib/llm/index.ts +0 -90
- package/src/lib/llm/providers/custom.ts +0 -181
- package/src/lib/llm/providers/gemini.ts +0 -126
- package/src/lib/llm/providers/ollama.ts +0 -154
- package/src/lib/llm/providers/openai.ts +0 -146
- package/src/lib/llm/types.ts +0 -173
- package/src/lib/llm/utils/config.ts +0 -187
- package/src/lib/llm/utils/retry.ts +0 -119
- package/src/lib/llm/utils/streaming.ts +0 -202
- package/src/lib/logger.ts +0 -127
- package/src/lib/monitoring-thresholds.ts +0 -44
- package/src/lib/oidc.ts +0 -262
- package/src/lib/query-generators.ts +0 -61
- package/src/lib/schema-diff/diff-engine.ts +0 -273
- package/src/lib/schema-diff/migration-generator.ts +0 -208
- package/src/lib/schema-diff/types.ts +0 -55
- package/src/lib/seed/config-loader.ts +0 -79
- package/src/lib/seed/connection-filter.ts +0 -49
- package/src/lib/seed/credential-resolver.ts +0 -62
- package/src/lib/seed/index.ts +0 -40
- package/src/lib/seed/resolve-connection.ts +0 -57
- package/src/lib/seed/types.ts +0 -69
- package/src/lib/sql/alias-extractor.ts +0 -267
- package/src/lib/sql/index.ts +0 -8
- package/src/lib/sql/statement-splitter.ts +0 -167
- package/src/lib/sql/types.ts +0 -40
- package/src/lib/ssh/tunnel.ts +0 -142
- package/src/lib/storage/factory.ts +0 -84
- package/src/lib/storage/index.ts +0 -14
- package/src/lib/storage/local-storage.ts +0 -99
- package/src/lib/storage/providers/postgres.ts +0 -225
- package/src/lib/storage/providers/sqlite.ts +0 -153
- package/src/lib/storage/storage-facade.ts +0 -272
- package/src/lib/storage/types.ts +0 -75
- package/src/lib/time-series-buffer.ts +0 -58
- package/src/lib/types.ts +0 -173
- package/src/lib/utils.ts +0 -6
- package/src/proxy.ts +0 -104
- package/src/types/db-drivers.d.ts +0 -23
- package/src/types/html2canvas.d.ts +0 -9
- package/tests/api/admin/audit.test.ts +0 -178
- package/tests/api/admin/fleet-health.test.ts +0 -183
- package/tests/api/ai/autopilot.test.ts +0 -174
- package/tests/api/ai/chat.test.ts +0 -250
- package/tests/api/ai/describe-schema.test.ts +0 -266
- package/tests/api/ai/explain.test.ts +0 -199
- package/tests/api/ai/impact.test.ts +0 -168
- package/tests/api/ai/index-advisor.test.ts +0 -171
- package/tests/api/ai/nl2sql.test.ts +0 -202
- package/tests/api/ai/query-safety.test.ts +0 -196
- package/tests/api/auth/login.test.ts +0 -170
- package/tests/api/auth/logout.test.ts +0 -140
- package/tests/api/auth/me.test.ts +0 -73
- package/tests/api/auth/oidc-callback.test.ts +0 -215
- package/tests/api/auth/oidc-login.test.ts +0 -127
- package/tests/api/db/cancel.test.ts +0 -198
- package/tests/api/db/disconnect.test.ts +0 -124
- package/tests/api/db/health.test.ts +0 -222
- package/tests/api/db/maintenance.test.ts +0 -263
- package/tests/api/db/monitoring.test.ts +0 -221
- package/tests/api/db/multi-query.test.ts +0 -316
- package/tests/api/db/pool-stats.test.ts +0 -135
- package/tests/api/db/profile.test.ts +0 -330
- package/tests/api/db/provider-meta.test.ts +0 -193
- package/tests/api/db/query.test.ts +0 -314
- package/tests/api/db/schema-snapshot.test.ts +0 -170
- package/tests/api/db/schema.test.ts +0 -191
- package/tests/api/db/test-connection.test.ts +0 -185
- package/tests/api/db/transaction.test.ts +0 -314
- package/tests/api/proxy.test.ts +0 -191
- package/tests/api/seed/managed-route.test.ts +0 -113
- package/tests/api/storage/config.test.ts +0 -42
- package/tests/api/storage/storage-routes.test.ts +0 -309
- package/tests/components/AIAutopilotPanel.test.tsx +0 -756
- package/tests/components/AdminPage.test.tsx +0 -33
- package/tests/components/CodeGenerator.test.tsx +0 -182
- package/tests/components/CommandPalette.test.tsx +0 -428
- package/tests/components/CommunitySection.test.tsx +0 -91
- package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
- package/tests/components/ConnectionModal.test.tsx +0 -570
- package/tests/components/CreateTableModal.test.tsx +0 -383
- package/tests/components/DataCharts.test.tsx +0 -739
- package/tests/components/DataImportModal.test.tsx +0 -751
- package/tests/components/DataProfiler.test.tsx +0 -589
- package/tests/components/DatabaseDocs.test.tsx +0 -353
- package/tests/components/LoginPage.test.tsx +0 -163
- package/tests/components/LoginPageOIDC.test.tsx +0 -92
- package/tests/components/MaskingSettings.test.tsx +0 -498
- package/tests/components/MobileNav.test.tsx +0 -30
- package/tests/components/MonitoringPage.test.tsx +0 -32
- package/tests/components/NL2SQLPanel.test.tsx +0 -621
- package/tests/components/Page.test.tsx +0 -33
- package/tests/components/PivotTable.test.tsx +0 -350
- package/tests/components/QueryEditor.test.tsx +0 -1730
- package/tests/components/QueryHistory.test.tsx +0 -572
- package/tests/components/QuerySafetyDialog.test.tsx +0 -586
- package/tests/components/ResultsGrid.test.tsx +0 -804
- package/tests/components/RootLayout.test.tsx +0 -83
- package/tests/components/SaveQueryModal.test.tsx +0 -25
- package/tests/components/SavedQueries.test.tsx +0 -43
- package/tests/components/SchemaDiagram.test.tsx +0 -1034
- package/tests/components/SchemaDiff.test.tsx +0 -906
- package/tests/components/SnapshotTimeline.test.tsx +0 -174
- package/tests/components/Studio.test.tsx +0 -1030
- package/tests/components/TestDataGenerator.test.tsx +0 -291
- package/tests/components/VisualExplain.test.tsx +0 -704
- package/tests/components/admin/AdminDashboard.test.tsx +0 -205
- package/tests/components/admin/AuditTab.test.tsx +0 -220
- package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
- package/tests/components/admin/OperationsTab.test.tsx +0 -975
- package/tests/components/admin/OverviewTab.test.tsx +0 -254
- package/tests/components/admin/SecurityTab.test.tsx +0 -467
- package/tests/components/monitoring/MetricChart.test.tsx +0 -111
- package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
- package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
- package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
- package/tests/components/monitoring/PoolTab.test.tsx +0 -42
- package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
- package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
- package/tests/components/monitoring/StorageTab.test.tsx +0 -127
- package/tests/components/monitoring/TablesTab.test.tsx +0 -153
- package/tests/components/results-grid/ResultCard.test.tsx +0 -105
- package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
- package/tests/components/results-grid/StatsBar.test.tsx +0 -162
- package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
- package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
- package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
- package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
- package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
- package/tests/components/sidebar/Sidebar.test.tsx +0 -187
- package/tests/components/studio/BottomPanel.test.tsx +0 -383
- package/tests/components/studio/QueryToolbar.test.tsx +0 -321
- package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
- package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
- package/tests/components/studio/StudioTabBar.test.tsx +0 -331
- package/tests/fixtures/connections.ts +0 -96
- package/tests/fixtures/masking-configs.ts +0 -86
- package/tests/fixtures/query-results.ts +0 -71
- package/tests/fixtures/schemas.ts +0 -64
- package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
- package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
- package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
- package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
- package/tests/fixtures/seed-connections/valid-config.json +0 -15
- package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
- package/tests/helpers/mock-fetch.ts +0 -59
- package/tests/helpers/mock-monaco.ts +0 -112
- package/tests/helpers/mock-navigation.ts +0 -28
- package/tests/helpers/mock-next.ts +0 -80
- package/tests/helpers/mock-provider.ts +0 -133
- package/tests/helpers/mock-sonner.ts +0 -29
- package/tests/helpers/render-with-providers.tsx +0 -19
- package/tests/hooks/use-ai-chat.test.ts +0 -600
- package/tests/hooks/use-auth.test.ts +0 -371
- package/tests/hooks/use-connection-form.test.ts +0 -743
- package/tests/hooks/use-connection-manager.test.ts +0 -466
- package/tests/hooks/use-inline-editing.test.ts +0 -321
- package/tests/hooks/use-mobile.test.ts +0 -177
- package/tests/hooks/use-monitoring-data.test.ts +0 -819
- package/tests/hooks/use-provider-metadata.test.ts +0 -228
- package/tests/hooks/use-query-execution.test.ts +0 -1212
- package/tests/hooks/use-tab-manager.test.ts +0 -756
- package/tests/hooks/use-toast.test.ts +0 -74
- package/tests/hooks/use-transaction-control.test.ts +0 -211
- package/tests/integration/db/mongodb-provider.test.ts +0 -698
- package/tests/integration/db/mssql-provider.test.ts +0 -840
- package/tests/integration/db/mysql-provider.test.ts +0 -872
- package/tests/integration/db/oracle-provider.test.ts +0 -843
- package/tests/integration/db/postgres-provider.test.ts +0 -1382
- package/tests/integration/db/redis-provider.test.ts +0 -526
- package/tests/integration/db/sqlite-provider.test.ts +0 -480
- package/tests/integration/seed/seed-pipeline.test.ts +0 -102
- package/tests/isolated/factory-singleton.test.ts +0 -150
- package/tests/isolated/use-storage-sync.test.ts +0 -389
- package/tests/run-components.sh +0 -196
- package/tests/setup-dom.ts +0 -58
- package/tests/setup.ts +0 -40
- package/tests/unit/api-errors.test.ts +0 -210
- package/tests/unit/code-generator-functions.test.ts +0 -271
- package/tests/unit/components/column-list.test.tsx +0 -190
- package/tests/unit/components/data-import-modal.test.tsx +0 -441
- package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
- package/tests/unit/data-charts-functions.test.ts +0 -496
- package/tests/unit/data-import-functions.test.ts +0 -320
- package/tests/unit/data-import-utils.test.ts +0 -125
- package/tests/unit/db/base-provider.test.ts +0 -517
- package/tests/unit/db/errors.test.ts +0 -403
- package/tests/unit/db/factory.test.ts +0 -436
- package/tests/unit/db/pool-manager.test.ts +0 -440
- package/tests/unit/db/query-limiter.test.ts +0 -387
- package/tests/unit/db/sql-base.test.ts +0 -438
- package/tests/unit/lib/api/error-codes.test.ts +0 -39
- package/tests/unit/lib/audit.test.ts +0 -326
- package/tests/unit/lib/auth.test.ts +0 -146
- package/tests/unit/lib/connection-string-parser.test.ts +0 -424
- package/tests/unit/lib/data-masking.test.ts +0 -583
- package/tests/unit/lib/db-icons.test.tsx +0 -41
- package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
- package/tests/unit/lib/oidc.test.ts +0 -509
- package/tests/unit/lib/query-generators.test.ts +0 -127
- package/tests/unit/lib/storage/factory.test.ts +0 -71
- package/tests/unit/lib/storage/local-storage.test.ts +0 -114
- package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
- package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
- package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
- package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
- package/tests/unit/lib/storage.test.ts +0 -317
- package/tests/unit/lib/time-series-buffer.test.ts +0 -212
- package/tests/unit/lib/utils.test.ts +0 -24
- package/tests/unit/llm/base-provider.test.ts +0 -238
- package/tests/unit/llm/config.test.ts +0 -262
- package/tests/unit/llm/custom-provider.test.ts +0 -281
- package/tests/unit/llm/gemini-provider.test.ts +0 -248
- package/tests/unit/llm/llm-factory.test.ts +0 -155
- package/tests/unit/llm/ollama-provider.test.ts +0 -288
- package/tests/unit/llm/openai-provider.test.ts +0 -324
- package/tests/unit/llm/retry.test.ts +0 -180
- package/tests/unit/llm/streaming.test.ts +0 -355
- package/tests/unit/logger.test.ts +0 -198
- package/tests/unit/mongodb-completions.test.ts +0 -516
- package/tests/unit/pivot-table-functions.test.ts +0 -76
- package/tests/unit/query-cancelled-error.test.ts +0 -81
- package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
- package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
- package/tests/unit/seed/config-loader.test.ts +0 -73
- package/tests/unit/seed/connection-filter.test.ts +0 -91
- package/tests/unit/seed/credential-resolver.test.ts +0 -85
- package/tests/unit/seed/index.test.ts +0 -72
- package/tests/unit/seed/resolve-connection.test.ts +0 -74
- package/tests/unit/seed/types.test.ts +0 -129
- package/tests/unit/sql/alias-extractor.test.ts +0 -444
- package/tests/unit/sql/statement-splitter.test.ts +0 -348
- package/tests/unit/sql-completions.test.ts +0 -463
- package/tests/unit/ssh-tunnel.test.ts +0 -465
- package/tsconfig.json +0 -42
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/db/providers/sql/oracle.ts"],"names":["e"],"mappings":"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","file":"oracle-P2G7T4P4.mjs","sourcesContent":["/**\n * Oracle Database Provider\n * Full Oracle support with connection pooling (Thin mode - no Instant Client needed)\n */\n\nimport oracledb from 'oracledb';\nimport { SQLBaseProvider } from './sql-base';\nimport {\n type DatabaseConnection,\n type TableSchema,\n type QueryResult,\n type HealthInfo,\n type MaintenanceType,\n type MaintenanceResult,\n type ProviderOptions,\n type ProviderCapabilities,\n type ProviderLabels,\n type SlowQuery,\n type ActiveSession,\n type DatabaseOverview,\n type PerformanceMetrics,\n type SlowQueryStats,\n type ActiveSessionDetails,\n type TableStats,\n type IndexStats,\n type StorageStats,\n type PreparedQuery,\n type QueryPrepareOptions,\n} from '../../types';\nimport {\n DatabaseConfigError,\n ConnectionError,\n QueryError,\n mapDatabaseError,\n} from '../../errors';\nimport { formatBytes } from '../../utils/pool-manager';\nimport {\n analyzeQuery,\n DEFAULT_QUERY_LIMIT,\n MAX_UNLIMITED_ROWS,\n} from '../../utils/query-limiter';\n\n// ============================================================================\n// Oracle Provider\n// ============================================================================\n\nexport class OracleProvider extends SQLBaseProvider {\n private pool: oracledb.Pool | null = null;\n\n // Transaction support: dedicated connection held outside pool\n private txConn: oracledb.Connection | null = null;\n private txActive = false;\n\n // Track running connections for cancellation\n private runningConns = new Map<string, oracledb.Connection>();\n\n constructor(config: DatabaseConnection, options: ProviderOptions = {}) {\n super(config, options);\n // Use thin mode (pure JS, no Oracle Instant Client)\n oracledb.initOracleClient = undefined as unknown as typeof oracledb.initOracleClient;\n oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;\n oracledb.autoCommit = true;\n this.validate();\n }\n\n // ============================================================================\n // Provider Metadata\n // ============================================================================\n\n public override getCapabilities(): ProviderCapabilities {\n return {\n ...super.getCapabilities(),\n defaultPort: 1521,\n supportsExplain: true,\n supportsConnectionString: true,\n maintenanceOperations: ['analyze', 'optimize', 'kill'],\n };\n }\n\n public override getLabels(): ProviderLabels {\n return {\n ...super.getLabels(),\n analyzeAction: 'Gather Statistics',\n vacuumAction: 'Rebuild Indexes',\n analyzeGlobalLabel: 'Gather Stats',\n analyzeGlobalTitle: 'Gather Statistics',\n analyzeGlobalDesc: 'Collects optimizer statistics for all tables to improve query performance.',\n vacuumGlobalLabel: 'Rebuild Indexes',\n vacuumGlobalTitle: 'Rebuild All Indexes',\n vacuumGlobalDesc: 'Rebuilds all indexes to reclaim space and improve performance.',\n };\n }\n\n // ============================================================================\n // Validation\n // ============================================================================\n\n public validate(): void {\n super.validate();\n\n if (!this.config.connectionString) {\n if (!this.config.host) {\n throw new DatabaseConfigError('Host is required for Oracle', 'oracle');\n }\n }\n }\n\n // ============================================================================\n // Connection Management\n // ============================================================================\n\n private getConnectString(): string {\n if (this.config.connectionString) {\n return this.config.connectionString;\n }\n\n const host = this.config.host || 'localhost';\n const port = this.config.port || 1521;\n const serviceName = this.config.serviceName || this.config.database || 'ORCL';\n\n return `${host}:${port}/${serviceName}`;\n }\n\n public async connect(): Promise<void> {\n if (this.pool) {\n return;\n }\n\n try {\n this.pool = await oracledb.createPool({\n user: this.config.user,\n password: this.config.password,\n connectString: this.getConnectString(),\n poolMin: this.poolConfig.min,\n poolMax: this.poolConfig.max,\n poolTimeout: Math.floor(this.poolConfig.idleTimeout / 1000),\n });\n\n // Test the connection\n const conn = await this.pool.getConnection();\n await conn.close();\n\n this.setConnected(true);\n } catch (error) {\n this.setError(error instanceof Error ? error : new Error(String(error)));\n throw new ConnectionError(\n `Failed to connect to Oracle: ${error instanceof Error ? error.message : error}`,\n 'oracle',\n this.config.host,\n this.config.port\n );\n }\n }\n\n public async disconnect(): Promise<void> {\n if (this.pool) {\n try {\n await this.pool.close(0);\n } catch {\n // Force close on error\n }\n this.pool = null;\n this.setConnected(false);\n }\n }\n\n // ============================================================================\n // Query Execution\n // ============================================================================\n\n public async query(sql: string, params?: unknown[], queryId?: string): Promise<QueryResult> {\n this.ensureConnected();\n\n return this.trackQuery(async () => {\n const { result, executionTime } = await this.measureExecution(async () => {\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n\n if (queryId) {\n this.runningConns.set(queryId, conn);\n }\n\n const bindParams = params || [];\n const res = await conn.execute(sql, bindParams, {\n outFormat: oracledb.OUT_FORMAT_OBJECT,\n autoCommit: true,\n });\n\n return res;\n } catch (error) {\n throw mapDatabaseError(error, 'oracle', sql);\n } finally {\n if (queryId) this.runningConns.delete(queryId);\n if (conn) {\n try { await conn.close(); } catch { /* ignore */ }\n }\n }\n });\n\n const rows = (result.rows || []) as Record<string, unknown>[];\n const fields = result.metaData?.map((m: { name: string }) => m.name) ?? [];\n\n return {\n rows,\n fields,\n rowCount: rows.length,\n executionTime,\n };\n });\n }\n\n public async cancelQuery(queryId: string): Promise<boolean> {\n const conn = this.runningConns.get(queryId);\n if (!conn) return false;\n\n try {\n await conn.break();\n return true;\n } catch (error) {\n console.error('[Oracle] Failed to cancel query:', error);\n return false;\n }\n }\n\n // ============================================================================\n // Query Preparation (Oracle FETCH FIRST instead of LIMIT)\n // ============================================================================\n\n public override prepareQuery(query: string, options: QueryPrepareOptions = {}): PreparedQuery {\n const { limit = DEFAULT_QUERY_LIMIT, offset = 0, unlimited = false } = options;\n const effectiveLimit = unlimited ? MAX_UNLIMITED_ROWS : limit;\n const queryInfo = analyzeQuery(query);\n\n if (queryInfo.type === 'SELECT' && !queryInfo.hasLimit) {\n let modifiedSql = query.trim();\n const hasSemicolon = modifiedSql.endsWith(';');\n if (hasSemicolon) modifiedSql = modifiedSql.slice(0, -1).trim();\n\n if (offset > 0) {\n modifiedSql = `${modifiedSql} OFFSET ${offset} ROWS FETCH NEXT ${effectiveLimit} ROWS ONLY`;\n } else {\n modifiedSql = `${modifiedSql} FETCH FIRST ${effectiveLimit} ROWS ONLY`;\n }\n\n if (hasSemicolon) modifiedSql += ';';\n\n return {\n query: modifiedSql,\n wasLimited: true,\n limit: effectiveLimit,\n offset,\n };\n }\n\n return { query, wasLimited: false, limit: effectiveLimit, offset };\n }\n\n // ============================================================================\n // Transaction Support\n // ============================================================================\n\n public async beginTransaction(): Promise<void> {\n this.ensureConnected();\n if (this.txActive) throw new QueryError('Transaction already active', 'oracle');\n this.txConn = await this.pool!.getConnection();\n // Oracle auto-starts a transaction; we just hold the connection\n this.txActive = true;\n }\n\n public async commitTransaction(): Promise<void> {\n if (!this.txConn || !this.txActive) throw new QueryError('No active transaction', 'oracle');\n try {\n await this.txConn.commit();\n } finally {\n await this.txConn.close();\n this.txConn = null;\n this.txActive = false;\n }\n }\n\n public async rollbackTransaction(): Promise<void> {\n if (!this.txConn || !this.txActive) throw new QueryError('No active transaction', 'oracle');\n try {\n await this.txConn.rollback();\n } finally {\n await this.txConn.close();\n this.txConn = null;\n this.txActive = false;\n }\n }\n\n public isInTransaction(): boolean {\n return this.txActive;\n }\n\n public async queryInTransaction(sql: string, params?: unknown[]): Promise<QueryResult> {\n if (!this.txConn || !this.txActive) throw new QueryError('No active transaction', 'oracle');\n\n return this.trackQuery(async () => {\n const { result, executionTime } = await this.measureExecution(async () => {\n try {\n return await this.txConn!.execute(sql, params || [], {\n outFormat: oracledb.OUT_FORMAT_OBJECT,\n autoCommit: false,\n });\n } catch (error) {\n throw mapDatabaseError(error, 'oracle', sql);\n }\n });\n\n const rows = (result.rows || []) as Record<string, unknown>[];\n const fields = result.metaData?.map((m: { name: string }) => m.name) ?? [];\n\n return {\n rows,\n fields,\n rowCount: rows.length,\n executionTime,\n };\n });\n }\n\n // ============================================================================\n // Schema Operations\n // ============================================================================\n\n public async getSchema(): Promise<TableSchema[]> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n const owner = this.config.user?.toUpperCase() || '';\n\n // Get tables\n const tablesRes = await conn.execute(\n `SELECT TABLE_NAME, NUM_ROWS FROM ALL_TABLES WHERE OWNER = :1 ORDER BY TABLE_NAME`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const tables = (tablesRes.rows || []) as Record<string, unknown>[];\n\n // Get columns\n const colsRes = await conn.execute(\n `SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, NULLABLE, DATA_DEFAULT, COLUMN_ID\n FROM ALL_TAB_COLUMNS WHERE OWNER = :1\n ORDER BY TABLE_NAME, COLUMN_ID`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const allCols = (colsRes.rows || []) as Record<string, unknown>[];\n\n // Get primary keys\n const pkRes = await conn.execute(\n `SELECT ac.TABLE_NAME, acc.COLUMN_NAME\n FROM ALL_CONSTRAINTS ac\n JOIN ALL_CONS_COLUMNS acc ON ac.CONSTRAINT_NAME = acc.CONSTRAINT_NAME AND ac.OWNER = acc.OWNER\n WHERE ac.OWNER = :1 AND ac.CONSTRAINT_TYPE = 'P'`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const pkRows = (pkRes.rows || []) as Record<string, unknown>[];\n const pkMap = new Map<string, Set<string>>();\n for (const row of pkRows) {\n const tbl = String(row.TABLE_NAME || '');\n const col = String(row.COLUMN_NAME || '');\n if (!pkMap.has(tbl)) pkMap.set(tbl, new Set());\n pkMap.get(tbl)!.add(col);\n }\n\n // Get foreign keys\n const fkRes = await conn.execute(\n `SELECT ac.TABLE_NAME,\n acc.COLUMN_NAME,\n rc.TABLE_NAME AS REF_TABLE,\n rcc.COLUMN_NAME AS REF_COLUMN\n FROM ALL_CONSTRAINTS ac\n JOIN ALL_CONS_COLUMNS acc ON ac.CONSTRAINT_NAME = acc.CONSTRAINT_NAME AND ac.OWNER = acc.OWNER\n JOIN ALL_CONSTRAINTS rc ON ac.R_CONSTRAINT_NAME = rc.CONSTRAINT_NAME AND ac.R_OWNER = rc.OWNER\n JOIN ALL_CONS_COLUMNS rcc ON rc.CONSTRAINT_NAME = rcc.CONSTRAINT_NAME AND rc.OWNER = rcc.OWNER\n WHERE ac.OWNER = :1 AND ac.CONSTRAINT_TYPE = 'R'`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const fkRows = (fkRes.rows || []) as Record<string, unknown>[];\n\n // Get indexes\n const idxRes = await conn.execute(\n `SELECT ai.TABLE_NAME, ai.INDEX_NAME, ai.UNIQUENESS, aic.COLUMN_NAME, aic.COLUMN_POSITION\n FROM ALL_INDEXES ai\n JOIN ALL_IND_COLUMNS aic ON ai.INDEX_NAME = aic.INDEX_NAME AND ai.OWNER = aic.INDEX_OWNER\n WHERE ai.OWNER = :1\n ORDER BY ai.TABLE_NAME, ai.INDEX_NAME, aic.COLUMN_POSITION`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const idxRows = (idxRes.rows || []) as Record<string, unknown>[];\n\n // Group columns, indexes, foreign keys by table\n const colsByTable = new Map<string, Record<string, unknown>[]>();\n for (const c of allCols) {\n const tbl = String(c.TABLE_NAME || '');\n if (!colsByTable.has(tbl)) colsByTable.set(tbl, []);\n colsByTable.get(tbl)!.push(c);\n }\n\n const fksByTable = new Map<string, Record<string, unknown>[]>();\n for (const fk of fkRows) {\n const tbl = String(fk.TABLE_NAME || '');\n if (!fksByTable.has(tbl)) fksByTable.set(tbl, []);\n fksByTable.get(tbl)!.push(fk);\n }\n\n const idxByTable = new Map<string, Map<string, { unique: boolean; columns: string[] }>>();\n for (const idx of idxRows) {\n const tbl = String(idx.TABLE_NAME || '');\n const idxName = String(idx.INDEX_NAME || '');\n if (!idxByTable.has(tbl)) idxByTable.set(tbl, new Map());\n const tableIdxs = idxByTable.get(tbl)!;\n if (!tableIdxs.has(idxName)) {\n tableIdxs.set(idxName, {\n unique: String(idx.UNIQUENESS || '') === 'UNIQUE',\n columns: [],\n });\n }\n tableIdxs.get(idxName)!.columns.push(String(idx.COLUMN_NAME || ''));\n }\n\n return tables.map((t) => {\n const tableName = String(t.TABLE_NAME || '');\n const pks = pkMap.get(tableName) || new Set();\n\n const columns = (colsByTable.get(tableName) || []).map((c) => ({\n name: String(c.COLUMN_NAME || ''),\n type: String(c.DATA_TYPE || ''),\n nullable: String(c.NULLABLE || '') === 'Y',\n isPrimary: pks.has(String(c.COLUMN_NAME || '')),\n defaultValue: c.DATA_DEFAULT ? String(c.DATA_DEFAULT).trim() : undefined,\n }));\n\n const foreignKeys = (fksByTable.get(tableName) || []).map((fk) => ({\n columnName: String(fk.COLUMN_NAME || ''),\n referencedTable: String(fk.REF_TABLE || ''),\n referencedColumn: String(fk.REF_COLUMN || ''),\n }));\n\n const tableIdxs = idxByTable.get(tableName) || new Map();\n const indexes = Array.from(tableIdxs.entries()).map(([name, info]) => ({\n name,\n columns: info.columns,\n unique: info.unique,\n }));\n\n return {\n name: tableName,\n rowCount: Number(t.NUM_ROWS || 0),\n columns,\n indexes,\n foreignKeys,\n };\n });\n } finally {\n if (conn) await conn.close();\n }\n }\n\n // ============================================================================\n // Health & Monitoring\n // ============================================================================\n\n public async getHealth(): Promise<HealthInfo> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n\n let activeConnections = 0;\n let databaseSize = 'N/A';\n let cacheHitRatio = 'N/A';\n const slowQueries: SlowQuery[] = [];\n const activeSessions: ActiveSession[] = [];\n\n // Active connections\n try {\n const connRes = await conn.execute(\n `SELECT COUNT(*) AS CNT FROM V$SESSION WHERE STATUS = 'ACTIVE'`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const rows = (connRes.rows || []) as Record<string, unknown>[];\n activeConnections = Number(rows[0]?.CNT || 0);\n } catch { /* V$ requires privileges */ }\n\n // Database size\n try {\n const sizeRes = await conn.execute(\n `SELECT ROUND(SUM(BYTES) / 1024 / 1024, 2) AS SIZE_MB FROM USER_SEGMENTS`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const sizeRows = (sizeRes.rows || []) as Record<string, unknown>[];\n const mb = Number(sizeRows[0]?.SIZE_MB || 0);\n databaseSize = mb > 1024 ? `${(mb / 1024).toFixed(2)} GB` : `${mb} MB`;\n } catch { /* ignore */ }\n\n // Cache hit ratio\n try {\n const cacheRes = await conn.execute(\n `SELECT ROUND(\n (1 - (SUM(DECODE(NAME, 'physical reads', VALUE, 0)) /\n NULLIF(SUM(DECODE(NAME, 'db block gets', VALUE, 0)) + SUM(DECODE(NAME, 'consistent gets', VALUE, 0)), 0)\n )) * 100, 2) AS HIT_RATIO\n FROM V$SYSSTAT\n WHERE NAME IN ('db block gets', 'consistent gets', 'physical reads')`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const cacheRows = (cacheRes.rows || []) as Record<string, unknown>[];\n cacheHitRatio = `${cacheRows[0]?.HIT_RATIO || 0}%`;\n } catch { /* ignore */ }\n\n // Slow queries\n try {\n const slowRes = await conn.execute(\n `SELECT * FROM (\n SELECT SUBSTR(SQL_TEXT, 1, 100) AS QUERY,\n EXECUTIONS AS CALLS,\n ROUND(ELAPSED_TIME / NULLIF(EXECUTIONS, 0) / 1000, 2) || 'ms' AS AVGTIME\n FROM V$SQL\n WHERE EXECUTIONS > 0\n ORDER BY ELAPSED_TIME DESC\n ) WHERE ROWNUM <= 5`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n for (const row of (slowRes.rows || []) as Record<string, unknown>[]) {\n slowQueries.push({\n query: String(row.QUERY || ''),\n calls: Number(row.CALLS || 0),\n avgTime: String(row.AVGTIME || 'N/A'),\n });\n }\n } catch { /* V$SQL requires privileges */ }\n\n // Active sessions\n try {\n const sessRes = await conn.execute(\n `SELECT * FROM (\n SELECT SID, USERNAME, STATUS, SUBSTR(NVL(SQL_ID, ''), 1, 100) AS QUERY,\n SCHEMANAME AS \"DATABASE\",\n NVL(TO_CHAR(LOGON_TIME, 'HH24:MI:SS'), 'N/A') AS DURATION\n FROM V$SESSION\n WHERE TYPE = 'USER' AND STATUS = 'ACTIVE'\n ORDER BY LOGON_TIME DESC\n ) WHERE ROWNUM <= 10`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n for (const row of (sessRes.rows || []) as Record<string, unknown>[]) {\n activeSessions.push({\n pid: String(row.SID || ''),\n user: String(row.USERNAME || 'unknown'),\n database: String(row.DATABASE || ''),\n state: String(row.STATUS || 'unknown'),\n query: String(row.QUERY || ''),\n duration: String(row.DURATION || 'N/A'),\n });\n }\n } catch { /* ignore */ }\n\n return { activeConnections, databaseSize, cacheHitRatio, slowQueries, activeSessions };\n } finally {\n if (conn) await conn.close();\n }\n }\n\n // ============================================================================\n // Maintenance Operations\n // ============================================================================\n\n public async runMaintenance(type: MaintenanceType, target?: string): Promise<MaintenanceResult> {\n this.ensureConnected();\n\n const { result, executionTime } = await this.measureExecution(async () => {\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n let sql = '';\n\n switch (type) {\n case 'analyze':\n if (target) {\n sql = `BEGIN DBMS_STATS.GATHER_TABLE_STATS(USER, '${target.replace(/'/g, \"''\")}'); END;`;\n } else {\n sql = `BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(USER); END;`;\n }\n break;\n case 'optimize':\n if (target) {\n sql = `ALTER INDEX \"${target.replace(/\"/g, '\"\"')}\" REBUILD`;\n } else {\n // Rebuild all indexes for user\n const idxRes = await conn.execute(\n `SELECT INDEX_NAME FROM USER_INDEXES WHERE INDEX_TYPE = 'NORMAL'`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n for (const row of (idxRes.rows || []) as Record<string, unknown>[]) {\n try {\n await conn.execute(`ALTER INDEX \"${String(row.INDEX_NAME)}\" REBUILD`);\n } catch { /* individual index rebuild may fail */ }\n }\n return { success: true };\n }\n break;\n case 'kill':\n if (!target) {\n throw new QueryError('Target SID,SERIAL# is required for kill operation', 'oracle');\n }\n sql = `ALTER SYSTEM KILL SESSION '${target.replace(/'/g, \"''\")}'`;\n break;\n default:\n throw new QueryError(`Unsupported maintenance type: ${type}`, 'oracle');\n }\n\n if (sql) {\n await conn.execute(sql);\n }\n return { success: true };\n } finally {\n if (conn) await conn.close();\n }\n });\n\n return {\n success: result.success,\n executionTime,\n message: `${type.toUpperCase()} completed successfully`,\n };\n }\n\n // ============================================================================\n // Pool Statistics\n // ============================================================================\n\n public getPoolStats() {\n if (!this.pool) {\n return { total: 0, idle: 0, active: 0, waiting: 0 };\n }\n\n return {\n total: this.pool.connectionsOpen,\n idle: this.pool.connectionsOpen - this.pool.connectionsInUse,\n active: this.pool.connectionsInUse,\n waiting: 0,\n };\n }\n\n // ============================================================================\n // Extended Monitoring Methods\n // ============================================================================\n\n public async getOverview(): Promise<DatabaseOverview> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n\n let version = 'Oracle';\n let uptime = 'N/A';\n let startTime: Date | undefined;\n let activeConnections = 0;\n let maxConnections = 0;\n let databaseSize = '0 bytes';\n let databaseSizeBytes = 0;\n let tableCount = 0;\n let indexCount = 0;\n\n // Version and uptime\n try {\n const vRes = await conn.execute(\n `SELECT BANNER FROM V$VERSION WHERE ROWNUM = 1`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const vRows = (vRes.rows || []) as Record<string, unknown>[];\n if (vRows[0]?.BANNER) version = String(vRows[0].BANNER);\n } catch { /* ignore */ }\n\n try {\n const upRes = await conn.execute(\n `SELECT STARTUP_TIME, (SYSDATE - STARTUP_TIME) * 86400 AS UPTIME_SECS FROM V$INSTANCE`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const upRows = (upRes.rows || []) as Record<string, unknown>[];\n if (upRows[0]) {\n const secs = Number(upRows[0].UPTIME_SECS || 0);\n const days = Math.floor(secs / 86400);\n const hours = Math.floor((secs % 86400) / 3600);\n const minutes = Math.floor((secs % 3600) / 60);\n uptime = days > 0 ? `${days}d ${hours}h ${minutes}m` : hours > 0 ? `${hours}h ${minutes}m` : `${minutes}m`;\n if (upRows[0].STARTUP_TIME) startTime = new Date(String(upRows[0].STARTUP_TIME));\n }\n } catch { /* ignore */ }\n\n // Connections\n try {\n const sessRes = await conn.execute(\n `SELECT COUNT(*) AS CNT FROM V$SESSION WHERE TYPE = 'USER'`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n activeConnections = Number(((sessRes.rows || []) as Record<string, unknown>[])[0]?.CNT || 0);\n\n const maxRes = await conn.execute(\n `SELECT VALUE FROM V$PARAMETER WHERE NAME = 'sessions'`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n maxConnections = Number(((maxRes.rows || []) as Record<string, unknown>[])[0]?.VALUE || 0);\n } catch { /* ignore */ }\n\n // Database size\n try {\n const sizeRes = await conn.execute(\n `SELECT SUM(BYTES) AS TOTAL FROM USER_SEGMENTS`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n databaseSizeBytes = Number(((sizeRes.rows || []) as Record<string, unknown>[])[0]?.TOTAL || 0);\n databaseSize = formatBytes(databaseSizeBytes);\n } catch { /* ignore */ }\n\n // Table and index counts\n try {\n const cntRes = await conn.execute(\n `SELECT\n (SELECT COUNT(*) FROM USER_TABLES) AS TABLE_COUNT,\n (SELECT COUNT(*) FROM USER_INDEXES) AS INDEX_COUNT\n FROM DUAL`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const cntRows = (cntRes.rows || []) as Record<string, unknown>[];\n tableCount = Number(cntRows[0]?.TABLE_COUNT || 0);\n indexCount = Number(cntRows[0]?.INDEX_COUNT || 0);\n } catch { /* ignore */ }\n\n return {\n version, uptime, startTime, activeConnections, maxConnections,\n databaseSize, databaseSizeBytes, tableCount, indexCount,\n };\n } finally {\n if (conn) await conn.close();\n }\n }\n\n public async getPerformanceMetrics(): Promise<PerformanceMetrics> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n\n let cacheHitRatio = 100;\n let bufferPoolUsage: number | undefined;\n\n try {\n const cacheRes = await conn.execute(\n `SELECT ROUND(\n (1 - (SUM(DECODE(NAME, 'physical reads', VALUE, 0)) /\n NULLIF(SUM(DECODE(NAME, 'db block gets', VALUE, 0)) + SUM(DECODE(NAME, 'consistent gets', VALUE, 0)), 0)\n )) * 100, 2) AS HIT_RATIO\n FROM V$SYSSTAT\n WHERE NAME IN ('db block gets', 'consistent gets', 'physical reads')`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n const rows = (cacheRes.rows || []) as Record<string, unknown>[];\n cacheHitRatio = Number(rows[0]?.HIT_RATIO || 100);\n bufferPoolUsage = cacheHitRatio;\n } catch { /* ignore */ }\n\n return {\n cacheHitRatio,\n bufferPoolUsage,\n };\n } finally {\n if (conn) await conn.close();\n }\n }\n\n public async getSlowQueries(options?: { limit?: number }): Promise<SlowQueryStats[]> {\n this.ensureConnected();\n const limit = options?.limit ?? 10;\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n\n const res = await conn.execute(\n `SELECT * FROM (\n SELECT SQL_ID AS QUERY_ID,\n SUBSTR(SQL_TEXT, 1, 500) AS QUERY,\n EXECUTIONS AS CALLS,\n ROUND(ELAPSED_TIME / 1000, 2) AS TOTAL_TIME,\n ROUND(ELAPSED_TIME / NULLIF(EXECUTIONS, 0) / 1000, 2) AS AVG_TIME,\n ROWS_PROCESSED AS ROW_CNT,\n BUFFER_GETS AS BUF_GETS,\n DISK_READS\n FROM V$SQL\n WHERE EXECUTIONS > 0\n ORDER BY ELAPSED_TIME DESC\n ) WHERE ROWNUM <= ${limit}`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n return ((res.rows || []) as Record<string, unknown>[]).map((r) => ({\n queryId: String(r.QUERY_ID || ''),\n query: String(r.QUERY || ''),\n calls: Number(r.CALLS || 0),\n totalTime: Number(r.TOTAL_TIME || 0),\n avgTime: Number(r.AVG_TIME || 0),\n rows: Number(r.ROW_CNT || 0),\n sharedBlksHit: Number(r.BUF_GETS || 0),\n sharedBlksRead: Number(r.DISK_READS || 0),\n }));\n } catch {\n return [];\n } finally {\n if (conn) await conn.close();\n }\n }\n\n public async getActiveSessions(options?: { limit?: number }): Promise<ActiveSessionDetails[]> {\n this.ensureConnected();\n const limit = options?.limit ?? 50;\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n\n const res = await conn.execute(\n `SELECT * FROM (\n SELECT s.SID, s.SERIAL#, s.USERNAME, s.SCHEMANAME, s.PROGRAM,\n s.MACHINE, s.STATUS, s.SQL_ID,\n SUBSTR(sq.SQL_TEXT, 1, 500) AS QUERY,\n s.LOGON_TIME,\n ROUND((SYSDATE - s.LOGON_TIME) * 86400) AS DURATION_SECS,\n s.WAIT_CLASS, s.EVENT\n FROM V$SESSION s\n LEFT JOIN V$SQL sq ON s.SQL_ID = sq.SQL_ID AND s.SQL_CHILD_NUMBER = sq.CHILD_NUMBER\n WHERE s.TYPE = 'USER'\n ORDER BY CASE s.STATUS WHEN 'ACTIVE' THEN 0 ELSE 1 END, s.LOGON_TIME DESC\n ) WHERE ROWNUM <= ${limit}`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n return ((res.rows || []) as Record<string, unknown>[]).map((r) => {\n const secs = Number(r.DURATION_SECS || 0);\n const durationStr = secs > 3600 ? `${Math.floor(secs / 3600)}h ${Math.floor((secs % 3600) / 60)}m`\n : secs > 60 ? `${Math.floor(secs / 60)}m ${secs % 60}s`\n : `${secs}s`;\n\n return {\n pid: `${r.SID},${r['SERIAL#']}`,\n user: String(r.USERNAME || 'unknown'),\n database: String(r.SCHEMANAME || ''),\n applicationName: String(r.PROGRAM || ''),\n clientAddr: String(r.MACHINE || ''),\n state: String(r.STATUS || 'unknown'),\n query: String(r.QUERY || r.SQL_ID || ''),\n queryStart: r.LOGON_TIME ? new Date(String(r.LOGON_TIME)) : undefined,\n duration: durationStr,\n durationMs: secs * 1000,\n waitEventType: r.WAIT_CLASS ? String(r.WAIT_CLASS) : undefined,\n waitEvent: r.EVENT ? String(r.EVENT) : undefined,\n blocked: false,\n };\n });\n } catch {\n return [];\n } finally {\n if (conn) await conn.close();\n }\n }\n\n public async getTableStats(): Promise<TableStats[]> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n const owner = this.config.user?.toUpperCase() || '';\n\n const res = await conn.execute(\n `SELECT t.TABLE_NAME,\n NVL(t.NUM_ROWS, 0) AS ROW_COUNT,\n NVL(s.BYTES, 0) AS TABLE_SIZE_BYTES,\n NVL(idx_size.BYTES, 0) AS INDEX_SIZE_BYTES,\n t.LAST_ANALYZED\n FROM ALL_TABLES t\n LEFT JOIN USER_SEGMENTS s ON s.SEGMENT_NAME = t.TABLE_NAME AND s.SEGMENT_TYPE = 'TABLE'\n LEFT JOIN (\n SELECT TABLE_NAME, SUM(BYTES) AS BYTES\n FROM USER_SEGMENTS\n WHERE SEGMENT_TYPE = 'INDEX'\n GROUP BY TABLE_NAME\n ) idx_size ON idx_size.TABLE_NAME = t.TABLE_NAME\n WHERE t.OWNER = :1\n ORDER BY NVL(s.BYTES, 0) DESC`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n return ((res.rows || []) as Record<string, unknown>[]).map((r) => {\n const tableSizeBytes = Number(r.TABLE_SIZE_BYTES || 0);\n const indexSizeBytes = Number(r.INDEX_SIZE_BYTES || 0);\n return {\n schemaName: owner,\n tableName: String(r.TABLE_NAME || ''),\n rowCount: Number(r.ROW_COUNT || 0),\n tableSize: formatBytes(tableSizeBytes),\n tableSizeBytes,\n indexSize: formatBytes(indexSizeBytes),\n indexSizeBytes,\n totalSize: formatBytes(tableSizeBytes + indexSizeBytes),\n totalSizeBytes: tableSizeBytes + indexSizeBytes,\n lastAnalyze: r.LAST_ANALYZED ? new Date(String(r.LAST_ANALYZED)) : undefined,\n };\n });\n } catch {\n return [];\n } finally {\n if (conn) await conn.close();\n }\n }\n\n public async getIndexStats(): Promise<IndexStats[]> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n const owner = this.config.user?.toUpperCase() || '';\n\n const res = await conn.execute(\n `SELECT ai.TABLE_NAME, ai.INDEX_NAME, ai.INDEX_TYPE, ai.UNIQUENESS,\n NVL(us.BYTES, 0) AS INDEX_SIZE_BYTES,\n ai.LEAF_BLOCKS, ai.DISTINCT_KEYS\n FROM ALL_INDEXES ai\n LEFT JOIN USER_SEGMENTS us ON us.SEGMENT_NAME = ai.INDEX_NAME AND us.SEGMENT_TYPE = 'INDEX'\n WHERE ai.OWNER = :1\n ORDER BY NVL(us.BYTES, 0) DESC`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n // Get columns for each index\n const colRes = await conn.execute(\n `SELECT INDEX_NAME, COLUMN_NAME, COLUMN_POSITION\n FROM ALL_IND_COLUMNS WHERE INDEX_OWNER = :1\n ORDER BY INDEX_NAME, COLUMN_POSITION`,\n [owner],\n { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n const colMap = new Map<string, string[]>();\n for (const c of (colRes.rows || []) as Record<string, unknown>[]) {\n const idxName = String(c.INDEX_NAME || '');\n if (!colMap.has(idxName)) colMap.set(idxName, []);\n colMap.get(idxName)!.push(String(c.COLUMN_NAME || ''));\n }\n\n return ((res.rows || []) as Record<string, unknown>[]).map((r) => {\n const idxName = String(r.INDEX_NAME || '');\n const idxSizeBytes = Number(r.INDEX_SIZE_BYTES || 0);\n return {\n schemaName: owner,\n tableName: String(r.TABLE_NAME || ''),\n indexName: idxName,\n indexType: String(r.INDEX_TYPE || ''),\n columns: colMap.get(idxName) || [],\n isUnique: String(r.UNIQUENESS || '') === 'UNIQUE',\n isPrimary: false,\n indexSize: formatBytes(idxSizeBytes),\n indexSizeBytes: idxSizeBytes,\n scans: 0,\n };\n });\n } catch {\n return [];\n } finally {\n if (conn) await conn.close();\n }\n }\n\n public async getStorageStats(): Promise<StorageStats[]> {\n this.ensureConnected();\n\n let conn: oracledb.Connection | undefined;\n try {\n conn = await this.pool!.getConnection();\n const results: StorageStats[] = [];\n\n // Try DBA tablespaces first, fallback to USER\n try {\n const tsRes = await conn.execute(\n `SELECT TABLESPACE_NAME AS NAME,\n SUM(BYTES) AS SIZE_BYTES\n FROM DBA_DATA_FILES\n GROUP BY TABLESPACE_NAME\n ORDER BY SUM(BYTES) DESC`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n for (const row of (tsRes.rows || []) as Record<string, unknown>[]) {\n const sizeBytes = Number(row.SIZE_BYTES || 0);\n results.push({\n name: String(row.NAME || ''),\n size: formatBytes(sizeBytes),\n sizeBytes,\n });\n }\n } catch {\n // Fallback: user segments\n try {\n const segRes = await conn.execute(\n `SELECT TABLESPACE_NAME AS NAME,\n SUM(BYTES) AS SIZE_BYTES\n FROM USER_SEGMENTS\n GROUP BY TABLESPACE_NAME\n ORDER BY SUM(BYTES) DESC`,\n [], { outFormat: oracledb.OUT_FORMAT_OBJECT }\n );\n\n for (const row of (segRes.rows || []) as Record<string, unknown>[]) {\n const sizeBytes = Number(row.SIZE_BYTES || 0);\n results.push({\n name: String(row.NAME || ''),\n size: formatBytes(sizeBytes),\n sizeBytes,\n });\n }\n } catch { /* ignore */ }\n }\n\n return results;\n } finally {\n if (conn) await conn.close();\n }\n }\n}\n"]}
|