Compare commits

...
Author SHA1 Message Date
08260e6a55 dbeaver/cloudbeaver#4249 added session rotation (#4274) (#4331)
* dbeaver/cloudbeaver#4249 added session rotation (#4274)

* dbeaver/cloudbeaver#4249 added session rotation

* dbeaver/pro#4249 update web session id

* dbeaver/pro#4249 remove log

* dbeaver/pro#4249 remove unused params

* dbeaver/pro#4249 revert non-related changes

* dbeaver/cloudbeaver#4249 rotate session before login

* dbeaver/cloudbeaver#4249 fix code style

* dbeaver/cloudbeaver#4249 rotate only for anon users

* dbeaver/cloudbeaver#4249 added notnulls

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>

* dbeaver/pro#4249 fix websocket for session rotation

---------

Co-authored-by: Dmitrii Barnukov <29237913+Nexus6v2@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ruslan <pupkinvasya7000@gmail.com>
2026-06-25 07:06:38 +02:00
Serge Rider aea12e9fed dbeaver/pro#9700 Save RM datasources correctly 2026-06-24 17:48:29 +02:00
Ruslan MusaevandDaria Marutkina caef729a8d dbeaver/pro#9599 fix allows unauthorized server file stream (#4411)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-06-24 15:29:07 +02:00
12030822ea dbeaver/pro#9502 [CB] move chart settings export dialogs to the widget (#4399)
* dbeaver/pro#9502 feat: allow importing css files from core-blocks package

Plugins that build UI directly on ui-kit components need the CloudBeaver theme css for these components without importing the components themselves. Expose css files through package exports so a plugin can load them as a side effect.

* dbeaver/pro#9502 fix: update focus-visible styles for select component

* dbeaver/pro#9502 feat: add tokens for combobox items

* dbeaver/pro#9502 feat: load Select/Combobox base styles from core-blocks

ui-kit controls reuse these styles, but the CE wrapper components are lazy, so the CSS only shipped in the lazy chunk, we need those styles for widgets that use UI-kit controls

* dbeaver/pro#9502 feat: enhance Select component with value display styling

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-24 12:54:46 +02:00
Mikhailov GrigoriiandSerge Rider 97cf62d333 dbeaver/dbeaver-devops#2660 Added permissions read on contents pull-requests (#4422)
Co-authored-by: Serge Rider <serge@jkiss.org>
2026-06-24 05:01:41 +02:00
8240c92247 dbeaver/pro#8796 [CB] create a separate plugin for the execution plan (#4406)
* dbeaver/pro#8796 refactor: extract Execution Plan into separate plugin

Move all Execution Plan logic out of plugin-sql-editor into a new plugin-sql-editor-execution-plan. plugin-sql-editor no longer knows about execution plan and instead exposes generic extension points

Execution plan tab data now lives in-memory in SqlExecutionPlanService instead of the persisted editor state schema (these tabs are session-only).

* dbeaver/pro#8796 feat: add naming convention rule for exported interfaces

* dbeaver/pro#8796 fix: update js-helpers dependency version in yarn.lock

* dbeaver/pro#8796 refactor: reorder register method for better readability

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-23 21:51:29 +02:00
sergeyteleshevandEvgenia 62a194c1b0 dbeaver/pro#7510 adds last login info to users tables (#4421)
* dbeaver/pro#7510 adds last login info to users tables

* dbeaver/pro#7510 shows only date

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-23 21:46:51 +02:00
sergeyteleshevandEvgenia 36e954c440 dbeaver/pro#9664 removes undici CVE (#4415)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-23 13:05:38 +02:00
Sychev AndreyandEvgenia a674c183d5 dbeaver/pro#5015 [CB] Ability to use keyboard to enabledisable checkboxes in the properties tab (#4416)
* dbeaver/pro#5015 feat: enable keyboard navigation for context menu in ObjectMenuCell

* dbeaver/pro#5015 feat: enable keyboard activation for context menu in ObjectMenuCell

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-23 12:51:04 +02:00
Sychev Andrey 4bab1025d7 dbeaver/pro#9660 fix: selection for search panel inputs (#4418) 2026-06-23 12:49:27 +02:00
Serge Riderandmr-anton-t 7d21186158 dbeaver/pro#9266 Refactor workspace path init and change (#4409)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-22 16:54:26 +02:00
eb5f89dae3 dbeaver/pro#9644 Data filters thread safety (#4407)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Diana <31996417+uslss@users.noreply.github.com>
2026-06-22 16:06:37 +02:00
70292cb9c0 dbeaver/pro#9588 remove top margin (#4405)
* dbeaver/pro#9588 remove top margin

* dbeaver/pro#9588 fix: move margin from indicator to checkbox itself

add multiline checkbox story for alignment with text

* Revert "dbeaver/pro#9588 remove top margin"

This reverts commit 0b25ed6f00.

---------

Co-authored-by: Sychev Andrey <nukemoore@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-22 14:38:20 +02:00
Evgenia 950f45833a dbeaver/pro#9630 Update README file CB 26.1.1 (#4414)
Added changelog for version 26.1.1
2026-06-22 12:39:55 +02:00
Ainur 8eb012670d dbeaver/pro#9640 fix loading driver props for old api (#4404) 2026-06-18 14:09:28 +02:00
Ruslan MusaevandAinur 413d229028 dbeaver/pro#9568 move tests to ce (#4402)
* dbeaver/pro#9568 move tests to ce

* dbeaver/pro#9568 move tests to ce

* dbeaver/pro#9568 fix tests

* dbeaver/pro#9568 fix tests

* dbeaver/pro#9568 fix tests

---------

Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2026-06-18 11:30:08 +02:00
serge-rider b0fbd41b85 dbeaver/pro#9544 Refactor SM auth model 2026-06-18 06:47:14 +02:00
660c7d9e1f dbeaver/pro#9328 Network profiles model (#4375)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-06-17 17:21:34 +02:00
dbeaver-devops 0f79ef21e7 dbeaver/pro#9630 26.1.2 version bump 2026-06-16 19:25:24 +02:00
AinurandEvgenia d9b5a9a20d dbeaver/pro#9088 api for collecting driver properties with auth (#4396)
* dbeaver/pro#9088 api for collecting driver properties with auth

* dbeaver/pro#9088 fix loading props in desktop and filter secured props

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-16 19:04:37 +02:00
Sychev Andreyandmr-anton-t b200148765 dbeaver/pro#9565 fix: lock @codemirror/search dependency to version 6.6.0 (#4401)
in 6.7.0 they have broken the replaceNext functionality and until they fix it we lock on the working version

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-16 18:55:26 +02:00
sergeyteleshevandmr-anton-t 18ecc829d3 dbeaver/pro#9618 removes form-data CVE (#4400)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-16 18:52:21 +02:00
AinurandEvgenia 58f51ee5f6 dbeaver/pro#9222 validate data transfer by using product settings (#4394)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-16 17:24:36 +02:00
Sychev Andreyandmr-anton-t 0f7c8fe69f dbeaver/pro#4867 refactor: use aria-labelledby instead of aria-label with the same text (#4366)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-16 11:37:19 +02:00
sergeyteleshev 776a91767d dbeaver/pro#9605 removes esbuild CVE (#4398) 2026-06-16 11:24:15 +02:00
Serge Rider 9f4f543eb3 Update documentation link from Community to GitHub WIKI 2026-06-14 08:08:30 +02:00
Serge Rider e4e009e1ec Update README with documentation links
Added links to official documentation and community WIKI.
2026-06-14 08:07:16 +02:00
serge-rider 895d27eb84 Workflow update 2026-06-13 23:27:08 +02:00
serge-rider a0cbaa89f6 Workflow update 2026-06-13 23:23:12 +02:00
serge-rider 32d1ef9a70 dbeaver/pro#9573 Groom test deps. 2026-06-13 23:17:35 +02:00
8362946990 dbeaver/pro#7128 Remove deprecated API (#3820)
* dbeaver/pro#7128 Remove deprecated API

* dbeaver/pro#7128 Fix nodes

* dbeaver/pro#7128 Return DS id in objectId

* dbeaver/pro#7128 disable test

* dbeaver/pro#7128 fixes connectionId and node Uri

* dbeaver/pro#7128 use new node path patterns

* dbeaver/pro#7128 FS in root nodes

* dbeaver/pro#7128 FS in root nodes

* dbeaver/pro#7128 FS and clouds in root nodes

* dbeaver/pro#7128 fix getting connection part

* dbeaver/pro#7128 use node path by default

* dbeaver/pro#7128 remove unused import

* dbeaver/pro#7128 fix tests

* dbeaver/pro#7128 Fix web cloud explorer

* dbeaver/pro#7128 Path calculation fix. Delete legacy and dead code.

* dbeaver/pro#7128 support folders new path

* dbeaver/pro#7128 add rm prefix variable

* dbeaver/pro#7128 adjust tests

* dbeaver/pro#7128 Remove deprecated node id property

* dbeaver/pro#7128 use uri in db objects

* dbeaver/pro#7128 do not restore tab if wrong format is used

* makes isDatabaseObject less heuristic

* Revert "makes isDatabaseObject less heuristic"

This reverts commit f85acd91f9.

* local fix for folders open action

* disallow to open folders in object viewer

* uses helper to identify node for advanced view correct behavior

* dbeaver/pro#7128 fixes the test which falls from time to time

* dbeaver/pro#7128 fixes the test which falls from time to time

* dbeaver/pro#7128 fixes the test which falls from time to time 2

* dbeaver/pro#7128 fixes the test which falls from time to time 2

* dbeaver/pro#7128 isolates unit tests

* Revert "dbeaver/pro#7128 isolates unit tests"

This reverts commit 5bf6adbdd1.

* dbeaver/pro#7128 tries useTranslateMock to fix the issue

* removes mocks

* skips the tests

---------

Co-authored-by: Ruslan <pupkinvasya7000@gmail.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-06-12 12:30:53 +02:00
AinurandEvgenia d3d71b79f0 dbeaver/pro#9120 cloudbeaver conf generator (#4388)
* dbeaver/pro#9120 cloudbeaver conf generator

* dbeaver/pro#9120 add tests and fix configs

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-12 11:34:39 +02:00
Ainurandmr-anton-t c344210b8b dbeaver/pro#7923 fix logging and use sm session id for events (#4374)
* dbeaver/pro#7923 fix logging and use sm session id for events

* dbeaver/pro#7923 nullability and move function

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-12 11:33:13 +02:00
f6aea971ef dbeaver/pro#9124 feat: replace Checkbox and Radio components with CheckboxIndicator and RadioIndicator for improved UI consistency (#4383)
* dbeaver/pro#9124 feat: introduce visual-only checkbox and radio indicators for improved nested interactive elements

* dbeaver/pro#9124 feat: add Checkbox and Radio components stories

* dbeaver/pro#9124 feat: export ControlSize type from controls module

* dbeaver/pro#9124 feat: add CheckboxIndicator and RadioIndicator components

* dbeaver/pro#9124 feat: replace Checkbox and Radio components with CheckboxIndicator and RadioIndicator for improved UI consistency

* dbeaver/pro#9124 refactor: rename CheckboxIndicatorProps to ICheckboxIndicatorProps for consistency

* dbeaver/pro#9124 refactor: rename RadioRootOwnProps to Props for consistency

* dbeaver/pro#9124 refactor: rename theme prop to variant in CheckboxIndicator for consistency

* dbeaver/pro#9124 refactor: rename RadioIndicatorProps to Props for consistency

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-06-12 11:09:22 +02:00
Ruslan Musaevandmr-anton-t 3d9c4391d1 dbeaver/pro#9119 fix code vulnerability (#4380)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-12 11:05:23 +02:00
sergeyteleshevandmr-anton-t 19284d33e7 dbeaver/pro#9550 removes critical CVE for shell-quote dependency (#4391)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-12 10:41:40 +02:00
dc1e865545 dbeaver/pro#9436 feat: add isNumber and replaceMiddle utility functions (#4377)
* dbeaver/pro#9436 feat: add isNumber and replaceMiddle utility functions

* dbeaver/pro#9436 refactor: move uuid helper into @dbeaver/js-helpers

Move uuid() from @cloudbeaver/core-utils into the portable @dbeaver/js-helpers so chart widget code can depend on it without pulling in CloudBeaver. core-utils re-exports uuid/V4Options/V1Options from js-helpers, so existing importers are unaffected; the uuid npm dependency moves to js-helpers.

* dbeaver/pro#9436 style: update copyright year in uuid_ file

* dbeaver/pro#9436 refactor: reexport isNumber and replaceMiddle functions from @dbeaver/js-helpers

* dbeaver/pro#9436 refactor: rename uuid file to uuid_ and update exports

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-11 14:20:45 +02:00
Sychev Andrey 4d62ddb5fc dbeaver/pro#9572 ci: add associations and references fields to SQL execute task results (#4393) 2026-06-11 14:08:40 +02:00
Ruslan MusaevandEvgenia 14df3b3120 dbeaver/pro#8981 add api for reference panel in cloudbeaver (#4313)
* dbeaver/pro#8981 add api for reference panel in cloudbeaver

* dbeaver/pro#8981 fixes

* dbeaver/pro#8981 api ref panel

* dbeaver/pro#8981 api ref panel

* dbeaver/pro#8981 api ref panel

* dbeaver/pro#8981 add api ref to table level

* dbeaver/pro#8981 fix tests

* dbeaver/pro#8981 fix review

* dbeaver/pro#8981 lazy loading fix

* dbeaver/pro#8981 separate association and refs

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-11 12:15:12 +02:00
Ruslan Musaev 30f5bd3bb3 dbeaver/pro#9482 add last auth date for users (#4389) 2026-06-11 12:14:31 +02:00
04a4c19331 dbeaver/pro#8780 migrate switch component to ui-kit (#4373)
* dbeaver/pro#8780 moves switch to ui-kit component + adds story

* redesigns switch

* fixes dense example

* fixes animations

* removes outline for whole area of switch

* adds tied to the input label

* adds innerChecked

* adds composition to the Switch component

* refactors switch API to make it more composable

* adds specifity to win css race with font weight for label

* fixes dense font weight

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-11 10:40:51 +02:00
Anastasiya 5bc6ea3731 dbeaver/dbeaver-devops#2699 Revise security policy (#4392)
* dbeaver/dbeaver-devops#2699 Revise security policy

Updated the contact email for reporting security vulnerabilities.

* dbeaver/dbeaver-devops#2699 Update email format in SECURITY.md
2026-06-10 12:20:51 +03:00
Alexander Skoblikovandkseniaguzeeva d93d73bb44 dbeaver/pro#9508 use proto header without host (#4379)
* dbeaver/pro#9508 use proto header without host

* dbeaver/pro#9508 review fixes

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-06-10 09:16:58 +02:00
6cdc6b2ee0 [CB] Render data viewer context menu on the root level (#4363)
* dbeaver/pro#9308 moves context menu from the cell level to table level

* cleanup

* adds DataGridMenuContextProvider

* uses context menu position from the hook useContextMenuPosition

* closes menu if cell is not visible

* adds useViewLeave hook to close menu if it is out of the view

* changes approach for re-opening menus + removes isMenuVisible logic

* removes redundant event prevent default and stopPropogation

* fixes focus stealing issue

* hides menu on scroll

* cleanup

* pr fixes

* cleanup

* uses cell key to open table

* pr fixes

* simplifies the menu api

* adds openMenuAt to reduce casting to mouse event while opening menu via shortcut

* cleanup

* removes isMenuOpened guard

* moves menu to the center of icon when opens from keyboard

* removes onClose handling and focus cell in sync workaround

* adds keyboard event handling for the context menu api

* compares cells with keys utils helper

* removes open menu at

* removes setContext

* cleanup

* simplifies interfaces

* fixes bug with menu not being able to rerender

* restores focus on close

* dbeaver/pro#9308 simplify logic

* adds closing menu on scroll

* pr fixes

* dbeaver/pro#9308 adds context menu sr-only for accessibility

* adds arialabel for icon button

* Revert "adds arialabel for icon button"

This reverts commit a830301f7a.

* adds span to make scrolling work

---------

Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-06-10 00:30:31 +02:00
sergeyteleshevandEvgenia 96ba18da83 [CB] Create project form with options tab (#4386)
* dbeaver/pro#9525 register project-info plugin

* adds project info to the context menu

* adds project info form

* adds project options part info tab content

* separates logic with bootstraps

* removes unused locales

* pr fixes

* removes global and shared checkboxes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-09 19:52:04 +02:00
sergeyteleshevandmr-anton-t a16c138bba [CB] cleanup resolutions for package.json in all products (CE,EE, widgets) (#4376)
* dbeaver/pro#9234 removes happy-dom resolution

* removes all resolutions

* updates deps

* removes CVEs

* updates deps

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-09 19:49:24 +02:00
Tsimafei Labanovich f728590b90 dbeaver/pro#8766 Migrage from junit 4 to junit 6 (#4290)
* dbeaver/pro#8766 Boom

* dbeaver/pro#8766 Boom

* dbeaver/pro#8766 Boom

* dbeaver/pro#8766 Boom
2026-06-09 16:26:42 +02:00
Sychev AndreyandEvgenia ba7268bb8f dbeaver/pro#8684 feat: unlock autoscroll when dragging in data grid (#4362)
* dbeaver/pro#8684 feat: unlock autoscroll when dragging in data grid

* dbeaver/pro#8684 fix: don't select value panel and rows input in the toolbar on drag

as a bonus enhance data grid context menu accessibility to improve user selection behavior when we start dragging from the menu button

return selection only when the cell is edited

* dbeaver/pro#8684 refactor: add selection background color for input in editing cell

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-06-09 12:44:54 +02:00
Serge Rider 1b7c81fa24 Update readme 2026-06-09 09:26:58 +02:00
sergeyteleshevandmr-anton-t 98f8380962 [CB] Miragre Form Controls styles to CSS (#4365)
* dbeaver/pro#8782 migrates form controls from scss to css

* migrates all scss to css

* removes all scss mentions

* fixes input colors

* fixes thumb and link colors

* fixes padding & border errors (search panel & where filter)

* fixes disabled state for switches (input type="checkbox")

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-06-08 19:37:32 +02:00
Nikita Akilov 2d40781960 dbeaver/dbeaver-devops#2313 switch to JDK 25 in base-java (#4382) 2026-06-04 15:41:38 +02:00
Ainur 166efa634f dbeaver/pro#9511 fix unknown struct presentation (#4378) 2026-06-04 14:37:16 +02:00
Sychev Andrey fad07f3d73 dbeaver/pro#9438 fix: fix the export lib version (#4369)
* dbeaver/pro#9438 fix: fix the export lib version

* dbeaver/pro#9438 fix: update modern-screenshot dependency to version 4.6.8
2026-06-01 14:45:15 +02:00
Anastasiya 4ca4976184 dbeaver/pro#9401 Update README.md to fix formatting (#4371) 2026-06-01 11:55:23 +02:00
Daria Marutkina ed4f5e45ed dbeaver/pro#9401 Update README file (#4370)
Updated changelog for version 26.1.0, including new features and bug fixes.
2026-06-01 11:42:10 +02:00
Ainur a333e5841a dbeaver/pro#9447 validate project path fix (#4367)
* dbeaver/pro#9447 validate project path fix

* dbeaver/pro#9447 validate project name on creating project

* dbeaver/pro#9447 validate project using general utils
2026-05-29 10:27:10 +02:00
Serge Rider 2c3afd61f0 dbeaver/pro#9392 Nullability annos. DEad code delete. 2026-05-28 14:10:27 +02:00
Sychev AndreyandEvgenia a817dcd92f dbeaver/pro#9407 fix: long values wrapping (#4364)
we mimic here the old input's behaviour, when we can't see the scroll but can navigate through the 1-line value with keyboard or mouse drag/selection

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-27 20:38:22 +02:00
Serge Riderandkseniaguzeeva c14e8f5ce3 dbeaver/pro#9397 Initialize datasource registry flow fix (#4360)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-05-26 17:46:12 +02:00
dbeaver-devops cc3cf21890 dbeaver/pro#9401 26.1.1 version bump 2026-05-25 20:54:14 +02:00
sergeyteleshevandEvgenia 961430f988 [CB] Menu is displayed under opened forms in the Administration page (#4358)
* dbeaver/pro#9362 fixes z-indexes issues for dialogs and notifications

* moves getPersistentElements to dialog level so all dialogs can handle it

* adds data-dialog-persistent-notification

* fixes resize controls layering

* fixes issue with panel buttons layering

* cleanup

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-25 17:53:03 +02:00
759b30a24b dbeaver/pro#9182 remove global secret controller for server apps (#4340)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-05-25 17:52:50 +02:00
Sychev AndreyandEvgenia 225ce91fd7 dbeaver/pro#8486 feat: add DataReadonlyReason API for data sources (#4354)
* dbeaver/pro#8486 feat: add DataReadonlyReason API for data sources

Previously TableStatusIndicator relied on model.isReadonly() which lost reasons. This caused the "Read-only connection" tooltip to show in grouping panel even on
editable connections — the connection wasn't read-only, the
presentation was.

Each data source now declares its specific reason via getReadonlyReason(). UI maps the typed reason to an accurate
message

* dbeaver/pro#8486 refactor: remove DataReadonlyReason references and use hasFeature flag

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-25 12:36:20 +02:00
f7bdd80e9f dbeaver/pro#9131 use visual keys for copy & paste (#4350)
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-22 16:55:18 +02:00
sergeyteleshevandDaria Marutkina e42d34ac58 [CB] Ability to add a new MCP agent (#4329)
* dbeaver/pro#9126 initial commit for PR message

* adds validations

* adds json linter

* reverts safeParseSchema

* removes reset button

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-22 10:11:59 +02:00
sergeyteleshevandDaria Marutkina 89a1af2df9 [CB] Fix table spacing regression in admin UI (#4353)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-21 19:49:34 +02:00
sergeyteleshevandDaria Marutkina e4260b4cd2 [CB] API token generation dropdown doesn't fit to the island (#4351)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-21 19:47:45 +02:00
AinurandEvgenia 956ebaa515 dbeaver/pro#9306 disconnect event send fix (#4356)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-21 19:45:55 +02:00
alexandDaria Marutkina bccf47020e dbeaver/pro#9095 load active connections before checking execution context (#4355)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-21 18:22:42 +02:00
alexandEvgenia dcd2b608ea dbeaver/pro#9370 check all passwords, not only the first one (#4357)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-21 18:20:29 +02:00
84af14d2f7 Closes dbeaver/pro#9327 Extract LibSQL driver from build (#4344)
* Closes dbeaver/pro#9327 Extract LibSQL driver from build

* dbeaver/pro#9327 load libsql from maven for cloudbeaver ce

---------

Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-21 14:52:16 +02:00
sergeyteleshevandEvgenia f513f7dc44 [CB] Many warnings in the console when creating a new connection (#4352)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-21 14:50:12 +02:00
Sychev AndreyandDaria Marutkina ffa7f730de dbeaver/pro#8741 fix: update container label visibility logic when no… (#4347)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-21 12:24:15 +02:00
Sychev AndreyandDaria Marutkina 694d3b241f dbeaver/pro#9342 build: update node version to 24.13.1 in CI workflows (#4349)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-20 21:38:49 +02:00
9c8f3c47e6 [CB] Add shortcut for the cell context menu in data and metadata editors (#4332)
* dbeaver/pro#8424 adds shortcut top open/close context menu for the data editor

* moves helper into parseHotkeys + simplifies it

* adds unit tests

* adds autoFocusOnShow prop to support backward compatibility

* dbeaver/pro#8424 use current state

* adds few test cases for the extra buttons pressed

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-20 16:38:03 +02:00
sergeyteleshev f918c9e25e dbeaver/pro#8621 hides upload button for viewers roles and for disabled edit setting in data editor (#4348) 2026-05-20 16:37:43 +02:00
b84031bb84 dbeaver/cloudbeaver#4138 feat: support inline editing of multi-line v… (#4341)
* dbeaver/cloudbeaver#4138 feat: support inline editing of multi-line values in data grid cells

- TextEditor: switch <input> to <textarea rows=1> so newlines are preserved when editing. Suppress the trailing insertLineBreak from the Enter that opens the editor (would otherwise wipe the auto-selected value).
- ResultSetFormatAction.truncateText: substitute \n, \r, \r\n, \t with
  visible glyphs (↵, ␍, →) and collapse other control chars to a space
  in a single pass.

Perf note: the new replace should be faster than the prior
split('') + map + join. No intermediate array allocations, and the
callback runs only on matched chars (which are sparse in display text). \p{Cc} also expands coverage from charCode < 32 to include DEL and C1 controls (U+007F, U+0080–U+009F). (closer to Dbeaver behavior)

* dbeaver/pro#4138 feat: show raw text in title for text cells

* dbeaver/pro#4138 treat one cell differently

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2026-05-20 14:28:08 +02:00
af651f9d10 dbeaver/pro#8459 trim username (#4343)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-19 19:00:53 +02:00
sergeyteleshevandDaria Marutkina 3245943f3d [CB] It is impossible to open edit forms from entity tables via keyboard (Users, Teams, Drivers, Providers, Secret Management) (#4345)
* dbeaver/pro#8404 adds onCellKeyDownTableOpen helper to all side modal tables

* replaces onKeyDown with Command

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-19 12:10:59 +02:00
Sychev AndreyandEvgenia fe01b23fce dbeaver/pro#9090 refactor: use new getters for sql execution plan (#4333)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-18 17:36:20 +02:00
alexandDaria Marutkina 8ec052e1b1 dbeaver/pro#9274 update whereFilter even if there is no result (#4336)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-18 13:48:51 +02:00
Daria Marutkina b10b407270 dbeaver/pro#9290 Update README file (#4346)
Added changelog for version 26.0.5, detailing new features, fixes, and updates across various components including authorization, data editor, SQL editor, database drivers, and security improvements.
2026-05-18 12:30:10 +02:00
alexandDaria Marutkina 5f5a6743eb dbeaver/pro#9133 use common GridSelectAction (#4342)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-18 11:22:26 +02:00
sergeyteleshev 4b30dc3ba5 [CB] Refresh of disconnected connection leads to 'Something went wrong' error (#4338)
* dbeaver/pro#8294 allows to refresh only connection root nodes for non-established connections

* renames variable

* checks if connection is connected to refresh it properly

* adds node check instead of connection directly
2026-05-15 13:27:33 +02:00
Ruslan Musaev 86e114d471 dbeaver/pro#9134 fix ldap error log (#4339) 2026-05-15 11:34:15 +02:00
dbeaver-devops d4d2e2d1fa dbeaver/pro#9290 26.1.0 version bump 2026-05-12 19:52:53 +02:00
6670cc81ae dbeaver/pro#7990 qmdb csv export (#4306)
* dbeaver/pro#7990 refactor: make onRemove prop optional in Tag component

* dbeaver/pro#7990 feat: add postForBlob helper function for using with export qm history servlets

* dbeaver/pro#7990 feat: replace postForBlob with submitForm for form submissions

Co-authored-by: Copilot <copilot@github.com>

* dbeaver/pro#7990 tests: add tests for submitForm and objectToFormFields functions

---------

Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-12 17:45:59 +02:00
f8a107256b 9089 core optimize command line execution (#4317)
* dbeaver/pro#9089 wip

* dbeaver/pro#9089 optimize cli execution

---------

Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: Anton Radchenko <34737043+RadAnton@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-12 15:30:41 +02:00
4f796e5f9c [CB] Add Ask AI Feature for the Execution Plan (#4326)
* dbeaver/pro#9046 adds vertical tabs for execution plan to add more space for new button or panel with buttons

* adds ask AI feature for execution plan

* removes editor id and uses context state

* makes ai feature spotlighted in the ui

* rotates the icon also

* removes bold label

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-12 13:28:50 +02:00
fb6f3c8246 Dbeaver/cloudbeaver#4120 support token header (#4259)
* dbeaver/cloudbeaver#4120 support token header

* dbeaver/cloudbeaver#4120 support token header

* dbeaver/cloudbeaver#4120 support token header

* dbeaver/cloudbeaver#4120 support token header

* dbeaver/cloudbeaver#4120 support token header

* dbeaver/cloudbeaver#4120 support token header

* dbeaver/cloudbeaver#4120 support token header

* dbeaver/pro#4120 added tests, now session in session holder

* dbeaver/pro#4120 review fix naming

* dbeaver/pro#4120 review fixes

* dbeaver/cloudbeaver#4120 review fixes

* dbeaver/cloudbeaver#4120 session type now final

* dbeaver/cloudbeaver#4120 remove part from ce

* dbeaver/cloudbeaver#4120 remove part from ce

* dbeaver/cloudbeaver#4120 fix header name

* dbeaver/cloudbeaver#4120 review fix

* dbeaver/cloudbeaver#4120 review fix

* dbeaver/cloudbeaver#4120 fix review

---------

Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-11 16:15:39 +02:00
sergeyteleshev f3eaed955f [CB] Add ability to interrupt connection establishment (front-end) (#4321)
* dbeaver/pro#8810 adds cancel action for auth via link

* lint fix + handles edge case when no popup appeared

* reverts eslint fix

* adds synchronization to connection init with oauth cancelling to remove stuck loading state

* reverts abort logic

* removes onAuthCancelled
2026-05-11 16:14:13 +02:00
339f19ff24 dbeaver/pro#9096 add ability for restricting ssh connections (#4320)
* dbeaver/pro#9096 add ability for restricting ssh connections

* dbeaver/pro#9096 validate ssh tunnelling for te desktop

* dbeaver/pro#9096 remove unused constant

* dbeaver/pro#9096 show alert if ssh is disabled

* Revert "dbeaver/pro#9096 show alert if ssh is disabled"

This reverts commit cce94063b0.

* dbeaver/pro#9096 do not show ssh for TE product

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
2026-05-11 15:52:51 +02:00
Dmitrii BarnukovandDaria Marutkina 0229ed1327 dbeaver/pro#9241 updated postgres to 42.7.11 (#4330)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-09 06:57:13 +02:00
sergeyteleshevandDaria Marutkina 6a6c29f38e [CB] Auth form - change display of saved secrets from placeholder to asterisks (#4327)
* dbeaver/pro#8416 adds masks for connection fields with password

* adds placeholder for password with mask

* Revert "dbeaver/pro#8416 adds masks for connection fields with password"

This reverts commit 4f89c46207.

* keeps old translation for file

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-08 17:39:55 +02:00
Serge Rider c3054c1f26 Merge remote-tracking branch 'origin/devel' into devel 2026-05-08 17:22:46 +02:00
Serge Rider 20b129d5a2 Revert "dbeaver/cloudbeaver#4249 added session rotation (#4274)"
This reverts commit d79054a5d8.
2026-05-08 17:21:40 +02:00
alexandkseniaguzeeva a08b9c2f2b dbeaver/pro#9030 remove dead links (#4322)
* dbeaver/pro#9030 remove dead links

* dbeaver/pro#9030 show support only in administration part

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-05-08 12:16:29 +02:00
sergeyteleshev 3a250e2e7a dbeaver/pro#9239 fixes top bar so it doesn't overlap the context menu (#4328) 2026-05-07 17:39:51 +02:00
alexandEvgenia 951b51b403 dbeaver/pro#9132 use closest instead of current (#4325)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-07 17:39:22 +02:00
72fcd7bfe2 [CB] Bump NPM dependencies (#4270)
* dbeaver/pro#8943 updates yarn locks

* updates vite

* updates vite-plugin-svgr

* removes CVEs

* reverts vite to update it later

* updates yarn lock

* updates yarn lock

* updates uuid

* removes axios CVE

* reverts @codemirror/search in order to fix the issue with replace 1 symbol (broken focus next)

* locks versions of other codemirror packages in order to keep versions consistent

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-05-07 11:25:25 +02:00
Dmitrii Barnukov 9ea3de9edf dbeaver/pro#9049 update oauth description (#4323) 2026-05-06 17:10:24 +02:00
sergeyteleshevandEvgenia 729d47fda1 [CB] SQL Query generation: Add the CREATE option for tables (#4316)
* dbeaver/pro#8327 adds CREATE menu item for result set generate SQL menu

* renames create to DDL

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-05 19:12:51 +02:00
Sychev AndreyandEvgenia ebda152b6b dbeaver/pro#9156 build: update packageManager version to yarn@4.14.1 … (#4309)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-05 16:09:30 +02:00
sergeyteleshevandEvgenia 430ae8e5cc [CB-6208] Dropdown is in front of the modal window (#4312)
* dbeaver/pro#5172 adds ui kit popover context with portal in order to reduce popover overlays

* makes menu to be under the dialog's backdrop

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-05 13:33:56 +02:00
sergeyteleshevandDaria Marutkina 97c12d026b dbeaver/pro#8750 adds fields length to the team for input fields (#4315)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-05 12:12:48 +02:00
Serge Rider ea0997d3b0 Merge remote-tracking branch 'origin/devel' into devel 2026-05-04 14:37:12 +02:00
Ainurandkseniaguzeeva 04a2eed596 dbeaver/pro#8724 save agreement id in app config (#4308)
* dbeaver/pro#8724 save agreement id in app config

* dbeaver/pro#8724 fix sending info to marketplace

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-05-04 14:35:08 +02:00
10d8741403 Make manifest.webmanifest dynamic based on CLOUDBEAVER_ROOT_URI dbeaver/cloudbeaver#4074 (#4293)
This PR implements dynamic generation of the manifest.webmanifest file to respect the CLOUDBEAVER_ROOT_URI environment variable configuration. Previously, the manifest was a static file with hardcoded values that didn't adapt to custom ro
ot URI configurations.

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-05-04 14:34:03 +02:00
Serge Rider ded139584c Merge remote-tracking branch 'origin/devel' into devel 2026-05-04 14:33:52 +02:00
alexandEvgenia 04b3bd9e2b dbeaver/pro#9073 rearrange context items (#4307)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-05-04 12:26:54 +02:00
Daria Marutkina 9303f4dacf dbeaver/pro#9160 Update README file (#4319)
Added changelog for version 26.0.4, detailing new features, improvements, and security updates.
2026-05-04 10:32:57 +02:00
Serge Rider 7b258d7ba6 Merge remote-tracking branch 'origin/devel' into devel 2026-05-04 10:22:22 +02:00
Serge Rider 76c2d4b7fe dbeaver/pro#9197 Data editor annotations (#4314) 2026-05-01 10:39:24 +02:00
Serge Rider 61d0c43bd2 dbeaver/pro#9202 GQL logging fix (#4318) 2026-05-01 10:34:43 +02:00
Serge Rider 0c07a5cd09 dbeaver/pro#9197 Data editor annotations 2026-04-30 14:09:07 +02:00
dbeaver-devops 3dcae7063c dbeaver/pro#9160 26.0.5 version bump 2026-04-28 19:32:51 +02:00
alexandEvgenia 635d2f8d7f dbeaver/pro#8473 add function confirmation (#4301)
* dbeaver/pro#8473 add function confirmation

* dbeaver/pro#8473 pass class to inner

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-28 18:37:01 +02:00
Dmitrii BarnukovandEvgenia cea06eecae dbeaver/pro#9047 added sql plan explain to CB (#4302)
* dbeaver/pro#9047 added sql plan explain to CB

* dbeaver/pro#9047 added nullability annotations

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-28 15:15:57 +02:00
ElizabethandDiana 0e402cd27d dbeaver/pro#8775 Introduce value path to getCellValue method (#4304)
Co-authored-by: Diana <31996417+uslss@users.noreply.github.com>
2026-04-28 15:12:38 +02:00
Dmitrii BarnukovandEvgenia d79054a5d8 dbeaver/cloudbeaver#4249 added session rotation (#4274)
* dbeaver/cloudbeaver#4249 added session rotation

* dbeaver/pro#4249 update web session id

* dbeaver/pro#4249 remove log

* dbeaver/pro#4249 remove unused params

* dbeaver/pro#4249 revert non-related changes

* dbeaver/cloudbeaver#4249 rotate session before login

* dbeaver/cloudbeaver#4249 fix code style

* dbeaver/cloudbeaver#4249 rotate only for anon users

* dbeaver/cloudbeaver#4249 added notnulls

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-28 12:32:41 +02:00
0903025942 [CB] SQL Query generation: add settings for the Generated SQL window (#4275)
* dbeaver/pro#8716 added generate sql options

* dbeaver/pro#8328 adds settings to generate sql dialog

* fixes error message

* removes refresh btn and settings title + notification

* dbeaver/pro#8328 add generator options

* show button "open in sql editor" for all sql generation popups

* adds regenerate query method for different context call

* cleanup

* pr fixes

* adds action.bound

* adds delayed loader

---------

Co-authored-by: Dmitrii <dmitrii.barnukov@dbeaver.com>
Co-authored-by: Dmitrii Barnukov <29237913+Nexus6v2@users.noreply.github.com>
Co-authored-by: Ruslan <pupkinvasya7000@gmail.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Nikita Akilov <26031301+flambchap@users.noreply.github.com>
2026-04-28 07:52:24 +02:00
b36b11008f dbeaver/pro#8978 paste multiple values (#4299)
* dbeaver/pro#8978 paste multiple values

* dbeaver/pro#8978 do not use bound on fn method

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-27 17:30:14 +02:00
f8acdb58af dbeaver/pro#8107 [CB] increase the contrast of some elements (#4300)
* dbeaver/pro#8107 fix: caption contrast in disabled checkbox

* dbeaver/pro#8107 fix: contrast for NULL formatter element

* dbeaver/pro#8107 fix: update color for blob formatter to enhance contrast

* dbeaver/pro#8107 fix: enhance contrast for theme elements in dark mode

* dbeaver/pro#8107 fix: update title color for improved contrast

* dbeaver/pro#8107 fix: enhance button secondary colors for improved contrast

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-27 14:04:38 +02:00
Sychev AndreyandCopilot 4e4292376e dbeaver/pro#8961 fix: make checkboxes clickable in main toolbar dropdown menu (#4303)
Co-authored-by: Copilot <copilot@github.com>
2026-04-27 09:22:44 +02:00
serge-rider d5860dc9e8 dbeaver/pro#9005 Optimize manifests 2026-04-25 17:09:19 +02:00
Ruslan Musaev 5301adaed4 dbeaver/pro#5680 removed swagger deps for rest api documentation (#4282) 2026-04-24 16:31:12 +02:00
Serge Rider fc9ef33e1d Merge remote-tracking branch 'origin/devel' into devel 2026-04-22 16:38:10 +02:00
Serge Rider 2a8f34682f dbeaver/pro#9005 Driver provider model 2026-04-22 16:37:33 +02:00
9c6f301fa9 dbeaver/pro#7562 [CB] keep data editor filter state during session (#4261)
* dbeaver/pro#7562 feat: persist data editor filter state after reconnect

* dbeaver/pro#7562 feat: update data viewer to persist filter state

* dbeaver/pro#7562 feat: enhance constraint resolution in WebSQLDataFilter

allow using attrName without attrPosition

* dbeaver/pro#7562 refactor: don't use options

replaced private restorePendingState()  with public restoreViewState(pinnedColumnNames, columnOrderNames?) that takes data directly as arguments

* dbeaver/pro#7562 fix: stale constraints in UI

bug with skipping constraints if any without a position.
if (!prevColumn) {
        return;
      }

* dbeaver/pro#7562 refactor: add method to retrieve pinned column names in GridViewAction

* dbeaver/pro#7562 refactor: simplify state validation using schema

* dbeaver/pro#7562 refactor: simplify state management in useDataViewerPanel

* dbeaver/pro#7562 refactor: move persisted state to IDataViewerPageState

* dbeaver/pro#7562 fix: initial pageState

* dbeaver/pro#7562 refactor: simplify getPinnedColumnNames method in GridViewAction

* dbeaver/pro#7562 refactor: shadowed column renamed to c for clarity

* dbeaver/pro#7562 refactor: change type of value in IPersistedConstraint to unknown

* dbeaver/pro#7562 refactor: remove manual state operations

* dbeaver/pro#7562 refactor: introduce DatabasePersistedStateAction for centralized state persistence

* dbeaver/pro#7562 fix

* dbeaver/pro#7562 refactor: replace reaction with when

* Revert "dbeaver/pro#7562 feat: enhance constraint resolution in WebSQLDataFilter"

This reverts commit 3e0e86f4b2.

Last test showed that we don't need any additional logic on BE. It handles all constraints properly.

* dbeaver/pro#7562 fix: make pinColumns optional

* dbeaver/pro#7562 refactor: simplify pinned column handling

* dbeaver/pro#7562 refactor: initialize store in DatabasePersistedStateAction constructor as observable

* dbeaver/pro#7562 refactor: rename getColumnNameByPosition to getColumnNameAt for clarity

* dbeaver/pro#7562 refactor: move DatabasePersistedStateAction to source level, simplify persisted state sync

- Make DatabasePersistedStateAction a standalone class on DatabaseDataSource instead of per-result action
- Convert options to getter
- Auto-sync constraints to persisted state via autorun + action batching
- Restore view state (pinned columns, column order) in GridViewAction constructor

* dbeaver/pro#7562 refactor: replace DatabasePersistedStateAction with DatabasePersistedStateStore and update related references

* dbeaver/pro#7562 refactor: simplify view-state persistence

- DatabasePersistedStateStore: pure KV (observable.ref + actions)
- DatabaseDataSource: add loadPersistedState() + onPersistedStateLoaded() hook
- DatabaseDataConstraintAction: own the constraint persist
- ResultSetDataSource: thin dispatcher
- GridViewAction: columnsOrder/pinnedColumns become computed getters

* dbeaver/pro#7562 refactor: create universal ColumnReference

* dbeaver/pro#7562 refactor: simplify persistence flow, remove extra guards, simplify persisted data filter state handling

* dbeaver/pro#7562 refactor: simplify GridViewAction column-ref handling and layout resolution

* dbeaver/pro#7562 refactor: per-key reactive persisted state store, drop constraint persistence hacks

* dbeaver/pro#7562 refactor: simplify setOptions method to use superclass implementation

* dbeaver/pro#7562 add missing fields

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2026-04-22 14:52:59 +02:00
sergeyteleshev a2ccd0b0f7 [CB] Support real tab characters in SQL Editor (#4298)
* dbeaver/pro#7864 adds tabulation with actual tab indent for code mirror

* adds EDITOR_INDENT_UNIT to unify indent for sql editor and vqb
2026-04-22 12:35:53 +02:00
acc3e42f1c dbeaver/pro#8352 do not unlink connection (#4278)
* dbeaver/pro#8352 do not unlink connection

* dbeaver/pro#8352 simplify logic

* dbeaver/pro#8352 add connection bar

* dbeaver/pro#8352 revert opened state

* dbeaver/pro#8352 do not fetch hints if not connected

* dbeaver/pro#8352 fix build

* dbeaver/pro#8352 move database icon to core package

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-22 12:32:58 +02:00
Sychev Andrey 075fa916f0 dbeaver/pro#8909 fix: collapsible side bar buttons are not visible wi… (#4297) 2026-04-22 11:47:33 +02:00
alexandDaria Marutkina f7b96db2de dbeaver/pro#8895 apply overflow to the grid root div (#4296)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-22 11:38:26 +02:00
alex dff9adaf34 dbeaver/pro#9084 update gql schema (#4294)
* dbeaver/pro#9084 update gql schema

* dbeaver/pro#9084 move fields
2026-04-21 10:24:25 +02:00
Ruslan Musaev 86c50a1557 dbeaver/pro#8711 sql execution plan improvements (#4287)
* dbeaver/pro#8711 sql execution plan improvements

* dbeaver/pro#8711 sql execution plan improvements
2026-04-20 17:38:43 +02:00
alexandDaria Marutkina 7d6c05f50c dbeaver/pro#8707 remove folder feature from ui (#4267)
* dbeaver/pro#8707 remove folder feature from ui

* dbeaver/pro#8707 remove folder tree ui for navigator

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-20 16:24:43 +02:00
Viktor Kirst 022778f95c dbeaver/pro#9061 Support custom lock manager id in servlet applications (#4291)
* dbeaver/pro#9061 Support custom lock manager id in servlet applications

* dbeaver/pro#9061 Remove unused metadata lock manager overload
2026-04-20 14:52:49 +02:00
Daria Marutkina d752d8ac26 dbeaver/pro#9037 Update README file (#4292)
Added changelog for version 26.0.3, detailing new features, fixes, and security updates.
2026-04-20 11:47:05 +02:00
serge-rider e1a029b238 dbeaver/pro#9060 Optimize manifest dependencies 2026-04-19 16:04:30 +02:00
Serge Rider 644dc2a136 dbeaver/pro#9048 CB NPE fix + QM deadlock fix (#4288) 2026-04-16 21:13:18 +02:00
Alexander Skoblikov 768fe00f6a dbeaver/pro#8839 remove referer (#4279) 2026-04-16 10:35:22 +02:00
dbeaver-devops 1e1f684379 dbeaver/pro#9037 26.0.4 version bump 2026-04-15 22:46:10 +02:00
alexandDaria Marutkina ac3ce9e085 dbeaver/pro#8728 add pricing policy (#4281)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-15 16:30:06 +02:00
Sychev AndreyandEvgenia 3cc9c3ce86 dbeaver/pro#8274 feat: add key icons for key columns in data editor (#4283)
* dbeaver/pro#8274 feat: add key icons for key columns in data editor

* dbeaver/pro#8274 feat: change key icon. put to core

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-15 16:29:02 +02:00
1660e62391 Save scripts to custom locations (use import/export buttons) (#4258)
* dbeaver/pro#7880 adds MVP for saving script to cloud storage

* removes registerScriptExportController

* finalizes the ui

* adds missing locales

* introduces footer slot to use CommonDialog api

* adds locales

* moves success message to the tab components itself

* pr small fixes

* saves file with timestamp

* send notification with correct filename

* fixes locales

* uses different approach for handling dialog save

* cleanup

* self review fixes

* adds lazy import for export dialog

* uses form API to save the dialog

* fixes imports (tab -> panel)

* uses react state for filename

* build fix

* handles form validation

* sanitizes file name

* removes redundant form layout

* fixes bug: allows to load tree root with useTreeData

* uses context api to resolve export script dialog instead of throwing errors approach

* dbeaver/pro#7880 do not show notification on local export

* dbeaver/pro#7880 remove notification from local export

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
2026-04-15 15:12:32 +02:00
Sychev AndreyandEvgenia c27fca442b dbeaver/pro#8687 fix(formatNumber): fix unit selection for floats and… (#4276)
- Use Math.log10 instead of toString().length to count integer digits — toString() on a float
  like 4036.29 has length 7, which incorrectly bucketed thousands-range values into millions
- Fix exponent formula for 3n-digit numbers (e.g. 100000 gave exponent=6→M instead of 3→k)
- Apply precision param d below 1000 (was hardcoded 2); default to 2
- Add formatNumber.test.ts

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-15 15:10:57 +02:00
318100300f Dbeaver/pro#8044 add api for database user preference (#4104)
* dbeaver/pro#8044 add api for database user preference

* dbeaver/pro#8044 set to prefstore

* dbeaver/pro#8044 add api for database user preference

* dbeaver/pro#8044 add api for database pref

* dbeaver/pro#8044 add api for database pref

* dbeaver/pro#8044 add api for database pref

* dbeaver/pro#8044 refactor api for database preferences

* dbeaver/pro#8044 refactor api for database preferences

* dbeaver/pro#8044 refactor api for database preferences

* dbeaver/pro#8044 add api for database user preference

* dbeaver/pro#8044 set to prefstore

* dbeaver/pro#8044 add api for database user preference

* dbeaver/pro#8044 add api for database pref

* dbeaver/pro#8044 add api for database pref

* dbeaver/pro#8044 add api for database pref

* dbeaver/pro#8044 refactor api for database preferences

* dbeaver/pro#8044 refactor api for database preferences

* dbeaver/pro#8044 refactor api for database preferences

* dbeaver/pro#8044 review fixes

* dbeaver/pro#8044 review fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-15 13:57:51 +02:00
9c9e8e4496 dbeaver/pro#8716 added generate sql options (#4262)
* dbeaver/pro#8716 added generate sql options

* dbeaver/pro#8716 extract typed options

* dbeaver/pro#8716 added annotations

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-14 17:09:12 +02:00
alexandmr-anton-t 4789acb76a dbeaver/pro#8996 remove cve (#4280)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-14 13:08:55 +02:00
alexandmr-anton-t 39ad4568d0 dbeaver/pro#8962 add block padding to the menus (#4273)
* dbeaver/pro#8962 add block padding to the menus

* dbeaver/pro#8962 adjust padding size

* dbeaver/pro#8962 make inner radius smaller

* dbeaver/pro#8962 use separate tokens

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-13 17:15:02 +02:00
Serge Rider 860b8e2e16 dbeaver/pro#8559 Workbench launch redesign (#4277) 2026-04-10 20:16:35 +02:00
sergeyteleshevandDaria Marutkina 4b9ba00663 [CB] Multi-paste support in Data Editor (#4271)
* dbeaver/pro#8670 adds simple multiple paste for the selected cells

* cleanup

* moves logic to useGridSelectedCellsPaste

* cleanup

* adds getSelectedElementsWithFocused

* cleanup

* pr fixes

* adds readonly guard for paste cells

* adds check for is cell editable

* cleanup

* Revert "cleanup"

This reverts commit 309e254453.

* Revert "adds check for is cell editable"

This reverts commit 00b6b63cfa.

* allows to copy blobs base64 but forbids to paste to blob cell

* reuses isCellEditable

* fixes source

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-09 19:39:43 +02:00
MalteandDaria Marutkina 897dd994ba Pass arguments from entrypoint script (#4269)
* dbeaver/cloudbeaver#4268 fix order of arguments

This allows overriding the -web-config argument.

* dbeaver/cloudbeaver#4268 pass arguments to run-cloudbeaver-server.sh

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-09 19:39:21 +02:00
e81a150287 Dbeaver/pro#8655 cb ai functions support (#4254)
* dbeaver/pro#8655 added function confirmation and result events

* dbeaver/pro#8655 refactor action function processing

* dbeaver/pro#8655 support function role

* dbeaver/pro#8655 revert ai function changes

* Revert "dbeaver/pro#8655 support function role"

This reverts commit 7343af5e97.

* dbeaver/pro#8655 simplify types

* dbeaver/pro#8867 Add custom WS event handlers. Move AI-related function top pro.

* dbeaver/pro#8655 Remove async tasks from chat workflow

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: Serge Rider <serge@dbeaver.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2026-04-09 19:38:15 +02:00
0d17208be4 dbeaver/pro#8746 add useQuery hook (#4241)
* dbeaver/pro#8746 add useQuery hook

* dbeaver/pro#8746 add language tokens

* dbeaver/pro#8746 set loading to false in case of abort

* dbeaver/pro#8746 use more advanced useQuery

* dbeaver/pro#8746 fix code style

* dbeaver/pro#8746 remove useQuery hook

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
2026-04-08 20:22:06 +02:00
9c1678c256 dbeaver/pro#8824 Inject lock manager into CloudBeaver RM controllers (#4242)
* dbeaver/pro#8824 Inject lock manager into CloudBeaver RM controllers

* dbeaver/pro#8824 Use application lock manager provider in servlet applications

* dbeaver/pro#8824 Use default application lock manager

* dbeaver/pro#8824 Fix codestyle warnings

---------

Co-authored-by: Daria Markaryan <43252954+DariaMarkaryan@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
2026-04-08 19:23:38 +02:00
Ainurandkseniaguzeeva 321d45bd48 dbeaver/pro#7912 support external oauth in te desktop (#4255)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-04-08 17:15:40 +02:00
alex 0f33fb5514 dbeaver/pro#4158 add special filter operators (#4264)
* dbeaver/pro#4158 add special filter operators

* dbeaver/pro#4158 rename arg
2026-04-08 13:15:13 +02:00
sergeyteleshevandDaria Marutkina e7648b1b4c [CB] Toggle switches are rendered incorrectly (#4272)
* dbeaver/pro#8946 adds specifity for dense switches

* wraps with field

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-04-08 13:04:34 +02:00
45cfded51f [CB] DB Navigator - add subgroup to context menu to reduce the list of actions (#4246)
* dbeaver/pro#8236 adds submenus for the connection tree

* adds disabled state for submenu with no items

* removes variable

* loads first menus then draws it

* reverts submenu fix

* splits manage handlers from root handlers

* removes loader for manage menu to prevent bug

* cleanup

* removes action leaks for tables

* removes leak of the action delete

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-08 11:06:12 +02:00
Ruslan Musaev 9822147d68 dbeaver/pro#8954 fix cloudbeaver driver properties (#4266) 2026-04-07 15:49:40 +02:00
Ruslan MusaevandEvgenia 3b0f52f3ed dbeaver/pro#5124 fix case-insensitive username in import (#4251)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-04-07 13:47:11 +02:00
Daria Marutkina 3b032a275d dbeaver/pro#8893 Update README file (#4263)
* dbeaver/pro#8893 Update README file

Added changelog entry for version 26.0.2 with UI improvements, authentication fixes, database updates, and security vulnerability resolutions.

* Update README.md
2026-04-06 11:17:33 +02:00
Sychev Andrey a11ca992fe dbeaver/pro#7251 feat: add skip navigation feature for improved acces… (#4245)
* dbeaver/pro#7251 feat: add skip navigation feature for improved accessibility

* dbeaver/pro#7251 refactor: replace direct import with lazy loading for SkipNavLinks and SkipNavShortcutsLink

* dbeaver/pro#7251 refactor: use css modules for skip nav styles

* dbeaver/pro#7251 refactor: remove SkipNavBootstrap
2026-04-06 10:59:22 +02:00
serge-rider 5138c73ae5 dbeaver/pro#8894 Fix object search + annotations 2026-04-03 15:28:05 +02:00
sergeyteleshevandmr-anton-t ea36247797 [CB] Replace material ui with native css variables and tailwind utilities (#4188)
* dbeaver/pro#8433 initial version of material ui refactor

* fixes arrow colors

* fixes arrow colors 2

* fixes colors

* pr fixes

* removes layers due to it loses styles specificity race

* fixes autocomplete styles

* adds variables for typography

* moves switch logic to module styles

* removes elevation styles

* removes unused code

* migrates ripple effect to tw class

* Revert "migrates ripple effect to tw class"

This reverts commit 78229ac007.

* uses classname theme-typography for button

* adds elevation styles

* adds elevation styles 2

* moves theme ripple

* reverts scss for sql editor

* reverts scss for sql editor 2

* adds tailwindcss utilities + example

* Revert "adds tailwindcss utilities + example"

This reverts commit 20ca1b787c.

* creates tailwindcss plugin with shadow tokens + spread it across the app

* moves typography to the tailwindcss styles

* refactors sql editor styles

* moves styles from tailwindcss folder to styles

* moves ripple to tailwindcss plugin

* removes unused files

* removes unused file index

* removes redundant tailwindcss import

* adds animation layer for tailwindcss

* refactors animations

* build fix

* removes redundant imports of tailwindcss for styles

* removes layer components to keep some styles for switch

* removes animation from ripple effect

* makes ripple effect more contrast

* fixes fonts across the app to json view has correct font-mono from the tailwindcss box

* deletes module ts

* Revert "removes layer components to keep some styles for switch"

This reverts commit ee8b0e199e.

* fixes race for switch bold style

* changes ripple from 7% to 9%

* Reduce hover opacity in ripple effect (#4260)

* Reduce hover opacity in ripple effect

* Update ripple.css

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-02 18:24:19 +02:00
Serge Rider a6a1916299 dbeaver/pro#8894 Fix tests 2026-04-02 16:09:06 +02:00
Viktor Kirst b8699e6bcb dbeaver/pro#8896 Fix driver description (#4257) 2026-04-02 16:01:58 +02:00
Serge Rider 8cff50b0cf dbeaver/pro#8894 Workspace dispose and session cleanup fixes (#4256)
* dbeaver/pro#8894 Workspace dispose and session cleanup fixes

* dbeaver/pro#8894 Fix session cleanup

* Revert "dbeaver/pro#8894 Fix session cleanup"

This reverts commit 170882f69d.

* dbeaver/pro#8894 Fix session cleanup
2026-04-02 11:54:52 +02:00
dbeaver-devops b06a96dc31 dbeaver/pro#8893 26.0.3 version bump 2026-03-31 23:17:03 +02:00
Viktor KirstandMashaKorax 446bd81e08 dbeaver/pro#8392 Add H2 2.4 JDBC driver (#4227)
* dbeaver/pro#8392 Add H2 2.4 JDBC driver

* dbeaver/pro#8392 Fixed h2 driver description

* dbeaver/pro#8392 Add H2 V.2.4 module

* dbeaver/pro#8392 Fixed module name

* dbeaver/pro#8392 Rename H2 v2.4 driver to v3

---------

Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2026-03-31 17:28:50 +02:00
Dmitrii Barnukov 09863ea260 dbeaver/pro#7963 extended openurl event, added client event (#4247)
* dbeaver/pro#7963 extended openurl event, added client event

* dbeaver/pro#7963 fix typo
2026-03-31 16:52:46 +02:00
sergeyteleshev 34b4556773 [CB] New and repeat passwords can be different (#4234)
* dbeaver/pro#8572 fixes password validity on blur

* Revert "dbeaver/pro#8572 fixes password validity on blur"

This reverts commit cefd174254.

* adds context to the form for correct validation + handles validation on change also to keep the actual validity state

* adds context check to prevent validation inconsistent behavior

* adds revalidate to handle depended validations cases

* adds useFormCustomInputValidation

* cleanup

* uses useFormCustomInputValidation to avoid regression after refactor
2026-03-31 14:07:47 +02:00
alexandmr-anton-t 9b4c874e51 dbeaver/pro#8805 do not move focus on programmatic tab select (#4248)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-31 14:00:57 +02:00
Serge Rider ddbc9789e7 Merge remote-tracking branch 'origin/devel' into devel 2026-03-30 16:43:02 +02:00
Serge Rider 810d0215cb dbeaver#40616 update sql server driver to 13.4.0 2026-03-30 16:42:39 +02:00
alexandEvgenia 3dadc17ff1 dbeaver/pro#8644 add temp icon for base sql tab (#4243)
* dbeaver/pro#8644 add temp icon for base sql tab

* dbeaver/pro#8644 replace old icons

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-30 12:20:27 +02:00
sergeyteleshevandEvgenia 8c69985083 dbeaver/pro#8518 adds message for string parameters (#4233)
* dbeaver/pro#8518 adds message for string parameters

* aligned message with dbeaver: "string values must be quoted"

* reverts branding and uses it optionally for bind parameters popup

* renames prop

* makes few versions of alert

* Revert "makes few versions of alert"

This reverts commit 5b9f09009e.

* adds gray message

* adds icon

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-27 19:04:39 +01:00
1d5b475482 dbeaver/pro#8553 sql execution plan diagram (#4218)
* dbeaver/pro#8553 feat: add execution plan diagram component

* dbeaver/pro#8553 feat: enhance ExecutionPlanDiagram component with selectedNodeId prop

* dbeaver/pro#8553 feat: add flex-shrink to metric value for better layout

* dbeaver/pro#8553 refactor: remove queryString from IPlanData interface

* dbeaver/pro#8553 feat: integrate execution plan diagram component

* dbeaver/pro#8553 refactor: execution plan diagram

separate state, add l10n, make toolbar composable

* dbeaver/pro#8553 feat: implement keyboard navigation for execution plan nodes

* dbeaver/pro#8553 feat: add translation support for execution plan diagram labels

* dbeaver/pro#8553 fix: execution plan node dimensions

* dbeaver/pro#8553 refactor: move formatNumber to helpers to use it

* dbeaver/pro#8553 feat: add translation support for execution plan diagram API

* dbeaver/pro#8553 docs: add README and API documentation for execution plan diagram component

* dbeaver/pro#8553 feat: adjust cost bar height and collapse indicator position

* dbeaver/pro#8553 feat: update PRIMARY_AXIS_WEIGHT for improved directional navigation

* dbeaver/pro#8553 feat: refactor diagram actions and add collapse state management

* dbeaver/pro#8553 refactor: move execution plan diagram to separate EE plugin

* dbeaver/pro#8553 docs: remove redundant comment

* dbeaver/pro#8553 docs: update comments for source and target anchors in ILayoutEdge interface

* dbeaver/pro#8553 docs: update comment in ILayoutNode interface

* dbeaver/pro#8553 refactor: simplify heavy route computation

* dbeaver/pro#8553 refactor: optimize node handling in computePlanLayout function

* dbeaver/pro#8553 refactor: improve tree structure handling in usePlanTree and buildTree functions

* dbeaver/pro#8553 refactor: simplify usePlanTree

* dbeaver/pro#8553 refactor: extract actions from useExecutionPlanDiagramState

* dbeaver/pro#8553 refactor: improve configuration in execution plan diagram

* dbeaver/pro#8553 refactor: simplify metric rendering in PlanNode component

* dbeaver/pro#8553 feat: collapse by hotkey, not an extra element

* dbeaver/pro#8553 feat: add tooltip hints for plan node interactions

* dbeaver/pro#8553 refactor: remove high cost calculation and add node kind attribute

* dbeaver/pro#8553 style: fix formatting in index.ts for ISqlExecutionPlanViewProps export

* dbeaver/pro#8553 ci: remove unused dependency on @dbeaver/ui-kit

* dbeaver/pro#8553 refactor: remove SQL execution plan diagram translations from locale files

* dbeaver/pro#8553 refactor: update translation keys for SQL execution plan components

* dbeaver/pro#8553 refactor: rename components

* dbeaver/pro#8553 style: const

* dbeaver/pro#8553 refactor: reset execution plan diagram state properties

* dbeaver/pro#8553 refactor: update component imports and extract a component

* dbeaver/pro#8553 refactor: rename PlanNodeKind to EPlanNodeKind and update references

* dbeaver/pro#8553 feat: add zoom icons and update action references

* dbeaver/pro#8553 refactor: enhance translation functionality by adding args interpolation

* dbeaver/pro#8553 fix: Polynomial regular expression used on uncontrolled data

* dbeaver/pro#8553 refactor: update ActionsCapture to use ref for toolbar actions

* dbeaver/pro#8553 refactor: use jsx

* dbeaver/pro#8553 refactor: simplify

* dbeaver/pro#8553 refactor: replace useContext with use in DiagramContext

* dbeaver/pro#8553 refactor: convert ExecutionPlanEdge to memoized component

* dbeaver/pro#8553 refactor: convert ExecutionPlanNode to memoized component

* dbeaver/pro#8553 refactor: unify ref prop in ExecutionPlanNode and ExecutionPlanViewport

* dbeaver/pro#8553 refactor: extract ExecutionPlanViewportContent component and clean up CSS

* dbeaver/pro#8553 refactor: convert ExecutionPlanNodeMetric to memoized component

* dbeaver/pro#8553 refactor: improve usePlanLayout hook by utilizing useEffectEvent for stable callback

* dbeaver/pro#8553 refactor: simplify diagram actions handling in createExecutionPlanDiagram

* dbeaver/pro#8553 refactor:  move out execution plan diagram component from

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2026-03-27 16:07:31 +01:00
sergeyteleshev b779b9d855 [CB] Fix high CVE-2026-33671 in picomatch (#4244)
* dbeaver/pro#8836 fixes picomatch CVE

* fixes happy-dom CVE
2026-03-27 14:24:43 +01:00
Sychev Andrey df676913a0 dbeaver/pro#8808 feat: add shortcut for search in data viewer (#4239)
* dbeaver/pro#8808 feat: add shortcut for search in data viewer

* dbeaver/pro#8808 feat: update shortcut ID for search functionality
2026-03-27 14:22:14 +01:00
fab9d1dd43 dbeaver/pro#7806 remove MenuBarSmallItem (#4224)
* dbeaver/pro#7806 remove MenuBarSmallItem

* dbeaver/pro#7806 remove reakit

* dbeaver/pro#7806 remove extra class

* dbeaver/pro#7806 increase base padding and background color

* dbeaver/pro#7806 use more safe style

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-27 14:18:35 +01:00
36dfdc8b33 dbeaver/pro#8825 Add tests for translating SQL CREATE/ALTER TABLE sta… (#4237)
* dbeaver/pro#8825 Add tests for translating SQL CREATE/ALTER TABLE statements with ASCII columns

* dbeaver/pro#8825 improve script normalization

* dbeaver/pro#8825 Update `SQLQueryTranslatorTest` to include `NOT NULL` constraint for ASCII column validation

---------

Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-25 13:51:45 +01:00
Alexander Skoblikovandkseniaguzeeva 8b0a20cfd7 dbeaver/pro#8768 fix federated logout (#4230)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-03-25 08:22:55 +01:00
Sychev AndreyandEvgenia 9553c30ee5 dbeaver/pro#8739 feat: add isEnabled option to tree filter for enhanc… (#4236)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-24 19:26:36 +01:00
Sychev AndreyandDaria Marutkina 9c36651aa0 dbeaver/pro#8760 feat: set max width for search panel in SQL editor (#4231)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-03-24 16:44:14 +01:00
sergeyteleshev 24a251cd5b [CB] Fix high CVE-2026-33228 in flatted (2) (#4228) 2026-03-24 16:43:43 +01:00
alexandEvgenia a44ba89cd9 dbeaver/pro#8339 show array value as array (#4229)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-24 15:00:59 +01:00
44077ad27a dbeaver/pro#8260 Provide a method to create or restore a WebSession… (#4222)
* dbeaver/pro#8260 Provide a method to create or restore a `WebSession` from `smAccessToken`

* dbeaver/pro#8260 Annotations and constants

---------

Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: serge-rider <serge@dbeaver.com>
2026-03-24 10:56:19 +01:00
Dmitrii BarnukovandEvgenia 3ae74763ff dbeaver/pro#8635 added message description (#4220)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-23 16:42:49 +01:00
Daria Marutkina 45a63f70ee dbeaver/pro#8732 Update README file (#4232)
Added detailed changelog for version 26.0.1, including updates to Data Editor, SQL Editor, general improvements, driver updates, and security fixes.
2026-03-23 12:42:04 +01:00
1bafe29e99 dbeaver/pro#7696 feat: replace slide component with dialog for improv… (#4192)
* dbeaver/pro#7696 feat: replace slide component with dialog for improved UI interaction

* dbeaver/pro#7696 refactor: update persistent elements getter

* dbeaver/pro#7696 fix: notifications persistence

* dbeaver/pro#7696 fix: add min-width to container in RightArea and Administration CSS

* dbeaver/pro#7696 refactor: remove persist prop from SideBarPanel component

make SideBarPanel persist by default

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-19 18:11:31 +01:00
Dmitrii Barnukov 10ad601f8b dbeaver/pro#5562 revert hide password if not applicable (#4225) 2026-03-19 10:31:47 +01:00
db9f145609 [CB] refactor data editor features readonly states [2] (#4213)
* dbeaver/pro#8299 adds features to data sources

* adds feature flags for data sources

* adds features to mobx

* pr fixes

* pr fixes

* fixes hasFeature

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-18 17:10:16 +01:00
d920227db0 dbeaver/pro#8470 migrate reakit to the ariakit (#4209)
* dbeaver/pro#8470 migrate reakit to the ariakit

* dbeaver/pro#8470 fix format

* dbeaver/pro#8470 remove deprecated TabsBox

* dbeaver/pro#8470 control currentTabId via effect

* dbeaver/pro#8470 restore navigationSettings.hasMultipleRows

* dbeaver/pro#8470 fallback to null for defaultSelectedId

* dbeaver/pro#8470 remove getComputed

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-18 17:08:38 +01:00
874760f780 dbeaver/pro#8306 split event enums in gql schema (#4202)
* dbeaver/pro#8306 split event enums in gql schema

* dbeaver/pro#8306 use events from ee sdk

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-18 12:37:15 +01:00
dbeaver-devops 0e286f383f dbeaver/pro#8732 26.0.2 version bump 2026-03-17 20:06:58 +01:00
40385f3b1c [CB] Reuse DnD from base grid component for Data Editor (#4201)
* dbeaver/pro#7159 adds dnd to column body cells + introduces new drop column styles

* adds line on dnd

* removes rdg-cell-column-drop class

* cleanup for class names

* renames to useDnD box

* cleanup

* renames hook

* fixes colors scheme + border line index

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-17 18:50:05 +01:00
sergeyteleshevandEvgenia 4bc74883e0 [CB] Improve fuzzy search in autocompletion in the SQL Editor (#4204)
* dbeaver/pro#8418 adds fuzzy search for sql editor proposals

* sorts proposals so startsWith and includes word is showed first

* tunes DEFAULT_FUZZY_THRESHOLD

* tunes DEFAULT_FUZZY_THRESHOLD

* Revert "tunes DEFAULT_FUZZY_THRESHOLD"

This reverts commit 7ac8757215.

* fixes ranging and threshold

* rename variable

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-17 18:39:19 +01:00
33d1d97fb7 dbeaver/pro#8515 sync properties state (#4214)
* dbeaver/pro#8515 sync properties state

* dbeaver/pro#8515 fixed null to empty strings props conversion

* dbeaver/pro#8515 do not send property if its in default value

* Revert "dbeaver/pro#8515 fixed null to empty strings props conversion"

This reverts commit 5c4f181edf.

* dbeaver/pro#8515 fix firefox icon

* dbeaver/pro#8515 change prop order

* dbeaver/pro#8515 add comment

---------

Co-authored-by: Dmitrii Barnukov <dmitrii.barnukov@dbeaver.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-03-17 17:35:45 +01:00
296e03ec74 7023-cb-find-and-replace-new (#4085)
* dbeaver/pro#7023 feat: add SearchPanel component and related styles to UI-kit
add chevron Icon to UI-kit (used in Search Panel)

* dbeaver/pro#7023 feat: add SearchPanel story

* dbeaver/pro#7023 feat: update SearchPanel integration in CodeMirror

* dbeaver/pro#7023 feat: add onReplaceToggle prop to SearchPanel for toggle functionality

* dbeaver/pro#7023 fix: replace-input styles

* dbeaver/pro#7023 feat: implement search functionality in DataGrid v2

* dbeaver/pro#7023 fix: update react-data-grid workspace reference in yarn.lock

* dbeaver/pro#7023 feat: don't focus cell on replace

* dbeaver/pro#7023 feat: add searchReadOnly prop to DataGrid and GridSearchPanel components

* dbeaver/pro#7023 fix: update styles for search panel

* dbeaver/pro#7023 feat: add theme variables for improved styling in storybook

* dbeaver/pro#7023 feat: update search panel styles in datagrid

* dbeaver/pro#7023 feat: improve search functionality by resetting active match index and triggering search on find actions

* dbeaver/pro#7023 refactor: useGridSearch

* dbeaver/pro#7023 fix: search panel styles

* dbeaver/pro#7023 feat: implement grid search state management

* dbeaver/pro#7023 feat: add refresh functionality to search components

* dbeaver/pro#7023 feat: add history action to refresh search results on undo/redo

* dbeaver/pro#7023 feat: add batch cell update functionality to data grid

That functionality comes in handy when we want to use Undo and Replace All functions together:
Before that commit we used to perform N operations where N is a number of replaced cells. And history would record them as atomic operations, so pressing Undo would revert only the last replace.
setMany enables batch editing and batch reverting, so now we can Replace All and then revert it by using one Undo operation

* dbeaver/pro#7023 refactor: remove unnecessary eslint disable comment in useGridSearch

* dbeaver/pro#7023 feat: select affected cell on history change

* dbeaver/pro#7023 feat: add searchReadOnly prop to DataGridTable for conditional read-only state

* dbeaver/pro#7023 refactor: simplify isReadOnly logic in GridSearchPanel

* dbeaver/pro#7023 refactor: use constants for flags

* dbeaver/pro#7023 refactor: update focus and refresh methods in GridSearchPanel

* dbeaver/pro#7023 refactor: consolidate grid search state update logic

* dbeaver/pro#7023 refactor: update scrollToCell method signature and related usages

* dbeaver/pro#7023 refactor: update handleCellChangeBatch to use ICellChange type

* dbeaver/pro#7023 refactor: remove unwanted code

* dbeaver/pro#7023 feat: refactor search functionality to use standalone functions

* dbeaver/pro#7023 feat: implement useDataGridSearch hook to avoid bloating the  DataGrid component with the search-related logic

* dbeaver/pro#7023 feat: update search functionality to use onReplace for cell value updates

* dbeaver/pro#7023 feat: use Activity component for search panel visibility in DataGrid

* dbeaver/pro#7023 refactor: use common value transformation fn in set and setMany methods

* dbeaver/pro#7023 refactor: rename methods for "unnkeyed" cache

* dbeaver/pro#7023 refactor: unify cell edit history handling and remove batch edit references

* dbeaver/pro#7023 fix: update searchReadOnly logic

* dbeaver/pro#7023 refactor: replace rowsCountRef with useState (Error: Cannot access refs during render)

* dbeaver/pro#7023 refactor: expose getCellClassName via useImperativeHandle

Replaced onCellClassNameChange prop + useEffect with useImperativeHandle as suggested in code review. Using useState setter directly as callback ref either caused infinite re-renders (without deps) or lost context synchronization entirely (with stable deps). Settled on useCallback ref that sets both useRef (for method access) and useState (for context propagation).

* dbeaver/pro#7023 fix: Cmd+F not re-focusing the search panel when already open

* dbeaver/pro#7023 refactor:  cell edit history compression

* dbeaver/pro#7023 fix: refresh search state on revert

* dbeaver/pro#7023 refactor: move focus blocking during replace into grid component

Previously DataGridTable checked isReplacing() before syncing
focus/selection, leaking grid internals
Now the grid's selectCell blocks during replacing internally and
supports deferred mode (setTimeout + rAF) for post-render focus sync.

* dbeaver/pro#7023 refactor: restructure grid search logic with useReducer and improve state management

* dbeaver/pro#7023 refactor: improve grid search

moved ref synchronization out of render,
unified search+scroll into one shared path,
added a SET_MATCHES no-op guard to reduce unnecessary updates,
removed duplicate open=false persistence from useDataGridSearch (single owner now in useGridSearch).

* dbeaver/pro#7023 refactor: update search state types

* dbeaver/pro#7023 refactor: restructure grid search state interfaces for improved clarity

* dbeaver/pro#7023 refactor: optimize match retrieval logic after removal in grid search

* dbeaver/pro#7023 refactor: sync refs and computed props in one effect

* dbeaver/pro#7023 fix: Esc double handling between SearchPanel and CaptureView hotkeys

* dbeaver/pro#7023 refactor: fix review comments in useGridSearch

* dbeaver/pro#7023 refactor: unify hotkey stop propagation via shared EventContext/EventStopPropagationFlag

* dbeaver/pro#7023 refactor: pass reactive cellText to useGridSearch

* dbeaver/pro#7023 refactor: update grid search reducer actions and navigation logic

reuse SET_ACTIVE_MATCH and computeActiveMatchIdx for consistency

* dbeaver/pro#7023 refactor: improve equality check for cell matches

* dbeaver/pro#7023 feat: implement cell change tracking subscriptions and cleanup logic

* dbeaver/pro#7023 refactor: remove redundant clearTrackedCellSubscriptions

Cleanup implemented in useTrackedGridSearchCellSubscriptions hook

* dbeaver/pro#7023 fix: cancel stale deferred selectCell to prevent infinite focus loop

When multiple rows are deleted, competing deferred selectCell timeouts
cause focusSyncRef mismatch and endless focus-change cycle.

* dbeaver/pro#7023 fix: update keyboard shortcut for search to use 'KeyF'

* dbeaver/pro#7023 feat: make search disabled by default

* dbeaver/pro#7023 fix: layout

* dbeaver/pro#7023 fix: update scrollBox selection method in Table component

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Viktor Kirst <viktor.kirst@dbeaver.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-03-17 17:28:02 +01:00
2abdbce8ff dbeaver/pro#7566 feat: add settings functionality to the new tree (#4184)
* dbeaver/pro#7566 feat: add settings functionality to the new tree

Implemented settings as a part of Toolbar. The key reason was that the TreeToolbar sets different contexts for all other actions related to tree and easily extendible as a menu service. It might limit in some weird cases, but for now it looks like a valid decision

Settings are made as unknown intentionally to be polymorphic. We could use Record<string, unknown> instead, but I don't see it really improving anything.

* dbeaver/pro#7566 refactor: introduce ITreeSettings interface

add filter with settings connection via useTreeFilterState hook

* dbeaver/pro#7566 refactor: remove redundant hooks, update ITreeSettings

* dbeaver/pro#7566 refactor: move actions to cloudbeaver part

* dbeaver/pro#7566 feat: add universal hook that persists any tree settings via UserDataService as a flat key-value record

* dbeaver/pro#7566 refactor: remove unused childrenTransformers and stateTransformers from ITreeFilterState

* dbeaver/pro#7566 feat: enhance tree settings functionality with replace method and user data synchronization

* dbeaver/pro#7566 refactor: remove toolbarFilter from ITreeFilterState interface

* dbeaver/pro#7566 refactor: simplify useUserTreeSettings

* dbeaver/pro#7566 fix: lint rule and defaults inconsistency

* dbeaver/pro#7566 fix: defaults

* dbeaver/pro#7566 fix: update Russian translations for navigation tree settings

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-03-17 17:21:35 +01:00
Tsimafei Labanovich 051695451b dbeaver/pro#8267 Fix git comments (#4189) 2026-03-17 12:28:21 +00:00
sergeyteleshevandEvgenia 5b7a7fc3d6 [CB] Disable constraint on SQL generation for LOBs (#4215)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-17 12:30:28 +01:00
sergeyteleshev 0ba013e7ad [CB] fix high CVE-2026-32141 in flatted (#4217) 2026-03-17 12:27:11 +01:00
Dmitrii Barnukov 2d2f7476b4 dbeaver/pro#5562 removed auth password from props if not applicable (#4216) 2026-03-17 08:33:01 +01:00
23a0ad49b9 dbeaver/pro#8627 Redesign node extensions (#4212)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-16 19:58:57 +01:00
Dmitrii BarnukovandEvgenia d21a5aac7f dbeaver/pro#8637 enable search inside names by default (#4219)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-16 17:30:02 +01:00
f9cd51db0f [CB] add ability for data grid selection to apply for context menu (#4196)
* dbeaver/pro#8187 Adds right click for the cell menu

* supports multiple pin/unpin columns

* applies selection for the features: duplicate, delete, revert, set to NULL

* fixes pin column for 1 column selected

* renames to multiple pin/unpin columns

* reverts sandwich

* adds multiple add row action

* dbeaver/pro#8601 TE + Git fixes (#4193)

* dbeaver/pro#8601 Fix event handlers on RM server

* dbeaver/pro#8601 Fix RM node icons

* dbeaver/pro#8601 Fix RM project obtain

* dbeaver/pro#8592 support new headers (#4190)

* dbeaver/pro#7657 avoid blicking by debounce loading state (#4174)

* dbeaver/pro#7657 avoid blicking by debounce loading state

* dbeaver/pro#7657 use existing hooks

* dbeaver/pro#7657 keep the old behaviour

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>

* dbeaver/pro#8298 fix: preserve query param order, fix incorrect repla… (#4164)

* dbeaver/pro#8298 fix: preserve query param order, fix incorrect replacement, add tooltip

* dbeaver/pro#8298 refactor: rename ordered prop to sortByName and update sorting logic

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>

* fix: on selected cell menu click opens menu

* fix: duplicates on right click 1 row at time

* removes selection on cell click + removes menu sandwich for selected multiple cells

* value panel, upload, download features available only for 1 selected cell

* adds translations for the multiple rows/columns actions

---------

Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: Alexander Skoblikov <aleksandr.skoblikov@dbeaver.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-15 10:59:32 +01:00
GeorgiiandDiana 3687a645b6 dbeaver/pro#8591 clickhouse driver update (#4195)
Signed-off-by: Georgii Gvinepadze <fireshowel@gmail.com>
Co-authored-by: Diana <31996417+uslss@users.noreply.github.com>
2026-03-13 15:05:34 +01:00
c142996db0 dbeaver/pro#8497 added constraint attribute name (#4206)
* dbeaver/pro#8497 added constraint attribute name

* dbeaver/pro#8497 fix: deleteConstraint call

we can use ! here because we check for currentConstraint in the code above which we get by comparing constraint.attributePosition === attributePosition, so we can be sure the attributePosition prop is present

---------

Co-authored-by: Sychev Andrey <nukemoore@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2026-03-13 14:45:10 +01:00
Dmitrii BarnukovandAinur 36d2b46496 dbeaver/pro#8331 added sql generation for large objects (#4208)
* dbeaver/pro#8331 added sql generation for large objects

* dbeaver/pro#8331 check only relevant columns

---------

Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2026-03-13 12:46:43 +01:00
Ruslan Musaevandmr-anton-t cb8b1cfc52 dbeaver/pro#8467 fix npe read only status (#4183)
* dbeaver/pro#8467 fix npe read only status

* dbeaver/pro#8467 fix navigator model read write lock

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-13 12:13:24 +01:00
743afcaad7 dbeaver/pro#7565 feat: implement drag-and-drop functionality in the n… (#4179)
* dbeaver/pro#7565 feat: implement drag-and-drop functionality in the new tree component

* dbeaver/pro#7565 refactor: optimize node state handling in drag-and-drop functionality

this will avoid additional re-renders in some cases

* dbeaver/pro#7565 refactor: simplify drag-and-drop context handling in useNodeDnD

* dbeaver/pro#7565 fix: add extra check to avoid redundant calls

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2026-03-12 23:38:15 +01:00
sergeyteleshevandDaria Marutkina 52c78e1aee [CB] Fix high CVE-2025-45141 in tar (#4211)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-03-12 23:25:16 +01:00
alexandmr-anton-t ff275c36b6 dbeaver/pro#8493 add fetch size tooltip (#4203)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-03-12 15:42:13 +01:00
9a94639167 [CB] Error in the console when opening the admin panel (#4194)
* dbeaver/pro#5495 removes formState hack in ServerConfig

* Revert "dbeaver/pro#5495 removes formState hack in ServerConfig"

This reverts commit 1635e60b38.

* respects formState if it is null

* cleanup

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Viktor Kirst <viktor.kirst@dbeaver.com>
2026-03-11 16:41:17 +01:00
alex 74d09ee4dc dbeaver/pro#8665 always show tabs for the right panel (#4210) 2026-03-11 16:37:31 +01:00
360aaed795 [CB] Bump NPM dependencies (#4186)
* dbeaver/pro#8307 updates yarn lock

* updates eslint

* updates graphql libs

* updates @types/whatwg-mimetype

* updates whatwg-mimetype

* covers evaluate with unit tests

* updates subscript

* removes Rollup CVE

* removes CVE for storybook

* removes CVE for koa

* removes CVE for minimatch

* removes CVE for ajv

* removes redundant types

* cleanup

* updates yarn.lock

* reverts eslint

* updates yarn.lock

* updates yarn lock

* reverts subscript version

* fixes immutable CVE

* fixes serialize-javascript CVE

* updates yarn lock

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
2026-03-11 13:27:17 +01:00
912ca3fdcd dbeaver/pro#8394 fix ability to test ssh config for the existing conn… (#4166)
* dbeaver/pro#8394 fix ability to test ssh config for the existing connection

* dbeaver/pro#8394 pass the same config to test tunnel

* dbeaver/pro#8394 fix checking not empty for ssh password

* dbeaver/pro#8394 fix after review

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-03-11 12:33:04 +01:00
Ruslan MusaevandDaria Marutkina 32bbfc3a37 dbeaver/pro#8149 fix audit logging ip (#4182)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-03-11 12:32:38 +01:00
1e05ad9eea dbeaver/pro#8223 add new events for messages (#4110)
* dbeaver/pro#8223 add new events for messages

* dbeaver/pro#7138 add error alert variant

* dbeaver/pro#7138 add size for the icon

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-11 12:32:03 +01:00
Serge RiderandEvgenia 4b516c770d dbeaver/pro#8351 Disable devel mode by default (#4136)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-11 12:31:37 +01:00
Serge Rider 4e1fed8177 dbeaver/pro#8626 Refactor QM model init (#4200) 2026-03-10 18:59:22 +01:00
alexandEvgenia 4b30d1073b dbeaver/pro#8355 throttle hover and menu showing (#4176)
* dbeaver/pro#8355 throttle hover and menu showing

* Revert "dbeaver/pro#8355 throttle hover and menu showing"

This reverts commit a88f7aee8b.

* dbeaver/pro#8355 mark hover update as non urgent and non-blocking

* dbeaver/pro#8355 use useHover hook for data grid

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-10 15:48:48 +01:00
269128360d dbeaver/pro#8298 fix: preserve query param order, fix incorrect repla… (#4164)
* dbeaver/pro#8298 fix: preserve query param order, fix incorrect replacement, add tooltip

* dbeaver/pro#8298 refactor: rename ordered prop to sortByName and update sorting logic

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-03-09 17:28:02 +01:00
alexandEvgenia 07db19635e dbeaver/pro#7657 avoid blicking by debounce loading state (#4174)
* dbeaver/pro#7657 avoid blicking by debounce loading state

* dbeaver/pro#7657 use existing hooks

* dbeaver/pro#7657 keep the old behaviour

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-03-09 14:12:16 +01:00
Alexander Skoblikov 41d9ac4296 dbeaver/pro#8592 support new headers (#4190) 2026-03-05 17:57:52 +01:00
Serge Rider a536a93ea3 dbeaver/pro#8601 TE + Git fixes (#4193)
* dbeaver/pro#8601 Fix event handlers on RM server

* dbeaver/pro#8601 Fix RM node icons

* dbeaver/pro#8601 Fix RM project obtain
2026-03-05 17:54:46 +01:00
Alexander Skoblikov aefdca73fa dbeaver/pro#8557 log null host (#4187) 2026-03-04 12:18:26 +01:00
sergeyteleshevandDaria Marutkina 5d402d0c20 Confusing "something went wrong" in case of network issues (#4172)
* dbeaver/pro#8468 adds server is not available network error

* removes localization

* renames method for network state issues

* adds comment

* adds explanations for dev and prod mode errors

* supports multiple browser with network errors

* moves logic to a single method + reuses for events

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-03-03 10:41:04 +01:00
Alexander SkoblikovandSerge Rider fcd1924853 dbeaver/pro#8479 annotation for non executable options (#4170)
Co-authored-by: Serge Rider <serge@jkiss.org>
2026-03-03 09:47:29 +01:00
Malcolm-B-Breaks 05c0aafb53 [CB] Small edit in wording (#4154) 2026-03-02 13:54:14 +01:00
Daria Marutkina 159b1b8bd6 dbeaver/pro#8483 Update README file (#4181)
Updated changelog for version 26.0.0, detailing new features, improvements, and fixes since version 25.3.0.
2026-03-02 11:19:37 +01:00
Tsimafei Labanovich f03c08bde7 dbeaver/pro#8120 Fix kerbeors properrties (#4178) 2026-02-27 11:16:01 +00:00
serge-rider 1b07a66192 dbeaver/pro#8105 Cleanup Http constants 2026-02-27 07:20:39 +01:00
Serge Rider ce1686e0eb dbeaver/pro#8504 Deadlock fix (#4175)
* dbeaver/pro#8504 Deadlock fix

* dbeaver/pro#8504 Deadlock fix
2026-02-26 12:17:58 +01:00
091160a59a dbeaver/pro#8441 fix ssl parameters (#4162)
Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-25 16:12:00 +01:00
dbeaver-devops 47d2377b39 dbeaver/pro#8483 26.0.1 version bump 2026-02-24 12:27:49 +01:00
Dmitrii BarnukovandEvgenia 8a3f6455ec dbeaver/pro#8190 secured values masking (#4143)
* dbeaver/pro#8190 secured values masking

* dbeaver/pro#6688 added idp values masking

* dbeaver/pro#8190 fix masking for saved params

* dbeaver/pro#8190 revert showProtected, review improvements

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-23 18:28:56 +01:00
801139e3ff dbeaver/pro#8068 [CB] Fix: form reload on save and AI settings language (#4140)
* dbeaver/pro#8068 fix: FormPart reload after save: race condition between loaded=false and savingPromise

Problem:
FormPart.save() sets loaded=false after successful save, expecting
useAutoLoad to call load() and reload data from server. However,
load() is blocked by formState.savingPromise guard (added recently in dbeaver/pro#8151, 9c406a4e1e),
which is only cleared later in FormState.save() finally block.
By the time savingPromise is cleared, no observable changes trigger
a React re-render, so useAutoLoad never retries — loaded stays false
forever and isChanged always returns false, permanently disabling
the Save button.

Solution:
Make FormPart.save() self-contained by adding an inline post-save
reload. After saveChanges(), set loaded=false (so setInitialState
resets both initialState and state), call loader() directly, then
set loaded=true. This eliminates the dependency on the external
useAutoLoad mechanism for post-save reload, avoiding the race
condition with savingPromise entirely.

* dbeaver/pro#8068 fix(Combobox): preserve custom value on Enter key press

When allowCustomValue is enabled, pressing Enter was selecting
an auto-highlighted item from the dropdown instead of keeping
the user's typed value. Disable autoSelect and close the popover
via Ariakit store on Enter to match the blur behavior.

* dbeaver/pro#8068 fix: after saveChanges(), reset state synchronously via setInitialState

* dbeaver/pro#8068 fix: remove redundant state loading in FormPart class

* dbeaver/pro#8068 feat: improve loadable state handling in useAutoLoad and FormPart

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-02-23 17:18:50 +01:00
457909dd82 dbeaver/pro#8423 patch resolutions (#4157)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-02-23 17:18:16 +01:00
Sychev AndreyandEvgenia 9f7e086369 dbeaver/pro#8279 feat: rename CloudBeaver CE to CloudBeaver Community… (#4153)
* dbeaver/pro#8279 feat: rename CloudBeaver CE to CloudBeaver Community across multiple files

* dbeaver/pro#8279 ci: remove unused dependency

* dbeaver/pro#8279 feat: remove unnecessary description fields in plugin.xml and defaultServerConfig.ts

* dbeaver/pro#8279 feat: update copyright year and remove product description fields in multiple locale files

* dbeaver/pro#8279 feat: return product version back to Logo component

* dbeaver/pro#8279 fix: remove exclamation mark from easy config heading

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-23 17:17:31 +01:00
Serge Rider 6e8a09a49e dbeaver/pro#8462 session npe (#4161)
* dbeaver/pro#8462 Persistent session refactoring. Nullability annotations.

* dbeaver/pro#8462 Synchronize active projects
2026-02-23 17:16:42 +01:00
alexandDaria Marutkina 8d11f94ad6 dbeaver/pro#8372 add claude code snippet (#4156)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-23 13:51:57 +01:00
Dmitrii BarnukovandEvgenia 3b0cd66232 dbeaver/pro#8444 bring back error prefix (#4160)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-23 12:37:07 +01:00
alexandEvgenia a60b7d4496 dbeaver/pro#8028 use UsersResourceNewUsers alias (#4150)
* dbeaver/pro#8028 use UsersResourceNewUsers alias

* dbeaver/pro#8028 use executor to add update pagination

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-20 15:40:34 +01:00
Ruslan MusaevandEvgenia 07a3a069fb dbeaver/pro#8281 check inner database password (#4155)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-20 12:32:01 +01:00
mr-anton-t 4511208cad dbeaver/pro#8413 fix fr locale (#4152) 2026-02-20 12:29:34 +01:00
1ab8d15b00 dbeaver/pro#8082 send query parameters as list fix (#4149)
* dbeaver/pro#8082 send query parameters as list fix

* dbeaver/pro#8082 fix: change query parameters handling in QueryDataSource

---------

Co-authored-by: Sychev Andrey <nukemoore@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-20 11:20:11 +01:00
alexandEvgenia ae331effde dbeaver/pro#3822 make selection accountable (#4144)
* dbeaver/pro#3822 make selection accountable

* dbeaver/pro#3822 pass cursor to get queries in range

* dbeaver/pro#3822 keep range queries clamped in selection

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-19 21:58:11 +01:00
alexandkseniaguzeeva 6c88030106 dbeaver/pro#8382 pass originalQuery to gql (#4151)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-02-19 12:19:30 +01:00
alexandDaria Marutkina 5e53341ba1 dbeaver/pro#8317 show all users by default (#4142)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-19 10:04:04 +01:00
Dmitrii BarnukovandDaria Marutkina 9338539564 dbeaver/pro#8023 added nullable exception message handling (#4146)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-19 10:03:33 +01:00
Ruslan MusaevandDaria Marutkina af1aa83d8b dbeaver/pro#7628 fix session refresh on server config update (#4126)
* dbeaver/pro#7628 fix session refresh on server config update

* dbeaver/pro#7628 fix session refresh on server config update

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-19 06:06:21 +01:00
AinurandEvgenia 32671ff239 dbeaver/pro#8196 validate projects on copying connection (#4141)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-19 06:03:50 +01:00
AinurandDaria Marutkina f7c33a7f7e dbeaver/pro#8283 execute get request for gql endpoint in devel mode (#4145)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-18 16:14:01 +01:00
alexandEvgenia d70e4976e5 dbeaver/pro#7511 move readonly loaders to the component (#4137)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-18 12:29:24 +01:00
a0e6154a08 [CB] The generated Custom SSL certificate domain is not displayed (#4127)
* dbeaver/pro#8305 removes serverUrl

* removes unused helper

* adds getCurrentDomain helper

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-02-18 12:29:03 +01:00
Daria Marutkina 1b6e729506 dbeaver/pro#8330 Update README file (#4148)
Added changelog entries for version 25.3.5, detailing new features and improvements in Data Editor, Navigator, and General sections.
2026-02-18 10:47:31 +01:00
Serge Rider 3adb898f5a dbeaver/pro#8365 Cert storage init fix 2026-02-17 11:50:31 +01:00
c886ee7bcd dbeaver/pro#8078 fix: remove translate property from menu transition (#4125)
Initial translation of a menu led to a unwanted hover effect on a first item due to menu and trigger overlapping. Removing this property fixes the problem and the menu still has a nice animation effect, thanks to opacity and scale

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-02-16 12:54:32 +01:00
serge-rider a5a9700ab9 dbeaver/pro#7928 Code style, constants 2026-02-15 09:21:36 +01:00
2c38e75a99 dbeaver/pro#6761 listen to localhost with host network mode (#4003)
* dbeaver/pro#6761 listen to localhost with host network mode

* dbeaver/pro#6761 merge

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Alexander Skoblikov <aleksandr.skoblikov@dbeaver.com>
2026-02-13 12:46:05 +01:00
Dmitrii BarnukovandEvgenia 12bc5ba5dc dbeaver/pro#8325 fixed oracle generated selects (#4130)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-11 18:19:23 +01:00
sergeyteleshev 2719f53655 [CB] SQL Query generation: front-end part (#4132)
* dbeaver/pro#8048 pass commit message validation

* fixes json + translations

* fixes gis generation

* uses format action to get text value for sql generators
2026-02-11 18:16:38 +01:00
dbeaver-devops a2d336166b dbeaver/pro#8330 26.0.0 version bump 2026-02-11 12:17:47 +01:00
sergeyteleshevandmr-anton-t 06da0705d2 dbeaver/pro#8303 fixes axios CVE (#4123)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-02-11 11:14:47 +01:00
058a341815 dbeaver/pro#8197 add connection preferences plugin (#4111)
* dbeaver/pro#8197 add connection preferences plugin

* dbeaver/pro#8197 add preferences form

* dbeaver/pro#8197 wrap to observable

* dbeaver/pro#8197 use config from core package

* dbeaver/pro#8197 adjust naming

* dbeaver/pro#8197 add separate resource for preferences info

* dbeaver/pro#8197 change action naming

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-10 17:16:48 +01:00
Dmitrii BarnukovandDiana f5b0aae8bd dbeaver/pro#8047 exposed resultset SQL generators to CB (#4116)
* dbeaver/pro#8047 exposed resultset SQL generators to CB

* dbeaver/pro#8047 minor fix

* dbeaver/pro#7998 added sql generator tests

* dbeaver/pro#8047 moved data provider

* dbeaver/pro#8047 fixed imports after move

* dbeaver/pro#8047 extracted methods to DBDResultSetModel

---------

Co-authored-by: Diana <31996417+uslss@users.noreply.github.com>
2026-02-10 16:21:17 +01:00
Ainurandkseniaguzeeva 789760aa9e dbeaver/pro#8181 fix saving data source config on init (#4121)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-02-10 16:13:56 +01:00
Tsimafei LabanovichandMashaKorax fe77133226 dbeaver/pro#8119 Add CLI commands for project management (create, rename, delete, list) (#4106)
* dbeaver/pro#8119 Add CLI commands for project management (create, rename, delete, list)

* dbeaver/pro#8119 Fix git issues

---------

Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2026-02-10 16:07:06 +01:00
AinurandDaria Marutkina 8e237d1bbc dbeaver/pro#8142 remove public url param (#4119)
* dbeaver/pro#8142 remove public url param

* dbeaver/pro#8142 remove server url in all products

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-10 16:04:22 +01:00
0f3b8033df [CB] Ability to clone connections (#4107)
* dbeaver/pro#6998 adds clone connection in context menu

* adds copy to cloned connection

* dbeaver/pro#6998 fix copy navigator settings

* preload connections names to create correct name for cloned node

* pr fixes: adds translation + unique name among all connections

* adds "копия" locale

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
2026-02-10 12:16:56 +01:00
586d4154ab dbeaver/pro#4999 Data editor icons to see pk details (#4040)
* dbeaver/pro#4999 feat: add TableStatusIndicator component and update tooltips for key detection

* dbeaver/pro#4999 feat: update TableStatusIndicator to handle read-only connection state and improve tooltips

* dbeaver/pro#4999 feat: use new backend endpoint to provide info about identifier

* dbeaver/pro#4999 refactor: simplify TableStatusIndicator by removing props and using context directly

* dbeaver/pro#4999 refactor: move hasElementIdentifier to ResultSetDataSource

* pr fixes

* fixes indicator center position + removes duplicated translation

* fixes contrast for color-status (JSON edit row + keys indicator for tables)

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-10 09:41:39 +01:00
e0fe55c3bf dbeaver/pro#6306 api for original query (#4108)
* dbeaver/pro#6306 api for original query

* uses original query from backend for sql data source

* adds description for popup

* removes message

* fixes creating dataset from grouping panel

* adds new full query abstraction

* pr fixes

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-02-10 09:40:55 +01:00
9c406a4e1e dbeaver/pro#8151 fix: reset password and key fields on change detection (#4102)
* dbeaver/pro#8151 fix: reset password and key fields on change detection

* fixes ssh save form part flow

* removes race condition

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-09 12:12:37 +01:00
alexandDaria Marutkina 05bf79e59c dbeaver/pro#8218 add doc locale (#4113)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-09 12:11:03 +01:00
sergeyteleshevandEvgenia d013ece4f6 dbeaver/pro#8262 fixes CVE for @isaacs/brace-expansion (#4115)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-09 12:10:18 +01:00
Ruslan Musaev b0205e34c7 dbeaver/cloudbeaver#3833 remove mandatory backup for database community (#4118) 2026-02-06 16:29:46 +01:00
Ruslan MusaevandEvgenia 0b41ae89e8 dbeaver/pro#8211 update duck db version (#4114)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-05 15:30:14 +01:00
Ruslan Musaev b318c262b9 dbeaver/pro#7914 jetty server websocket version bump (#4079) 2026-02-05 11:55:08 +00:00
alex 547831d060 dbeaver/pro#8214 change naming (#4112) 2026-02-05 09:45:06 +01:00
sergeyteleshevandmr-anton-t 93af9a8719 [CB] Decrize the size of radio buttons (#4109)
* dbeaver/pro#8202 decreases border for radio buttons + matches border colors

* fixes checkboxes and radios space conflicts so it aligned on the left and has correct spacing with text also

* reverts margin top for checkboxes

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-02-04 16:25:34 +01:00
Alexander Skoblikov 19125fed5e dbeaver/pro#7888 interface for cli context (#4100) 2026-02-04 10:02:43 +00:00
sergeyteleshevandDaria Marutkina ea5fb47a56 [CB] remove shortcuts intersection for layouts (#4103)
* dbeaver/pro#8104 removes shortcuts intersection

* removes check of an active element (handled by the lib)

* build fix

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-02-03 17:30:59 +01:00
alexandEvgenia 89b4d1f970 dbeaver/pro#7357 use the same saved value indicator across the app (#4099)
* dbeaver/pro#7357 use the same saved value indicator across the app

* dbeaver/pro#7357 check id first

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-02-03 17:26:06 +01:00
Daria Marutkina 0bd89236d2 dbeaver/pro#8155 Update README file (#4105)
Added changelog for version 25.3.4, detailing new features and fixes in Editors, Navigator, and General sections.
2026-02-02 11:36:44 +01:00
Dmitrii Barnukovandmr-anton-t abe0f6fb7d dbeaver/pro#7975 removed vks from api and logic (#4098)
* dbeaver/pro#7975 removed vks from api and logic

* dbeaver/pro#7975 revert api changes

* dbeaver/pro#7975 revert api changes

* dbeaver/pro#7975 revert api changes

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-02-02 11:01:03 +01:00
sergeyteleshevandEvgenia 0b2b851772 dbeaver/pro#8156 filters menu bar with hidden actions (#4093)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-30 23:05:08 +08:00
alexandmr-anton-t dcb8e536b8 dbeaver/pro#8067 add tooltip (#4101)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-30 23:04:45 +08:00
sergeyteleshev 7881551821 dbeaver/pro#8175 removes tar and lodash CVEs (#4095) 2026-01-29 12:15:39 +01:00
alexandDaria Marutkina cdc94dce5f dbeaver/pro#8089 validate date before formatting (#4091)
* dbeaver/pro#8089 validate date before formatting

* dbeaver/pro#8089 treat date and time the same

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-28 12:30:09 +01:00
dbeaver-devops 70b67ce6f4 dbeaver/pro#8155 25.3.5 version bump 2026-01-27 19:55:11 +01:00
sergeyteleshevandEvgenia e570a05175 [CB] Improve undo/redo behavior for Data Editor (#4060)
* dbeaver/pro#7614 adds first implementation of grid history action (has bugs)

* some pr fixes

* replace last instead of update method

* adds history compression to cell edit

* add add row history for undo/redo

* adds history for delete row

* adds duplicate row undo/redo

* adds history for revert action

* clears history inside edit clear action

* refactors the undo/redo history to have more clean structure

* cleanup

* adds limits to history

* uses data viewer undo/redo actions

* cleanup for undo/redo actions + adds to the top of table icons

* applies tooltips for the header table only

* removes createEditorDataAccess (refactor)

* removes getPrevCellValue (refactor)

* bug fix: add row, change something, delete row, undo/redo in this history

* adds more specific function naming

* Revert "bug fix: add row, change something, delete row, undo/redo in this history"

This reverts commit 5f1799fe26.

* adds batching history to the adding/deleting operations

* refactors GridHistoryHandlers & GridEditAction API + fixes the bug with deleting added row

* handling edge cases

* cleanup

* pr fixes

* refactor: removes extra interfaces, uses addRow for duplication rows action, handlers cleanup

* refactors the code to split editor changes to private and edits, history & action executions to public methods

* Revert "refactors the code to split editor changes to private and edits, history & action executions to public methods"

This reverts commit 374201179a.

* refactor: removes duplications of the code

* cleanup

* fixes menu bar item tooltip

* fixes labels

* removes get action info

* hides undo/redo for readonly table action

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-27 19:04:04 +01:00
Dmitrii Barnukovandmr-anton-t f82598ad66 Dbeaver/pro#7975 Added row identifier data (#4056)
* dbeaver/pro#7975 added pk info to api

* dbeaver/pro#7975 added row id state

* dbeaver/pro#7975 update doc

* dbeaver/pro#7975 update api

* dbeaver/pro#7975 added copyright

* dbeaver/pro#7975-pk-info extended row id api, added tests

* dbeaver/pro#7975-pk-info added attribute

* dbeaver/pro#7975-pk-info renamed type

* dbeaver/pro#7975-pk-info removed excess params

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-27 19:02:18 +01:00
d3b0b96bae dbeaver/pro#7897 add connection view plugin (#4031)
* dbeaver/pro#7897 add connection view plugin

* dbeaver/pro#7897 add view settings to the connection dialog

* dbeaver/pro#7897 navigator settings as separate resource

* dbeaver/pro#7897 api for original navigator settings config

* dbeaver/pro#7897 use original settings for connection dialog

* dbeaver/pro#7897 save connection view fixes

* dbeaver/pro#7897 update node on reset

* dbeaver/pro#7897 remove extra comments

* dbeaver/pro#7897 do not update node if only global settings had changed

* dbeaver/pro#7897 reuse view

* dbeaver/pro#7897 fixes after review

* dbeaver/pro#7897 return old api for user settings

* dbeaver/pro#7897 change field name

* dbeaver/pro#7897 add descriptions

* dbeaver/pro#7897 get defaults settings in creation mode

* dbeaver/pro#7897 get defaults based on userSettings flag

* dbeaver/pro#7897 remove extra locales

* dbeaver/pro#7897 send object event fix

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2026-01-27 18:58:55 +01:00
sergeyteleshev ec9c2b895b dbeaver/pro#8150 this reverts commit 4088e7998e (#4090) 2026-01-27 16:59:00 +01:00
be8744232b dbeaver/pro#7578 break long words (#4088)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-01-27 15:46:58 +01:00
4088e7998e dbeaver/pro#7578 fix: auth dialog overflow (#4086)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-01-27 15:46:52 +01:00
c540728fee dbeaver/cloudbeaver#4025 fix cloudbeaver semantic sql completion (#4081)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-01-27 14:29:21 +01:00
84f0903fc7 dbeaver/pro#7576 feat: mcp configuration (#4084)
* dbeaver/pro#7576 feat: mcp configuration

* fix: close form after creation

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2026-01-27 14:24:29 +01:00
sergeyteleshevandmr-anton-t 89152a09a1 [CB] Bump NPM dependencies (#4070)
* dbeaver/pro#7626 bumps yarn locks

* updates globals

* bumps subscript major version

* bumps react-data-grid

* fixes react-data-grid checksum

* bumps yarn.lock

* reverts 'true' & 'false' literals for ObjectPropertyInfo

* reverts subscript to ver v9 due to poor v10 library support (it is not working api)

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-27 14:11:49 +01:00
0bfdcf0886 dbeaver/pro#7769 fix properties mapping for enums (#4052)
* dbeaver/pro#7769 fix properties mapping for enums

* dbeaver/pro#7769 fix annotations

* dbeaver/pro#7769 use custom extended interface

* dbeaver/pro#7769 check explicit value

* dbeaver/pro#7769 avoid declaring extra variable

* dbeaver/pro#7769 always use isNotNullDefined in terms of backend data

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2026-01-27 12:53:40 +01:00
Ruslan MusaevandEvgenia d2d3ada58a dbeaver/pro#7268 bump logback version (#4083)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-27 09:35:34 +01:00
alexandDaria Marutkina a62478a574 dbeaver/pro#7383 make pointer target at least 24px (#4080)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-27 00:50:28 +08:00
sergeyteleshevandEvgenia 980473918e [CB] Use the Tab key for autocomplete (#4051)
* dbeaver/pro#7555 adds autocomplete on tab + refactors shortcuts api

* adds unit tests for getCommonAndOSSpecificKeys

* uses prec.high to give some space to overriding shortcuts

* reverts keysWin + fixes the tests

* pr fixes

* adds escape editor shortcut to the shortcuts helper

* shows only 1 shortcut for autocomplete + shows os specific keys first in help doc

* fixes shortcuts so no repeats applied

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-26 17:20:15 +08:00
Ruslan MusaevandEvgenia 26712e7bca dbeaver/pro#7458 backend now send event on canceling query job (#4068)
* dbeaver/pro#7458 backend now send event on canceling query job

* dbeaver/pro#7458 fixes

* dbeaver/pro#7458 fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-23 17:18:12 +01:00
Ainur 9597e99bc9 dbeaver/pro#8064 return features from license and add tests (#4075)
* dbeaver/pro#8064 return features from license and add tests

* dbeaver/pro#8064 get feature registry from application

* dbeaver/pro#8064 implement get feature registry in base method
2026-01-23 12:10:34 +01:00
Alexey PotsetsuevandDaria Marutkina 7f92abd33e dbeaver/pro#4541 feat: show children of tables (#4073)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-23 19:02:05 +08:00
alexandEvgenia ad686faca8 dbeaver/pro#4692 show spinner when loading new page (#4072)
* dbeaver/pro#4692 show spinner when loading new page

* dbeaver/pro#4692 use button instead of div

* dbeaver/pro#4692 use button from core blocks

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-22 17:17:27 +08:00
Ainur c02411085e dbeaver/pro#8016 fix tests (#4077) 2026-01-21 17:33:50 +01:00
Alexey PotsetsuevandDaria Marutkina 90fcbe6b7f dbeaver/pro#7854 feat: display query with parameters (#4064)
* dbeaver/pro#7854 feat: display query with parameters

* fix: use replaceAll instead of replace

* dbeaver/pro#7854 fix: support parameters and variables

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-22 00:18:25 +08:00
sergeyteleshevandDaria Marutkina 1deffb984b Critical UX Issue: Delete key marks entire row as deleted during inline cell editing (#4063)
* dbeaver/pro#4061 changes KEY_BINDING_DELETE_ROW shortcut to prevent deleting row during cell editing

* considers the case with deleting whole row during editing

* uses only delete shortcut

* considers browser default behavior

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-21 20:27:59 +08:00
Ruslan MusaevandEvgenia bd52ee6583 dbeaver/pro#7936 Change object settings table (#4046)
* dbeaver/pro#7936 Change object settings table

* dbeaver/pro#7936 Change object settings table

* dbeaver/pro#7936 Change object settings table

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-21 12:39:01 +01:00
sergeyteleshevandDaria Marutkina 013ad81581 dbeaver/pro#7738 adds unique name to notification for create connection success (#4071)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-21 16:46:49 +08:00
sergeyteleshevandEvgenia 4843002e0d [CB] fix contrast colors in sql editor whitespace highlight system (#4067)
* dbeaver/pro#8055 fixes contrast color issues with whitespace highlighting in sql editor

* makes a bit more contrast colors

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-21 16:46:33 +08:00
Ruslan MusaevandDaria Marutkina 9a05d0bf7f dbeaver/pro#7881 fix unauthorized qm session (#4039)
* dbeaver/pro#7881 fix unauthorized qm session

* dbeaver/pro#7881 fix unauthorized qm session

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-20 18:44:59 +01:00
ecaa4934b1 dbeaver/pro#4917 save project information in one place (#3985)
* dbeaver/pro#4917 save project information in one place

* dbeaver/pro#4917 remove projects info after deleting project

* dbeaver/pro#4917 fix creating resource type folders

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2026-01-20 18:44:18 +01:00
8d89bc25ba dbeaver/pro#5145 add rename action for connection (#4041)
* dbeaver/pro#5145 add rename action for connection

* dbeaver/pro#5145 return node id in renaming node function

* dbeaver/pro#5145 add can rename feature for data source

* dbeaver/pro#5145 use new node path from backend

* dbeaver/pro#5145 use new node id

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-20 18:43:48 +08:00
Daria Marutkina 40581e746b dbeaver/pro#8017 Update README file (#4069) 2026-01-19 13:41:14 +01:00
alexandDaria Marutkina a9911d9297 dbeaver/pro#7339 do not confirm transaction if count is zero (#4057)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-19 19:33:40 +08:00
Sychev Andrey a8d437dce6 dbeaver/pro#8051 fix: support time-only formatting in DateTimeFormatter and update related tests (#4065) 2026-01-17 10:38:12 +01:00
sergeyteleshev bacd1bff91 dbeaver/pro#8025 fixes filters for select cell (#4055) 2026-01-14 16:28:14 +01:00
dbeaver-devops 1d9b0a2943 dbeaver/pro#8017 25.3.4 version bump 2026-01-13 18:56:01 +01:00
Alexey PotsetsuevandDaria Marutkina aa6a81428c dbeaver/pro#5880 fix: column size (#4049)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-14 00:48:05 +08:00
sergeyteleshev b91ca06359 No translation and tooltips for connection switcher (#4050)
* dbeaver/pro#8001 fixes tooltip and translation

* adds shorten connections limits
2026-01-13 23:51:01 +08:00
Alexey PotsetsuevandDaria Marutkina 244479cd06 dbeaver/pro#7397 feat: reload after session expire (#4043)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-13 22:54:08 +08:00
Dmitrii Barnukovandmr-anton-t 1c56d55462 dbeaver/pro#7978 fix duckdb driver id (#4048)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-13 13:11:17 +01:00
be78d2fe92 [CB] Remove tooltips from context menu (#4033)
* dbeaver/pro#7772 adds truncated tooltips for context menus

* dbeaver/pro#7772 adds " ... " for long labels

* adds unit tests

* Update webapp/packages/core-blocks/src/Menu/MenuItemElement.tsx

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>

* adds binding for delete row

* removes tooltips

* fixes tree filters clipping

* clips only names, not whole labels

* clips only names, not whole labels [2]

* reverts getBindingLabels + fixes the os specific keys to show it first

* clips only names, not whole labels [3]

* dbeaver/pro#7772 simplifies keys helpers logic

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-13 19:57:27 +08:00
Sychev Andreyandmr-anton-t 4178826ff4 7855 cb add setting use the users os formatting for numbersdates (#4020)
* dbeaver/pro#7855 feat: Add setting to use the user's OS formatting for numbers and dates

* dbeaver/pro#7855 refactor: update OS formatting option value in DataGridSettingsService

* dbeaver/pro#7855 feat: implement OS formatting for date and time in DataGrid

* dbeaver/pro#7855 feat: implement user-specific formatting for numbers in DataGrid

* dbeaver/pro#7855 feat: add translations

* dbeaver/pro#7855 style: update date formatter

* dbeaver/pro#7855 feat: add locale-specific formatting options for DataGrid settings

* dbeaver/pro#7855 feat: add support for locale-specific formatting with regions

* dbeaver/pro#7855 refactor: move date type detection to the grid level

* dbeaver/pro#7855 refactor: simplify cell formatter selection logic

* dbeaver/pro#7855 refactor: move formatting to a separate context

* dbeaver/pro#7855 refactor: optimize extended date kind retrieval logic

* dbeaver/pro#7855 fix: tw class names

* dbeaver/pro#7855 refactor: change caching mechanism and other improvements

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-13 18:29:48 +08:00
27ef1fdf73 [CB] [TE] [FE] Permission denied for using dataset grouping panel by Viewer/Editor (#4035)
* dbeaver/pro#7849 uses asyncSqlGropingResultSet for grouping result set instead of getResultsetGroupingQuery

* dbeaver/pro#7849 fix validation and rename graphql function

* dbeaver/pro#7849 add current results id for filtering

* refactors asyncSqlGroupingResultSet so it has current results id

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-13 17:38:07 +08:00
Alexey Potsetsuev 5b0bedcf5e dbeaver/pro#5890 chore: users cache improvements (#4045) 2026-01-13 17:37:45 +08:00
Sychev AndreyandDaria Marutkina 821805eba8 dbeaver/pro#7840 [CB] support opening web socket event that sends an url on front end side (#4036)
* dbeaver/pro#7840 feat: add core session actions module with open URL event handler

* dbeaver/pro#7840 feat: add localization support

* dbeaver/pro#7840 feat: show url in textarea

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-12 17:29:32 +08:00
6531e45357 [CB] [f] CB user used as db user (#4009)
* dbeaver/pro#7813 disables autocomplete for passwords (connection authentication)

* removes autocomplete in ssh tab

* removes auto-complete for auth provider

* fixes autofills

* reverts autocompleteSectionName="section-connection-authentication"

* removes password autocomplete

* Revert "removes password autocomplete"

This reverts commit d470c002ed.

* dbeaver/pro#7813 fixes more cases with autocomplete

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-12 17:09:44 +08:00
Serge Rider 598fb92eaf dbeaver/dbeaver#40069 Change auto-commit setting UIX (#4038) 2026-01-09 16:43:55 +01:00
71dda4aa45 dbeaver/pro#7603 add long polling transport (#4002)
* dbeaver/pro#7603 add long polling transport

* dbeaver/pro#7603 use next observer

* dbeaver/pro#7603 use ref count instead of internal observers

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-09 17:57:20 +08:00
Serge RiderandMatvey16 cc1861c614 dbeaver/dbeaver#39210 Add Sybase dialect. Disable AS keyword. MArk system schemas (#4037)
Co-authored-by: Matvey16 <82543000+Matvey16@users.noreply.github.com>
2026-01-08 17:11:08 +01:00
67c15af74d [CB] Shortcuts for the Data Editor (#4016)
* dbeaver/pro#7025 moves shortcuts for data editor to plugin-data-viewer and reuses it in shortcuts helper plugin

* adds save binding to data editor

* adds cancel shortcut

* changes save shortcut

* dbeaver/pro#7025 change binding key

* uses mod+. shortcut for cancel action (data editor)

* Revert "uses mod+. shortcut for cancel action (data editor)"

This reverts commit c5b375c2cf.

* adds mod+. shortcut for cancel

* adds shortcut for mac for deleting row in table

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
2026-01-08 22:57:57 +08:00
Sychev Andreyandmr-anton-t 79194b2b50 dbeaver/pro#7370 feat: change checkbox, combobox, and select border widths to 1px (#4028)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-08 18:57:11 +08:00
sergeyteleshevandDaria Marutkina 673b824cb5 dbeaver/pro#6679 fixes fill containers so status message truncated fine (#4030)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2026-01-08 18:56:55 +08:00
4e7555c419 dbeaver/pro#5232 [CB] Trap Focus In the Right Panel (#3952)
* dbeaver/pro#5232 feat: add Dialog component to UI-kit

* dbeaver/pro#5232 feat: add slide variant for Dialog component

* dbeaver/pro#5232 refactor: dialog backdrop component

* dbeaver/pro#5232 feat: use dialog component for side panel to prevent focus escaping

* dbeaver/pro#5232 feat: add DialogHeader, DialogBody, and DialogFooter components for improved dialog layout

* dbeaver/pro#5232 feat: add Storysource addon to Storybook configuration

* dbeaver/pro#5232 refactor: use ui-kit dialog for CommonDialog implementation

* dbeaver/pro#5232 feat: add animated prop to Dialog component to control animations

* dbeaver/pro#5232 refactor: remove dialog animation for side panel

* dbeaver/pro#5232 refactor: remove unused backdrop and focus management logic from DialogsPortal

now handled by ariakit dialog component

* dbeaver/pro#5232 style: adjust dialog padding and size for large variant

* dbeaver/pro#5232 feat: add dialog to admin part implementation

* dbeaver/pro#5232 fix: remove autofocus prop from CommonDialogWrapper in AuthDialog and DriverSelectorDialog

* dbeaver/pro#5232 style: correct apostrophe in label text for NestedDialogs component

* dbeaver/pro#5232 fix: update dialog component styles for improved accessibility and layout

* dbeaver/pro#5232 refactor: add DialogElement component to get rid of code duplication

* dbeaver/pro#5232 fix: correct min-width for large fixedWidth dialog size

* dbeaver/pro#5232 refactor: update DialogElement properties for improved focus management

* dbeaver/pro#5232 fix: use l10n for DialogElement close buttons

* dbeaver/pro#5232 refactor: update DialogElement to be a modal to trap focus

* dbeaver/pro#5232 refactor: remove unmountOnHide prop from CommonDialogWrapper

* dbeaver/pro#5232 feat: return ESC hotkey handling in SlideBox

* dbeaver/pro#5232 feat: make background panel inert to make focus never reach hidden panel

* dbeaver/pro#5232 feat: add SlidePanel component to replace DialogElement by removing Dialog

* dbeaver/pro#5232 feat: add inert prop to SlideElement for focus trapping in visible part

* dbeaver/pro#5232 feat: pass onClose handler to SlideBox to activate hotkey

* dbeaver/pro#5232 style: return to initial state to avoid redundant diffs

* dbeaver/pro#5232 style: update copyright year in SlideElement.module.css

* dbeaver/pro#5232 chore: remove ui-kit dependency from package.json and tsconfig.json

* dbeaver/pro#5232 build: update @storybook/addon-storysource dependency version

* dbeaver/pro#5232 build: update @storybook/addon-storysource dependency version

* dbeaver/pro#5232 style: remove border styles from dialog header and footer

* dbeaver/pro#5232 fix: update hover background color for icon button

* dbeaver/pro#5232 feat: move focus from driver dialog to panel when applicable

* dbeaver/pro#6326 fix: large window size

* dbeaver/pro#5232 fix: update focus on hide logic

* dbeaver/pro#5232 fix: update hover and focus styles for icon button in SlidePanel

* dbeaver/pro#5232 feat: return back the common backdrop, replace common fallback to spinner

* dbeaver/pro#5232 fix: replace useFocus by dialog's initial focus in Rename dialog

* dbeaver/pro#5232 build: update deps after merge

* dbeaver/pro#5232 refactor: use constant for button id

* dbeaver/pro#5232 feat: add Loader component to DialogsPortal

* dbeaver/pro#5232 refactor: update Dialog component to use semantic HTML elements for header and footer

* dbeaver/pro#5232 fix: gap in footer of dialogs

* dbeaver/pro#5232 feat: focus input initially in New Folder dialog

* dbeaver/pro#5232 feat: add autoFocusOnShow prop to CommonDialogWrapper for improved focus management

* dbeaver/pro#5232 fix: padding for CommonDialogFooter

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2026-01-08 18:56:13 +08:00
Dmitrii Barnukovandmr-anton-t 9d0e75dba8 dbeaver/pro#7618 added lsp tests to cb (#4000)
* dbeaver/pro#7618 moved lsp tests to cb

* dbeaver/pro#7618 added plugin to feature

* dbeaver/pro#7618 added module

* dbeaver/pro#7618 added module

* dbeaver/pro#7618 fix module

* dbeaver/pro#7618 fix dependency

* dbeaver/pro#7618 moved resource utils to model

* dbeaver/pro#7618 review improvements

* dbeaver/pro#7618 removed rcp

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-01-06 18:07:49 +01:00
Alexander SkoblikovandMashaKorax 44cc1badf4 dbeaver/pro#7710 merge fixes (#4026)
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2026-01-06 06:03:15 +01:00
Sychev Andrey fdb4894ae4 dbeaver/pro#7940 feat: add helper function to get localized display names (#4029) 2026-01-06 01:01:45 +08:00
Daria Marutkina a836412ee4 dbeaver/pro#7916 Update README file (#4027)
* dbeaver/pro#7916 Update README file

* Update README.md

* Update README.md
2026-01-05 11:54:49 +01:00
Serge Rider 38b0246240 dbeaver/pro#7850 Base model refactoring (#4022)
* dbeaver/pro#7906 App shutdown fixes (listeners unregister)

* dbeaver/pro#7906 File systems usage refactoring (move to model)

* dbeaver/pro#7906 Logging fix

* dbeaver/pro#7906 Logging fix

* dbeaver/pro#7850 Logging fix
2026-01-03 09:17:15 +01:00
Serge Rider 0bf769a662 dbeaver/pro#2787 Adapters annotations and interface 2025-12-31 10:59:38 +01:00
dbeaver-devops 0349bcee4c dbeaver/pro#7916 Bump version 25.3.3 2025-12-29 19:42:03 +01:00
44b89296d2 dbeaver/pro#7798 [CB] Fix: menu after migration to new (#4008)
* dbeaver/pro#7798 fix: remove unwanted wrapper and relevant CSS module

* dbeaver/pro#7798 feat: add refresh action to user administration tools menu

* dbeaver/pro#7798 fix: add loader to context menu rendering

The menu was failing to open on first click due to lazy-loaded custom items (ContextMenuSearchItem) suspending the entire top navigation bar on initial load, causing portal recreation and loss of open state. Wrapped menu items in a local Loader to ensure lazy components load within the popover without affecting the parent component.

* dbeaver/pro#7798 fix: use suspense for each renderMenuItem

* dbeaver/pro#7798 refactor: simplify orderItems method in CreateUserBootstrap

* dbeaver/pro#7798 fix: fix menuBarItem styles

* dbeaver/pro#7798 refactor: update CreateUserBootstrap to include AdministrationScreenService

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-29 18:38:06 +01:00
Sychev AndreyandDaria Marutkina b75d802883 dbeaver/pro#4612 feat: remove closeOnBlur option from autocompletion configuration (#4014)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-29 17:03:46 +01:00
9652520073 dbeaver/pro#7090 move auth island, show desc as placeholder (#4012)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-29 17:03:33 +01:00
AinurandEvgenia 7e7d6634de dbeaver/pro#7157 save origin in web session (#3976)
* dbeaver/pro#7157 save origin in web session

* dbeaver/pro#7157 rename origin and add event object

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-29 14:00:26 +01:00
c12561965f dbeaver/pro#7481 ability to read/write to an external fs (#4007)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-12-29 13:50:10 +01:00
Dmitrii BarnukovandDaria Marutkina 7a12ad4b91 dbeaver/pro#7693 added key attributes row id check (#4019)
* dbeaver/pro#7693 added key attributes row id check

* dbeaver/pro#7693 added fix for single row tables

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-29 12:35:47 +01:00
serge-rider c39de17df8 dbeaver/pro#7906 App initialization error handle 2025-12-29 10:29:59 +01:00
serge-rider 147edde923 dbeaver/pro#7850 Remove cloud config parametrization 2025-12-28 17:05:39 +01:00
serge-rider aeaa864f57 dbeaver/pro#7850 Logging fix 2025-12-28 16:35:00 +01:00
serge-rider bcda3e4312 dbeaver/pro#7253 Remove redundant code + comments. 2025-12-27 06:13:42 +01:00
serge-rider 72a007ceb6 dbeaver/pro#7900 Logging config added 2025-12-26 18:00:36 +01:00
serge-rider e08ba6845e dbeaver/pro#7900 Redundant logging removed 2025-12-26 17:34:21 +01:00
Georgii 8f1fc1f36e dbeaver/pro#7900 fix unit test run (#4021)
Signed-off-by: Georgii Gvinepadze <fireshowel@gmail.com>
2025-12-26 17:24:21 +01:00
b5cfcaef31 dbeaver/pro#7253 save nav settings as specific to user (#3949)
* dbeaver/pro#7253 save nav settings as specific to user

* dbeaver/pro#7253 delete all project settings fix

* dbeaver/pro#7253 fixes after review and add api for getting object settings

* dbeaver/pro#7253 delete object info from db and change logic of loading settings

* dbeaver/pro#7253 fixes after review

* dbeaver/pro#7253 serialize/deserialize nav settings in common place

* dbeaver/pro#7253 fix updating schema for postgres

* dbeaver/pro#7253 add oracle migration

* dbeaver/pro#7253 fix oracle migration

* dbeaver/pro#7253 fix getting object settings for anonymous user

* dbeaver/pro#7253 fix applying config for anonymous user

* dbeaver/pro#7253 add events to handle connection view update

* dbeaver/pro#7253 update schema and change user navigator settings logic

* dbeaver/pro#7253 setSettings fixes. Remove redundant json serialization. Use string->string map everywhere. Delete datasource settings handler.

* dbeaver/pro#7253 Simplify model. Add object type as parameter.

* dbeaver/pro#7253 Remove copy-paste in project settings impl.

* dbeaver/pro#7253 Remove copy-paste in project settings impl.

* dbeaver/pro#7253 Navigator settings API and update fixes

* dbeaver/pro#7253 Navigator settings save/clear redesign (keep in separate options)

* dbeaver/pro#7253 User settings test. Test refactoring.

* dbeaver/pro#7253 setUserSettings API and test

* dbeaver/pro#7253 setUserSettings API and test

* dbeaver/pro#7253 setUserSettings API and test

* dbeaver/pro#7253 Fix drivers Maven config

* dbeaver/pro#7253 Schema update

* dbeaver/pro#7894 API comments

* dbeaver/pro#7862 Object setting cleanup fix (do it on DS level)

* dbeaver/pro#7862 REST API fixes

* dbeaver/pro#7253 Fix REST parameters encoding + annotations

---------

Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: serge-rider <serge@dbeaver.com>
Co-authored-by: Daria Markaryan <43252954+DariaMarkaryan@users.noreply.github.com>
2025-12-26 17:17:22 +01:00
Ruslan Musaev e9b1079f85 dbeaver/cloudbeaver#3998 ldap transitive group matching (#4015) 2025-12-25 16:18:41 +00:00
Georgii 326514f914 dbeaver/pro#6739 remove classifier (#4018)
Signed-off-by: Georgii Gvinepadze <fireshowel@gmail.com>
2025-12-25 14:27:48 +04:00
Viktor Kirst 67489a03b3 dbeaver/pro#7865 Do not extend web sessions on long-poll GET requests (#4010) 2025-12-25 09:38:15 +00:00
GeorgiiandMatvey16 4ea0baf79b dbeaver/pro#6739 update clickhouse to version 0.9.5 (#3999)
Signed-off-by: Georgii Gvinepadze <fireshowel@gmail.com>
Co-authored-by: Matvey16 <82543000+Matvey16@users.noreply.github.com>
2025-12-25 07:12:39 +01:00
Sychev Andreyandsergeyteleshev 939f4d046a dbeaver/pro#7564 feat: Add "File Tree Selection" to the Tree component (#3974)
* dbeaver/pro#7564 feat: add selectChildren option to tree selection API

* dbeaver/pro#7564 feat: add node multi selection API to the new tree component

* dbeaver/pro#7564 feat: add new selection type

* dbeaver/pro#7564 refactor: remove getSelectedNodes method from tree selection interfaces

* dbeaver/pro#7564 fix: update selection clearing logic in useTreeClickSelection to avoid multiple callback calls

* dbeaver/pro#7564 refactor: optimize node collection in collectVisibleNodes function

* dbeaver/pro#7564 refactor: simplify selection handling logic in Node component

* dbeaver/pro#7564 refactor: streamline selection state handling in useTreeClickSelection

* dbeaver/pro#7564 refactor: replace inline default selection state with constant

* dbeaver/pro#7564 refactor: replace default node selection constant with a function

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-12-24 14:19:50 +01:00
cd3cc2e92f dbeaver/pro#7667 feat: add tree toolbar functionality to new tree (#3981)
* dbeaver/pro#7667 feat: add tree toolbar functionality to new tree

* dbeaver/pro#7667 refactor: remove unused ITreeSelection import and selection property from ITreeToolbar

* dbeaver/pro#7667 refactor: remove autoFocus from Filter component

* dbeaver/pro#7667 refactor: move onClick handler from Icon to IconButton

* dbeaver/pro#7667 refactor: add className prop to TreeToolbarMenu component

* dbeaver/pro#7667 feat: implement new navigation tree toolbar using composition and data context

* dbeaver/pro#7667 feat: update toolbar menu localization files

* dbeaver/pro#7667 refactor: navigation tree components to use lazy loading and improve type definitions

* dbeaver/pro#7667 refactor: restructure Tree component removing extra wrapper

* dbeaver/pro#7667 refactor: update treeToolbarActionHandler to use async/await for refresh actions

* dbeaver/pro#7667 refactor: remove undefined type from data context creation

* dbeaver/pro#7667 fix: restructure Tree component to fix Toolbar with scroll

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-24 14:04:07 +01:00
7a8c4a141f [CB] Ability to pin column in the Data Editor (#3794)
* dbeaver/pro#6859 adds pin/unpin methods for data grid

* resets state when pins + makes pin icon stay when pinned

* adds TableHeaderCellIcon component with new Menu

* make actions alive

* cleanup

* moves pin logic into data-viewer

* cleanup

* restructures pin logic via contexts

* cleanup

* synchronizes column ids with view ids so pining works fine

* fixes actions visibility

* fix: correct layout on editing frozen cell

* fixes layout so frozen cell box-shadow can divide pinned and unpinned columns

* fixes border and box shadow interactions for frozen and editing cell

* makes pinned columns non transparent

* makes frozen border 3px and reverts previous style changes

* styles cleanup

* adds column true and visual indexes and reuses it across the data grid features

* cleanup

* reverts removed code

* reverts hacks with ids

* dbeaver/pro#7748 updates yarn.locks

* fixes incorrect types

* updates helper libs

* updates vitest + fixes test cases incorrect mocks

* runs tests sequentially with document and windows objects to prevent mock collisions

* Revert "runs tests sequentially with document and windows objects to prevent mock collisions"

This reverts commit f871837df3.

* skips download test

* removes export from resetDeprecatedSettings

* updates react-data-grid to beta-59 and react to 19.2

* updates storybook

* pr fixes

* updates yarn lock

* removes skip for download test

* cleanups download ts with empty body html

* updates vitest for core-connections

* updates yarn.lock

* linter fix + mocks once

* fixes hotkeys

* reverts version of react-hotkeys-hook library

* pr fixes

* code style fix

* dbeaver/pro#6859 adds selectCellByKey for opening editor

* reverts styles

* adds pin/unpin icons

* Revert "reverts styles"

This reverts commit 7857ef672d.

* on add actions sets correct focus

* removes incorrect positioning when editing pinned column

* tunes dark theme colors

* adds DnD to pin/unpin feature

* pr fixes

* fixes multiple selections for pinned & unpinned columns

* refactors multiple selections for pinned & unpinned columns so it uses data-grid api of getting sorted columns

* moves pin logic to usePinnedColumns hook

* moves color styles into data grid

* fixes letter

* adds styles for pinned border only for data editor

* adds unpin all columns action

* moves pinned logic to grid view action to save pinned state between tabs

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
2025-12-24 13:44:02 +01:00
5db7a0de5e [CB] Setting to show spaces and line breaks in the SQL Editor (#3997)
* dbeaver/pro#7570 adds highlight for text spaces and new line

* refactors + changes colors

* allows to add props to extensions

* pointer events none for new line

* do not show enter symbol if line has no whitespaces below this line

* removes highlightTrailingWhitespace so the red background disappears

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
2025-12-24 13:09:02 +01:00
Ivan GagarkinandIvan Gagarkin 15c61239ec dbeaver/pro#7572 Refactor WebSession attribute handling to use ThrowableConsumer and ThrowableFunction (#4004)
Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
2025-12-24 10:50:48 +01:00
alexandmr-anton-t 164d155e7d dbeaver/pro#7868 increase table font size (#4011)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-23 19:34:54 +01:00
821c9c8e56 [CB] Always preload specific icons for application (#3984)
* dbeaver/pro#6985 preloads icons

* simplifies the structure

* dbeaver/pro#6985 adds icons to preload

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2025-12-23 16:47:16 +01:00
Ruslan Musaev b58e01794d dbeaver/pro#7688 Add missing fields description graphql (#4001)
* dbeaver/pro#7688 Add missing fields description graphql
2025-12-23 10:20:11 +01:00
sergeyteleshev fbc5f2d3ce dbeaver/pro#7848 removes storybook high CVE (#4005) 2025-12-22 19:51:14 +01:00
ae9e87950a dbeaver/pro#7809 use popover to show auth methods (#3995)
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-22 19:47:22 +01:00
Anastasiya 58db928e34 dbeaver/pro#7812 Add CloudBeaver CE release notes 25.3.1; add alt attribute for logo (#4006) 2025-12-22 16:22:53 +03:00
Serge Riderandkseniaguzeeva 583519d9a7 dbeaver/pro#7797 Product deployment model (#3988)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-12-22 09:49:18 +01:00
Ruslan Musaev a96862a444 dbeaver/pro#7073 add grouping endpoint grahpql (#3960)
* dbeaver/pro#7073 add grouping endpoint grahpql

* dbeaver/pro#7073 add grouping endpoint grahpql

* dbeaver/pro#7073 add isInteractive var

* dbeaver/pro#7073 added working test

* dbeaver/pro#7073 fix test
2025-12-19 14:37:22 +01:00
Viktor Kirst b9d115ec33 Dbeaver/pro#7777 polling error http 400 (#3983)
* dbeaver/pro#7777 Handle expired access token in long-polling servlet

* dbeaver/pro#7777 Touch web session on long-poll activity

* dbeaver/pro#7804 Support cb_session_id cookie for HTTP long-polling sessions

* dbeaver/pro#7804 Refactor LP session resolvers and unify WebHttpRequestInfo creation

* dbeaver/pro#7777 Use token-expired HTTP status for LP auth failures

* dbeaver/pro#7777 Use SMException for session resolution errors and token expiration

* dbeaver/pro#7777 Remove unused constant
2025-12-19 13:51:24 +01:00
sergeyteleshevandmr-anton-t 78daa21c87 [CB] update frontend deps (#3973)
* dbeaver/pro#7748 updates yarn.locks

* fixes incorrect types

* updates helper libs

* updates vitest + fixes test cases incorrect mocks

* runs tests sequentially with document and windows objects to prevent mock collisions

* Revert "runs tests sequentially with document and windows objects to prevent mock collisions"

This reverts commit f871837df3.

* skips download test

* removes export from resetDeprecatedSettings

* updates react-data-grid to beta-59 and react to 19.2

* updates storybook

* pr fixes

* updates yarn lock

* removes skip for download test

* cleanups download ts with empty body html

* updates vitest for core-connections

* updates yarn.lock

* linter fix + mocks once

* fixes hotkeys

* reverts version of react-hotkeys-hook library

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-18 12:49:11 +01:00
Sychev AndreyandDaria Marutkina 50090a3035 dbeaver/pro#7810 fix: improve submenu visibility handling for lazy-lo… (#3993)
* dbeaver/pro#7810 fix: improve submenu visibility handling for lazy-loaded items

* dbeaver/pro#7810 fix: return back isDisabled for handler

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-18 10:59:40 +01:00
Sychev Andrey fc9b1d388f dbeaver/pro#7811 feat: fix file selection for uploads by removing focus and visibility listeners (#3992) 2025-12-17 16:51:25 +01:00
dbeaver-devops 0c053efd68 automerged by dbeaver-devops 2025-12-16 20:01:35 +01:00
abf07b8c5b dbeaver/pro#7189 add event for query params (#3866)
* dbeaver/pro#7189 add event for query params

* dbeaver/pro#7189 add event objects to graphql

* dbeaver/pro#7189 cancel future fix

* feat: query parameters

* dbeaver/pro#7389 fix: save confirmation

* dbeaver/pro#7189 extract base model from parameters provider

* dbeaver/pro#7189 move client events to cloudbeaver

* fix: do not ask previous params not presented in request

* dbeaver/pro#7189 resolve conflicts

* chore: change form UI

* fix: reset query parameters in SQL Editor

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-16 19:30:49 +01:00
Ruslan MusaevandDaria Marutkina c119c93a7d Dbeaver/pro#6123 add unauthorize audit loging (#3977)
* dbeaver/pro#6123 remove reset user state

* dbeaver/pro#6123 remove reset user state on auth

* dbeaver/pro#6123 remove reset user state on auth

* dbeaver/pro#6123 fix last remote addr

* dbeaver/pro#6123 fix last remote addr

* dbeaver/pro#6123 fix last remote addr

* dbeaver/pro#6123 revert taking ip from header

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-16 15:20:12 +01:00
c2045091d0 dbeaver/pro#7610 add polyfils (#3978)
* dbeaver/pro#7610 add polyfils

* dbeaver/pro#7610 sync browserlist config

* dbeaver/pro#7610 specify only major version

* dbeaver/pro#7610 change to fixed year

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-12-16 14:54:58 +01:00
alex 9483df70ac dbeaver/pro#7801 convert to boolean (#3986) 2025-12-16 14:49:12 +01:00
AinurandDaria Marutkina d774540803 dbeaver/pro#7743 update lz4 to 1.10.1 (#3962)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-16 12:27:25 +01:00
Serge Rider 736442be35 dbeaver/pro#7796 Annotations 2025-12-13 15:19:45 +01:00
serge-rider 8ee58e0ce8 dbeaver/pro#7796 Trace logging and fixes 2025-12-13 07:37:06 +01:00
serge-rider 163b96bcae dbeaver/pro#7796 Trace logging and fixes 2025-12-13 07:33:07 +01:00
Alexander SkoblikovandMashaKorax 6c915eedc3 dbeaver/pro#7778 ignore splash/nosplash options (#3980)
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-12-13 06:09:01 +01:00
b9d55bc121 dbeaver/pro#4503 migrate admin tables to data grid (#3942)
* dbeaver/pro#4503 migrate admin tables to data grid

* dbeaver/pro#4503 migrate users and teams pages

* dbeaver/pro#4503 add additional deps

* dbeaver/pro#4503 dont mutate original constant

* dbeaver/pro#4503 simplify conditional column adding

* dbeaver/pro#4503 unify styles

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
2025-12-13 10:50:25 +08:00
Alexey Potsetsuevandsergeyteleshev cb23fda311 dbeaver/pro#7465 refactor: migrate context menu to ariakit (#3963)
* dbeaver/pro#7465 refactor: migrate context menu to ariakit

* refactor: remove unused modal prop from ContextMenu and clean up schema name handling

* chore: add memoization to the base context menu components

* fix: menu issues

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-12-13 10:44:15 +08:00
Viktor Kirst dc97f315ab dbeaver/pro#7767 Add cookie-based session support (#3975) 2025-12-12 11:13:00 +00:00
sergeyteleshev 5d2c6dc062 [CB] write unit tests (#3928)
* dbeaver/pro#7563 adds unit tests for core-utils

* removes restore all mocks

* adds eslint rules: now arrow function + no unnamed functions (to improve debug experience)

* fixes test according new eslint rules

* removes arrow function expression eslint

* adds Icon Or Image unit tests

* removes problematic test

* useSMock & sMock + reuses these mocks

* adds StaticImage tests

* adds UploadArea tests

* adds tests for useAdministrationSettings

* un-skips useCombinedHandler

* tries to fix useObjectRef via correct mocking (failed github action)

* adds useErrorDetails tests

* rewrites useObjectRef tests so it works stable

* unskips app-init & getTextFileReadingProcess

* adds useFuzzySearch tests

* adds useSearch tests

* pr fixes after copilot review

* self review fixes

* pr fixes

* introduces user events

* uses get by role id to check accessibility of the components

* fixes redefined focus in body

* removes mocks

* removes mocks 2

* removes mocks 3

* removes repeated test cases
2025-12-12 18:55:50 +08:00
Alexey Potsetsuevandmr-anton-t 435aac2860 dbeaver/pro#6962 refactor: replace complex loader with-simple solution (#3968)
* dbeaver/pro#6962 refactor: replace complex loader with-simple solution

* refactor: simplify function declarations in createLazyLoader

* fix: ensure notify is called after loading state updates in createLazyLoader

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-12 17:54:19 +08:00
sergeyteleshevandmr-anton-t e0cdf745ad [CB] Improve description for ordering icon (#3958)
* dbeaver/pro#7554 adds translation for order button

* moves translate context to render app level + adds 2 translations for the sorting with the flag

* cleanup

* linter fix

* pr fixes

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-12 17:53:45 +08:00
5e11a1d0b1 dbeaver/pro#6987 replace regex with js (#3954)
* dbeaver/pro#6987 replace regex with js

* dbeaver/pro#6987 update lock file

* dbeaver/pro#6987 add additional deps for testing

* dbeaver/pro#6987 use first index

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-11 22:36:43 +08:00
sergeyteleshevandmr-anton-t 83125bf8b5 [CB] Use only 1 Input component across the app (#3938)
* dbeaver/pro#7041 replaces uikit input with core-blocks InputField for PropertyItem (connection driver properties)

* uses Input from ui-kit for react-data-grid from common-react

* separates Input and InputField logic so we can reuse Input somewhere else

* uses input from core-blocks in search panel

* uses input from core-blocks inside fetch size action

* removes hover styles if input is focused

* adds Input to inline editor

* removes style registries

* replaces module styles with css layers api

* cleanup

* calcs padding from spacing

* reverts input field base

* reverts input fields base 2

* fixes styles for inline editor and fetch size action

* fixes outline for inputs

* fixes hover styles for combobox so it matches input hover behavior

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-11 18:23:04 +08:00
3b435459a2 dbeaver/pro#6545 allow to save anonym preferences (#3948)
* dbeaver/pro#6545 allow to save anonym preferences

* dbeaver/pro#6545 remove validation for updating user preferences

* dbeaver/pro#6545 fix returning anonymous user info

* dbeaver/pro#6545 add field to gql

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-11 18:22:41 +08:00
Ruslan MusaevandDaria Marutkina 5dad35b73d dbeaver/pro#7607 fix Firefox gql console (#3969)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-11 10:31:46 +01:00
AinurandDaria Marutkina e801f85e7c dbeaver/pro#7636 add and fix tests (#3940)
* dbeaver/pro#7636 add and fix tests

* dbeaver/pro#7636 fixes after review

* dbeaver/pro#7636 fix locale name

* dbeaver/pro#7636 fixes after review

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-11 10:31:14 +01:00
alexandDaria Marutkina a39af0fd1b dbeaver/pro#7527 persist right panel tabs (#3951)
* dbeaver/pro#7527 persist right panel tabs

* dbeaver/pro#7527 fix typo

* dbeaver/pro#7527 set open context right before opening panel

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-10 17:13:57 +08:00
sergeyteleshevandDaria Marutkina 9ec227ddb1 dbeaver/pro#6407 fixes error during sorting (#3967)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-10 17:13:18 +08:00
Ruslan MusaevandEvgenia 749c116743 dbeaver/pro#6612 ldap group mapping full dn (#3966)
* dbeaver/pro#6612 ldap group mapping full dn

* dbeaver/pro#6612 ldap group mapping full dn

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-09 14:10:36 +01:00
Ruslan MusaevandDaria Marutkina d6221e3d33 dbeaver/pro#7295 do not use GSON for connection creds serialization (#3937)
* dbeaver/pro#7295 do not use GSON for connection creds serialization

* dbeaver/pro#7295 do not use GSON for connection creds serialization

* dbeaver/pro#7295 do not use GSON for connection creds serialization

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-09 11:51:02 +01:00
sergeyteleshevandDaria Marutkina 6316ab0cbb [CB] Error updating metadata (#3953)
* dbeaver/pro#6480 checks if nodes parents loaded to verify if some entities are missing

* fixes linter await issues

* uses offset pagination key to check if all parents were loaded

* adds isNodeLoadedInAnyPage logic

* reverts all changes

* adds hasMorePagesForRootNode logic

* linter fix

* checks if parent has more data for each closest parent (not just a root one) + renames helper

* renames helper to sound shorter

* build fix

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-12-09 15:49:52 +08:00
sergeyteleshevandmr-anton-t e2e18e01e9 [CB] Migrate Clickable (reakit) to the Command (ariakit) (#3941)
* dbeaver/pro#7238 adds replaces Reakit Clickable element with AriaKit Command

* uses focusable ariakit element instead of command

* cleanup

* Revert "cleanup"

This reverts commit 84ef074242.

* Revert "uses focusable ariakit element instead of command"

This reverts commit ab255989b9.

* handles tree node expand click events + removes unused styles

* removes reakit-system dep

* fixes ref for formatting rule

* cleans storybook

* clickable cleanup

* replaces Clickable component with Command from ui-kit

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-12-09 15:49:24 +08:00
Ainur d042a18d46 dbeaver/pro#7615 do not load project settings fix (#3936) 2025-12-08 16:53:38 +01:00
alexandEvgenia 88d7a8d6eb dbeaver/pro#7662 adjust markdown styles (#3947)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-08 22:58:42 +08:00
Ruslan MusaevandEvgenia 33bf82970f dbeaver/cloudbeaver#3484 ldap rbac (#3959)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-07 16:47:55 +01:00
AinurandEvgenia ea552d613b dbeaver/pro#7704 update lz4 to 1.8.1 (#3956)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-12-05 12:35:04 +01:00
Serge Rider 0ae6a648d8 dbeaver/pro#7703 Annotations and code style (#3955)
* dbeaver/pro#7703 Annotations and code style

* dbeaver/pro#7703 Annotations and code style

* dbeaver/pro#7703 Remove redundant feature s config
2025-12-05 07:19:16 +01:00
Alexander Skoblikov a674e11960 dbeaver/pro#7352 remove cli dependency from model bundles (#3945) 2025-12-04 14:46:34 +01:00
Viktor Kirst d1065037b9 Dbeaver/pro#7442 http long polling fallback for ws event (#3900)
* dbeaver/pro#7442 Add Long-Polling transport support for event manager

* dbeaver/pro#7442 Inline headless-session creation in LongPolling servlet

* dbeaver/pro#7442 Improve long-poll session resolution and add unit tests

* dbeaver/pro#7442 Expose resolveSession for testing and remove reflection in tests

* dbeaver/pro#7442 Add copyright

* dbeaver/pro#7442 Improve long-poll CORS and interrupt handling
2025-12-04 12:08:21 +01:00
serge-rider dd3ab9d5a1 dbeaver/pro#6200 Fix GQL parameters logging 2025-12-04 09:04:40 +01:00
serge-rider 7b94dc60ab dbeaver/pro#7644 Auth model replace detect. GCP localization. 2025-12-04 08:50:20 +01:00
serge-rider 25089a9a70 dbeaver/pro#4996 Remove redundant logging 2025-12-04 08:36:41 +01:00
Serge Rider d645365869 dbeaver/pro#7644 Auth model replace detect. GCP localization. (#3950) 2025-12-04 08:25:14 +01:00
Solovev Anton eb4f11aa0a dbeaver/pro#7632: fix drop message creation (#3939) 2025-12-02 15:24:36 +01:00
Daria Marutkina ec3ba12699 dbeaver/pro#7593 Update README file (#3946)
* dbeaver/pro#7593 Update README file
2025-12-01 11:46:51 +01:00
Ainur a75a7ea5a4 dbeaver/pro#7648 global permission validation fix (#3943) 2025-11-28 16:14:33 +00:00
Sychev Andreyandmr-anton-t 3ca904924b dbeaver/pro#7106 refactor: replace ScriptImportDialog with Confirmati… (#3930)
* dbeaver/pro#7106 refactor: replace ScriptImportDialog with ConfirmationDialog

* dbeaver/pro#7106 feat: enable extra action in confirmation dialog for unsaved changes

* dbeaver/pro#7106 fix: properly handles extra action (no download)

* dbeaver/pro#7106 refactor: simplify import dialog

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-28 19:15:37 +08:00
ShadelessFox 46a0adb682 dbeaver/pro#7221 Change API (#3935) 2025-11-25 14:05:00 +00:00
dbeaver-devops b9b4dc040c automerged by dbeaver-devops 2025-11-24 20:50:25 +01:00
Sychev Andrey 5973bd708f dbeaver/pro#7567 [CB] [F] invalid style for dropdown button (#3932)
* dbeaver/pro#7567 fix: update disabled state styles for select and combobox components

* dbeaver/pro#7567 fix: update foreground variable for disclosure component
2025-11-24 17:58:37 +01:00
698ee3cba1 dbeaver/pro#7556 hide show sql button for editor and viewer (#3929)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-11-21 18:21:20 +01:00
9394667673 dbeaver/pro#7413 [CB] New Disclosure Component (#3927)
* dbeaver/pro#7413 feat: add Disclosure component to UI Kit

* dbeaver/pro#7413 feat: implement new disclosure component in CB with proper outline support and animations

* dbeaver/pro#7413 style: update disclosure gap to use tw spacing

* dbeaver/pro#7413 refactor: add Disclosure component story to Storybook (remove from ladle)

* dbeaver/pro#7413 refactor: update class names for disclosure components in Expandable

* dbeaver/pro#7413 feat: disable transitions for reduced motion preference

* dbeaver/pro#7413 refactor: convert arrow function to named function in Expandable component

* dbeaver/pro#7413 refactor: simplify media query for reduced motion transitions

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-11-21 18:16:31 +01:00
AinurandEvgenia 37877ccf66 dbeaver/pro#5020 fix counting rows filtered data (#3923)
* dbeaver/pro#5020 fix counting rows filtered data

* dbeaver/pro#5020 fix progress monitor

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-21 18:10:27 +01:00
Sychev Andreyandmr-anton-t dc28d68208 #6724 Accessibility improvements (#3877)
* dbeaver/pro#6724 feat: add authentication model label to connection form

* dbeaver/pro#6724 refactor: change interface in StaticImage component to pass native props to provide a11y properties

* dbeaver/pro#6724 fix: add role attribute for icons in Driver selector

Those driver icons are not adding any meaning to the list items, so we can easily hide them from a11y tools.

* dbeaver/pro#6724 refactor: rename autofillToken to autocompleteSectionName and update related logic in forms

We used to have autocomplete parameters that do not meet specifications of HTML Input Autocomplete attribute.
We can't use any string there, there are list of tokens that browsers support: https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill plus two global states: "on" and "off".

Logic was refactored to use section token + username or current password tokens fo form where we provide auth details.
All other inputs use just general "on" state to let browsers decide how to fill this field, except cases where we disable password autocompletion.

also fixes a typo

* dbeaver/pro#6724 fix: don't turn on autocomplete if disabled

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-21 23:53:53 +08:00
b55398a969 dbeaver/pro#7320 inject mixins (#3901)
Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-11-21 13:22:13 +01:00
Ainur 6584a2252e dbeaver/pro#7553 remove redundant gql type param (#3925) 2025-11-21 12:15:21 +01:00
Alexey PotsetsuevandDaria Marutkina 411def42f9 dbeaver/pro#5083 feat: script status message (#3914)
* dbeaver/pro#5083 feat: script status message

* chore: use `TLocalizationToken`

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-21 16:58:47 +08:00
8b471138db [CB] Fix high CVE-2025-64756 on glob (#3913)
* dbeaver/pro#7520 updates glob lib to reduce high vulnerability

* sets version ^11.1

* uses yarn depute

* moves resolution to the webapp

* moves glob to dev deps

* reverts glob for devDeps

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-21 16:58:18 +08:00
Sychev Andreyandmr-anton-t e2a5e1fca2 dbeaver/pro#6416 refactor: adjust height property for treeNodeNested (#3891)
* dbeaver/pro#6416 refactor: adjust height property for treeNodeNested

* dbeaver/pro#6416 refactor: remove height styles for TreeNodeNested and refactor empty placeholder rendering in NodeChildren

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-21 16:53:23 +08:00
alexandDaria Marutkina 9c2bc100b1 dbeaver/pro#4893 add ability to reselect file (#3924)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-21 16:52:52 +08:00
sergeyteleshevandDaria Marutkina 8b08927af8 [CB] Context menu corrupted on Windows + remove delete shortcut (#3912)
* dbeaver/pro#7024 fixes corrupted layout + removes delete shortcut from erase action

* removes delete binding for "remove column filter" + adds translations

* adds quotes for columns

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-21 16:51:57 +08:00
7ea627a24f dbeaver/pro#7547 do not refresh user state on server config save (#3922)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-11-21 09:24:22 +01:00
Ruslan MusaevandEvgenia dc5f86c40c Dbeaver/pro#7192 ldap case insensitivity (#3907)
* dbeaver/pro#7192 ldap case insensitivity

* dbeaver/pro#7192 ldap case-insensitive matching

* dbeaver/pro#7192 case insensitive from auth descriptor

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-21 09:23:28 +01:00
24b7b6021d Add reorder option to tabs #4583 (#3872)
* dbeaver/pro#4583 feat: add tab reordering functionality in NavigationTabsService

* dbeaver/pro#4583 feat: update tab filtering to support tabs order

* dbeaver/pro#4583 feat: add tab drag-and-drop functionality and associated tests

* dbeaver/pro#4583 feat: implement tab drag-and-drop functionality

* dbeaver/pro#4583 fix: adjust tab reordering logic to handle dragged tab position correctly

since our reordering logic is duplicating in two components and, moreover, I found a bug in one of the implementations, I decided to put all the common logic to a dedicated helper with test coverage to be sure we use the right logic everywhere.

* dbeaver/pro#4583 test: remove redundant tests for onReorder in useTabDragAndDrop

* dbeaver/pro#4583 refactor: update reorderTab method to remove return value

* dbeaver/pro#4583 feat: add tab reordering functionality to SqlResultTabs component

* dbeaver/pro#4583 feat: add tabs order persistence via useUserData hook

* dbeaver/pro#4583 feat: integrate react-dnd for tab drag-and-drop functionality

* dbeaver/pro#4583 chore: update deps

* dbeaver/pro#4583 feat: integrate @dbeaver/js-helpers for array reordering in useHeaderDnD

* dbeaver/pro#4583 refactor: simplify reorderArray implementation by extracting some logic to helpers

* dbeaver/pro#4583 refactor: extracted tab reordering to a separate hook

- moved the tab order persistence logic into a new useTabOrderPersistence hook to make the flow is more obvious (we use this default persistence only with tabs container)
- introduced new reorderStateKey tab state to have an identifier for a tab panel, use it in canDrop check to prevent cross-panel DnD
-replaced reorderable prop with reorderStateKey, because without a key you can't use reordering

* dbeaver/pro#4583 refactor: add dropAllowed state to useTabDragAndDrop for improved drag-and-drop UI

* dbeaver/pro#4583 chore: add a comment about reorderStateKey

* dbeaver/pro#4583 refactor: add safe guard in SqlResultTabs.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* dbeaver/pro#4583 refactor: wrap onReorder function into useCallback for improved performance

* dbeaver/pro#4583 refactor: remove applyOrder method from ITabsContainer and update useTabOrderPersistence to not have dependencies on container

* dbeaver/pro#4583 refactor: use refactored hook in SideBarPanel and ToolsPanel

Since we are not mutating a container state anymore, we have to update sorting separately in TabList level because it reads directly from the container.

* dbeaver/pro#4583 refactor: remove fallback for stateKey

* dbeaver/pro#4583 refactor: replace hardcoded values with constants in useTabDragAndDrop

* dbeaver/pro#4583 refactor: add DragPosition type

* dbeaver/pro#4583 refactor: remove dependencies in TabsState effect

* dbeaver/pro#4583 refactor: remove stateKey from useTab hook

* dbeaver/pro#4583 feat: add panelId prop to SideBarPanel and use as persistence key

* dbeaver/pro#4583 refactor: persistence key in useTabOrderPersistence

* dbeaver/pro#4583 feat: add reorderArrayWithOrder helper and update SqlResultTabs to use it

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-20 19:25:04 +08:00
Sychev Andrey 2f64827ad4 dbeaver/pro#7549 refactor: adjust padding and color for disabled sele… (#3921)
* dbeaver/pro#7549 refactor: adjust padding and color for disabled select state to unify view between disabled controls

unify icon view as well

* dbeaver/pro#7549 style: fix if clause
2025-11-20 17:46:42 +08:00
Alexey PotsetsuevandEvgenia e443a88ae7 dbeaver/pro#5818 fix: error message (#3920)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-20 15:43:49 +08:00
Alexey PotsetsuevandEvgenia f46857fe6d dbeaver/pro#6188 fix: loader styles (#3918)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-20 15:42:45 +08:00
alexandEvgenia 11f8568238 dbeaver/pro#5581 use new method to check if user is presenter (#3917)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-20 15:42:09 +08:00
alexandEvgenia b81c7732d1 dbeaver/pro#7282 show alert for admin team in connection tab (#3911)
* dbeaver/pro#7282 show alert for admin team in connection tab

* dbeaver/pro#7282 use team part to get permissions

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-20 15:41:37 +08:00
3592e77851 dbeaver/pro#7171 fixes incorrect padding for comboboxes (#3887)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-20 15:40:56 +08:00
4b0e8b5e91 dbeaver/pro#7514 fix: sql query segment end inclusion (#3909)
* dbeaver/pro#7514 fix: sql query segment end inclusion

* fix: query execution in new tab

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-19 15:55:50 +01:00
Alexander SkoblikovandMashaKorax 802a3e69fe dbeaver/dbeaver#39682 fix -help command (#3915)
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-11-19 13:40:15 +01:00
Ruslan MusaevandEvgenia d409aad739 dbeaver/pro#7473 fix ldap port saving (#3910)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-19 12:44:51 +01:00
Sychev Andrey 9b01659a6f dbeaver/pro#7544 chore: replace deprecated VSCode intelliCode extension with GitHub Copilot Chat (#3919) 2025-11-19 18:46:37 +08:00
sergeyteleshevandEvgenia 354f13d0d4 [CB] put new user to top after creation (#3903)
* dbeaver/pro#5085 sorts users alphabetically + shows new users on top

* reverts sorting for enabled and disabled users (required backend to sort properly)

* cleanup

* removes repetitive filters and sorting

* simplifies users logic + user.createdAt is number type

* refactor: sortUsersById -> compareUsers

* compare new users

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-19 16:51:19 +08:00
Sychev AndreyandEvgenia e39b1b1ee2 dbeaver/pro#5833 feat: add animation for enabling pointer events when content is in place (#3908)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-19 16:50:34 +08:00
sergeyteleshev f818fb1c85 [CB] TE too many requests navNodeInfo (connection edit) which freezes interface (#3894)
* dbeaver/pro#7480 fix: preloads only connection info by key (not all) to prevent connectioInfoResource loading of all data and all following handlers actions

* adds console error and return empty array for origin info loader

* warning instead of error
2025-11-18 19:36:40 +08:00
AinurandDaria Marutkina 6253d3e543 dbeaver/cloudbeaver#3736 filter non root empty folders fix (#3902)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-18 11:16:30 +01:00
AinurandEvgenia c7a6cc967e dbeaver/pro#7164 fix test connection without saved creds (#3906)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-18 11:15:33 +01:00
Ainur c3ac257fdd dbeaver/pro#7474 fix stack overflow on gql extended logs (#3895) 2025-11-18 11:12:18 +01:00
sergeyteleshevandDaria Marutkina c9b1278788 dbeaver/pro#7316 changes order of inputs in folder dialog (#3897)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-18 17:11:34 +08:00
alexandEvgenia 58d316f396 dbeaver/pro#5591 add padding to popup (#3883)
* dbeaver/pro#5591 add padding to popup

* dbeaver/pro#5591 sanitize input

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-18 17:10:48 +08:00
sergeyteleshevandDaria Marutkina 37e5e1865c [CB] [f] invalid dialog name when export VQB diagram (#3889)
* dbeaver/pro#7419 renames header for export image dialog

* fixes text case for eng locale

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-18 17:10:28 +08:00
alexandDaria Marutkina 8cfe6a98e5 dbeaver/pro#7382 change combobox to select (#3888)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-18 17:09:50 +08:00
Alexey PotsetsuevandDaria Marutkina 20026d1d30 dbeaver/pro#7389 fix: save confirmation (#3904)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-17 23:07:26 +08:00
Daria Marutkina 7c72232215 dbeaver/pro#7470 Update README file (#3905) 2025-11-17 12:38:09 +01:00
alexandEvgenia 64118de61c dbeaver/pro#5094 use safe property access (#3893)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-17 19:10:16 +08:00
Alexey PotsetsuevandDaria Marutkina 17331e6a8f dbeaver/pro#6595 fix: pagination cache (#3886)
dbeaver/pro#6988 fix: allow empty query in VQB
dbeaver/pro#6512 fix: remove bind session from easy config
dbeaver/pro#6734 fix: allowed server urls description

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-17 18:52:10 +08:00
dbeaver-devops 46079dea6a dbeaver/pro#7470 25.3.0 version bump (#3890) 2025-11-12 20:07:34 +01:00
Serge Rider d8f2df0564 dbeaver/pro#7455 Remove redundant errors re-throws (#3885) 2025-11-12 17:10:09 +01:00
alexandDaria Marutkina f64bc1b435 dbeaver/pro#7359 add support service (#3878)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-12 23:35:01 +08:00
754927a1ae dbeaver/pro#6363 adds settings for dangerous queries dialogs (#3858)
* dbeaver/pro#6363 adds settings for dangerous queries dialogs

* cleanup

* dbeaver/pro#6363 Added confirmation preference checks

* dbeaver/pro#6363 Added defaults

* Revert "cleanup"

This reverts commit a1e16ae5a1.

* Revert "dbeaver/pro#6363 adds settings for dangerous queries dialogs"

This reverts commit a88ca77049.

* dbeaver/pro#6363 Moved properties to config

* dbeaver/pro#6363 adds default server settings service

* refactor: split `SettingsSource` into `SettingsSource` and `EditableSettingsSource`

* dbeaver/pro#6363 message improvement

* dbeaver/pro#6363 increase timeout

* fix: edited value fallback

* dbeaver/pro#6363 fix defaults

* dbeaver/pro#6363 fix localization labels/descriptions

* fix: localization change

* fix: settings label collision

* dbeaver/pro#6363 fixed auth provider localizations

---------

Co-authored-by: Dmitrii Barnukov <dmitrii.barnukov@dbeaver.com>
Co-authored-by: Wroud <wrouds@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-11-12 16:27:19 +01:00
Dmitrii Barnukov cebbe2a89b dbeaver/cloudbeaver#3873 fix datafilter for a single filtered row (#3884) 2025-11-12 15:27:28 +01:00
alexandDaria Marutkina 8e44be20b0 dbeaver/pro#6525 add search to schema and connection lists (#3875)
* dbeaver/pro#6525 add search to schema and connection lists

* dbeaver/pro#6525 filter by real entities

* dbeaver/pro#6525 unify logic

* dbeaver/pro#6525 continue if excluded

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-11 16:58:18 +08:00
Serge Rider f37a753834 dbeaver/pro#7349 Redshift 2.2 (#3881)
* dbeaver/pro#7349 Statements close + error handling

* dbeaver/pro#7349 Use fetch workflow. It closes statement before fetchEnd call

* dbeaver/pro#7349 Code style and annotations

* dbeaver/pro#7349 Fix resultet fetch in CB
2025-11-10 18:50:04 +01:00
AinurandEvgenia 348fe0c9df dbeaver/pro#7343 add additional validation for token auth (#3876)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-10 13:37:01 +01:00
Serge Rider a62b528018 Revert "dbeaver/pro#6739 update clickhouse version (#3871)"
This reverts commit e1dc245446.
2025-11-10 09:29:49 +01:00
GeorgiiandSerge Rider e1dc245446 dbeaver/pro#6739 update clickhouse version (#3871)
Co-authored-by: Serge Rider <serge@jkiss.org>
2025-11-08 21:26:32 +01:00
AinurandEvgenia 4bbb9ccb93 dbeaver/pro#7364 update sql server driver to 13.2.1 (#3870)
* dbeaver/pro#7364 update sql server driver to 12.8.2

* dbeaver/pro#7364 update sql server driver to 13.2.1

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-07 10:20:12 +01:00
e60ea477f5 dbeaver/pro#6745 add viewer for request query (#3868)
* dbeaver/pro#6745 add viewer for request query

* dbeaver/pro#6745 remove duplicated import

* dbeaver/pro#6745 remove extra margin

* dbeaver/pro#6745 fallback to options query

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-06 22:14:35 +08:00
serge-rider 493424ce7d Merge remote-tracking branch 'origin/devel' into devel 2025-11-06 07:09:45 +01:00
serge-rider d59f06276c dbeaver/dbeaver#39381 Deps versions update 2025-11-06 07:09:03 +01:00
9593b7a6c3 dbeaver/pro#7210 feat: color palette (#3854)
* dbeaver/pro#7081 feat: conditional formatting for data editor

* feat: code cleanup after review + reworked rules management

* feat: add SVG icons for conditional formatting and update localization strings

* chore: after review

* feat: refactor conditional formatting presentation and add transition component

* refactor: reorder Props interface fields for consistency

* refactor: remove unused onAddRule prop from ColorScaleRuleForm and SingleColorRuleForm

* feat: add SVG icon for conditional formatting

* fix: charts

* feat: refactor conditional formatting utilities and improve code organization

* fix: localization

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* chore: hide conditional formatting from UI

* dbeaver/pro#7210 feat: color palette

* chore: codestyle

* chore: pr review, use `color` library for manipulating css colors

* chore: revert panel hiding

* chore: localization

* fix: use custom row renderer with mobx observer

* fix: line hightlight style

* chore: remove unused types

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-05 13:52:23 +01:00
alexandEvgenia 0955c18e38 dbeaver/pro#7237 change label (#3869)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-05 15:06:59 +08:00
Ruslan Musaev dd3f00a3a8 dbeaver/pro#7356 fix escaping special symbols for group search in LDAP (#3865) 2025-11-04 19:45:21 +01:00
Ruslan MusaevandEvgenia 22c7f0d3f2 Dbeaver/pro#6200 mask secret paramters (#3828)
* dbeaver/pro#6976 poc log masking

* dbeaver/pro#6364 mask secret params

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#6200 add masking annotation for sensitive parameters

* dbeaver/pro#7263 add log about count current users

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-11-04 19:42:36 +01:00
alexandDaria Marutkina 5997d4b1a2 dbeaver/pro#6096 add execute queries method (#3855)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-11-04 19:12:27 +08:00
cdae6efbd2 dbeaver/pro#7081 feat: conditional formatting for data editor (#3838)
* dbeaver/pro#7081 feat: conditional formatting for data editor

* feat: code cleanup after review + reworked rules management

* feat: add SVG icons for conditional formatting and update localization strings

* chore: after review

* feat: refactor conditional formatting presentation and add transition component

* refactor: reorder Props interface fields for consistency

* refactor: remove unused onAddRule prop from ColorScaleRuleForm and SingleColorRuleForm

* feat: add SVG icon for conditional formatting

* fix: charts

* feat: refactor conditional formatting utilities and improve code organization

* fix: localization

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* chore: hide conditional formatting from UI

* fix: use custom row renderer with mobx observer

* fix: line hightlight style

* chore: remove unused types

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-11-03 19:11:50 +08:00
Daria Marutkina ced66cd5e0 dbeaver/pro#7168 Update README file (#3864)
* dbeaver/pro#7168 Update README file

* Update README.md
2025-11-03 11:35:15 +01:00
dbeaver-devops 4a67c5d3ff dbeaver/pro#7303 25.2.5 version bump (#3859) 2025-10-28 19:05:31 +01:00
AinurandEvgenia 39873f20a8 dbeaver/pro#5903 add timeout job for federated auth (#3850)
* dbeaver/pro#5903 add timeout job for federated auth

* dbeaver/pro#5903 review fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-28 18:56:27 +02:00
ShadelessFoxandkseniaguzeeva c5e8d510a2 dbeaver/pro#6769 Check data and sql execution related permissions (#3847)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-10-28 17:14:54 +01:00
2a107f3d63 dbeaver/pro#6509 Query confirmations (#3793)
* dbeaver/pro#6509 Added events

* dbeaver/pro#6509 Updated/renamed new events

* chore: add taskId for server events

* dbeaver/pro#6509 Added confirmation events impl

* dbeaver/pro#6509 Added task id to server events

* feat: async task confirmation

* chore: add icon

* dbeaver/pro#6509 Renamed and moved events to model

* dbeaver/pro#6509 Treat cancel and timeout as errors

* dbeaver/pro#6509 fix timeout

* feat: automatically close confirmation dialog on timeout or task finish

* fix: confirmation dialog styles

* dbeaver/pro#6475 Added web sql messages

* fix: update button styles in ConfirmationDialog for consistency

* dbeaver/pro#6475 Added interactive events flag

* dbeaver/pro#6475 Added param description

* feat: add isInteractive parameter to asyncSqlExecuteQuery mutation and QueryDataSource

* fix: update copyright year to 2025 in LocaleService.ts

* fix: set dialog size to medium in confirmation event

* fix: update confirmation skip message for localization files

* fix: modify reject function signatures for consistency

* dbeaver/pro#6509 Added manual query rules

* dbeaver/pro#6509 Added messages for 2 distinct confirmations

* dbeaver/pro#6509 moved confirmation descriptor to model (WIP)

* dbeaver/pro#6509 improve messages

* dbeaver/pro#6509 web locale support

* fix: merge conflict

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-28 14:35:38 +01:00
a2eab0935b dbeaver/pro#5481 add GrantManagementTable component (#3841)
* dbeaver/pro#5481 add GrantManagementTable component

* dbeaver/pro#5481 fix import style

* dbeaver/pro#5481 simplify logic

* dbeaver/pro#5481 separate common select logic

* dbeaver/pro#5481 check optional prop

* dbeaver/pro#5481 migrate connection table

* dbeaver/pro#5481 use column object for key checking

* dbeaver/pro#5481 make edited color more readable

* dbeaver/pro#5481 export column type

* dbeaver/pro#5481 add sorting by grant column

* dbeaver/pro#5481 migrate connection access table

* dbeaver/pro#5481 do not show table for cloud connections

* dbeaver/pro#5481 fix bg color in dark theme for frozen columns

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-10-28 18:56:04 +08:00
Serge Rider cd78601245 dbeaver/pro#7261 Connect errors logging (#3851) 2025-10-28 10:09:51 +01:00
AinurandDaria Marutkina 4ab47583ad dbeaver/pro#7017 limit max idle time for anonymous user (#3846)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-10-27 11:38:34 +01:00
sergeyteleshevandEvgenia 37cfecbf91 [CB-5925] Charts - add export option (image) (#3819)
* dbeaver/pro#5078 adds chart export

* adds ExportImageDialog and reuses it across the app

* uses canvas2html for downloading images

* Revert "uses canvas2html for downloading images"

This reverts commit b59374cf85.

* moves transformClassesToStyles to helpers

* transforms styling attributes to computed styles

* adds file name

* fixes translations

* fixes styles for png image so it do not exports in black&white mode with incorrect sizing

* fixes styles for svg export

* uses domToImage library to save chart with legend

* cleanup

* moves helpers back to d3js diagrams

* cleanup

* uses html-to-image instead of dom-to-image

* cleanup

* pr fixes

* replaces the lib

* fixes svg so it is not blur

* validation for image urls

* cleanup

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-27 17:09:23 +08:00
046659672c dbeaver/pro#6956 redesign cli tools (#3830)
* dbeaver/pro#6956 redesign cli tools

* dbeaver/pro#6956 help per command

* dbeaver/pro#6956 refactor some commands to options

* dbeaver/pro#6982 Top level commands title fix

* dbeaver/pro#6956 fixes and more hidden options

* dbeaver/pro#6956 fix auth context

---------

Co-authored-by: serge-rider <serge@dbeaver.com>
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-10-24 18:30:41 +02:00
Ainur bf52e23793 dbeaver/pro#7022 do not throw error if team with the same name exists (#3806) 2025-10-24 13:16:03 +00:00
Ainur 4a2ce73a9c dbeaver/pro#7181 collect internal db properties on graphql call (#3845) 2025-10-24 13:09:27 +00:00
serge-rider b73b707b7f Merge remote-tracking branch 'origin/devel' into devel 2025-10-24 08:59:26 +02:00
serge-rider 57461bd8be dbeaver/pro#7259 Nullability annotations 2025-10-24 08:56:48 +02:00
Sychev AndreyandEvgenia 71bebb32dd dbeaver/pro#7218 fix: value panel don't change the value of a cell (#3848)
The problem was that In ReactCodemirror, the updateListener calls onChange whenever the document changes and it's not marked as a remote transaction, but in value panel, when we switch changes, the new value coming to the panel was considered as the user change.
So, update listener were calling onChange from TextValuePresentation which calls editAction.set() and changes the real cell value.

In order to fix it, this commit mark programmatic updates by dispatching transaction annotations together with a change.

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-24 14:48:56 +08:00
Sychev Andrey 28cade86aa dbeaver/pro#6026 feat: merge value panel tabs in one group (#3829)
* dbeaver/pro#6026 feat: merge value panel tabs in one group

move all text representations to the first tab level
specific representation is used if present (boolean, image)
auto type detection is used only for text

* dbeaver/pro#6026 refactor: remove unused CSS files for TextValuePresentation

* dbeaver/pro#6026 refactor: remove automatic state update in ValuePanel component

* dbeaver/pro#6026 refactor: update content type handling in ValuePanel

Move all the content type determination logic into the hook
Simplify the component

* dbeaver/pro#6026 refactor: consolidate content type handling in useAutoContentType hook

* dbeaver/pro#6026 fix: show scroll on tabs in value panel when overflow
2025-10-23 17:04:41 +08:00
Daria Marutkina 92186dd332 dbeaver/pro#7168 Update README file (#3842) 2025-10-20 12:16:08 +02:00
sergeyteleshev 860a9f55f2 dbeaver/pro#7183 updates happy-dom to 20.0.2 (#3835) 2025-10-17 00:42:19 +08:00
dbeaver-devops 754c8d562d dbeaver/pro#7168 25.2.4 version bump (#3827) 2025-10-14 19:26:58 +02:00
Alexey PotsetsuevandEvgenia ed0e92cdd6 dbeaver/pro#6294 fix: dnd styles (#3824)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-14 23:45:33 +08:00
Serge Rider 9267e65300 dbeaver/pro#7142 Check node children for null (#3825) 2025-10-14 13:41:53 +02:00
Sychev AndreyandDaria Marutkina 4e3ec7cbf4 dbeaver/pro#7001 feat: add combobox cancel feature (#3801)
* dbeaver/pro#7001 feat: add combobox cancel feature

* dbeaver/pro#7001 refactor: reuse handleSelect for clear action

also changed cancel button styles

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-10-14 18:38:55 +08:00
AinurandDaria Marutkina 6978ae5355 dbeaver/pro#7058 fix error log for fs request (#3818)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-10-14 09:52:56 +02:00
Ruslan MusaevandEvgenia 3986debe8f dbeaver/cloudbeaver#3484 add ldap referral handling (#3817)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-14 09:40:55 +02:00
sergeyteleshev 38cfb0a690 [CB] Fix critical vulnerability with happy-dom (#3821)
* dbeaver/pro#7132 updates deps

* Revert "dbeaver/pro#7132 updates deps"

This reverts commit 522c56660c.

* updates only happy-dom
2025-10-13 22:48:36 +08:00
682a387564 dbeaver/pro#7080 refactor: grid API (#3799)
* dbeaver/pro#7080 refactor: grid API

* chore: cleanup after review

* chore: fix grid view action dependencies

* fix: build

* fix: update null checks and improve type safety in data handling

* fix: improve cache handling in useResultTraceDetails hook

* fix: correct cache reference in useResultTraceDetails function

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-10-13 19:30:54 +08:00
AinurandDaria Marutkina de0dee29ed dbeaver/pro#7019 grant connection permissions fix (#3807)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-10-10 15:02:47 +02:00
Sychev AndreyandDaria Marutkina 3a1ae15ecb dbeaver/pro#7026 fix: update cancel action to revert only selected el… (#3805)
* dbeaver/pro#7026 fix: update cancel action to revert only selected elements

* dbeaver/pro#7026 fix: bind revert action on esc

It was a misunderstanding at first, but esc is actually a revert action, not cancel action.

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-10-09 19:30:28 +08:00
Ainurandkseniaguzeeva 8cf064e845 dbeaver/pro#4038 add additional validation for servlets (#3779)
* dbeaver/pro#4038 add additional validation for servlets

* dbeaver/pro#4038 normalize paths for validation

* dbeaver/pro#4038 add fs update permission

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-10-09 11:18:49 +02:00
Ainur ec1b455f4d dbeaver/pro#7082 use same ws connection after relogin fix (#3803) 2025-10-09 10:52:07 +02:00
Ruslan Musaev 683d85c8d6 dbeaver/pro#7089 fix migration hotfix (#3814) 2025-10-08 16:04:34 +02:00
sergeyteleshev 8066904d4d [CB] The text of the settings in the navigator tree began to appear in bold (#3812)
* dbeaver/pro#6943 fixes bold title styles for switch

* build fix
2025-10-08 21:53:45 +08:00
Alexey Potsetsuev 7ea46ea2c5 dbeaver/pro#7111 fix: doubled hot keys handler (#3804) 2025-10-08 16:07:23 +08:00
Alexander Skoblikov 8aee24cf1c dbeaver/pro#6982 sql execution in dbvr (#3802) 2025-10-07 18:21:27 +02:00
sergeyteleshevandDaria Marutkina 5d83098d38 dbeaver/pro#6947 moves secrets parameters to a separate island (#3789)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-10-06 21:20:22 +08:00
Daria Marutkina 3e855c3afd dbeaver/pro#7052 Update README file (#3800) 2025-10-06 10:29:52 +02:00
Serge Rider 9c50589586 dbeaver/pro#7054 Nullable annotations 2025-10-03 14:27:52 +02:00
Serge Riderandmr-anton-t f99c2e3ebd dbeaver/pro#7054 Check null in remote clients (#3792)
* dbeaver/pro#7054 Check null in remote clients

* dbeaver/pro#7054 Do not verify nullable params

* dbeaver/pro#7054 Fix nullable

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-10-03 14:25:43 +02:00
Serge Rider e141575785 dbeaver/pro#2787 Annotations 2025-10-03 12:09:14 +02:00
b93b85f622 dbeaver/pro#6802 Update SQL schema config file paths (#3790)
* dbeaver/pro#6802 Update SQL schema config file paths

* dbeaver/pro#6802 Fix build

* dbeaver/pro#6802 Fix build

---------

Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-10-03 11:51:02 +02:00
Serge Rider 267a753d87 Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel 2025-10-02 15:53:17 +02:00
Ruslan Musaev 6cea8cd64f dbeaver/pro#7060 fix connection read only (#3796) 2025-10-02 15:53:08 +02:00
serge-rider b630cb6791 dbeaver/pro#7052 25.2.3 version bump 2025-09-30 19:44:41 +02:00
a9fd8fb909 [CB] Migrate context menu to aria kit #6756 (#3760)
* dbeaver/pro#6756 adds Menu to ui-kit, core-blocks + uses it in connection properties form

* allows to render any items not only strings

* dbeaver/pro#6756 adds context menu (has freeze on click)

* cleanup

* reverts object menu cell usage of new menu (problems with portal - infinite rerender)

* ui fixes

* reverts context menu logic

* adds hover styles

* cleanup

* removes MenuField

* adds combobox instead of PropertyValueSelector

* adds ability to have custom value for comboboxes + uses inside driver properties

* allows to revert values in combobox

* adjusts combobox api with correctly working custom value

* cleanup

* adds documentation for the Menu

* fix: combobox and driver properties

* chore: remove unused component

* chore: cleanup styles

* chore: add value tooltip

* fix: remove default value from combobox

* fix: tooltips

* build fix

* reverts old behavior with default value for combobox

* removes button styles + adds max width for the items

* Revert "reverts old behavior with default value for combobox"

This reverts commit 2a92c00f32.

* removes double focus

* fixes placeholder so it is not undefined string

* fixes value placeholder + moves title to input

* build fix

* fixes border behavior

* adds default value for property items

* fix: improve combobox types

* fix: use default value

* adds layers to InputField and moves border-offset-layout

* fix: eslint

* Revert "adds layers to InputField and moves border-offset-layout"

This reverts commit 272baafab6.

* reverts styles fixes for double border

* cleanup

* adds medium size to ui kit

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-30 19:14:23 +02:00
Ruslan Musaev 9a5c3f67ab dbeaver/pro#7044 fix anon shared projects (#3788) 2025-09-30 18:13:20 +02:00
AinurandDaria Marutkina 21b024f375 dbeaver/pro#6529 use separate bundle for lang3 (#3765)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-30 12:34:43 +02:00
e2339f3666 dbeaver/pro#5963 add expandable fields to the json view (#3775)
Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-09-30 18:18:22 +08:00
Sychev Andreyandmr-anton-t 2fbb71fb96 dbeaver/pro#6586 fix: combobox disclosure size (#3787)
* dbeaver/pro#6586 fix: combobox disclosure size

By default, this component has 1em height and width and thats why it looked different in different components. Pixels values will provide consistency across different environments.

* dbeaver/pro#6586 refactor: set parent's font size instead of svg dimensions

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-30 02:25:42 +08:00
sergeyteleshevandmr-anton-t 75e9da4705 [CB] Grid - unable to resize multiple columns in wide tables (#3783)
* dbeaver/pro#6667 patches react-data-grid columns widths on cloudbeaver side

* fixes: auto resize columns should not be resized + column resize do not triggers resize of other oversized columns

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-30 02:25:23 +08:00
Ruslan Musaev 6e3bc7f63f dbeaver/pro#5908 limit the number of anon sessions (#3724) 2025-09-29 13:30:49 +00:00
11a7dc26dc dbeaver/pro#5848 api for renaming projects (#3600)
* dbeaver/pro#5848 api for renaming projects

* dbeaver/pro#5848 ci: update stylus dependency to version 0.0.1-security

* dbeaver/pro#5848 feat: add gql mutation and method for project info update

* dbeaver/pro#5848 use project settings for renaming

* dbeaver/pro#5848 add events for project renaming

* dbeaver/pro#5848 use display name

* dbeaver/pro#5848 add rename to desktop te

* dbeaver/pro#5848 fix validating project name

* dbeaver/pro#5848 validate project name on creation

* dbeaver/pro#5848 fix adding description and add event to graphql

* dbeaver/pro#5848 fix events for non-admin users

* dbeaver/pro#5848 feat: mark project as outdated on update

* dbeaver/pro#5848 handle rm project update in nav tree

---------

Co-authored-by: Sychev Andrey <nukemoore@gmail.com>
Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-29 13:20:46 +02:00
AinurandDaria Marutkina 3e9b0bfdd8 dbeaver/pro#6532 api for object settings (#3720)
* dbeaver/pro#6532 api for object settings

* dbeaver/pro#6532 save object settings on user side

* dbeaver/pro#6532 fix adding project settings

* dbeaver/pro#6532 remove redundant code

* dbeaver/pro#6532 rename gql functions

* dbeaver/pro#6532 rename method from add to set

* dbeaver/pro#6532 test fix

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-29 12:38:15 +02:00
Sychev AndreyandDaria Marutkina 73eaaa31f9 dbeaver/pro#6568 fix: layout jump in notifications portal (#3784)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-29 17:52:12 +08:00
574f893e6e dbeaver/pro#6639 fix: don't render table error component when no error (#3710)
* dbeaver/pro#6639 fix: don't render table error component when no error

We used to render TableError component all the time no matter if we have an error or not, just hiding this component visually. This approach breaks accessibility because Table error component was still reachable from a keyboard or a screen reader. This fix completely removes the node from DOM if the error is not visible.

* dbeaver/pro#6639 fix: change tabindex of TableError component

previous fix rendered this component only if error is present. That fix was wrong because we want to always keep that component in DOM to animate it properly in case of an error. That why we decided to just change the tabindex to -1 when there is no error to exclude it from tab path.
This fix is also adds aria-hidden attribute to hide this component completely from the accessibility tree when it's not visible.

* dbeaver/pro#6639 style: indent

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-29 17:51:36 +08:00
Alexander SkoblikovandMashaKorax 10876f1a62 dbeaver/pro#6772 import license cli (#3774)
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-09-29 10:59:27 +02:00
54b5c12550 dbeaver/pro#6403 api for default catalog and schema (#3768)
* dbeaver/pro#6403 api for default catalog and schema

* dbeaver/pro#6403 add default schema and catalog to gql

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-09-26 12:27:19 +02:00
Ainur 69f2a57be5 dbeaver/pro#6716 rename server scripts (#3762) 2025-09-26 10:16:35 +02:00
Ainurandmr-anton-t 4f7c7ba808 dbeaver/pro#6656 create web connection info objects in a session project (#3751)
* dbeaver/pro#6656 create web connection info objects in a session project

* dbeaver/pro#6656 fix data source connection test

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-26 10:09:48 +02:00
Sychev AndreyandDaria Marutkina 25247321b8 dbeaver/pro#5471 [CB] Add shortcuts to tooltips data editor toolbar (#3750)
* dbeaver/pro#5471 fix: "Delete" data viewer action tooltip

* dbeaver/pro#5471 refactor: "merge" save and save as script actions

We used to have two buttons with different shortcuts for saving SQL as a script(first save) and saving already created script (updating). On UI they had the same icon and were more or less identical for the user. We decided to use the same shortcut and labels for both buttons (mod + S).

* dbeaver/pro#5471 feat: adds Find and Comment shortcuts to the shortcuts list

* dbeaver/pro#5471 refactor: use common l10n keys for save/undo/redo

* dbeaver/pro#5471 refactor: use key bindings API for Delete action in TableView

* dbeaver/pro#5471 refactor: use key bindings API for add, duplicate and revert actions

* dbeaver/pro#5471 fix: extra import

* dbeaver/pro#5471 refactor: don't use a symbol for delete shortcut

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-25 18:18:17 +08:00
Sychev Andrey 72975abef0 dbeaver/pro#6142 fix: can't expand nodes using filter (#3773)
If folder node had not been loaded before the filter is used, we would get into situation that filtering manually expanding this node without children and we would loose the ability to load them by expanding by click(our main flow is to load on expand).

This fix removes the auto expanding on filtering. Now it works similarly to the main navigation tree with filters
2025-09-25 18:17:23 +08:00
Alexey Potsetsuev 1fadf5009d dbeaver/pro#6968 fix: eslint (#3777) 2025-09-25 17:48:58 +08:00
Alexander Skoblikovandkseniaguzeeva 23090e286a dbeaver/pro#5999 do not link shared credentials with users (#3748)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-09-24 16:55:51 +02:00
Alexey Potsetsuevandmr-anton-t 1cacf6a5cc dbeaver/pro#6980 fix: elements ordering (#3770)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-24 21:57:11 +08:00
d0e86745f1 dbeaver/pro#6520 fix: header cell layout (#3759)
* dbeaver/pro#6520 fix: header cell layout

* dbeaver/pro#6520 refactor: table cell always shows 2 rows

* dbeaver/pro#6520 fix: use two rows grid only if a table has any description

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-24 16:30:59 +08:00
Alexander SkoblikovandMashaKorax 97d179a103 dbeaver/pro#6229 execute sql via cli (#3721)
* dbeaver/pro#6229 execute sql via cli

* dbeaver/pro#6229 review fix

* dbeaver/pro#6229 update run scripts

---------

Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-09-23 18:48:26 +02:00
sergeyteleshev 37b8716aee dbeaver/pro#6935 replaces sass-embedded with sass (#3771) 2025-09-24 00:34:16 +08:00
Alexey Potsetsuevandsergeyteleshev d1c2d6547f dbeaver/pro#6968 feat: add storybook (#3767)
* dbeaver/pro#6968 feat: add storybook

* chore: remove duplicate

* fix: ladle

* chore: remove storybook onboarding

* adds task to run storybook

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-09-23 21:02:07 +08:00
4f53ece164 dbeaver/pro#6327 refactor: sql editor & vqb (#3742)
* dbeaver/pro#6327 refactor: sql editor & vqb

* fix: state sync

* fix: segment resolution

* chore: add comment

* refactor: remove old code, add todo about problem

* fix: yarn.lock

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-09-23 18:45:45 +08:00
Alexey Potsetsuevandmr-anton-t 0fe432f45c dbeaver/pro#6783 refactor: plugins bundles (#3761)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-23 18:37:24 +08:00
Sychev AndreyandDaria Marutkina 58b8eafc7b dbeaver/pro#6892 fix: letter spacing in combobox item (#3747)
Make the same as in combobox input

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-23 18:26:35 +08:00
alexandDaria Marutkina cdb4c7e1fc dbeaver/pro#6924 pass selectedValue to provider (#3752)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-23 00:03:25 +08:00
alexandDaria Marutkina 3a2d4f807d dbeaver/pro#5752 add boolean component to metadata editor (#3754)
* dbeaver/pro#5752 add boolean component to metadata editor

* dbeaver/pro#5752 fix linter

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-22 23:34:43 +08:00
39ea1e2b7f dbeaver/pro#4742 add tree context menu provider (#3745)
* dbeaver/pro#4742 add tree context menu provider

* dbeaver/pro#4742 add useTreeMenu hook

* dbeaver/pro#4742 revert hook renaming

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-09-22 19:43:27 +08:00
Daria Marutkina da7d4eef19 dbeaver/pro#6916 Update README file (#3764) 2025-09-22 11:50:45 +02:00
alexandDaria Marutkina d23ab441ff dbeaver/pro#6305 fix input label hover blinking (#3753)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-22 17:07:14 +08:00
serge-rider 220c59ed01 dbeaver/pro#6952 Use ALL-DEFAULT modules mode 2025-09-21 11:40:36 +02:00
serge-rider eb0f3db330 dbeaver/pro#6759 CLI model 2025-09-20 07:36:00 +02:00
Serge Rider 3babafaecd dbeaver/pro#6759 dbvr app stub and config 2025-09-19 14:49:59 +02:00
serge-rider 4765629537 dbeaver/pro#6934 XML parser annotations 2025-09-19 08:25:22 +02:00
Serge RiderandMatvey16 534526e5e4 dbeaver/pro#6775 AI functions API (#3712)
Co-authored-by: Matvey16 <82543000+Matvey16@users.noreply.github.com>
2025-09-17 12:25:48 +02:00
dbeaver-devops 2d6ebd91f1 dbeaver/pro#6916 25.2.2 version bump (#3749) 2025-09-16 19:05:20 +02:00
Ainur e6e92f0bb3 dbeaver/pro#5614 api for expert settings props (#3727) 2025-09-16 13:51:38 +00:00
5a394e648d [CB-6198] Migrate secrets ui (public) from backend to frontend part (#3701)
* dbeaver/pro#5170 adds refactoring boilerplate

* dbeaver/pro#6198 remove redundant code about secret configuration

* moves secrets into provider properties

* renames optionsExtendedForm to ProviderPropertiesExtendedForm

* build fix

* dbeaver/pro#5170 set external params fix

* moves providerProperties container to ConnectionFormService

* cleanup

* adds empty arrays to connection secret reset state

* truncates select items and select itself

* Revert "truncates select items and select itself"

This reverts commit 56c943b5a0.

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-09-16 15:05:28 +02:00
sergeyteleshevandmr-anton-t e466462269 [CB-4362] Add trim to all inputs in forms (#3687)
* dbeaver/pro#4696 adds zod schema parsing for form parts

* adds validation error to context

* adds schema parsing for UserFormInfoPart & ConnectionFormOptionsPart

* spreads RecordKeySchema across zod validations

* fixes form editing for connection info part

* Revert "spreads RecordKeySchema across zod validations"

This reverts commit 0e6719b32f.

* removes connection form errors during saving when empty fields

* reverts connection form options part parsing

* removes trimming from teams & authRole

* build fix

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-15 21:47:55 +08:00
sergeyteleshevandmr-anton-t 1c57e670c0 [CB] get back switch title bold styles (#3738)
* dbeaver/pro#6878 gets back switch bold title

* incapsulates field styles only

* moves all composes out of the layer

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-15 15:16:36 +08:00
alexandDaria Marutkina 3808af50c7 dbeaver/pro#5014 use debounce instead of throttle (#3734)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-15 00:14:56 +02:00
Alexander Skoblikov 390452d8a6 dbeaver/pro#6880 more correct origin parsing (#3741) 2025-09-12 15:27:00 +00:00
Alexey Potsetsuevandmr-anton-t b733f395d3 dbeaver/pro#6847 fix: elements order (#3729)
* dbeaver/pro#6847 fix: elements order

* fix: linting

* fix: actions order

* fix: actions order

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-12 23:21:54 +08:00
sergeyteleshev e31ae9a439 dbeaver/pro#6881 updates deps (#3743) 2025-09-12 19:57:54 +08:00
sergeyteleshevandDaria Marutkina 07f60c0034 [CB] Bump NPM dependencies (#3723)
* dbeaver/pro#5765 updates deps

* updates @wroud/vite-plugin-tsc

* updates @vitejs/plugin-react

* removes sass-embedded

* resolves sass to sass-embedded

* build fix

* linter fix

* handles empty json table edge case

* removes redundant translations

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-12 17:39:48 +08:00
sergeyteleshevandEvgenia ba32c12b9c [CB-5023] Add vizualization for focus on switchers (#3677)
* dbeaver/pro#4862 adds focus on switches

* fixes border radius

* less border-radius

* applies hack with borders and position to save border radius and offset

* removes variable

* fix: applies focus only for tab

* removes focus on ESC button

* removes onkeydown

* cleanup

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-09-11 17:32:33 +08:00
Ainur ca3ce9b79d dbeaver/pro#6786 load engine properties from object (#3732) 2025-09-11 08:38:04 +00:00
96d6dba83a dbeaver/pro#6644 update licence status after users decrease (#3711)
* dbeaver/pro#6644 update licence status after users decrease

* dbeaver/pro#6644 update licence status after user decrease

* dbeaver/pro#6644 update license status after users decrease

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-09-11 08:20:14 +02:00
Ruslan MusaevandEvgenia 6ce5ef235c dbeaver/pro#6259 fix query logging for import (#3733)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-09-11 08:13:20 +02:00
a1404e3495 dbeaver/pro#6224 Add soring completion alphabetically for web (#3697)
* dbeaver/pro#6224 Add soring completion alphabetically for web

* dbeaver/pro#6224 Add soring completion alphabetically for web

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Elizabeth <28875055+E1izabeth@users.noreply.github.com>
2025-09-10 23:44:11 +03:00
sergeyteleshev d4e2f2365a [CB] application freezes during loading on heavy resultsets (ORIGINAL FIX) (#3717)
* dbeaver/pro#6731 enables virtualization always

* removes default virtualization prop

* [CB] application freezes during loading on heavy resultsets (OPTIONAL FIXES) (#3715)

* dbeaver/pro#6731 adds some optimizations

* cleanup

* pr fixes

* cleanup

* removes optimizations

* linter fixes
2025-09-10 21:06:54 +08:00
ab813e21ab dbeaver/pro#5129 cb 6095 sql editor buttons shortcut labels are hardcoded (#3696)
* dbeaver/pro#5129 feat: use action item bindings API to get binding label

removes hardcoded shortcuts
adds formatting for shortcuts, uses OS-specific shortcuts

* dbeaver/pro#5129 feat: add example of manual using getBindingLabel function

* dbeaver/pro#5129 feat: use menu api for sql editor actions

* dbeaver/pro#5129 fix: lint async

* dbeaver/pro#5129 fix: remove wrong action icons

move private methods to the end of files

* dbeaver/pro#5129 refactor: use context via useDataContextLink hook

* dbeaver/pro#5129 refactor: DRY ACTIONS

* dbeaver/pro#5129 fix: DRY ACTIONS

* dbeaver/pro#5129 fix: action titles

* dbeaver/pro#5129 fix: DI after devel merge

* dbeaver/pro#5129 bonus: fix text content in dropdowns

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
2025-09-10 21:04:03 +08:00
AinurandDaria Marutkina c5190b2567 dbeaver/pro#6249 fix events for changing extensions (#3667)
* dbeaver/pro#6249 fix events for changing extensions

* dbeaver/pro#6249 send connection updated info event on rm side

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-09-10 14:33:34 +02:00
alexandEvgenia e896789cb0 dbeaver/pro#6155 do not set whereFilter on constraint change (#3702)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-09-10 18:39:02 +08:00
Serge Riderandmr-anton-t 60827d769a dbeaver/pro#6791 LDAP icon fix (#3714)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-09 12:36:29 +02:00
Alexey Potsetsuevandmr-anton-t 65876e9b4e dbeaver/pro#6744 fix: elements order (#3706)
* dbeaver/pro#6744 fix: elements order

* fix: fixate position of elements

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-09-04 02:40:01 +08:00
Alexander SkoblikovandMashaKorax 048206266d dbeaver/pro#5878 cli custom exit code (#3705)
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-09-03 10:49:12 +02:00
Alexey Potsetsuev f41b9d24fe dbeaver/pro#6662 chore: cleanup (#3713) 2025-09-02 18:41:49 +08:00
Daria MarutkinaandAnastasiya 03dabc0e1b dbeaver/pro#6715 Update README file (#3709)
* dbeaver/pro#6715 Update README file

* Update README.md

Co-authored-by: Anastasiya <45152336+LonwoLonwo@users.noreply.github.com>

* Update README.md

* Update README.md

Co-authored-by: Anastasiya <45152336+LonwoLonwo@users.noreply.github.com>

---------

Co-authored-by: Anastasiya <45152336+LonwoLonwo@users.noreply.github.com>
2025-09-01 13:03:44 +02:00
Daria Marutkina 56946742c2 dbeaver/pro#6715 Update README file (#3708) 2025-09-01 11:21:23 +02:00
serge-rider e1e4ae0ba6 dbeaver/pro#6773 Move ldap icon to cloudbeaver 2025-09-01 07:29:53 +02:00
Alexey Potsetsuevandmr-anton-t 80f258b561 dbeaver/pro#6744 refactor: migration to @wroud/di (#3704)
* dbeaver/pro#6744 refactor: migration to `@wroud/di`

* tests: enable settings tests

* chore: update syntax

* fix: dynamic theme detection

* fix: skip not stable test

* fix: skip whole test

* fix: make theme optional

* fix: page reload

* tests: skip unstable test

* fix: remove optional

* fix: load system theme

* fix: prevent the system theme from always loading despite not being selected

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-08-29 18:22:11 +08:00
Alexander SkoblikovandDaria Marutkina ac48e13039 dbeaver/pro#6703 use local host address by default (#3695)
* dbeaver/pro#6703 use local host address by default

* dbeaver/pro#6703 rename method

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-27 12:20:18 +02:00
3877e914c4 dbeaver/pro#6462 error instead of redirect for gql requests (#3690)
* dbeaver/pro#6462 error instead of redirect for gql requests

* feat: force redirect on supportedHosts change

* fix: replace redirect with warning message

* fix: prevent active host removal

* fix: error message and ignore when on IP address

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-08-26 15:01:25 +02:00
sergeyteleshev 564ceb7d82 dbeaver/pro#6708 adds @dbeaver/react-tests to packages to execute tests locally (#3698) 2025-08-25 20:42:44 +08:00
serge-rider 622b5133c2 dbeaver/pro#6715 25.2.1 version bump 2025-08-22 18:55:11 +02:00
Alexey Potsetsuev 376575efce dbeaver/pro#5902 fix: settings override and aliases resolution (#3693)
* dbeaver/pro#5902 fix: settings override and aliases resolution

* fix: import
2025-08-22 18:45:25 +02:00
980e169ee1 [CB] Ability to change multiserver licenses users/roles from UI (#3598)
* dbeaver/pro#6311 removes multi instance limits on frontend side (allows to create/delete/disable users in users and provisioning)

* dbeaver/pro#6311 add flag to server config

* build fix

* reverts all in favor of licenseUsersModificationEnabled

* dbeaver/pro#6311 review fixes

* adds extended serverConfig

* dbeaver/pro#6311 fix disabled users

---------

Co-authored-by: Ruslan <pupkinvasya7000@gmail.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-22 18:24:18 +02:00
AinurandEvgenia e9cbaeadd9 dbeaver/pro#6695 no web session found error log fix (#3692)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-22 18:23:54 +02:00
Ruslan MusaevandEvgenia 66764292c9 Dbeaver/pro#6326 fix incorect paramters parsing (#3685)
* dbeaver/pro#6326 fixes

* dbeaver/pro#6326 fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-22 13:29:34 +02:00
2e2a61a330 dbeaver/pro#6692 do not load settings until authorized (#3688)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-08-22 19:11:10 +08:00
Ruslan MusaevandDaria Marutkina edda6d8db3 dbeaver/pro#5921 fix postgre npe (#3686)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-22 12:28:02 +02:00
c9f4ddd382 Dbeaver/pro#6622 permission fixes after demo (#3680)
* dbeaver/pro#6622 preference fixes after the demo

* dbeaver/pro#6622 fixes

---------

Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-22 18:09:49 +08:00
alexandDaria Marutkina fb0bdc1017 dbeaver/pro#6556 change Alert structure (#3676)
* dbeaver/pro#6556 change Alert structure

* dbeaver/pro#6556 wrap in text

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-22 18:09:00 +08:00
serge-rider 123dc7777c dbeaver/pro#6655 Code style + NPE checks 2025-08-22 09:29:42 +02:00
alexandEvgenia 2963610498 dbeaver/pro#4966 handle long names case in menus (#3683)
* dbeaver/pro#4966 handle long names case in menus

* dbeaver/pro#4966 use nested selector

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-22 04:33:35 +08:00
sergeyteleshevandEvgenia d1e07be46f [CB] Long text in the Configuration ID dropdown is not truncated and overlaps other UI elements (#3682)
* dbeaver/pro#6642 truncates all select items

* adds title for render field selects

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-21 19:16:29 +08:00
043204002f dbeaver/pro#5902 fix: settings resolution (#3673)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-21 19:15:30 +08:00
Alexey PotsetsuevandEvgenia c8c82c7f3e dbeaver/pro#6565 fix: prevent requests on session expire (#3678)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-21 12:36:35 +08:00
a0944850b1 dbeaver/pro#6605 fix: reset filters on logout (#3675)
* dbeaver/pro#6605 fix: reset filters on logout

This commit adds onLogout handler in DataViewerTabService which disposes opened tabs on logout.

Previously we didn't handle that at all and model was persisted in the memory after logout. On next login, if there was any filters, we would try to send them to backend and got an error, because backend doesn't support initial requests(without resultId) with filters.

The main logic of a handler repeats the already existed onDisconnect handler logic, which was extracted to handleTabsCleanup method. The difference between handlers is only in a set of tabs(onLogout we dispose all of them, onDisconnect - only tabs of a selected connection) and ability to interrupt the process.

* Revert "dbeaver/pro#6605 fix: reset filters on logout"

This reverts commit d124b444c7.

* dbeaver/pro#6605 fix: add onLoad Handler to ObjectViewerTabService

* Update webapp/packages/plugin-object-viewer/src/ObjectViewerTabService.ts

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>

---------

Co-authored-by: Alexey Potsetsuev <wrouds@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-21 12:35:41 +08:00
Ruslan Musaev 31841b7720 dbeaver/pro#6687 revert audit loging (#3674)" (#3684)
This reverts commit 55c776f3e4.
2025-08-20 15:13:55 +00:00
serge-rider a2695f3102 Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel 2025-08-20 15:14:28 +02:00
serge-rider 3c7c1ffc8e dbeaver/pro#6681 TE desktop errors during launch fix 2025-08-20 15:13:42 +02:00
Ruslan Musaev 55c776f3e4 dbeaver/pro#6326 fixes (#3674) 2025-08-20 10:38:55 +00:00
Alexander Skoblikov 8a4d88e721 dbeaver/pro#6622 preference fixes after the demo (#3670) revert (#3679)
This reverts commit 426fd40c82.
2025-08-20 10:33:11 +00:00
Ruslan Musaev 426fd40c82 dbeaver/pro#6622 preference fixes after the demo (#3670) 2025-08-20 10:16:41 +00:00
alexandDaria Marutkina a547b85ef2 dbeaver/pro#6598 open panel on tab select (#3662)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-20 16:43:51 +08:00
Sychev AndreyandDaria Marutkina e32e6eac39 dbeaver/pro#6325 fix: set cursor to the beginning of the file when opened (#3669)
In previous ticket CB-5555 we fixed cursor position on undo/redo actions by adding a check that if selection was not set. In that case we put the cursor to the end of inserted text. Due to previous fixes in CB-4134 we don't set a selection if cursor don't change it's position and initially it's 0. So our check from 5555 is being fired on initially opened script and cursor goes to the end.

To avoid that situation, this solution introduces a new isInitialScriptOpening flag that is used to check the first insertion.

When initially opening a script, the cursor will stay at the position where we explicitly set it (e.g., position 0).
After the first actual content change, the flag isInitialScriptOpening gets set to false.
Subsequent changes will then follow the normal cursor behavior (moving to end when there are changes but no explicit cursor position).

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-19 23:39:13 +08:00
Sychev AndreyandEvgenia 901669b802 dbeaver/pro#6472 fix: restore focus after menu actions and on syncFocus (#3657)
* dbeaver/pro#6472 fix: restore focus after menu actions and on syncFocus

* dbeaver/pro#6472 refactor: revert changes with using restoreFocus function from context

* dbeaver/pro#6472 fix: delete row from a context menu works as with a hotkey

set to null and revert also keep focus in place

* Revert "dbeaver/pro#6472 fix: delete row from a context menu works as with a hotkey"

This reverts commit f54abf3956.

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-19 18:03:41 +08:00
alexandEvgenia 69d7a25fec dbeaver/pro#6411 check for includes also (#3655)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-08-19 18:03:03 +08:00
Sychev AndreyandDaria Marutkina 576028b367 dbeaver/pro#6253 [CB] [users] default team should be marked and read only (#3658)
* dbeaver/pro#6253 fix: set disable state for checkbox respecting readonly

There was a bug in UiKitCheckbox props which rewrites disabled state using only disabled prop.

* dbeaver/pro#6253 fix: remove redundant readonly property in Options

First of all, Radio doesn't support readonly attribute. Moreover, we don't render this RadioGroup when condition in readonly prop is true.

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-19 18:02:39 +08:00
Alexey PotsetsuevandDaria Marutkina 9276777c3e dbeaver/pro#6600 fix: connections sync (#3661)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-19 18:02:13 +08:00
Sychev AndreyandDaria Marutkina 4ff45220ee dbeaver/pro#6557 [CB] Dropdown for roles is too small (#3663)
* dbeaver/pro#6557 refactor: remove redundant width: 100%

There are a few reasons why we don't need this property:
0. It's already present in base Select styles
1. Select component is flex container by default, i.e. takes all available place
2. No evidences that it is needed

* dbeaver/pro#6557 fix: user filters selects

Simplifies layout and set min width for selects

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-08-19 18:01:41 +08:00
Alexey Potsetsuev 62ad5a61c9 dbeaver/pro#6652 fix: version set (#3671) 2025-08-18 22:21:49 +08:00
Daria Marutkina 587a9e58e1 dbeaver/pro#6594 Update README file (#3668) 2025-08-18 10:46:45 +02:00
Alexey Potsetsuev 4401cfe92f dbeaver/pro#6617 fix: remove default value for key parameter in useResourceTracker (#3664)
* dbeaver/pro#6617 fix: remove default value for key parameter in useResourceTracker

* fix: re-subscribe on resource

* fix: ensure subscription removed
2025-08-15 23:27:34 +08:00
Alexey Potsetsuev 59e33e8c48 dbeaver/pro#6592 fix: resources loading (#3659) 2025-08-14 11:12:42 +08:00
serge-rider d16c7d4502 dbeaver/pro#6594 25.2.0 version bump 2025-08-12 20:23:19 +02:00
3079 changed files with 67285 additions and 41894 deletions
+4 -23
View File
@@ -46,24 +46,17 @@ jobs:
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: "24.13.1"
cache: "yarn"
cache-dependency-path: |
cloudbeaver/common-*/yarn.lock
cloudbeaver/webapp/yarn.lock
- name: restore cloudbeaver-common typescript cache
uses: actions/cache@v4
with:
path: "cloudbeaver/common-*/**/*/lib"
key: ${{ runner.os }}-common-dist-${{ hashFiles('cloudbeaver/common-*/yarn.lock') }}
restore-keys: |
${{ runner.os }}-common-dist-
- name: restore typescript cache
uses: actions/cache@v4
with:
path: "cloudbeaver/webapp/**/packages/*/dist"
path: |
"cloudbeaver/webapp/common-*/**/*/lib"
"cloudbeaver/webapp/**/packages/*/dist"
key: ${{ runner.os }}-dist-${{ hashFiles('cloudbeaver/webapp/yarn.lock') }}
restore-keys: |
${{ runner.os }}-dist-
@@ -71,23 +64,11 @@ jobs:
- if: inputs.clean-cache
run: yarn clear
- run: yarn install --immutable
working-directory: ./cloudbeaver/common-typescript
- run: yarn install --immutable
working-directory: ./cloudbeaver/common-react
- run: yarn install --immutable
- run: yarn bundle
working-directory: ./cloudbeaver/webapp/packages/product-default
- run: yarn test
working-directory: ./cloudbeaver/common-typescript
- run: yarn test
working-directory: ./cloudbeaver/common-react
- run: yarn test
# - name: Archive build artifacts
+3 -3
View File
@@ -25,15 +25,15 @@ jobs:
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: "24.13.1"
cache: "yarn"
cache-dependency-path: "./cloudbeaver/webapp/yarn.lock"
# - run: yarn install --immutable
# working-directory: ./cloudbeaver/common-typescript
# working-directory: ./cloudbeaver/webapp/common-typescript
# - run: yarn install --immutable
# working-directory: ./cloudbeaver/common-react
# working-directory: ./cloudbeaver/webapp/common-react
- run: |
yarn install --immutable
+4 -5
View File
@@ -6,6 +6,7 @@ on:
- opened
- synchronize
- reopened
- ready_for_review
push:
branches: [devel]
@@ -24,11 +25,6 @@ jobs:
project-deps: ./cloudbeaver/project.deps
timeout-minutes: 5
# build-server:
# name: Server
# uses: ./.github/workflows/backend-build.yml
# secrets: inherit
build-frontend:
name: Frontend
uses: ./.github/workflows/frontend-build.yml
@@ -38,6 +34,9 @@ jobs:
name: Server
uses: dbeaver/dbeaver-common/.github/workflows/java-checkstyle.yml@devel
secrets: inherit
permissions:
contents: read
pull-requests: read
lint-frontend:
name: Frontend
+1 -2
View File
@@ -14,8 +14,7 @@
"redhat.vscode-yaml",
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker-russian",
"syler.sass-indented",
"VisualStudioExptTeam.vscodeintellicode",
"github.copilot-chat",
"yzhang.markdown-all-in-one",
"GraphQL.vscode-graphql-syntax",
"mrmlnc.vscode-json5",
+1 -1
View File
@@ -48,7 +48,7 @@
"-Declipse.pde.launch=true",
"-XstartOnFirstThread",
"-Dfile.encoding=UTF-8",
"--add-modules=ALL-SYSTEM",
"--add-modules=ALL-DEFAULT",
"--add-opens=java.base/java.io=ALL-UNNAMED",
"--add-opens=java.base/java.lang=ALL-UNNAMED",
"--add-opens=java.base/java.lang.reflect=ALL-UNNAMED",
+14 -5
View File
@@ -26,7 +26,7 @@
"group": "test",
"args": ["test"],
"options": {
"cwd": "${workspaceFolder}/common-typescript"
"cwd": "${workspaceFolder}/webapp/common-typescript"
}
},
{
@@ -36,7 +36,7 @@
"group": "test",
"args": ["test"],
"options": {
"cwd": "${workspaceFolder}/common-react"
"cwd": "${workspaceFolder}/webapp/common-react"
}
},
{
@@ -92,10 +92,10 @@
"label": "Run Backend CE",
"type": "shell",
"windows": {
"command": "./run-server.bat"
"command": "./run-cloudbeaver-server.bat"
},
"osx": {
"command": "./run-server.sh"
"command": "./run-cloudbeaver-server.sh"
},
"options": {
"cwd": "${workspaceFolder}/deploy/cloudbeaver"
@@ -133,9 +133,18 @@
"type": "shell",
"command": "yarn",
"options": {
"cwd": "${workspaceFolder}/common-react/@dbeaver/ui-kit"
"cwd": "${workspaceFolder}/webapp/common-react/@dbeaver/ui-kit"
},
"args": ["docs"]
},
{
"label": "Run Storybook",
"type": "shell",
"command": "yarn",
"options": {
"cwd": "${workspaceFolder}/webapp/packages/storybook"
},
"args": ["storybook"]
}
],
"inputs": [
@@ -2,6 +2,6 @@
<?pde version="3.8"?>
<target name="org.jkiss.cloudbeaver.tp">
<locations>
<location path="../../dbeaver-workspace/dependencies/plugins" type="Directory"/>
<location path="../../../dbeaver-workspace/dependencies/plugins" type="Directory"/>
</locations>
</target>
</target>
@@ -1,6 +1,6 @@
{
"name": "vscode-java-configs",
"packageManager": "yarn@4.9.2",
"packageManager": "yarn@4.14.1",
"devDependencies": {
"typescript": "^5.8.3"
}
+88 -52
View File
@@ -1,17 +1,20 @@
<img src="https://github.com/dbeaver/cloudbeaver/wiki/images/cloudbeaver-logo.png" align="right" width="250"/>
<img src="https://github.com/dbeaver/cloudbeaver/wiki/images/cloudbeaver-logo.png" alt="CloudBeaver logo" align="right" width="250"/>
# CloudBeaver Community
Cloud Database Manager - Community Edition.
CloudBeaver is a web server that provides a rich web interface. The server itself is a Java application, and the web part is written in TypeScript and React.
It is free to use and open-source (licensed under [Apache 2](https://github.com/dbeaver/cloudbeaver/blob/devel/LICENSE) license).
See our [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.
<a><img src="https://github.com/dbeaver/cloudbeaver/wiki/images/connection-creation-demo.png" width="400"/></a>
<img src="https://github.com/dbeaver/cloudbeaver/wiki/images/gis-demo.png" width="400"/>
<img src="https://github.com/dbeaver/cloudbeaver/wiki/images/data-transfer-demo.png" width="400"/>
<img src="https://github.com/dbeaver/cloudbeaver/wiki/images/sql-editor-demo.png" width="400"/>
## Documentation
- [GitHub WIKI](https://github.com/dbeaver/cloudbeaver/wiki)
- [Official documentation](https://dbeaver.com/docs/cloudbeaver/)
## Run in Docker
- [Official Docker repository](https://hub.docker.com/r/dbeaver/cloudbeaver)
@@ -19,67 +22,100 @@ See our [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.
## Demo server
You can see a live demo of CloudBeaver here: https://demo.cloudbeaver.io
You can see a live demo of CloudBeaver server here: https://demo.cloudbeaver.io
[Database access instructions](https://github.com/dbeaver/cloudbeaver/wiki/Demo-Server)
## Changelog
### 25.1.4 2025-08-04
- Added an ability to review the script before execution when users edit tables without primary keys in the Data Editor;
- DuckDB: driver has been updated to version 1.3.2;
- Databend: driver has been updated to version 0.3.9.
### 26.1.1 2026-06-22
### 25.1.3 2025-07-21
- A password confirmation field has been added for administrators in the Easy Config section to help prevent accidental misconfigurations;
- Added column descriptions in the Data Editor to provide more metadata context. You can disable this in Preferences > Data Editor;
- Added the option to display tabs across multiple rows, allowing you to see all tabs without scrolling. You can enable this in Preferences > Interface;
- Changed the default engine used for autocompletion in the SQL Editor. This Semantic engine offers improved suggestions for database objects, keywords, and functions. You can switch back to the Legacy engine in Preferences -> SQL Editor;
- Clickhouse: fixed the presentation of tuples and map data types in the data editor.
### Changes since 26.1.0:
### 25.1.2 2025-07-07
- The CloudBeaver default theme matches the device theme by default now. You can change this behavior in user preferences under the Theme section;
- Added a button “Clear” to the Output panel;
- Changed the data transfer mechanism to avoid intermediate file creation. The parameter dataExportFileSizeLimit was removed from the server configuration as deprecated;
- PostgresSQL: fixed misplaced comment for table DDL generation.
- General: Added a "Project Info" tab containing the project description to the project context menu.
- Security:
- Fixed a cross-site scripting vulnerability caused by unsanitized user input in the web interface.
- Resolved a security flaw related to user-controlled file paths by adding strict validation to prevent unauthorized resource access.
- Fixed the critical vulnerability (CVE-2026-9277) in the shell-quote library (updated to version 1.8.4).
### 25.1.1 2025-06-23
### Changes since 25.1.0:
- Added a search panel for SQL Editor and Value panel: press Ctrl+F to open a panel that allows searching and replacing by keyword or regular expression.
- Added a new welcome screen for a freshly opened application. This screen contains shortcuts to create a new connection, open SQL editor or documentation.
- Databend database support has been added.
### 26.1.0 2026-06-01
### Changes since 26.0.0:
### 25.1.0 2025-06-02
### Changes since 25.0.0:
- Important:
- Connection templates were removed from the application. You can use the Connection Editor to create new connections.
- Administration:
- Log records now capture create, update, and delete actions for users, teams, and connections for improved tracking and transparency.
- LDAP authorization:
- Added support for secure [LDAP authentication over SSL](https://github.com/dbeaver/cloudbeaver/wiki/LDAP-Authentication);
- Brute force protection is now supported for LDAP authentication. All authentication methods on the application level have this security mechanism.
- Added support for custom startup arguments when running CloudBeaver in a container. Administrators can specify configuration file locations to adapt the application to their environment. (thanks to @MalteHei)
- Updated the manifest.webmanifest file to generate dynamically based on the CLOUDBEAVER_ROOT_URI environment variable. (thanks to @houssemexo26)
- Authorization:
- Added HTTP header authentication support for GraphQL queries. Users can provide API tokens via Authorization or X-Api-Key headers, allowing external data tools to authenticate without modifying request bodies.
- Fixed a bug in the authentication form: the existing password is now required for password changes.
- SQL Editor:
- A new setting to autosave scripts in the SQL editor appeared in global and users' preferences;
- Auto-completion has been improved for aliases and camelCase entities.
- Updated the SQL Editor to use real tab characters for indentation. The application displayed tabs as four-space gaps with a distinct visual marker.
- Added an ability to view and edit scripts without connecting to the database.
- Added the ability to open generated queries right from the Generate SQL window.
- Added fuzzy search to SQL Editor auto-completion for object names. The feature allows users to find tables and containers even with typos or incorrect letter ordering.
- Added the tooltip about quoting rules for the Bind variables parameters dialog.
- Fixed keyword autocompletion for partially typed keywords to avoid redundant letters.
- Data Editor:
- Improved table rendering to scale column width depending on the content;
- Accessibility: improved keyboard navigation by sorting buttons in column headers.
- Added the ability to copy-paste multiple cells at once. Pasted values will be distributed across selected cells.
- Added an ability to add, duplicate, delete, or set values to NULL in multiple highlighted rows via the Data Editor context menu.
- Added the Find and Replace functionality for the Data Editor with the ability to find data by matching case, whole word, or using regular expressions.
- Data Editor started to keep the state of column configurations, such as filters, sorting, and ordering, after the reconnect, page refresh, and re-login.
- Added key column mark for tables with unique keys in the data grid.
- Added more settings to the Generated SQL window, including the ability to select fully qualified names for query or use compact SQL formatting.
- Added a DDL generation option to the Data Editor and Result Set context menu.
- Fixed copy and paste behavior for multiline and special characters in the Data Editor. Added visual glyphs to indicate line breaks and tabs in the data grid.
- Fixed the ability to copy Boolean values in the clipboard in the Data Editor.
- Fixed the ability to calculate row count for non-standard SELECT statements. (thanks to @fdcastel)
- Navigator tree:
- Reorganized the context menu on the connection level to make it more compact.
- Added support for special symbols (pipe, comma, and asterisk) for the search field.
- Removed the "Folders" setting from the settings list for the Navigator Tree.
- Accessibility:
- Added the Skip to content option for quick keyboard access to the Navigator Tree, editors, and shortcuts list tab to improve application accessibility.
- Improved keyboard navigation for context menu and buttons for Data Editor, SQL Editor, and Navigator tree.
- Added the Ctrl + / keyboard shortcut to open the context menu for selected cells in the Data Editor.
- Fixed the ability to switch tabs in the Data Editor using the keyboard.
- Fixed contrast for elements across different application parts in the light and dark themes to meet WCAG requirements.
- General:
- Added the ability to configure the default database or schema in the connection configuration;
- Enhanced initial configuration stage security: a server needs to be restarted if the initial setup time exceeds 1 hour;
- Improved Navigation tree performance: lost connection does not lead to the application freezing anymore;
- Data transfer: Improved export/import functionality performance by optimizing disk memory consumption;
- Vietnamese localization has been added (thanks to [0xhanh](https://github.com/0xhanh)).
- Marked icons for non-saved (temporary) scripts with the hourglass symbol to add visual distinction from the saved ones.
- Added the ability to set to NULL any value in the Driver Properties.
- Fixed custom driver properties display for the connection page.
- Fixed data export in SQL format for values containing single quotes.
- Databases and drivers:
- Clickhouse: driver has been updated to version 0.8.5;
- DuckDB: expanded the list of system objects that can be hidden in the Navigation tree;
- LibSQL: added the ability to connect using token authentication;
- Oracle: users' DDL in Oracle is displayed in the metadata editor on the corresponding tab for users with Oracle administration permissions;
- SQLite: added information about a table's Strict mode to the table metadata section (thanks to [eusebe-cda](https://github.com/eusebe-cda)).
## Contribution
As a community-driven open-source project, we warmly welcome contributions through GitHub pull requests.
[We are happy to reward](https://dbeaver.com/help-dbeaver/) our most active contributors every major sprint.
The most significant contribution to our code for the major release 25.1.0 was made by:
1. [0xhanh](https://github.com/0xhanh) - for Vietnamese localization.
- ClickHouse:
- Fixed the display of Array(JSON) types in the data grid.
- Updated driver version to 0.9.7.
- Fixed IP address display in the Data Editor by removing the leading slash.
- Added support for the "prompt=false" connection property for DB2 for IBM i to turn off interactive prompts and prevent related errors.
- DuckDB:
- Fixed map rendering for GEOMETRY types with CRS parameters.
- Fixed geometry type display for database versions > 1.5.
- H2 database:
- Added new embedded driver version 2.4.2.
- Updated server driver to version 2.4.2.
- Firebird: Expanded database-specific SQL dialect coverage for the SQL Editor. Added more keywords, built-in functions, and SQL generators.
- MySQL: Fixed query boundaries recognition in the SQL Editor for scripts with the DELIMITER keyword.
- PostgreSQL:
- Updated driver to version 42.7.11
- Fixed missing INOUT parameters in CHECK generation for procedures and functions.
- Fixed handling of 24:xx values in time columns.
- Fixed an error when connecting via URL if the database name contains a hyphen.
- SQL Server:
- Fixed DDL generation for external tables.
- Fixed the database connectivity issue after the Java update.
- Security:
- Added an administrative setting to restrict SSH tunneling capabilities. Administrators can now limit tunnel configuration to authorized users, reducing the risk of unauthorized network access.
- Fixed the critical vulnerability (CVE-2025-62718) in the axios library. The library was updated to version 1.15.0.
- Fixed the high vulnerability (CVE-2026-4800) in the lodash library. The library was updated to version 4.18.0.
- Fixed the high vulnerability (CVE-2026-39363) in the vite library. The library was updated to version 7.3.2.
- Fixed the high vulnerability (CVE-2026-42035) in the axios library. The library was updated to version 1.15.1.
- Fixed the high vulnerability (CVE-2026-3505) in the bcpg-jdk18on library. The library was updated to version 1.84.0.
- Fixed the high vulnerability (CVE-2026-33671) in the picomatch library. The library was updated to version 2.3.2.
- Fixed the high vulnerability (CVE-2026-33943) in the happy-dom library. The library was updated to version 20.8.8.
- Fixed the high vulnerability (CVE-2025-45141) in the tar library. The library was updated to version 7.5.11.
- Fixed the high vulnerability (CVE-2026-27148) in the storybook library. The library was updated to version 10.2.10.
- Fixed the high vulnerability (CVE-2026-27606) in the rollup library. The library was updated to version 4.59.0.
- Fixed the high vulnerability (CVE-2026-27904) in the minimatch library. The library was updated to version 3.1.3.
- Fixed the high vulnerability (CVE-2026-27959) in the koa library. The library was updated to version 2.16.4.
- Fixed the high vulnerability (CVE-2026-32141) in the flatted library. The library was updated to version 4.4.0.
- Fixed the medium vulnerability (CVE-2026-41305) in the postcss library. The library was updated to version 8.5.14.
+1 -13
View File
@@ -1,18 +1,6 @@
# Security Policy
## Supported Versions
Use this section to tell people about which versions of your project are
currently being supported with security updates.
| Version | Supported |
| ------- | --------- |
| 22.x | yes |
| 23.x | yes |
| 24.x | yes |
## Reporting a Vulnerability
Please report (suspected) security vulnerabilities to devops@dbeaver.com.
You will receive a response from us within 48 hours.
Please report (suspected) security vulnerabilities to <security@dbeaver.com>.
If the issue is confirmed, we will release a patch as soon as possible, depending on complexity, but historically, within a few days.
+61
View File
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.cloudbeaver</groupId>
<artifactId>config-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.13.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<mainClass>io.cloudbeaver.ConfigGenerator</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>copy-external-config</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}/config</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/../../config/template</directory>
<includes>
<include>cloudbeaver-base.conf</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,235 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver;
import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
import java.io.Reader;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
public class ConfigGenerator {
private static final Gson gson = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
private static final String EMPTY_STRING = "''";
public static void main(String[] args) throws Exception {
String baseConfigPath = System.getProperty("config.base");
if (baseConfigPath == null || baseConfigPath.isEmpty()) {
URL resource = ConfigGenerator.class.getClassLoader().getResource("config/cloudbeaver-base.conf");
if (resource == null) {
System.out.println("Base config path is required");
return;
}
baseConfigPath = resource.toURI().getPath();
if (System.getProperty("os.name").toLowerCase().contains("win")) {
// Fix for Windows in dev mode. Resource URI starts with / (e.g. /C:/some/folder)
// And this breaks Java NIO
if (baseConfigPath.startsWith("/")) {
baseConfigPath = baseConfigPath.substring(1);
}
}
}
String outputPath = System.getProperty("config.output");
if (outputPath == null || outputPath.isEmpty()) {
System.out.println("Output config path is required");
return;
}
String configPatches = System.getProperty("config.patches");
List<String> overrideConfigs = configPatches == null ? List.of() : Arrays.asList(configPatches.split(","));
Map<String, Object> config = readConfigurationFile(baseConfigPath);
System.out.println("Base config loaded");
for (String overrideConfig : overrideConfigs) {
if (Files.exists(Path.of(overrideConfig))) {
System.out.println("Applying override config: " + overrideConfig);
} else {
System.out.println("Override config not found, skipping: " + overrideConfig);
continue;
}
System.out.println("Processing override config: " + overrideConfig);
Map<String, Object> overrideConfigMap = readConfigurationFile(overrideConfig);
System.out.println("Override config loaded: " + overrideConfig);
applyProductConfig(config, overrideConfigMap);
System.out.println("Override config applied: " + overrideConfig);
}
Map<String, Object> finalMap = convertToOutputFormat(config);
System.out.println("Config converted to output format");
writeConfigurationFile(finalMap, outputPath);
System.out.println("Config written to: " + outputPath);
}
private static Map<String, Object> readConfigurationFile(String filePath) throws Exception {
Path path = Path.of(filePath);
if (!Files.exists(path)) {
throw new IllegalArgumentException("Configuration file not found: " + filePath);
}
try (Reader reader = Files.newBufferedReader(path)) {
return gson.fromJson(reader, TypeToken.getParameterized(Map.class, String.class, Object.class).getType());
}
}
private static void applyProductConfig(Map<String, Object> baseConfig, Map<String, Object> productConfig) {
if (productConfig.containsKey("add")) {
Map<String, Object> add = (Map<String, Object>) productConfig.get("add");
deepMergeMap(baseConfig, add);
}
if (productConfig.containsKey("remove")) {
Map<String, Object> remove = (Map<String, Object>) productConfig.get("remove");
deepRemoveMap(baseConfig, remove);
}
}
private static void deepMergeMap(Map<String, Object> target, Map<String, Object> source) {
for (Map.Entry<String, Object> entry : source.entrySet()) {
Object sourceValue = entry.getValue();
Object targetValue = target.get(entry.getKey());
if (sourceValue instanceof Map && targetValue instanceof Map) {
deepMergeMap((Map<String, Object>) targetValue, (Map<String, Object>) sourceValue);
} else {
target.put(entry.getKey(), sourceValue);
}
}
}
private static void deepRemoveMap(Map<String, Object> target, Map<String, Object> source) {
for (Map.Entry<String, Object> entry : source.entrySet()) {
Object sourceValue = entry.getValue();
Object targetValue = target.get(entry.getKey());
if (sourceValue instanceof Map && targetValue instanceof Map) {
deepRemoveMap((Map<String, Object>) targetValue, (Map<String, Object>) sourceValue);
} else {
target.remove(entry.getKey());
}
}
}
private static void writeConfigurationFile(Map<String, Object> map, String filePath) throws Exception {
JsonElement tree = gson.toJsonTree(map);
StringBuilder sb = new StringBuilder();
writeElement(tree, sb, 0);
Files.write(Path.of(filePath), sb.toString().getBytes());
}
private static void writeElement(JsonElement elem, StringBuilder sb, int count) {
String indent = " ";
if (elem.isJsonObject()) {
sb.append("{\n");
JsonObject obj = elem.getAsJsonObject();
var iterator = obj.entrySet().iterator();
while (iterator.hasNext()) {
var entry = iterator.next();
sb.repeat(indent, count + 1).append(entry.getKey()).append(": ");
writeElement(entry.getValue(), sb, count + 1);
if (iterator.hasNext()) {
sb.append(",");
}
sb.append("\n");
}
sb.repeat(indent, count).append("}");
} else if (elem.isJsonArray()) {
sb.append("[\n");
JsonArray array = elem.getAsJsonArray();
for (int i = 0; i < array.size(); i++) {
sb.repeat(indent, count + 1);
writeElement(array.get(i), sb, count + 1);
if (i < array.size() - 1) {
sb.append(",");
}
sb.append("\n");
}
sb.repeat(indent, count).append("]");
} else {
String valueStr = gson.toJson(elem).replace("\n", "\n" + indent);
sb.append(valueStr);
}
}
private static Map<String, Object> convertToOutputFormat(Map<String, Object> map) {
Map<String, Object> result = new LinkedHashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
result.put(entry.getKey(), convertValue(entry.getValue()));
}
return result;
}
private static Object convertValue(Object value) {
if (value instanceof Map) {
Map<String, Object> map = (Map<String, Object>) value;
if (!map.isEmpty() && map.containsKey("value")) {
if (map.containsKey("env")) {
String env = (String) map.get("env");
Object defValue = map.get("value");
return "${" + env + ":" + formatDefaultValue(defValue) + "}";
} else {
return convertValue(map.get("value"));
}
}
Map<String, Object> result = new LinkedHashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
result.put(entry.getKey(), convertValue(entry.getValue()));
}
return result;
} else if (value instanceof List) {
List<Object> list = (List<Object>) value;
List<Object> result = new ArrayList<>();
for (Object item : list) {
result.add(convertValue(item));
}
return result;
}
return value;
}
private static String formatDefaultValue(Object value) {
return switch (value) {
case null -> EMPTY_STRING;
case String str -> str.isEmpty() ? EMPTY_STRING : str;
case Boolean b -> value.toString();
case Number number -> {
if (number instanceof Double || number instanceof Float) {
long longVal = number.longValue();
if (longVal == number.doubleValue()) {
yield String.valueOf(longVal);
}
}
yield number.toString();
}
// TODO: handle list elements if needed
default -> value.toString();
};
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
},
"typescript.tsdk": ".yarn/sdks/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"prettier.prettierPath": ".yarn/sdks/prettier/index.cjs"
}
-32
View File
@@ -1,32 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier/bin/prettier.cjs
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real prettier/bin/prettier.cjs your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier/bin/prettier.cjs`));
-32
View File
@@ -1,32 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real prettier your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier`));
-7
View File
@@ -1,7 +0,0 @@
{
"name": "prettier",
"version": "3.6.2-sdk",
"main": "./index.cjs",
"type": "commonjs",
"bin": "./bin/prettier.cjs"
}
@@ -1 +0,0 @@
!lib
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,16 +0,0 @@
import { Row, type RenderRowProps } from 'react-data-grid';
import { DataGridRowContext } from './DataGridRowContext.js';
import { memo, use, useEffect } from 'react';
import { useGridReactiveValue } from './useGridReactiveValue.js';
export const BaseRow = memo(function BaseRow<TRow, TSummaryRow>(props: RenderRowProps<TRow, TSummaryRow>) {
const rowContext = use(DataGridRowContext);
const rowsCount = useGridReactiveValue(rowContext?.onScrollToBottom ? rowContext?.rowCount : undefined);
useEffect(() => {
if (rowsCount === props.rowIdx + 1) {
rowContext?.onScrollToBottom?.();
}
}, [rowsCount]);
return <Row {...props} />;
}) as <TRow, TSummaryRow>(props: RenderRowProps<TRow, TSummaryRow>) => React.ReactNode;
@@ -1,181 +0,0 @@
import { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
import { DataGrid as DataGridBase, type ColumnOrColumnGroup, type CellSelectArgs, type DataGridHandle, type ColumnWidth, type ColumnWidths } from 'react-data-grid';
import { rowRenderer } from './renderers/rowRenderer.js';
import { cellRenderer } from './renderers/cellRenderer.js';
import { DataGridCellHeaderContext, type IDataGridHeaderCellContext } from './DataGridHeaderCellContext.js';
import { DataGridCellContext, type IDataGridCellContext } from './DataGridCellContext.js';
import type { IInnerRow } from './IInnerRow.js';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
import { useGridReactiveValue } from './useGridReactiveValue.js';
import { mapCellContentRenderer } from './mapCellContentRenderer.js';
import { mapRenderHeaderCell } from './mapRenderHeaderCell.js';
import { mapEditCellRenderer } from './mapEditCellRenderer.js';
import { DataGridRowContext, type IDataGridRowContext } from './DataGridRowContext.js';
import './DataGrid.css';
import { HeaderDnDContext, useHeaderDnD } from './useHeaderDnD.js';
export interface ICellPosition {
rowIdx: number;
colIdx: number;
}
export interface DataGridCellKeyboardEvent extends React.KeyboardEvent<HTMLDivElement> {
preventGridDefault: () => void;
isGridDefaultPrevented: () => boolean;
}
export interface DataGridProps extends IDataGridCellContext, IDataGridRowContext, IDataGridHeaderCellContext, React.PropsWithChildren {
getRowHeight?: (rowIdx: number) => number;
getRowId?: (rowIdx: number) => React.Key;
columnCount: IGridReactiveValue<number, []>;
getColumnKey?: (colIdx: number) => string;
onScroll?: (event: React.UIEvent<HTMLDivElement>) => void;
onFocus?: (position: ICellPosition) => void;
onEditorOpen?: (position: ICellPosition) => void;
onCellKeyDown?: (position: ICellPosition, event: DataGridCellKeyboardEvent) => void;
className?: string;
}
export interface DataGridRef {
selectCell: (position: ICellPosition) => void;
scrollToCell: (position: Partial<ICellPosition>) => void;
openEditor: (position: ICellPosition) => void;
}
export const DataGrid = forwardRef<DataGridRef, DataGridProps>(function DataGrid(
{
headerElement,
getHeaderWidth,
headerText,
getHeaderOrder,
getHeaderResizable,
columnSortable,
getHeaderHeight,
getHeaderPinned,
columnSortingState,
getHeaderDnD,
cell,
cellText,
cellElement,
cellTooltip,
getCellEditable,
columnCount,
getColumnKey,
rowCount,
getRowId,
getRowHeight,
onHeaderReorder,
onScroll,
onScrollToBottom,
onFocus,
onCellChange,
onColumnSort,
onHeaderKeyDown,
children,
className,
onCellKeyDown,
},
ref,
) {
const [columnWidths, setColumnWidths] = useState<ColumnWidths>(() => new Map<string, ColumnWidth>());
const rowsCount = useGridReactiveValue(rowCount);
const columnsCount = useGridReactiveValue(columnCount);
const rowsCountRef = useRef(rowsCount);
const innerGridRef = useRef<DataGridHandle>(null);
const columns = new Array<ColumnOrColumnGroup<IInnerRow, unknown>>(columnsCount)
.fill(null as any)
.map((_, i): ColumnOrColumnGroup<IInnerRow, unknown> => {
const width = getHeaderWidth?.(i) ?? 'max-content';
return {
key: getColumnKey?.(i) ?? String(i),
name: '',
resizable: getHeaderResizable?.(i) ?? true,
width,
minWidth: 26,
editable: row => getCellEditable?.(row.idx, i) ?? false,
frozen: getHeaderPinned?.(i),
renderHeaderCell: mapRenderHeaderCell(i),
renderCell: mapCellContentRenderer(i),
renderEditCell: mapEditCellRenderer(i),
};
});
const dndHeaderContext = useHeaderDnD({ columns, onReorder: onHeaderReorder, getCanDrag: getHeaderDnD, getHeaderOrder });
useImperativeHandle(ref, () => ({
selectCell: (position: ICellPosition) => {
innerGridRef.current?.selectCell({ idx: dndHeaderContext.getDataColIdx(position.colIdx), rowIdx: position.rowIdx });
},
scrollToCell: (position: Partial<ICellPosition>) => {
innerGridRef.current?.scrollToCell({ idx: position.colIdx && dndHeaderContext.getDataColIdx(position.colIdx), rowIdx: position.rowIdx });
},
openEditor: (position: ICellPosition) => {
innerGridRef.current?.selectCell({ idx: dndHeaderContext.getDataColIdx(position.colIdx), rowIdx: position.rowIdx }, {
enableEditor: true,
});
},
}));
if (rowsCountRef.current !== rowsCount) {
const previousRowCount = rowsCountRef.current;
rowsCountRef.current = rowsCount;
if (previousRowCount === 0) {
setColumnWidths(new Map<string, ColumnWidth>());
}
}
let rows = useMemo(
() =>
new Array<IInnerRow>(rowsCount).fill({ idx: 0 }).map((_, i) => ({
idx: i,
})),
[rowsCount],
);
function handleCellFocus(args: CellSelectArgs<IInnerRow, unknown>) {
onFocus?.({ colIdx: dndHeaderContext.getDataColIdx(args.column.idx), rowIdx: args.rowIdx });
}
function handleCellKeyDown(args: CellSelectArgs<IInnerRow, unknown>, event: DataGridCellKeyboardEvent) {
onCellKeyDown?.({ colIdx: dndHeaderContext.getDataColIdx(args.column.idx), rowIdx: args.rowIdx }, event);
}
const isMeasurementRender = columnWidths.size === 0 && columnCount.get() > 0;
if (isMeasurementRender) {
rows = rows.slice(0, 100);
}
return (
<HeaderDnDContext value={dndHeaderContext}>
<DataGridRowContext value={{ rowCount, onScrollToBottom }}>
<DataGridCellContext value={{ cell, cellText, cellElement, cellTooltip, onCellChange }}>
<DataGridCellHeaderContext value={{ headerElement, headerText, getHeaderDnD, columnSortable, onColumnSort, columnSortingState, onHeaderKeyDown }}>
<DataGridBase
ref={innerGridRef}
columns={dndHeaderContext.columns}
enableVirtualization={!isMeasurementRender}
rows={rows}
className={className}
headerRowHeight={getHeaderHeight?.()}
rowHeight={getRowHeight ? row => getRowHeight(row.idx) : undefined}
rowKeyGetter={getRowId ? row => getRowId(row.idx) : undefined}
columnWidths={columnWidths}
renderers={{
renderRow: rowRenderer,
renderCell: cellRenderer,
noRowsFallback: children,
}}
onScroll={onScroll}
onSelectedCellChange={handleCellFocus}
onCellKeyDown={handleCellKeyDown}
onColumnWidthsChange={setColumnWidths}
/>
</DataGridCellHeaderContext>
</DataGridCellContext>
</DataGridRowContext>
</HeaderDnDContext>
);
});
@@ -1,7 +0,0 @@
import { createContext } from 'react';
export interface IDataGridCellInnerContext {
isFocused: boolean;
}
export const DataGridCellInnerContext = createContext<IDataGridCellInnerContext | null>(null);
@@ -1,9 +0,0 @@
import { createContext } from 'react';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
export interface IDataGridRowContext {
rowCount: IGridReactiveValue<number, []>;
onScrollToBottom?: () => void;
}
export const DataGridRowContext = createContext<IDataGridRowContext | null>(null);
@@ -1,14 +0,0 @@
import { clsx } from '@dbeaver/ui-kit';
interface Props {
className?: string;
onClick?: React.MouseEventHandler<HTMLElement>;
}
export function NullFormatter({ className, onClick }: Props) {
return (
<span className={clsx('tw:uppercase', 'tw:opacity-65', className)} onClick={onClick}>
[NULL]
</span>
);
}
@@ -1,11 +0,0 @@
export function reorderArray<T>(array: T[], from: number, to: number): T[] {
const newArray = [...array];
if (from < to) {
newArray.splice(to, 0, array[from]!);
newArray.splice(from, 1);
} else {
newArray.splice(from, 1);
newArray.splice(to, 0, array[from]!);
}
return newArray;
}
-44
View File
@@ -1,44 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import './index.css';
/* AriaKit Utility Components */
export {
VisuallyHidden,
FocusTrap,
type FocusTrapOptions,
type FocusTrapProps,
Focusable,
type FocusableOptions,
type FocusableProps,
FocusTrapRegion,
type FocusTrapRegionOptions,
type FocusTrapRegionProps,
} from '@ariakit/react';
export { Button, ButtonBase, type ButtonProps, ButtonIcon, type ButtonIconProps } from './Button/Button.js';
export { IconButton, IconButtonBase, type IconButtonProps } from './IconButton/IconButton.js';
export { Checkbox, CheckboxBase, type CheckboxProps } from './Checkbox/Checkbox.js';
export { Input, InputBase, type InputProps } from './Input/Input.js';
export {
Select,
useSelectContext,
useSelectStore,
type SelectProviderProps,
type SelectProps,
type SelectLabelProps,
type SelectPopoverProps,
type SelectItemProps,
} from './Select/Select.js';
export * from './Combobox/Combobox.js';
export { SelectField, type SelectFieldProps, type SelectItem } from './Select/SelectField.js';
export { Spinner, type SpinnerProps } from './Spinner/Spinner.js';
export { Radio, RadioGroup, useRadioContext, useRadioStore, type RadioProviderProps, type RadioProps, type RadioGroupProps } from './Radio/index.js';
export { Icon, type IconProps } from './Icon/Icon.js';
export * from './utils/clsx.js';
export * from './ComponentProvider.js';
File diff suppressed because it is too large Load Diff
-9
View File
@@ -1,9 +0,0 @@
{
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
},
"prettier.prettierPath": ".yarn/sdks/prettier/index.cjs",
"typescript.tsdk": ".yarn/sdks/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}
-5
View File
@@ -1,5 +0,0 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!
integrations:
- vscode
-32
View File
@@ -1,32 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier/bin/prettier.cjs
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real prettier/bin/prettier.cjs your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier/bin/prettier.cjs`));
-32
View File
@@ -1,32 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real prettier your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier`));
-7
View File
@@ -1,7 +0,0 @@
{
"name": "prettier",
"version": "3.6.2-sdk",
"main": "./index.cjs",
"type": "commonjs",
"bin": "./bin/prettier.cjs"
}
@@ -1,3 +0,0 @@
export * from './isDefined.js';
export * from './isNotNullDefined.js';
export * from './mutex.js';
File diff suppressed because it is too large Load Diff
-99
View File
@@ -1,99 +0,0 @@
{
server: {
serverPort: "${CLOUDBEAVER_WEB_SERVER_PORT:8978}",
forceHttps: "${CLOUDBEAVER_FORCE_HTTPS:false}",
contentRoot: "web",
driversLocation: "drivers",
sslConfigurationPath:"${CLOUDBEAVER_SSL_CONF_PATH:workspace/.data/ssl-config.xml}",
rootURI: "${CLOUDBEAVER_ROOT_URI:/}",
serviceURI: "/api/",
supportedHosts: [],
productSettings: {
# Global properties
core.theming.theme: "${CLOUDBEAVER_CORE_THEMING_THEME:system}",
core.localization.language: "${CLOUDBEAVER_CORE_LOCALIZATION:en}",
plugin.sql-editor.autoSave: "${CLOUDBEAVER_SQL_EDITOR_AUTOSAVE:true}",
plugin.sql-editor.disabled: "${CLOUDBEAVER_SQL_EDITOR_DISABLED:false}",
# max size of the file that can be uploaded to the editor (in kilobytes)
plugin.sql-editor.maxFileSize: "${CLOUDBEAVER_SQL_EDITOR_MAX_FILE_SIZE:10240}",
plugin.log-viewer.disabled: "${CLOUDBEAVER_LOG_VIEWER_DISABLED:false}",
plugin.log-viewer.logBatchSize: "${CLOUDBEAVER_LOG_VIEWER_LOG_BATCH_SIZE:1000}",
plugin.log-viewer.maxLogRecords: "${CLOUDBEAVER_LOG_VIEWER_MAX_LOG_RECORDS:2000}",
sql.proposals.insert.table.alias: "${CLOUDBEAVER_SQL_PROPOSALS_INSERT_TABLE_ALIAS:PLAIN}",
SQLEditor.ContentAssistant.experimental.mode: "${CLOUDBEAVER_SQL_EDITOR_CONTENT_ASSISTANT_EXPERIMENTAL_MODE:NEW}"
},
expireSessionAfterPeriod: "${CLOUDBEAVER_EXPIRE_SESSION_AFTER_PERIOD:1800000}",
bindSessionToIp: "${CLOUDBEAVER_BIND_SESSION_TO_IP:disable}",
develMode: "${CLOUDBEAVER_DEVEL_MODE:false}",
enableSecurityManager: false,
sm: {
enableBruteForceProtection: "${CLOUDBEAVER_BRUTE_FORCE_PROTECTION_ENABLED:true}",
maxFailedLogin: "${CLOUDBEAVER_MAX_FAILED_LOGINS:10}",
minimumLoginTimeout: "${CLOUDBEAVER_MINIMUM_LOGIN_TIMEOUT:1}",
blockLoginPeriod: "${CLOUDBEAVER_BLOCK_PERIOD:300}",
passwordPolicy: {
minLength: "${CLOUDBEAVER_POLICY_MIN_LENGTH:8}",
requireMixedCase: "${CLOUDBEAVER_POLICY_REQUIRE_MIXED_CASE:true}",
minNumberCount: "${CLOUDBEAVER_POLICY_MIN_NUMBER_COUNT:1}",
minSymbolCount: "${CLOUDBEAVER_POLICY_MIN_SYMBOL_COUNT:0}"
}
},
database: {
driver: "${CLOUDBEAVER_DB_DRIVER:h2_embedded_v2}",
url: "${CLOUDBEAVER_DB_URL:jdbc:h2:${workspace}/.data/cb.h2v2.dat}",
schema: "${CLOUDBEAVER_DB_SCHEMA:''}",
user: "${CLOUDBEAVER_DB_USER:''}",
password: "${CLOUDBEAVER_DB_PASSWORD:''}",
initialDataConfiguration: "${CLOUDBEAVER_DB_INITIAL_DATA:conf/initial-data.conf}",
pool: {
minIdleConnections: "${CLOUDBEAVER_DB_MIN_IDLE_CONNECTIONS:4}",
maxIdleConnections: "${CLOUDBEAVER_DB_MAX_IDLE_CONNECTIONS:10}",
maxConnections: "${CLOUDBEAVER_DB_MAX_CONNECTIONS:100}",
validationQuery: "${CLOUDBEAVER_DB_VALIDATION_QUERY:SELECT 1}"
},
backupEnabled: "${CLOUDBEAVER_DB_BACKUP_ENABLED:true}"
}
},
app: {
anonymousAccessEnabled: "${CLOUDBEAVER_APP_ANONYMOUS_ACCESS_ENABLED:true}",
anonymousUserRole: user,
defaultUserTeam: "${CLOUDBEAVER_APP_DEFAULT_USER_TEAM:user}",
grantConnectionsAccessToAnonymousTeam: "${CLOUDBEAVER_APP_GRANT_CONNECTIONS_ACCESS_TO_ANONYMOUS_TEAM:false}",
supportsCustomConnections: "${CLOUDBEAVER_APP_SUPPORTS_CUSTOM_CONNECTIONS:false}",
showReadOnlyConnectionInfo: "${CLOUDBEAVER_APP_READ_ONLY_CONNECTION_INFO:false}",
systemVariablesResolvingEnabled: "${CLOUDBEAVER_SYSTEM_VARIABLES_RESOLVING_ENABLED:false}",
forwardProxy: "${CLOUDBEAVER_APP_FORWARD_PROXY:false}",
publicCredentialsSaveEnabled: "${CLOUDBEAVER_APP_PUBLIC_CREDENTIALS_SAVE_ENABLED:true}",
adminCredentialsSaveEnabled: "${CLOUDBEAVER_APP_ADMIN_CREDENTIALS_SAVE_ENABLED:true}",
resourceManagerEnabled: "${CLOUDBEAVER_APP_RESOURCE_MANAGER_ENABLED:true}",
resourceQuotas: {
resourceManagerFileSizeLimit: "${CLOUDBEAVER_RESOURCE_QUOTA_RESOURCE_MANAGER_FILE_SIZE_LIMIT:500000}",
sqlMaxRunningQueries: "${CLOUDBEAVER_RESOURCE_QUOTA_SQL_MAX_RUNNING_QUERIES:100}",
sqlResultSetRowsLimit: "${CLOUDBEAVER_RESOURCE_QUOTA_SQL_RESULT_SET_ROWS_LIMIT:100000}",
sqlTextPreviewMaxLength: "${CLOUDBEAVER_RESOURCE_QUOTA_SQL_TEXT_PREVIEW_MAX_LENGTH:4096}",
sqlBinaryPreviewMaxLength: "${CLOUDBEAVER_RESOURCE_QUOTA_SQL_BINARY_PREVIEW_MAX_LENGTH:261120}"
},
enabledAuthProviders: [
"local"
],
disabledBetaFeatures: [
]
}
}
+271
View File
@@ -0,0 +1,271 @@
{
server: {
serverPort: {
env: "CLOUDBEAVER_WEB_SERVER_PORT",
value: 8978
},
forceHttps: {
env: "CLOUDBEAVER_FORCE_HTTPS",
value: false
},
contentRoot: {
env: "CLOUDBEAVER_CONTENT_ROOT",
value: "web"
},
driversLocation: {
env: "CLOUDBEAVER_DRIVERS_LOCATION",
value: "drivers"
},
sslConfigurationPath: {
env: "CLOUDBEAVER_SSL_CONF_PATH",
value: "workspace/.data/ssl-config.xml"
},
rootURI: {
env: "CLOUDBEAVER_ROOT_URI",
value: "/"
},
serviceURI: {
env: "CLOUDBEAVER_SERVICE_URI",
value: "/api/"
},
supportedHosts: [],
productSettings: {
core.theming.theme: {
env: "CLOUDBEAVER_CORE_THEMING_THEME",
value: "system"
},
core.localization.language: {
env: "CLOUDBEAVER_CORE_LOCALIZATION",
value: "en"
},
plugin.sql-editor.autoSave: {
env: "CLOUDBEAVER_SQL_EDITOR_AUTOSAVE",
value: true
},
plugin.sql-editor.disabled: {
env: "CLOUDBEAVER_SQL_EDITOR_DISABLED",
value: false
},
plugin.sql-editor.maxFileSize: {
env: "CLOUDBEAVER_SQL_EDITOR_MAX_FILE_SIZE",
value: 10240
},
plugin.log-viewer.disabled: {
env: "CLOUDBEAVER_LOG_VIEWER_DISABLED",
value: false
},
plugin.log-viewer.logBatchSize: {
env: "CLOUDBEAVER_LOG_VIEWER_LOG_BATCH_SIZE",
value: 1000
},
plugin.log-viewer.maxLogRecords: {
env: "CLOUDBEAVER_LOG_VIEWER_MAX_LOG_RECORDS",
value: 2000
},
sql.proposals.insert.table.alias: {
env: "CLOUDBEAVER_SQL_PROPOSALS_INSERT_TABLE_ALIAS",
value: "PLAIN"
},
SQLEditor.ContentAssistant.experimental.mode: {
env: "CLOUDBEAVER_SQL_EDITOR_CONTENT_ASSISTANT_EXPERIMENTAL_MODE",
value: "NEW"
}
},
expireSessionAfterPeriod: {
env: "CLOUDBEAVER_EXPIRE_SESSION_AFTER_PERIOD",
value: 1800000
},
bindSessionToIp: {
env: "CLOUDBEAVER_BIND_SESSION_TO_IP",
value: "disable"
},
develMode: {
env: "CLOUDBEAVER_DEVEL_MODE",
value: false
},
sm: {
enableBruteForceProtection: {
env: "CLOUDBEAVER_BRUTE_FORCE_PROTECTION_ENABLED",
value: true
},
maxFailedLogin: {
env: "CLOUDBEAVER_MAX_FAILED_LOGINS",
value: 10
},
minimumLoginTimeout: {
env: "CLOUDBEAVER_MINIMUM_LOGIN_TIMEOUT",
value: 1
},
blockLoginPeriod: {
env: "CLOUDBEAVER_BLOCK_PERIOD",
value: 300
},
passwordPolicy: {
minLength: {
env: "CLOUDBEAVER_POLICY_MIN_LENGTH",
value: 8
},
requireMixedCase: {
env: "CLOUDBEAVER_POLICY_REQUIRE_MIXED_CASE",
value: true
},
minNumberCount: {
env: "CLOUDBEAVER_POLICY_MIN_NUMBER_COUNT",
value: 1
},
minSymbolCount: {
env: "CLOUDBEAVER_POLICY_MIN_SYMBOL_COUNT",
value: 0
}
}
},
database: {
driver: {
env: "CLOUDBEAVER_DB_DRIVER",
value: "h2_embedded_v2"
},
url: {
env: "CLOUDBEAVER_DB_URL",
value: "jdbc:h2:${workspace}/.data/cb.h2v2.dat"
},
schema: {
env: "CLOUDBEAVER_DB_SCHEMA",
value: ""
},
user: {
env: "CLOUDBEAVER_DB_USER",
value: ""
},
password: {
env: "CLOUDBEAVER_DB_PASSWORD",
value: ""
},
initialDataConfiguration: {
env: "CLOUDBEAVER_DB_INITIAL_DATA",
value: "conf/initial-data.conf"
},
pool: {
minIdleConnections: {
env: "CLOUDBEAVER_DB_MIN_IDLE_CONNECTIONS",
value: 4
},
maxIdleConnections: {
env: "CLOUDBEAVER_DB_MAX_IDLE_CONNECTIONS",
value: 10
},
maxConnections: {
env: "CLOUDBEAVER_DB_MAX_CONNECTIONS",
value: 100
},
validationQuery: {
env: "CLOUDBEAVER_DB_VALIDATION_QUERY",
value: "SELECT 1"
}
},
backupEnabled: {
env: "CLOUDBEAVER_DB_BACKUP_ENABLED",
value: true
}
}
},
app: {
anonymousAccessEnabled: {
env: "CLOUDBEAVER_APP_ANONYMOUS_ACCESS_ENABLED",
value: true
},
anonymousUserRole: {
env: "CLOUDBEAVER_APP_ANONYMOUS_USER_ROLE",
value: "user"
},
defaultUserTeam: {
env: "CLOUDBEAVER_APP_DEFAULT_USER_TEAM",
value: "user"
},
grantConnectionsAccessToAnonymousTeam: {
env: "CLOUDBEAVER_APP_GRANT_CONNECTIONS_ACCESS_TO_ANONYMOUS_TEAM",
value: false
},
supportsCustomConnections: {
env: "CLOUDBEAVER_APP_SUPPORTS_CUSTOM_CONNECTIONS",
value: false
},
showReadOnlyConnectionInfo: {
env: "CLOUDBEAVER_APP_READ_ONLY_CONNECTION_INFO",
value: false
},
systemVariablesResolvingEnabled: {
env: "CLOUDBEAVER_SYSTEM_VARIABLES_RESOLVING_ENABLED",
value: false
},
forwardProxy: {
env: "CLOUDBEAVER_APP_FORWARD_PROXY",
value: false
},
publicCredentialsSaveEnabled: {
env: "CLOUDBEAVER_APP_PUBLIC_CREDENTIALS_SAVE_ENABLED",
value: true
},
adminCredentialsSaveEnabled: {
env: "CLOUDBEAVER_APP_ADMIN_CREDENTIALS_SAVE_ENABLED",
value: true
},
resourceManagerEnabled: {
env: "CLOUDBEAVER_APP_RESOURCE_MANAGER_ENABLED",
value: true
},
resourceQuotas: {
resourceManagerFileSizeLimit: {
env: "CLOUDBEAVER_RESOURCE_QUOTA_RESOURCE_MANAGER_FILE_SIZE_LIMIT",
value: 500000
},
sqlMaxRunningQueries: {
env: "CLOUDBEAVER_RESOURCE_QUOTA_SQL_MAX_RUNNING_QUERIES",
value: 100
},
sqlResultSetRowsLimit: {
env: "CLOUDBEAVER_RESOURCE_QUOTA_SQL_RESULT_SET_ROWS_LIMIT",
value: 100000
},
sqlTextPreviewMaxLength: {
env: "CLOUDBEAVER_RESOURCE_QUOTA_SQL_TEXT_PREVIEW_MAX_LENGTH",
value: 4096
},
sqlBinaryPreviewMaxLength: {
env: "CLOUDBEAVER_RESOURCE_QUOTA_SQL_BINARY_PREVIEW_MAX_LENGTH",
value: 261120
}
},
enabledAuthProviders: ["local"],
disabledBetaFeatures: []
}
}
+3 -1
View File
@@ -18,7 +18,6 @@ cd ../..
echo "Pull dbeaver platform"
[ ! -d dbeaver ] && git clone --depth 1 https://github.com/dbeaver/dbeaver.git
[ ! -d dbeaver-common ] && git clone --depth 1 https://github.com/dbeaver/dbeaver-common.git
[ ! -d dbeaver-jdbc-libsql ] && git clone --depth 1 https://github.com/dbeaver/dbeaver-jdbc-libsql.git
cd cloudbeaver/deploy
@@ -32,6 +31,9 @@ if [[ "$?" -ne 0 ]] ; then
fi
cd ../../../deploy
echo "Generate cloudbeaver.conf file"
mvn -f ../apps/config-generator compile exec:java -Dconfig.output="cloudbeaver/conf/cloudbeaver.conf"
echo "Copy server packages"
cp -rp ../server/product/web-server/target/products/io.cloudbeaver.product/all/all/all/* ./cloudbeaver/server
+3 -11
View File
@@ -5,12 +5,8 @@ echo "Build static content"
mkdir -p ./cloudbeaver/web
cd ../../cloudbeaver/common-typescript
cd ../../cloudbeaver/webapp
yarn install --immutable
cd ../common-react
yarn install --immutable
cd ../webapp
yarn install --immutable
cd ./packages/product-default
yarn run bundle
@@ -19,11 +15,7 @@ if [[ "$?" -ne 0 ]] ; then
echo 'Application build failed'; exit $rc
fi
cd ../../../common-typescript
yarn test
cd ../common-react
yarn test
cd ../webapp
cd ../../
yarn test
if [[ "$?" -ne 0 ]] ; then
@@ -36,4 +28,4 @@ echo "Copy static content"
cp -rp ../webapp/packages/product-default/lib/* cloudbeaver/web
echo "Cloudbeaver is ready. Run run-server.sh in cloudbeaver folder to start the server."
echo "Cloudbeaver is ready. Run run-cloudbeaver-server.sh in cloudbeaver folder to start the server."
+4 -2
View File
@@ -20,7 +20,6 @@ echo Pull dbeaver platform
IF NOT EXIST dbeaver git clone https://github.com/dbeaver/dbeaver.git
IF NOT EXIST dbeaver-common git clone https://github.com/dbeaver/dbeaver-common.git
IF NOT EXIST dbeaver-jdbc-libsql git clone https://github.com/dbeaver/dbeaver-jdbc-libsql.git
cd cloudbeaver\deploy
@@ -43,6 +42,9 @@ copy ..\config\DefaultConfiguration\GlobalConfiguration\.dbeaver\data-sources.js
move drivers cloudbeaver >NUL
echo Generate cloudbeaver.conf file
call mvn -f ..\apps\config-generator compile exec:java -Dconfig.output="cloudbeaver\conf\cloudbeaver.conf" || goto :error
echo "Build static content"
mkdir .\cloudbeaver\web
@@ -72,6 +74,6 @@ echo "Copy static content"
xcopy /E /Q ..\webapp\packages\product-default\lib cloudbeaver\web >NUL
echo "Cloudbeaver is ready. Run run-server.bat in cloudbeaver folder to start the server."
echo "Cloudbeaver is ready. Run run-cloudbeaver-server.bat in cloudbeaver folder to start the server."
pause
+3 -2
View File
@@ -1,4 +1,5 @@
FROM ubuntu:24.04
# Ubuntu 24.04 (Noble Numbat)
FROM ubuntu:noble
MAINTAINER DBeaver Corp, devops@dbeaver.com
@@ -31,7 +32,7 @@ RUN set -eux; \
ENV LANG=en_US.UTF-8
ENV JAVA_HOME=/opt/java/openjdk
COPY --from=eclipse-temurin:21 $JAVA_HOME $JAVA_HOME
COPY --from=eclipse-temurin:25-jdk-noble $JAVA_HOME $JAVA_HOME
ENV PATH="${JAVA_HOME}/bin:${PATH}"
RUN set -eux; \
+1 -1
View File
@@ -16,6 +16,6 @@ EXPOSE 8978
RUN find /opt/cloudbeaver -type d -exec chmod 775 {} \;
WORKDIR /opt/cloudbeaver/
RUN chmod +x "run-server.sh" "/opt/cloudbeaver/launch-product.sh"
RUN chmod +x "run-cloudbeaver-server.sh" "/opt/cloudbeaver/launch-product.sh"
ENTRYPOINT ["./launch-product.sh"]
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
set -Eeo pipefail
if [[ $# -eq 0 ]] ;
then
set -- "$@" -help
fi
set -- "$@" -cli-mode
source run-cloudbeaver-server.sh "$@"
+4 -4
View File
@@ -12,8 +12,8 @@ if [ "$(id -u)" -eq 0 ]; then
TARGET_GID=${TARGET_GID:-$DBEAVER_GID}
chown -R $DBEAVER_UID:$DBEAVER_GID $PWD/workspace
# Execute run-server.sh as the dbeaver user with the JAVA_HOME and PATH environment variables
exec su "$TARGET_USER" -c "JAVA_HOME=$JAVA_HOME PATH=$PATH ./run-server.sh"
# Execute run-cloudbeaver-server.sh as the dbeaver user with the JAVA_HOME and PATH environment variables
exec su "$TARGET_USER" -c "JAVA_HOME=$JAVA_HOME PATH=$PATH ./run-cloudbeaver-server.sh $*"
else
exec ./run-server.sh
fi
exec ./run-cloudbeaver-server.sh "$@"
fi
@@ -17,7 +17,7 @@ If Not Defined JAVA_OPTS (
java %JAVA_OPTS% ^
-Dfile.encoding=UTF-8 ^
--add-modules=ALL-SYSTEM ^
--add-modules=ALL-DEFAULT ^
--add-opens=java.base/java.io=ALL-UNNAMED ^
--add-opens=java.base/java.lang=ALL-UNNAMED ^
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED ^
@@ -11,7 +11,7 @@ echo "Starting Cloudbeaver Server"
exec java ${JAVA_OPTS} \
-Dfile.encoding=UTF-8 \
--add-modules=ALL-SYSTEM \
--add-modules=ALL-DEFAULT \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
@@ -35,7 +35,7 @@ exec java ${JAVA_OPTS} \
--add-opens=java.sql/java.sql=ALL-UNNAMED \
-jar ${launcherJar} \
-product io.cloudbeaver.product.ce.product \
"$@" \
-web-config conf/cloudbeaver.conf \
${CLI_OPTS} \
-nl en \
-registryMultiLanguage
-8
View File
@@ -1,8 +0,0 @@
#!/bin/bash
set -Eeo pipefail
CLI_OPTS="$@"
if [[ $# -eq 0 ]] ;
then
CLI_OPTS='-help'
fi
source run-server.sh
-1
View File
@@ -1,3 +1,2 @@
dbeaver-common
dbeaver-jdbc-libsql
dbeaver
@@ -0,0 +1,13 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Vendor: DBeaver Corp
Bundle-Name: Cloudbeaver Web Model
Bundle-SymbolicName: io.cloudbeaver.model.cli;singleton:=true
Bundle-Version: 1.0.13.qualifier
Bundle-Release-Date: 20260706
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-ActivationPolicy: lazy
Require-Bundle: org.jkiss.dbeaver.model.cli;visibility:=reexport
Export-Package: io.cloudbeaver.model.cli
Automatic-Module-Name: io.cloudbeaver.model.cli
Import-Package: org.slf4j
@@ -0,0 +1,5 @@
source.. = src/
output.. = target/classes/
bin.includes = .,\
META-INF/,\
plugin.xml
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
</plugin>
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.cloudbeaver</groupId>
<artifactId>bundles</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<artifactId>io.cloudbeaver.model.cli</artifactId>
<version>1.0.13-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
@@ -0,0 +1,66 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model.cli;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.cli.ApplicationCommandLine;
import org.jkiss.dbeaver.model.cli.ApplicationInstanceController;
import org.jkiss.dbeaver.model.cli.CLIContextImpl;
import org.jkiss.dbeaver.model.cli.CLIRunMeta;
import org.jkiss.dbeaver.model.cli.registry.CLICommandDescriptor;
import picocli.CommandLine;
import java.util.List;
public class CloudBeaverCommandLine extends ApplicationCommandLine<ApplicationInstanceController> {
private final CloudBeaverMixin mixin;
public CloudBeaverCommandLine() {
super();
this.mixin = new CloudBeaverMixin();
}
public CloudBeaverCommandLine(
@NotNull CloudBeaverMixin mixin
) {
super();
this.mixin = mixin;
}
@Override
protected CloudBeaverTopLevelCommand createTopLevelCommand(
@Nullable ApplicationInstanceController applicationInstanceController,
@NotNull CLIContextImpl context,
@NotNull CLIRunMeta runMeta
) {
return new CloudBeaverTopLevelCommand(applicationInstanceController, context, runMeta);
}
@NotNull
@Override
protected CommandLine initCommandLine(
@Nullable ApplicationInstanceController applicationInstanceController,
@NotNull CLIContextImpl context,
@NotNull CLIRunMeta runMeta,
@NotNull List<CLICommandDescriptor> commandsToExecute
) {
var cmd = super.initCommandLine(applicationInstanceController, context, runMeta, commandsToExecute);
cmd.addMixin("cloudbeaver", mixin);
return cmd;
}
}
@@ -16,31 +16,39 @@
*/
package io.cloudbeaver.model.cli;
import org.apache.commons.cli.CommandLine;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.cli.ApplicationInstanceController;
import org.jkiss.dbeaver.model.cli.ApplicationInstanceServer;
import org.jkiss.dbeaver.model.cli.CmdProcessResult;
import org.jkiss.dbeaver.model.cli.CLIProcessResult;
import java.io.IOException;
public class CloudBeaverInstanceServer extends ApplicationInstanceServer<ApplicationInstanceController> {
private final CloudBeaverCommandLine commandLine;
public CloudBeaverInstanceServer() throws IOException {
super(ApplicationInstanceController.class);
this.commandLine = new CloudBeaverCommandLine();
}
public CloudBeaverInstanceServer(@NotNull CloudBeaverCommandLine commandLine) throws IOException {
super(ApplicationInstanceController.class);
this.commandLine = commandLine;
}
@NotNull
@Override
public CmdProcessResult handleCommandLine(@NotNull String[] args) {
CommandLine cmd = CloudBeaverCommandLine.getInstance().getCommandLine(args);
public CLIProcessResult handleCommandLine(@NotNull String[] args) {
try {
return CloudBeaverCommandLine.getInstance().executeCommandLineCommands(
cmd,
return commandLine.executeCommandLineCommands(
this,
false
false,
false,
args
);
} catch (Exception e) {
return new CmdProcessResult(CmdProcessResult.PostAction.ERROR, "Error executing command: " + e.getMessage());
return new CLIProcessResult(CLIProcessResult.PostAction.ERROR, "Error executing command: " + e.getMessage());
}
}
}
@@ -0,0 +1,34 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model.cli;
import org.jkiss.dbeaver.model.cli.model.NonExecutableOption;
import picocli.CommandLine;
/**
* CloudBeaver specific mixin options
*/
public class CloudBeaverMixin {
@NonExecutableOption
@CommandLine.Option(
names = {"-web-config"},
arity = "1",
hidden = true,
scope = CommandLine.ScopeType.INHERIT
)
private String webConfig;
}
@@ -0,0 +1,46 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model.cli;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.cli.ApplicationInstanceController;
import org.jkiss.dbeaver.model.cli.CLIContextImpl;
import org.jkiss.dbeaver.model.cli.CLIRunMeta;
import org.jkiss.dbeaver.model.cli.command.AbstractTopLevelCommand;
import org.jkiss.dbeaver.model.cli.model.NonExecutableOption;
import picocli.CommandLine;
@CommandLine.Command(name = "cbvr", description = "CloudBeaver commands")
public class CloudBeaverTopLevelCommand extends AbstractTopLevelCommand {
@NonExecutableOption
@CommandLine.Option(
names = {NOSPASH_OPTION},
hidden = true,
scope = CommandLine.ScopeType.INHERIT
)
private boolean noSplash;
protected CloudBeaverTopLevelCommand(
@Nullable ApplicationInstanceController controller,
@NotNull CLIContextImpl context,
@NotNull CLIRunMeta meta
) {
super(controller, context, meta);
}
}
@@ -3,21 +3,20 @@ Bundle-ManifestVersion: 2
Bundle-Vendor: DBeaver Corp
Bundle-Name: Cloudbeaver Web Model
Bundle-SymbolicName: io.cloudbeaver.model;singleton:=true
Bundle-Version: 1.0.83.qualifier
Bundle-Release-Date: 20250818
Bundle-Version: 1.0.104.qualifier
Bundle-Release-Date: 20260706
Bundle-RequiredExecutionEnvironment: JavaSE-21
Bundle-ActivationPolicy: lazy
Require-Bundle: org.jkiss.dbeaver.data.gis;visibility:=reexport,
org.jkiss.dbeaver.model;visibility:=reexport,
org.jkiss.dbeaver.model.cli;visibility:=reexport,
org.jkiss.dbeaver.model.sm;visibility:=reexport,
org.jkiss.dbeaver.model.event;visibility:=reexport,
org.jkiss.dbeaver.model.nio;visibility:=reexport,
org.jkiss.dbeaver.registry;visibility:=reexport,
org.jkiss.dbeaver.net.ssh,
org.jkiss.bundle.logback;visibility:=reexport,
org.jkiss.bundle.graphql;visibility:=reexport,
org.jkiss.bundle.apache.dbcp,
com.google.gson;visibility:=reexport,
jakarta.servlet-api;bundle-version:="6.0.0";visibility:=reexport
Export-Package: io.cloudbeaver,
io.cloudbeaver.auth,
@@ -26,17 +25,21 @@ Export-Package: io.cloudbeaver,
io.cloudbeaver.auth.provider.local,
io.cloudbeaver.auth.provisioning,
io.cloudbeaver.websocket,
io.cloudbeaver.websocket.event.client,
io.cloudbeaver.websocket.event.task,
io.cloudbeaver.model,
io.cloudbeaver.model.api.annotation,
io.cloudbeaver.model.api.annotation.enums,
io.cloudbeaver.model.api.annotation.media,
io.cloudbeaver.model.api.annotation.responses,
io.cloudbeaver.model.api.annotation.tags,
io.cloudbeaver.model.app,
io.cloudbeaver.model.config,
io.cloudbeaver.model.apilog,
io.cloudbeaver.model.cli,
io.cloudbeaver.model.events,
io.cloudbeaver.model.fs,
io.cloudbeaver.model.log,
io.cloudbeaver.model.rm,
io.cloudbeaver.model.rm.local,
io.cloudbeaver.model.rm.lock,
io.cloudbeaver.model.session,
io.cloudbeaver.model.user,
io.cloudbeaver.model.utils,
@@ -10,4 +10,10 @@ meta.io.cloudbeaver.model.app.ServletSystemInformationCollector.deploymentType.n
meta.io.cloudbeaver.model.app.ServletSystemInformationCollector.smDbUrl.name=Security manager database URL
meta.io.cloudbeaver.model.app.ServletSystemInformationCollector.smDbDriverName.name=Security manager database driver name
meta.io.cloudbeaver.model.app.ServletSystemInformationCollector.smDbProductName.name=Security manager database product name
meta.io.cloudbeaver.model.app.ServletSystemInformationCollector.smDbProductVersion.name=Security manager database product version
meta.io.cloudbeaver.model.app.ServletSystemInformationCollector.smDbProductVersion.name=Security manager database product version
meta.io.cloudbeaver.model.WebExpertSettingsProperties.readOnly.name = Read-only connection
meta.io.cloudbeaver.model.WebExpertSettingsProperties.autoCommit.name = Auto-commit
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.name = Keep-alive interval (seconds)
meta.io.cloudbeaver.model.WebExpertSettingsProperties.defaultSchema.name = Default schema
meta.io.cloudbeaver.model.WebExpertSettingsProperties.defaultCatalog.name = Default catalog
@@ -0,0 +1,2 @@
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.name = Garder actif (en secondes)
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.description = Pas de déconnexion automatique
@@ -0,0 +1,5 @@
meta.io.cloudbeaver.model.WebExpertSettingsProperties.readOnly.name = Только для чтения
meta.io.cloudbeaver.model.WebExpertSettingsProperties.autoCommit.name = Авто-коммит
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.name = Интервал Keep-alive (в секундах)
meta.io.cloudbeaver.model.WebExpertSettingsProperties.defaultSchema.name = Схема по умолчанию
meta.io.cloudbeaver.model.WebExpertSettingsProperties.defaultCatalog.name = Каталог по умолчанию
@@ -0,0 +1,4 @@
meta.io.cloudbeaver.model.WebExpertSettingsProperties.readOnly.name = Kết nối chỉ đọc
meta.io.cloudbeaver.model.WebExpertSettingsProperties.autoCommit.name = Tự động commit
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.name = Giữ kết nối (tính bằng giây)
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.description = Không tự động ngắt kết nối
@@ -0,0 +1,3 @@
meta.io.cloudbeaver.model.WebExpertSettingsProperties.autoCommit.name = 自动提交
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.name = 保持连接 (秒)
meta.io.cloudbeaver.model.WebExpertSettingsProperties.keepAliveInterval.description = 无自动断开连接
@@ -25,4 +25,34 @@
label="Default secret controller" description="Default void secret controller"/>
</extension>
<extension point="io.cloudbeaver.feature">
<feature id="ssh" label="SSH tunnels for databases" description="Enables SSH tunnels for secure database connections, allowing access to remote databases through encrypted channels" enabledByDefault="true"/>
</extension>
<extension point="org.jkiss.dbeaver.ws.event">
<event topicId="cb_session_task" id="cb_session_task_info_updated"
class="io.cloudbeaver.websocket.event.task.WSSessionTaskInfoEvent"/>
<event topicId="cb_session_task" id="cb_session_task_confirmation_request"
class="io.cloudbeaver.websocket.event.task.WSSessionTaskConfirmationRequestEvent"/>
<event topicId="cb_session_task" id="cb_session_task_query_confirmation_request"
class="io.cloudbeaver.websocket.event.task.WSSessionTaskQueryConfirmationRequestEvent"/>
<event topicId="cb_session_task" id="cb_session_task_query_params_confirmation_request"
class="io.cloudbeaver.websocket.event.task.WSSessionTaskQueryParamsConfirmationEvent"/>
<clientEvent id="cb_client_session_ping" class="io.cloudbeaver.websocket.event.client.WSSessionPingClientEvent"/>
<clientEvent id="cb_client_topic_subscribe" class="io.cloudbeaver.websocket.event.client.WSSubscribeOnTopicClientEvent"/>
<clientEvent id="cb_client_topic_unsubscribe"
class="io.cloudbeaver.websocket.event.client.WSUnsubscribeFromTopicClientEvent"/>
<clientEvent id="cb_client_projects_active"
class="io.cloudbeaver.websocket.event.client.WSUpdateActiveProjectsClientEvent"/>
<clientEvent id="cb_client_session_task_confirmation"
class="io.cloudbeaver.websocket.event.client.WSSessionTaskConfirmationEvent"/>
<clientEvent id="cb_client_session_task_with_parameters_confirmation"
class="io.cloudbeaver.websocket.event.client.WSSessionTaskWithParametersConfirmationEvent"/>
<clientEvent id="cb_client_cancel_action"
class="io.cloudbeaver.websocket.event.client.WSSessionCancelActionClientEvent"/>
</extension>
</plugin>
+1 -1
View File
@@ -10,7 +10,7 @@
<relativePath>../</relativePath>
</parent>
<artifactId>io.cloudbeaver.model</artifactId>
<version>1.0.83-SNAPSHOT</version>
<version>1.0.104-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
@@ -17,18 +17,14 @@
package io.cloudbeaver;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.app.DBPWorkspace;
import org.jkiss.dbeaver.model.auth.SMSessionContext;
import org.jkiss.dbeaver.model.impl.app.BaseProjectImpl;
import org.jkiss.dbeaver.model.rm.RMController;
import org.jkiss.dbeaver.model.rm.RMControllerProvider;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMProjectType;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.Pair;
import org.jkiss.dbeaver.model.rm.*;
import java.nio.file.Path;
import java.util.Collection;
public abstract class BaseWebProjectImpl extends BaseProjectImpl implements RMControllerProvider {
@@ -81,6 +77,12 @@ public abstract class BaseWebProjectImpl extends BaseProjectImpl implements RMCo
return project.getId();
}
@NotNull
@Override
public String getDisplayName() {
return getName();
}
@NotNull
@Override
public Path getAbsolutePath() {
@@ -102,52 +104,25 @@ public abstract class BaseWebProjectImpl extends BaseProjectImpl implements RMCo
return false;
}
/**
* Method for Bulk Update of resources properties paths
*
* @param oldToNewPaths collection of OldPath to NewPath pairs
*/
public void moveResourcePropertiesBatch(@NotNull Collection<Pair<String, String>> oldToNewPaths) {
loadMetadata();
synchronized (metadataSync) {
for (var pathsPair : oldToNewPaths) {
final var oldResourcePath = CommonUtils.normalizeResourcePath(pathsPair.getFirst());
final var newResourcePath = CommonUtils.normalizeResourcePath(pathsPair.getSecond());
final var resProps = resourceProperties.remove(oldResourcePath);
if (resProps != null) {
resourceProperties.put(newResourcePath, resProps);
}
}
}
flushMetadata();
}
/**
* Method for Bulk Remove of resources properties
*/
public boolean resetResourcesPropertiesBatch(@NotNull Collection<String> resourcesPaths) {
loadMetadata();
boolean propertiesChanged = false;
synchronized (metadataSync) {
for (var resourcePath : resourcesPaths) {
var removedProperties = resourceProperties.remove(CommonUtils.normalizeResourcePath(resourcePath));
if (removedProperties != null) {
propertiesChanged = true;
}
}
}
if (propertiesChanged) {
flushMetadata();
}
return propertiesChanged;
}
public Path getMetadataFilePath() {
return getMetadataPath().resolve(METADATA_STORAGE_FILE);
}
@Override
public boolean isPrivateProject() {
return RMProjectType.USER.equals(getRMProject().getType());
}
@Override
public void updateProject(@Nullable String newName, @Nullable String description) throws DBException {
RMProject rmProject = getResourceController().updateProject(this.getId(), new RMProjectInfo(newName, description));
updateProjectInfo(rmProject.getName(), rmProject.getDescription());
}
public void updateProjectInfo(@Nullable String newName, @Nullable String description) {
this.project.setName(newName);
this.project.setDescription(description);
RMEventManager.fireEvent(
new RMEvent(
RMEvent.Action.PROJECT_UPDATE,
project
)
);
}
}
@@ -32,6 +32,8 @@ public interface DBWConstants {
String PERMISSION_SQL_RESULT_UPDATE = "sql-result-update";
String PERMISSION_SQL_EXECUTE_QUERY = "sql-execute-query";
String PERMISSION_FS_RESOURCE_EDIT = "fs-resource-edit";
String GLOBAL_PERMISSION_SCRIPT_EXECUTE = "permission.sql.script.execution";
String GLOBAL_PERMISSION_DATA_EDITOR_IMPORT = "permission.data-editor.import";
String GLOBAL_PERMISSION_DATA_EDITOR_EDITING = "permission.data-editor.editing";
@@ -146,6 +146,8 @@ public class DBWebException extends DBException implements GraphQLError {
} else {
return message;
}
} else if (cause.getMessage() == null && cause.getCause() != null) {
return message + ":\n" + cause.getCause().getClass().getSimpleName();
}
if (CommonUtils.isEmpty(message)) {
if (cause.getMessage() != null) {
@@ -0,0 +1,119 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver;
import io.cloudbeaver.model.WebConnectionConfig;
import io.cloudbeaver.model.app.WebAppConfiguration;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.utils.ServletAppUtils;
import io.cloudbeaver.utils.WebDataSourceUtils;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourcePreferenceStore;
import org.jkiss.utils.CommonUtils;
public class WebConnectionConfigInputHandler<T extends WebConnectionConfig, C extends DataSourceDescriptor> {
private static final Log log = Log.getLog(WebConnectionConfigInputHandler.class);
protected final T input;
protected final DBPDataSourceRegistry registry;
protected final WebSession webSession;
public WebConnectionConfigInputHandler(@NotNull WebSession webSession, @NotNull DBPDataSourceRegistry registry, T configInput) {
this.webSession = webSession;
this.registry = registry;
this.input = configInput;
}
public C createDataSourceContainer() throws DBWebException {
String driverId = input.getDriverId();
if (CommonUtils.isEmpty(driverId)) {
throw new DBWebException("Driver must be specified");
}
DBPDriver driver = WebDataSourceUtils.getDriverById(driverId);
C newDataSource = createDataSourceContainerFromInput(driver);
if (ServletAppUtils.getServletApplication().getAppConfiguration() instanceof WebAppConfiguration webAppConfiguration) {
newDataSource.setNavigatorSettings(webAppConfiguration.getDefaultNavigatorSettings());
}
WebDataSourceUtils.saveAuthProperties(
webSession.getProgressMonitor(),
newDataSource,
newDataSource.getConnectionConfiguration(),
input.getCredentials(),
input.isSaveCredentials(),
input.isSharedCredentials()
);
return newDataSource;
}
public void updateDataSource(@NotNull C dataSource) throws DBWebException {
dataSource.setId(dataSource.getId());
if (!CommonUtils.isEmpty(input.getName())) {
dataSource.setName(input.getName());
}
if (input.getDescription() != null) {
dataSource.setDescription(input.getDescription());
}
dataSource.setFolder(input.getFolder() != null ? registry.getFolder(input.getFolder()) : null);
if (input.isDefaultAutoCommit() != null) {
dataSource.getConnectionConfiguration().getBootstrap().setDefaultAutoCommit(input.isDefaultAutoCommit());
}
WebDataSourceUtils.setConnectionConfiguration(
dataSource.getDriver(),
dataSource.getConnectionConfiguration(),
input
);
WebDataSourceUtils.saveAuthProperties(
webSession.getProgressMonitor(),
dataSource,
dataSource.getConnectionConfiguration(),
input.getCredentials(),
input.isSaveCredentials(),
input.isSharedCredentials()
);
dataSource.setConnectionReadOnly(input.isReadOnly());
DataSourcePreferenceStore preferenceStore = dataSource.getPreferenceStore();
preferenceStore.clear();
preferenceStore.setProperties(input.getDefaultUserPreferences());
}
@NotNull
protected C createDataSourceContainerFromInput(@NotNull DBPDriver driver) {
DBPConnectionConfiguration dsConfig = new DBPConnectionConfiguration();
WebDataSourceUtils.setConnectionConfiguration(driver, dsConfig, input);
C newDataSource = registry.createDataSource(driver, dsConfig);
newDataSource.setSavePassword(true);
newDataSource.setName(CommonUtils.notNull(input.getName(), "NewConnection"));
newDataSource.setDescription(input.getDescription());
newDataSource.setConnectionReadOnly(input.isReadOnly());
if (input.getFolder() != null) {
newDataSource.setFolder(registry.getFolder(input.getFolder()));
}
return newDataSource;
}
}
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package io.cloudbeaver;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.utils.WebEventUtils;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPEvent;
@@ -36,7 +37,7 @@ public class WebDataSourceConnectEventListener implements DBPEventListener {
}
@Override
public void handleDataSourceEvent(DBPEvent event) {
public void handleDataSourceEvent(@NotNull DBPEvent event) {
if (!(event.getObject() instanceof DBPDataSourceContainer container)) {
return;
}
@@ -46,7 +47,7 @@ public class WebDataSourceConnectEventListener implements DBPEventListener {
new WSDataSourceConnectEvent(
container.getProject().getId(),
container.getId(),
webSession.getSessionId(),
WebEventUtils.getSmSessionId(webSession),
webSession.getUserId()
)
);
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,11 +30,13 @@ import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.net.DBWNetworkProfile;
import org.jkiss.dbeaver.model.net.DBWNetworkProfileManager;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.secret.DBSSecretController;
import org.jkiss.dbeaver.model.struct.DBSObjectFilter;
import org.jkiss.dbeaver.registry.DataSourceConfigurationManager;
import org.jkiss.dbeaver.registry.DataSourceParseResults;
import org.jkiss.dbeaver.registry.DataSourcePersistentRegistry;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
@@ -257,28 +259,12 @@ public class WebGlobalProjectRegistryProxy implements DBPDataSourceRegistry, Dat
dataSourceRegistry.removeSavedFilter(filterName);
}
@Nullable
@Override
public DBWNetworkProfile getNetworkProfile(@Nullable String source, @NotNull String name) {
return dataSourceRegistry.getNetworkProfile(source, name);
}
@NotNull
@Override
public List<DBWNetworkProfile> getNetworkProfiles() {
public DBWNetworkProfileManager getNetworkProfiles() {
return dataSourceRegistry.getNetworkProfiles();
}
@Override
public void updateNetworkProfile(@NotNull DBWNetworkProfile profile) {
dataSourceRegistry.updateNetworkProfile(profile);
}
@Override
public void removeNetworkProfile(@NotNull DBWNetworkProfile profile) {
dataSourceRegistry.removeNetworkProfile(profile);
}
@Nullable
@Override
public DBAAuthProfile getAuthProfile(@NotNull String id) {
@@ -377,7 +363,13 @@ public class WebGlobalProjectRegistryProxy implements DBPDataSourceRegistry, Dat
}
@Override
public boolean loadDataSources(
public void initializeDataSources() {
dataSourceRegistry.initializeDataSources();
}
@NotNull
@Override
public DataSourceParseResults loadDataSources(
@NotNull List<DBPDataSourceConfigurationStorage> storages,
@NotNull DataSourceConfigurationManager manager,
@Nullable Collection<String> dataSourceIds, boolean refresh,
@@ -391,6 +383,7 @@ public class WebGlobalProjectRegistryProxy implements DBPDataSourceRegistry, Dat
dataSourceRegistry.saveDataSources();
}
@NotNull
@Override
public DataSourceConfigurationManager getConfigurationManager() {
return dataSourceRegistry.getConfigurationManager();
@@ -406,12 +399,12 @@ public class WebGlobalProjectRegistryProxy implements DBPDataSourceRegistry, Dat
}
@Override
public void persistSecrets(DBSSecretController secretController) throws DBException {
public void persistSecrets(@NotNull DBSSecretController secretController) throws DBException {
dataSourceRegistry.persistSecrets(secretController);
}
@Override
public void resolveSecrets(DBSSecretController secretController) throws DBException {
public void resolveSecrets(@NotNull DBSSecretController secretController) throws DBException {
dataSourceRegistry.resolveSecrets(secretController);
}
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2024 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,8 +23,8 @@ import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPEvent;
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
import org.jkiss.dbeaver.model.auth.SMObjectType;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.security.SMObjectType;
import org.jkiss.dbeaver.model.security.user.SMObjectPermissions;
import java.util.Set;
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,52 +16,54 @@
*/
package io.cloudbeaver;
import io.cloudbeaver.model.WebConnectionConfig;
import io.cloudbeaver.model.WebConnectionInfo;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.utils.WebDataSourceUtils;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPAdaptable;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPObjectSettingsProvider;
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistryCache;
import org.jkiss.dbeaver.model.auth.SMObjectType;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMUtils;
import org.jkiss.dbeaver.model.security.SMControllerUtils;
import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceEvent;
import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceProperty;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.registry.project.BaseProjectSettings;
import org.jkiss.dbeaver.runtime.jobs.DisconnectJob;
import org.jkiss.utils.CommonUtils;
import java.nio.file.Path;
import java.util.*;
import java.util.stream.Collectors;
public class WebSessionProjectImpl extends WebProjectImpl {
public class WebSessionProjectImpl extends WebProjectImpl implements DBPAdaptable {
private static final Log log = Log.getLog(WebSessionProjectImpl.class);
protected final WebSession webSession;
private final Map<String, WebConnectionInfo> connections = new HashMap<>();
private final BaseProjectSettings projectSettings;
private boolean registryIsLoaded = false;
public WebSessionProjectImpl(
@NotNull WebSession webSession,
@NotNull RMProject project
) {
super(
webSession.getWorkspace(),
webSession.getRmController(),
webSession.getSessionContext(),
project,
webSession.getUserPreferenceStore(),
RMUtils.getProjectPath(project)
);
this.webSession = webSession;
this(webSession, project, null);
}
public WebSessionProjectImpl(
@NotNull WebSession webSession,
@NotNull RMProject project,
@NotNull Path path
@Nullable Path path
) {
super(
webSession.getWorkspace(),
@@ -69,9 +71,36 @@ public class WebSessionProjectImpl extends WebProjectImpl {
webSession.getSessionContext(),
project,
webSession.getUserPreferenceStore(),
path
path == null ? RMUtils.getProjectPath(project) : path
);
this.webSession = webSession;
this.projectSettings = new BaseProjectSettings(this) {
@NotNull
@Override
protected Map<SMObjectType, Map<String, Map<String, String>>> loadAllProjectSettings() throws DBException {
if (webSession.getUser() == null) {
return new LinkedHashMap<>();
}
return SMControllerUtils.getObjectSettingsMap(WebSessionProjectImpl.this, webSession.getSecurityController());
}
@Override
protected void saveProjectSettings(
@NotNull SMObjectType objectType,
@NotNull String objectId,
@NotNull Map<String, String> settings
) throws DBException {
if (webSession.getUserContext().isNonAnonymousUserAuthorizedInSM()) {
webSession.getSecurityController().setObjectSettings(getId(), objectType, objectId, settings);
}
}
};
}
@NotNull
public BaseProjectSettings getProjectSettings() {
return projectSettings;
}
@Nullable
@@ -80,6 +109,14 @@ public class WebSessionProjectImpl extends WebProjectImpl {
return webSession.getNavigatorModel();
}
@Override
public <T> T getAdapter(@NotNull Class<T> adapter) {
if (adapter == DBPObjectSettingsProvider.class) {
return adapter.cast(projectSettings);
}
return null;
}
@NotNull
@Override
protected DBPDataSourceRegistry createDataSourceRegistry() {
@@ -156,7 +193,7 @@ public class WebSessionProjectImpl extends WebProjectImpl {
*/
@NotNull
public synchronized WebConnectionInfo addConnection(@NotNull DBPDataSourceContainer dataSourceContainer) {
WebConnectionInfo connection = new WebConnectionInfo(webSession, dataSourceContainer);
WebConnectionInfo connection = createConnectionInfo(dataSourceContainer);
synchronized (connections) {
connections.put(dataSourceContainer.getId(), connection);
}
@@ -181,6 +218,7 @@ public class WebSessionProjectImpl extends WebProjectImpl {
*
* @return connections from cache.
*/
@NotNull
public List<WebConnectionInfo> getConnections() {
if (!registryIsLoaded) {
addDataSourcesToCache();
@@ -194,43 +232,34 @@ public class WebSessionProjectImpl extends WebProjectImpl {
/**
* updates data sources based on event in web session
*
* @param dataSourceIds list of updated connections
* @param eventId id of event
* @param event data source updated event
*/
public synchronized boolean updateProjectDataSources(@NotNull List<String> dataSourceIds, @NotNull String eventId) {
public synchronized boolean updateProjectDataSources(@NotNull WSDataSourceEvent event) {
var sendDataSourceUpdatedEvent = false;
DBPDataSourceRegistry registry = getDataSourceRegistry();
// save old connections
var oldDataSources = dataSourceIds.stream()
.map(registry::getDataSource)
.filter(Objects::nonNull)
.collect(Collectors.toMap(
DBPDataSourceContainer::getId,
registry::createDataSource)
);
if (WSDataSourceEvent.CREATED.equals(eventId) || WSDataSourceEvent.UPDATED.equals(eventId)) {
registry.refreshConfig(dataSourceIds);
if (WSDataSourceEvent.CREATED.equals(event.getId()) || WSDataSourceEvent.UPDATED.equals(event.getId())) {
registry.refreshConfig(event.getDataSourceIds());
}
for (String dsId : dataSourceIds) {
for (String dsId : event.getDataSourceIds()) {
DataSourceDescriptor ds = (DataSourceDescriptor) registry.getDataSource(dsId);
if (ds == null) {
continue;
}
switch (eventId) {
switch (event.getId()) {
case WSDataSourceEvent.CREATED -> {
addConnection(ds);
sendDataSourceUpdatedEvent = true;
}
case WSDataSourceEvent.UPDATED -> {
boolean connectionUpdated = !ds.equalSettings(oldDataSources.get(dsId));
if (connectionUpdated) {
if (event.getProperty() == WSDataSourceProperty.CONFIGURATION) {
WebDataSourceUtils.disconnectDataSource(webSession, ds, true);
}
if (event.getProperty() != WSDataSourceProperty.INTERNAL) {
sendDataSourceUpdatedEvent = true;
WebDataSourceUtils.disconnectDataSource(webSession, ds);
}
// if settings were changed we need to send event
}
case WSDataSourceEvent.DELETED -> {
WebDataSourceUtils.disconnectDataSource(webSession, ds);
WebDataSourceUtils.disconnectDataSource(webSession, ds, false);
if (registry instanceof DBPDataSourceRegistryCache dsrc) {
dsrc.removeDataSourceFromList(ds);
}
@@ -243,4 +272,100 @@ public class WebSessionProjectImpl extends WebProjectImpl {
}
return sendDataSourceUpdatedEvent;
}
@NotNull
public WebConnectionInfo createConnectionInfo(@NotNull DBPDataSourceContainer dataSourceDescriptor) {
return new WebConnectionInfo(webSession, dataSourceDescriptor);
}
@NotNull
public WebConnectionInfo createConnection(@NotNull Map<String, Object> configMap) throws DBWebException {
if (CommonUtils.isEmpty(configMap)) {
throw new DBWebException("Connection configuration parameters are missing");
}
DBPDataSourceContainer newDataSource = getDataSourceContainerFromInput(getConnectionConfigInput(configMap));
return addDataSourceToProject(newDataSource);
}
@NotNull
public WebConnectionInfo addDataSourceToProject(@NotNull DBPDataSourceContainer newDataSource) throws DBWebException {
DBPDataSourceRegistry registry = getDataSourceRegistry();
try {
registry.addDataSource(newDataSource);
registry.checkForErrors();
} catch (DBException e) {
registry.removeDataSource(newDataSource);
throw new DBWebException("Failed to create connection", e);
}
WebConnectionInfo connectionInfo = addConnection(newDataSource);
webSession.addInfoMessage("New connection was created - " + WebDataSourceUtils.getConnectionContainerInfo(
newDataSource));
log.info(String.format(
"New connection was created: [info=%s, user=%s]",
WebDataSourceUtils.getConnectionContainerInfo(newDataSource),
webSession.getUserId()
));
return connectionInfo;
}
@NotNull
public WebConnectionInfo updateConnection(@Nullable Map<String, Object> configMap) throws DBWebException {
WebConnectionConfig config = getConnectionConfigInput(configMap);
WebConnectionInfo connectionInfo = getWebConnectionInfo(config.getConnectionId());
DataSourceDescriptor dataSource = (DataSourceDescriptor) connectionInfo.getDataSourceContainer();
webSession.addInfoMessage("Update connection - " + WebDataSourceUtils.getConnectionContainerInfo(dataSource));
DBPDataSourceRegistry registry = getDataSourceRegistry();
getInputConfigHandler(config).updateDataSource(dataSource);
connectionInfo.setCredentialsSavedInSession(null);
try {
registry.updateDataSource(dataSource);
registry.checkForErrors();
} catch (DBException e) {
throw new DBWebException("Failed to update connection", e);
}
return connectionInfo;
}
public boolean deleteConnection(@NotNull String connectionId) throws DBWebException {
WebConnectionInfo connectionInfo = getWebConnectionInfo(connectionId);
webSession.addInfoMessage("Delete connection - " +
WebDataSourceUtils.getConnectionContainerInfo(connectionInfo.getDataSourceContainer()));
closeAndDeleteConnection(connectionInfo);
log.info(String.format(
"Connection deleted: [info=%s, userId=%s]",
WebDataSourceUtils.getConnectionContainerInfo(connectionInfo.getDataSourceContainer()),
webSession.getUserId()
));
return true;
}
@NotNull
private WebConnectionInfo closeAndDeleteConnection(@NotNull WebConnectionInfo connectionInfo) throws DBWebException {
DBPDataSourceContainer dataSourceContainer = connectionInfo.getDataSourceContainer();
WebDataSourceUtils.disconnectDataSource(webSession, dataSourceContainer, false);
DBPDataSourceRegistry registry = getDataSourceRegistry();
registry.removeDataSource(dataSourceContainer);
removeConnection(dataSourceContainer);
return connectionInfo;
}
@NotNull
public DataSourceDescriptor getDataSourceContainerFromInput(@NotNull WebConnectionConfig configInput) throws DBWebException {
return getInputConfigHandler(configInput).createDataSourceContainer();
}
@NotNull
public WebConnectionConfig getConnectionConfigInput(@Nullable Map<String, Object> configMap) {
return new WebConnectionConfig(configMap == null ? Map.of() : configMap);
}
@NotNull
protected WebConnectionConfigInputHandler getInputConfigHandler(@NotNull WebConnectionConfig configInput) {
return new WebConnectionConfigInputHandler<>(webSession, getDataSourceRegistry(), configInput);
}
}
@@ -74,4 +74,8 @@ public interface SMAuthProviderExternal<AUTH_SESSION extends SMSession> extends
*/
default void postAuthentication() {}
@Override
default boolean supportsOpeningSessionAsChild() {
return true;
}
}
@@ -0,0 +1,40 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.utils.WebEventUtils;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.runtime.AbstractJob;
public abstract class AbstractCancelableJob extends AbstractJob implements CustomCancelableJob {
protected AbstractCancelableJob(@NotNull String name) {
super(name);
}
@Override
public void cancelJob(@NotNull WebSession webSession, @NotNull WebAsyncTaskInfo taskInfo) {
cancelJob(webSession, taskInfo, "Canceled by the user");
}
public void cancelJob(@NotNull WebSession webSession, @NotNull WebAsyncTaskInfo taskInfo, @NotNull String errorMessage) {
taskInfo.setRunning(false);
taskInfo.setJobError(new DBException(errorMessage));
WebEventUtils.sendAsyncTaskEvent(webSession, taskInfo);
}
}
@@ -1,3 +1,19 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model;
import org.jkiss.code.NotNull;
@@ -10,7 +26,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
public abstract class BaseDatasourceAccessCheckHandler implements DBPDataSourceHandler {
@Override
public void beforeConnect(
DBRProgressMonitor monitor,
@NotNull DBRProgressMonitor monitor,
@NotNull DBPDataSourceContainer dataSourceContainer
) throws DBException {
if (isDriverDisabled(dataSourceContainer.getDriver())) {
@@ -20,7 +36,7 @@ public abstract class BaseDatasourceAccessCheckHandler implements DBPDataSourceH
@Override
public void beforeDisconnect(
DBRProgressMonitor monitor,
@NotNull DBRProgressMonitor monitor,
@NotNull DBPDataSourceContainer dataSourceContainer
) throws DBException {
@@ -0,0 +1,50 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model;
import org.jkiss.code.NotNull;
public class WebBasicEnumObjectInfo {
@NotNull
private String displayName;
@NotNull
private String value;
public WebBasicEnumObjectInfo(@NotNull String displayName, @NotNull String value) {
this.displayName = displayName;
this.value = value;
}
@NotNull
public String getDisplayName() {
return displayName;
}
public void setDisplayName(@NotNull String displayName) {
this.displayName = displayName;
}
@NotNull
public String getValue() {
return value;
}
public void setValue(@NotNull String value) {
this.value = value;
}
}
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2024 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,13 +16,14 @@
*/
package io.cloudbeaver.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.connection.DBPDriverConfigurationType;
import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -42,7 +43,7 @@ public class WebConnectionConfig {
private String databaseName;
private String url;
private int keepAliveInterval;
private Integer keepAliveInterval;
private String name;
private String description;
@@ -53,61 +54,71 @@ public class WebConnectionConfig {
private String authModelId;
private Map<String, Object> credentials;
private boolean saveCredentials;
private boolean sharedCredentials;
private Boolean saveCredentials;
private Boolean sharedCredentials;
private Map<String, Object> mainPropertyValues;
private Map<String, Object> expertSettingsValues;
private Map<String, Object> providerProperties;
private List<WebNetworkHandlerConfigInput> networkHandlersConfig;
private DBPDriverConfigurationType configurationType;
private String selectedSecretId;
private boolean defaultAutoCommit;
private Boolean defaultAutoCommit;
private String defaultCatalogName;
private String defaultSchemaName;
@NotNull
private Map<String, String> defaultUserPreferences = new LinkedHashMap<>();
public WebConnectionConfig() {
}
public WebConnectionConfig(Map<String, Object> params) {
if (!CommonUtils.isEmpty(params)) {
connectionId = JSONUtils.getString(params, "connectionId");
driverId = JSONUtils.getString(params, "driverId");
readOnly = JSONUtils.getBoolean(params, "readOnly");
public WebConnectionConfig(@NotNull Map<String, Object> params) {
connectionId = JSONUtils.getString(params, "connectionId");
driverId = JSONUtils.getString(params, "driverId");
host = JSONUtils.getString(params, "host");
port = JSONUtils.getString(params, "port");
serverName = JSONUtils.getString(params, "serverName");
databaseName = JSONUtils.getString(params, "databaseName");
url = JSONUtils.getString(params, "url");
host = JSONUtils.getString(params, "host");
port = JSONUtils.getString(params, "port");
serverName = JSONUtils.getString(params, "serverName");
databaseName = JSONUtils.getString(params, "databaseName");
url = JSONUtils.getString(params, "url");
keepAliveInterval = JSONUtils.getInteger(params, "keepAliveInterval", -1);
defaultAutoCommit = JSONUtils.getBoolean(params, "autocommit", true);
name = JSONUtils.getString(params, "name");
description = JSONUtils.getString(params, "description");
folder = JSONUtils.getString(params, "folder");
name = JSONUtils.getString(params, "name");
description = JSONUtils.getString(params, "description");
folder = JSONUtils.getString(params, "folder");
properties = JSONUtils.getObjectOrNull(params, "properties");
userName = JSONUtils.getString(params, "userName");
userPassword = JSONUtils.getString(params, "userPassword");
selectedSecretId = JSONUtils.getString(params, "selectedSecretId");
properties = JSONUtils.getObjectOrNull(params, "properties");
userName = JSONUtils.getString(params, "userName");
userPassword = JSONUtils.getString(params, "userPassword");
selectedSecretId = JSONUtils.getString(params, "selectedSecretId");
authModelId = JSONUtils.getString(params, "authModelId");
credentials = JSONUtils.getObjectOrNull(params, "credentials");
saveCredentials = JSONUtils.getBoolean(params, "saveCredentials");
sharedCredentials = JSONUtils.getBoolean(params, "sharedCredentials");
authModelId = JSONUtils.getString(params, "authModelId");
credentials = JSONUtils.getObjectOrNull(params, "credentials");
saveCredentials = JSONUtils.getBoolean(params, "saveCredentials");
sharedCredentials = JSONUtils.getBoolean(params, "sharedCredentials");
mainPropertyValues = JSONUtils.getObjectOrNull(params, "mainPropertyValues");
providerProperties = JSONUtils.getObjectOrNull(params, "providerProperties");
expertSettingsValues = JSONUtils.getObjectOrNull(params, "expertSettingsValues");
keepAliveInterval = JSONUtils.getInteger(
expertSettingsValues != null ? expertSettingsValues : params, WebExpertSettingsProperties.PROP_KEEP_ALIVE_INTERVAL, -1);
readOnly = JSONUtils.getBoolean(
expertSettingsValues != null ? expertSettingsValues : params, WebExpertSettingsProperties.PROP_READ_ONLY);
defaultAutoCommit = JSONUtils.getBoolean(
expertSettingsValues != null ? expertSettingsValues : params, WebExpertSettingsProperties.PROP_AUTO_COMMIT, true);
defaultCatalogName = JSONUtils.getString(
expertSettingsValues != null ? expertSettingsValues : params, WebExpertSettingsProperties.PROP_DEFAULT_CATALOG);
defaultSchemaName = JSONUtils.getString(
expertSettingsValues != null ? expertSettingsValues : params,
WebExpertSettingsProperties.PROP_DEFAULT_SCHEMA
);
mainPropertyValues = JSONUtils.getObjectOrNull(params, "mainPropertyValues");
providerProperties = JSONUtils.getObjectOrNull(params, "providerProperties");
defaultCatalogName = JSONUtils.getString(params, "defaultCatalogName");
defaultSchemaName = JSONUtils.getString(params, "defaultSchemaName");
String configType = JSONUtils.getString(params, "configurationType");
configurationType = configType == null ? null : DBPDriverConfigurationType.valueOf(configType);
String configType = JSONUtils.getString(params, "configurationType");
configurationType = configType == null ? null : DBPDriverConfigurationType.valueOf(configType);
networkHandlersConfig = new ArrayList<>();
for (Map<String, Object> nhc : JSONUtils.getObjectList(params, "networkHandlersConfig")) {
networkHandlersConfig.add(new WebNetworkHandlerConfigInput(nhc));
}
Map<String, Object> stringObjectUserPrefMap = JSONUtils.getObject(params, "defaultUserPreferences");
stringObjectUserPrefMap.forEach((key, value) -> defaultUserPreferences.put(key, value.toString()));
networkHandlersConfig = new ArrayList<>();
for (Map<String, Object> nhc : JSONUtils.getObjectList(params, "networkHandlersConfig")) {
networkHandlersConfig.add(new WebNetworkHandlerConfigInput(nhc));
}
}
@@ -116,102 +127,178 @@ public class WebConnectionConfig {
return connectionId;
}
public void setConnectionId(String connectionId) {
this.connectionId = connectionId;
}
@Property
public String getDriverId() {
return driverId;
}
public void setDriverId(String driverId) {
this.driverId = driverId;
}
@Property
public boolean isReadOnly() {
return readOnly;
}
public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
}
@Property
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Property
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Property
public String getFolder() {
return folder;
}
public void setFolder(String folder) {
this.folder = folder;
}
@Property
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
@Property
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
@Property
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
}
@Property
public String getDatabaseName() {
return databaseName;
}
public void setDatabaseName(String databaseName) {
this.databaseName = databaseName;
}
@Property
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Property
public Map<String, Object> getProperties() {
return properties;
}
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}
@Property
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Property
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Property
public String getAuthModelId() {
return authModelId;
}
public void setAuthModelId(String authModelId) {
this.authModelId = authModelId;
}
@Property
public DBPDriverConfigurationType getConfigurationType() {
return configurationType;
}
public void setConfigurationType(DBPDriverConfigurationType configurationType) {
this.configurationType = configurationType;
}
@Property
public Map<String, Object> getCredentials() {
return credentials;
}
public void setCredentials(Map<String, Object> credentials) {
this.credentials = credentials;
}
public List<WebNetworkHandlerConfigInput> getNetworkHandlersConfig() {
return networkHandlersConfig;
}
public void setNetworkHandlersConfig(List<WebNetworkHandlerConfigInput> networkHandlersConfig) {
this.networkHandlersConfig = networkHandlersConfig;
}
@Property
public boolean isSaveCredentials() {
return saveCredentials;
}
public void setSaveCredentials(boolean saveCredentials) {
this.saveCredentials = saveCredentials;
}
@Property
public boolean isSharedCredentials() {
return sharedCredentials;
}
public void setSaveCredentials(boolean saveCredentials) {
this.saveCredentials = saveCredentials;
public void setSharedCredentials(boolean sharedCredentials) {
this.sharedCredentials = sharedCredentials;
}
@Property
@@ -219,33 +306,79 @@ public class WebConnectionConfig {
return mainPropertyValues;
}
public void setMainPropertyValues(Map<String, Object> mainPropertyValues) {
this.mainPropertyValues = mainPropertyValues;
}
@Property
public Map<String, Object> getExpertSettingsValues() {
return expertSettingsValues;
}
public void setExpertSettingsValues(Map<String, Object> expertSettingsValues) {
this.expertSettingsValues = expertSettingsValues;
}
@Property
public Map<String, Object> getProviderProperties() {
return providerProperties;
}
public void setProviderProperties(Map<String, Object> providerProperties) {
this.providerProperties = providerProperties;
}
@Property
public Integer getKeepAliveInterval() {
return keepAliveInterval;
}
public void setKeepAliveInterval(int keepAliveInterval) {
this.keepAliveInterval = keepAliveInterval;
}
@Property
public Boolean isDefaultAutoCommit() {
return defaultAutoCommit;
}
public void setDefaultAutoCommit(boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
}
@Nullable
public String getSelectedSecretId() {
return selectedSecretId;
}
public void setSelectedSecretId(String selectedSecretId) {
this.selectedSecretId = selectedSecretId;
}
@Property
public String getDefaultCatalogName() {
return defaultCatalogName;
}
public void setDefaultCatalogName(String defaultCatalogName) {
this.defaultCatalogName = defaultCatalogName;
}
@Property
public String getDefaultSchemaName() {
return defaultSchemaName;
}
public void setDefaultSchemaName(String defaultSchemaName) {
this.defaultSchemaName = defaultSchemaName;
}
@NotNull
public Map<String, String> getDefaultUserPreferences() {
return defaultUserPreferences;
}
public void setDefaultUserPreferences(@NotNull Map<String, String> defaultUserPreferences) {
this.defaultUserPreferences = defaultUserPreferences;
}
}
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2024 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,9 +16,11 @@
*/
package io.cloudbeaver.model;
import io.cloudbeaver.DBWebException;
import io.cloudbeaver.WebProjectImpl;
import io.cloudbeaver.model.app.BaseWebAppConfiguration;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.server.CBConstants;
import io.cloudbeaver.service.security.SMUtils;
import io.cloudbeaver.service.sql.WebDataFormat;
import io.cloudbeaver.utils.CBModelConstants;
@@ -37,12 +39,15 @@ import org.jkiss.dbeaver.model.connection.DBPDriverConfigurationType;
import org.jkiss.dbeaver.model.impl.auth.AuthModelDatabaseNative;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.model.navigator.DBNDataSource;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNUtils;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
import org.jkiss.dbeaver.model.preferences.DBPPropertySource;
import org.jkiss.dbeaver.model.rm.RMConstants;
import org.jkiss.dbeaver.model.rm.RMProjectPermission;
import org.jkiss.dbeaver.model.runtime.DBRRunnableParametrized;
import org.jkiss.dbeaver.registry.DataSourcePreferenceStore;
import org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor;
import org.jkiss.dbeaver.registry.network.NetworkHandlerRegistry;
import org.jkiss.dbeaver.runtime.DBWorkbench;
@@ -58,7 +63,6 @@ import java.util.stream.Collectors;
public class WebConnectionInfo {
private static final Log log = Log.getLog(WebConnectionInfo.class);
public static final String SECURED_VALUE = "********";
private static final String FEATURE_HAS_TOOLS = "hasTools";
private static final String FEATURE_CONNECTED = "connected";
@@ -126,7 +130,7 @@ public class WebConnectionInfo {
if (canViewReadOnlyConnections()) {
return dataSourceContainer.getConnectionConfiguration().getHostName();
}
return SECURED_VALUE;
return CBConstants.SECURED_VALUE;
}
@Property
@@ -134,7 +138,7 @@ public class WebConnectionInfo {
if (canViewReadOnlyConnections()) {
return dataSourceContainer.getConnectionConfiguration().getHostPort();
}
return SECURED_VALUE;
return CBConstants.SECURED_VALUE;
}
@Property
@@ -147,7 +151,7 @@ public class WebConnectionInfo {
if (canViewReadOnlyConnections()) {
return dataSourceContainer.getConnectionConfiguration().getDatabaseName();
}
return SECURED_VALUE;
return CBConstants.SECURED_VALUE;
}
@Property
@@ -155,7 +159,7 @@ public class WebConnectionInfo {
if (canViewReadOnlyConnections()) {
return dataSourceContainer.getConnectionConfiguration().getUrl();
}
return SECURED_VALUE;
return CBConstants.SECURED_VALUE;
}
@Property
@@ -210,7 +214,8 @@ public class WebConnectionInfo {
@Property
public String getNodePath() {
return DBNDataSource.makeDataSourceItemPath(dataSourceContainer);
DBNDatabaseNode dsNode = DBNUtils.getNodeByObject(dataSourceContainer);
return dsNode == null ? null : dsNode.getNodeUri();
}
@Property
@@ -251,6 +256,7 @@ public class WebConnectionInfo {
}
@Property
@NotNull
public String[] getFeatures() {
List<String> features = new ArrayList<>();
@@ -280,11 +286,29 @@ public class WebConnectionInfo {
}
@Property
@NotNull
public DBNBrowseSettings getNavigatorSettings() {
return dataSourceContainer.getNavigatorSettings();
}
@Property
@NotNull
public DBNBrowseSettings getDefaultNavigatorSettings() {
return dataSourceContainer.getNavigatorSettings().getOriginalSettings();
}
@Property
@NotNull
public Map<String, String> getDefaultUserPreferences() {
DBPPreferenceStore preferenceStore = dataSourceContainer.getPreferenceStore();
if (preferenceStore instanceof DataSourcePreferenceStore dataSourcePreferenceStore) {
return dataSourcePreferenceStore.getProperties();
}
return Collections.emptyMap();
}
@Property
@NotNull
public List<WebDataFormat> getSupportedDataFormats() {
List<WebDataFormat> formats = new ArrayList<>();
formats.add(WebDataFormat.resultset);
@@ -299,11 +323,13 @@ public class WebConnectionInfo {
}
@Property
@NotNull
public WebConnectionOriginInfo getOrigin() {
return new WebConnectionOriginInfo(session, dataSourceContainer, dataSourceContainer.getOrigin());
}
@Property
@NotNull
public DBPDriverConfigurationType getConfigurationType() {
DBPDriverConfigurationType configurationType = dataSourceContainer.getConnectionConfiguration().getConfigurationType();
if (configurationType == null) {
@@ -319,21 +345,37 @@ public class WebConnectionInfo {
!dataSourceContainer.getDriver().isAnonymousAccess();
}
public void validateConnection() throws DBWebException {
}
// we don't show non-secured properties in FE when connecting to DB without saved credentials
private boolean isAuthPropertiesEmpty() {
return Arrays.stream(getAuthProperties()).allMatch(f -> f.hasFeature(DBConstants.PROP_FEATURE_NON_SECURED));
}
@Property
@NotNull
public String getAuthModel() {
String authModelId = dataSourceContainer.getConnectionConfiguration().getAuthModelId();
if (CommonUtils.isEmpty(authModelId)) {
authModelId = AuthModelDatabaseNative.ID;
}
// Patch auth model
DBPAuthModelDescriptor authModel = DBWorkbench.getPlatform().getDataSourceProviderRegistry().getAuthModel(authModelId);
if (authModel != null) {
DBPAuthModelDescriptor amReplace = authModel.getReplacedBy(dataSourceContainer.getDriver());
if (amReplace != null && amReplace != authModel) {
return amReplace.getId();
}
}
return authModelId;
}
@Property
@NotNull
public WebPropertyInfo[] getAuthProperties() {
String authModelId = getAuthModel();
DBPAuthModelDescriptor authModel = DBWorkbench.getPlatform().getDataSourceProviderRegistry().getAuthModel(authModelId);
@@ -356,6 +398,7 @@ public class WebConnectionInfo {
}
@Property
@NotNull
public List<WebNetworkHandlerConfig> getNetworkHandlersConfig() {
var registry = NetworkHandlerRegistry.getInstance();
return dataSourceContainer.getConnectionConfiguration()
@@ -370,20 +413,23 @@ public class WebConnectionInfo {
}
@Property
@Nullable
public Map<String, Object> getCredentials() {
//dataSourceContainer.getConnectionConfiguration().getCredentialsProvider().getCredentials();
return null;
}
@Nullable
public Map<String, Object> getSavedAuthProperties() {
return savedAuthProperties;
}
@Nullable
public List<WebNetworkHandlerConfigInput> getSavedNetworkCredentials() {
return savedNetworkCredentials;
}
public void setSavedCredentials(Map<String, Object> authProperties, List<WebNetworkHandlerConfigInput> networkCredentials) {
public void setSavedCredentials(@Nullable Map<String, Object> authProperties, @Nullable List<WebNetworkHandlerConfigInput> networkCredentials) {
this.savedAuthProperties = authProperties;
this.savedNetworkCredentials = networkCredentials;
}
@@ -408,6 +454,7 @@ public class WebConnectionInfo {
}
@Property
@NotNull
public Map<String, String> getMainPropertyValues() {
Map<String, String> mainProperties = new LinkedHashMap<>();
mainProperties.put(DBConstants.PROP_HOST, getHost());
@@ -417,6 +464,17 @@ public class WebConnectionInfo {
return mainProperties;
}
@Property
public Map<String, Object> getExpertSettingsValues() {
Map<String, Object> expertSettings = new LinkedHashMap<>();
expertSettings.put(WebExpertSettingsProperties.PROP_AUTO_COMMIT, isAutocommit());
expertSettings.put(WebExpertSettingsProperties.PROP_KEEP_ALIVE_INTERVAL, getKeepAliveInterval());
expertSettings.put(WebExpertSettingsProperties.PROP_READ_ONLY, isReadOnly());
expertSettings.put(WebExpertSettingsProperties.PROP_DEFAULT_CATALOG, getDefaultCatalogName());
expertSettings.put(WebExpertSettingsProperties.PROP_DEFAULT_SCHEMA, getDefaultSchemaName());
return expertSettings;
}
@Property
public Map<String, String> getProviderProperties() {
return dataSourceContainer.getConnectionConfiguration().getProviderProperties();
@@ -452,7 +510,7 @@ public class WebConnectionInfo {
return dataSourceContainer.getRequiredExternalAuth();
}
private boolean hasProjectPermission(RMProjectPermission projectPermission) {
private boolean hasProjectPermission(@NotNull RMProjectPermission projectPermission) {
DBPProject project = dataSourceContainer.getProject();
if (!(project instanceof WebProjectImpl webProject)) {
return false;
@@ -492,18 +550,21 @@ public class WebConnectionInfo {
}
@Property
@Nullable
public String getDefaultCatalogName() {
DBPConnectionConfiguration connectionConfiguration = dataSourceContainer.getConnectionConfiguration();
return connectionConfiguration.getBootstrap().getDefaultCatalogName();
}
@Property
@Nullable
public String getDefaultSchemaName() {
DBPConnectionConfiguration connectionConfiguration = dataSourceContainer.getConnectionConfiguration();
return connectionConfiguration.getBootstrap().getDefaultSchemaName();
}
@Property
@NotNull
public List<WebSecretInfo> getSharedSecrets() throws DBException {
return dataSourceContainer.listSharedCredentials()
.stream()
@@ -511,8 +572,8 @@ public class WebConnectionInfo {
.collect(Collectors.toList());
}
@NotNull
@Property
@NotNull
public List<String> getTools() {
if (!session.hasPermission(RMConstants.PERMISSION_DATABASE_DEVELOPER)) {
return List.of();
@@ -531,4 +592,5 @@ public class WebConnectionInfo {
public void setCredentialsSavedInSession(@Nullable Boolean credentialsSavedInSession) {
this.credentialsSavedInSession = credentialsSavedInSession;
}
}
@@ -0,0 +1,88 @@
package io.cloudbeaver.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPObject;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.connection.DBPDriverConstants;
import org.jkiss.dbeaver.model.meta.IPropertyValueValidator;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.utils.CommonUtils;
/**
* Web expert settings properties. Class for returning filtered expert settings properties in web interface.
*/
public class WebExpertSettingsProperties implements DBPObject {
public static final String PROP_READ_ONLY = "readOnly";
public static final String PROP_AUTO_COMMIT = "autocommit";
public static final String PROP_KEEP_ALIVE_INTERVAL = "keepAliveInterval";
public static final String PROP_DEFAULT_CATALOG = "defaultCatalogName";
public static final String PROP_DEFAULT_SCHEMA = "defaultSchemaName";
private final DBPDriver driver;
public WebExpertSettingsProperties(@NotNull DBPDriver driver) {
this.driver = driver;
}
@Property(order = 1, id = PROP_KEEP_ALIVE_INTERVAL, visibleIf = KeepAliveIntervalFieldValidator.class)
public int getKeepAliveInterval() {
return 0;
}
@Property(order = 2, id = PROP_AUTO_COMMIT, visibleIf = AutoCommitFieldValidator.class)
public boolean isAutoCommit() {
return true;
}
@Property(order = 3, id = PROP_READ_ONLY, visibleIf = ReadOnlyFieldValidator.class)
public boolean isReadOnly() {
return false;
}
@Property(order = 4, id = PROP_DEFAULT_CATALOG, visibleIf = DefaultCatalogFieldVisibleValidator.class)
public String getDefaultCatalog() {
return null;
}
@Property(order = 5, id = PROP_DEFAULT_SCHEMA, visibleIf = DefaultSchemaFieldVisibleValidator.class)
public String getDefaultSchema() {
return null;
}
public static class KeepAliveIntervalFieldValidator implements IPropertyValueValidator<WebExpertSettingsProperties, Object> {
@Override
public boolean isValidValue(@NotNull WebExpertSettingsProperties object, @Nullable Object value) throws IllegalArgumentException {
return CommonUtils.toBoolean(!object.driver.isEmbedded(), true);
}
}
public static class AutoCommitFieldValidator implements IPropertyValueValidator<WebExpertSettingsProperties, Object> {
@Override
public boolean isValidValue(@NotNull WebExpertSettingsProperties object, @Nullable Object value) throws IllegalArgumentException {
return CommonUtils.toBoolean(object.driver.getDriverParameter(DBPDriverConstants.PARAM_SUPPORTS_TRANSACTIONS), true);
}
}
public static class ReadOnlyFieldValidator implements IPropertyValueValidator<WebExpertSettingsProperties, Object> {
@Override
public boolean isValidValue(@NotNull WebExpertSettingsProperties object, @Nullable Object value) throws IllegalArgumentException {
return CommonUtils.toBoolean(object.driver.getDriverParameter(DBPDriverConstants.PARAM_SUPPORTS_READ_ONLY_MODE), true);
}
}
public static class DefaultCatalogFieldVisibleValidator implements IPropertyValueValidator<WebExpertSettingsProperties, Object> {
@Override
public boolean isValidValue(@NotNull WebExpertSettingsProperties object, @Nullable Object value) throws IllegalArgumentException {
return CommonUtils.toBoolean(object.driver.getDriverParameter(DBPDriverConstants.PARAM_SUPPORTS_CATALOG_SELECTION), true);
}
}
public static class DefaultSchemaFieldVisibleValidator implements IPropertyValueValidator<WebExpertSettingsProperties, Object> {
@Override
public boolean isValidValue(@NotNull WebExpertSettingsProperties object, @Nullable Object value) throws IllegalArgumentException {
return CommonUtils.toBoolean(object.driver.getDriverParameter(DBPDriverConstants.PARAM_SUPPORTS_SCHEMA_SELECTION), true);
}
}
}
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2024 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
*/
package io.cloudbeaver.model;
import io.cloudbeaver.server.CBConstants;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration;
import org.jkiss.dbeaver.model.net.DBWHandlerType;
@@ -88,7 +89,9 @@ public class WebNetworkHandlerConfig {
DBPPropertyDescriptor[] descriptor = configuration.getHandlerDescriptor().getHandlerProperties();
for (DBPPropertyDescriptor p : descriptor) {
if (p.hasFeature(RegistryConstants.ATTR_PASSWORD)) {
secureProperties.computeIfPresent(p.getId(), (k, v) -> CommonUtils.isEmpty(v) ? null : WebConnectionInfo.SECURED_VALUE);
secureProperties.computeIfPresent(p.getId(), (k, v) ->
CommonUtils.isEmpty(v) ? null : CBConstants.SECURED_VALUE
);
}
}
return secureProperties;
@@ -16,6 +16,8 @@
*/
package io.cloudbeaver.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.net.DBWHandlerType;
import org.jkiss.utils.CommonUtils;
@@ -28,12 +30,14 @@ import java.util.Map;
*/
public class WebNetworkHandlerConfigInput {
@NotNull
private final Map<String, Object> cfg;
public WebNetworkHandlerConfigInput(Map<String, Object> cfg) {
public WebNetworkHandlerConfigInput(@NotNull Map<String, Object> cfg) {
this.cfg = cfg;
}
@Nullable
public DBWHandlerType getType() {
return CommonUtils.valueOf(DBWHandlerType.class, JSONUtils.getString(cfg, "type"), null);
}
@@ -42,6 +46,7 @@ public class WebNetworkHandlerConfigInput {
return JSONUtils.getString(cfg, "id");
}
@Nullable
public Boolean isEnabled() {
if (cfg.containsKey("enabled")) {
return JSONUtils.getBoolean(cfg, "enabled");
@@ -62,11 +67,13 @@ public class WebNetworkHandlerConfigInput {
return JSONUtils.getString(cfg, "password");
}
@Deprecated // use secured properties
// Deprecated. Use secured properties
@Nullable
public String getKey() {
return JSONUtils.getString(cfg, "key");
}
@Nullable
public Boolean isSavePassword() {
if (cfg.containsKey("savePassword")) {
return JSONUtils.getBoolean(cfg, "savePassword");
@@ -75,10 +82,12 @@ public class WebNetworkHandlerConfigInput {
}
}
@Nullable
public Map<String, Object> getProperties() {
return JSONUtils.getObjectOrNull(cfg, "properties");
}
@Nullable
public Map<String, String> getSecureProperties() {
var secureProperties = JSONUtils.getObjectOrNull(cfg, "secureProperties");
if (secureProperties == null) {
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,11 +17,13 @@
package io.cloudbeaver.model;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.server.CBConstants;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.connection.DBPDriverConfigurationType;
import org.jkiss.dbeaver.model.impl.PropertyDescriptor;
import org.jkiss.dbeaver.model.impl.ProviderPropertyDescriptor;
import org.jkiss.dbeaver.model.meta.IPropertyValueListProvider;
import org.jkiss.dbeaver.model.meta.Property;
@@ -30,6 +32,7 @@ import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
import org.jkiss.dbeaver.model.preferences.DBPPropertySource;
import org.jkiss.dbeaver.registry.settings.ProductSettingDescriptor;
import org.jkiss.dbeaver.runtime.properties.ObjectPropertyDescriptor;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.Array;
@@ -136,13 +139,14 @@ public class WebPropertyInfo {
@Property
public Object getValue() throws DBException {
Object value = propertySource == null ? null : propertySource.getPropertyValue(session.getProgressMonitor(), property.getId());
if (property instanceof ObjectPropertyDescriptor) {
ObjectPropertyDescriptor opd = (ObjectPropertyDescriptor) property;
if (!showProtected && opd.isPassword() || opd.isHidden()) {
if (value == null || value.toString().isEmpty()) {
return "";
}
return "******";
if (property instanceof ObjectPropertyDescriptor opd &&
(!showProtected && opd.isPassword() || opd.isHidden())
) {
return maskValue(value);
} else if (property instanceof PropertyDescriptor pd) {
String[] features = pd.getFeatures();
if (features != null && ArrayUtils.contains(features, DBConstants.PROP_FEATURE_PASSWORD)) {
return maskValue(value);
}
}
return value == null ? null : makePropertyValue(value);
@@ -243,9 +247,11 @@ public class WebPropertyInfo {
List<Object> result = new ArrayList<>();
int length = Array.getLength(value);
for (int i = 0; i < length; i++) {
result.add(Array.get(value, i));
result.add(makePropertyValue(Array.get(value, i)));
}
return result;
} else if (value instanceof Enum<?> enumValue) {
return new WebBasicEnumObjectInfo(enumValue.toString(), enumValue.name());
}
Class<?> dataType = property.getDataType();
if (dataType == Boolean.class || dataType == Boolean.TYPE) {
@@ -305,4 +311,13 @@ public class WebPropertyInfo {
READ_ONLY
}
}
@NotNull
private static String maskValue(@Nullable Object value) {
if (value == null || value.toString().isEmpty()) {
return "";
} else {
return CBConstants.SECURED_VALUE;
}
}
}
@@ -0,0 +1,41 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model.api.annotation;
import io.cloudbeaver.model.api.annotation.responses.ApiResponse;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Operation {
String summary() default "";
String description() default "";
String operationId() default "";
String method() default "";
Parameter[] parameters() default {};
ApiResponse[] responses() default {};
}
@@ -0,0 +1,51 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model.api.annotation;
import io.cloudbeaver.model.api.annotation.enums.Explode;
import io.cloudbeaver.model.api.annotation.enums.ParameterIn;
import io.cloudbeaver.model.api.annotation.enums.ParameterStyle;
import io.cloudbeaver.model.api.annotation.media.ArraySchema;
import io.cloudbeaver.model.api.annotation.media.Schema;
import java.lang.annotation.*;
@Repeatable(Parameters.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
public @interface Parameter {
String name() default "";
String description() default "";
boolean required() default false;
String example() default "";
ParameterIn in() default ParameterIn.DEFAULT;
Schema schema() default @Schema;
ArraySchema array() default @ArraySchema;
ParameterStyle style() default ParameterStyle.DEFAULT;
Explode explode() default Explode.DEFAULT;
boolean hidden() default false;
}

Some files were not shown because too many files have changed in this diff Show More