diff --git a/packages/api/package.json b/packages/api/package.json index 24d1b844f..9352b5b73 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -31,7 +31,7 @@ "cors": "^2.8.5", "cross-env": "^6.0.3", "dbgate-datalib": "^6.0.0-alpha.1", - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-sqltree": "^6.0.0-alpha.1", "dbgate-tools": "^6.0.0-alpha.1", "debug": "^4.3.4", diff --git a/packages/api/src/controllers/sessions.js b/packages/api/src/controllers/sessions.js index 08e3e11e2..4f2751483 100644 --- a/packages/api/src/controllers/sessions.js +++ b/packages/api/src/controllers/sessions.js @@ -141,7 +141,7 @@ module.exports = { }, executeQuery_meta: true, - async executeQuery({ sesid, sql, autoCommit }) { + async executeQuery({ sesid, sql, autoCommit, limitRows }) { const session = this.opened.find(x => x.sesid == sesid); if (!session) { throw new Error('Invalid session'); @@ -149,7 +149,7 @@ module.exports = { logger.info({ sesid, sql }, 'Processing query'); this.dispatchMessage(sesid, 'Query execution started'); - session.subprocess.send({ msgtype: 'executeQuery', sql, autoCommit }); + session.subprocess.send({ msgtype: 'executeQuery', sql, autoCommit, limitRows }); return { state: 'ok' }; }, diff --git a/packages/api/src/proc/sessionProcess.js b/packages/api/src/proc/sessionProcess.js index 7560f30f9..8dd193db5 100644 --- a/packages/api/src/proc/sessionProcess.js +++ b/packages/api/src/proc/sessionProcess.js @@ -117,7 +117,7 @@ async function handleExecuteControlCommand({ command }) { } } -async function handleExecuteQuery({ sql, autoCommit }) { +async function handleExecuteQuery({ sql, autoCommit, limitRows }) { lastActivity = new Date().getTime(); await waitConnected(); @@ -146,7 +146,7 @@ async function handleExecuteQuery({ sql, autoCommit }) { ...driver.getQuerySplitterOptions('stream'), returnRichInfo: true, })) { - await handleQueryStream(dbhan, driver, queryStreamInfoHolder, sqlItem); + await handleQueryStream(dbhan, driver, queryStreamInfoHolder, sqlItem, undefined, limitRows); // const handler = new StreamHandler(resultIndex); // const stream = await driver.stream(systemConnection, sqlItem, handler); // handler.stream = stream; diff --git a/packages/api/src/utility/handleQueryStream.js b/packages/api/src/utility/handleQueryStream.js index 76e573a57..f57cb46fd 100644 --- a/packages/api/src/utility/handleQueryStream.js +++ b/packages/api/src/utility/handleQueryStream.js @@ -82,20 +82,27 @@ class QueryStreamTableWriter { } close(afterClose) { - if (this.currentStream) { - this.currentStream.end(() => { - this.writeCurrentStats(true, true); - if (afterClose) afterClose(); - }); - } + return new Promise(resolve => { + if (this.currentStream) { + this.currentStream.end(() => { + this.writeCurrentStats(true, true); + if (afterClose) afterClose(); + resolve(); + }); + } else { + resolve(); + } + }); } } class StreamHandler { - constructor(queryStreamInfoHolder, resolve, startLine, sesid = undefined) { + constructor(queryStreamInfoHolder, resolve, startLine, sesid = undefined, limitRows = undefined) { this.recordset = this.recordset.bind(this); this.startLine = startLine; this.sesid = sesid; + this.limitRows = limitRows; + this.rowsLimitOverflow = false; this.row = this.row.bind(this); // this.error = this.error.bind(this); this.done = this.done.bind(this); @@ -107,6 +114,7 @@ class StreamHandler { this.plannedStats = false; this.queryStreamInfoHolder = queryStreamInfoHolder; this.resolve = resolve; + this.rowCounter = 0; // currentHandlers = [...currentHandlers, this]; } @@ -118,6 +126,9 @@ class StreamHandler { } recordset(columns) { + if (this.rowsLimitOverflow) { + return; + } this.closeCurrentWriter(); this.currentWriter = new QueryStreamTableWriter(this.sesid); this.currentWriter.initializeFromQuery( @@ -125,6 +136,7 @@ class StreamHandler { this.queryStreamInfoHolder.resultIndex ); this.queryStreamInfoHolder.resultIndex += 1; + this.rowCounter = 0; // this.writeCurrentStats(); @@ -135,8 +147,36 @@ class StreamHandler { // }, 500); } row(row) { - if (this.currentWriter) this.currentWriter.row(row); - else if (row.message) process.send({ msgtype: 'info', info: { message: row.message }, sesid: this.sesid }); + if (this.rowsLimitOverflow) { + return; + } + + if (this.limitRows && this.rowCounter >= this.limitRows) { + process.send({ + msgtype: 'info', + info: { message: `Rows limit overflow, loaded ${this.rowCounter} rows, canceling query`, severity: 'error' }, + sesid: this.sesid, + }); + this.rowsLimitOverflow = true; + + this.queryStreamInfoHolder.canceled = true; + if (this.currentWriter) { + this.currentWriter.close().then(() => { + process.exit(0); + }); + } else { + process.exit(0); + } + + return; + } + + if (this.currentWriter) { + this.currentWriter.row(row); + this.rowCounter += 1; + } else if (row.message) { + process.send({ msgtype: 'info', info: { message: row.message }, sesid: this.sesid }); + } // this.onRow(this.jslid); } // error(error) { @@ -161,10 +201,10 @@ class StreamHandler { } } -function handleQueryStream(dbhan, driver, queryStreamInfoHolder, sqlItem, sesid = undefined) { +function handleQueryStream(dbhan, driver, queryStreamInfoHolder, sqlItem, sesid = undefined, limitRows = undefined) { return new Promise((resolve, reject) => { const start = sqlItem.trimStart || sqlItem.start; - const handler = new StreamHandler(queryStreamInfoHolder, resolve, start && start.line, sesid); + const handler = new StreamHandler(queryStreamInfoHolder, resolve, start && start.line, sesid, limitRows); driver.stream(dbhan, sqlItem.text, handler); }); } diff --git a/packages/tools/package.json b/packages/tools/package.json index 146c7a58f..a569a91a2 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -32,7 +32,7 @@ "typescript": "^4.4.3" }, "dependencies": { - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-sqltree": "^6.0.0-alpha.1", "debug": "^4.3.4", "json-stable-stringify": "^1.0.1", diff --git a/packages/web/package.json b/packages/web/package.json index bc756de37..eb5223a84 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -26,7 +26,7 @@ "chartjs-adapter-moment": "^1.0.0", "cross-env": "^7.0.3", "dbgate-datalib": "^6.0.0-alpha.1", - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-sqltree": "^6.0.0-alpha.1", "dbgate-tools": "^6.0.0-alpha.1", "dbgate-types": "^6.0.0-alpha.1", diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 8190919fc..bd9d0df51 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -222,6 +222,7 @@ 'icon premium': 'mdi mdi-star', 'icon upload': 'mdi mdi-upload', + 'icon limit': 'mdi mdi-car-speed-limiter', 'img ok': 'mdi mdi-check-circle color-icon-green', 'img ok-inv': 'mdi mdi-check-circle color-icon-inv-green', diff --git a/packages/web/src/modals/RowsLimitModal.svelte b/packages/web/src/modals/RowsLimitModal.svelte new file mode 100644 index 000000000..12f62606f --- /dev/null +++ b/packages/web/src/modals/RowsLimitModal.svelte @@ -0,0 +1,41 @@ + + + + + Rows limit + + + + + handleSubmit(parseInt(e.detail.value) || null)} + data-testid="RowsLimitModal_setLimit" + /> + handleSubmit(null)} data-testid="RowsLimitModal_setNoLimit" /> + + + + diff --git a/packages/web/src/settings/SettingsModal.svelte b/packages/web/src/settings/SettingsModal.svelte index 0cec20629..6e66932ab 100644 --- a/packages/web/src/settings/SettingsModal.svelte +++ b/packages/web/src/settings/SettingsModal.svelte @@ -227,6 +227,12 @@ ORDER BY + +
Connection
diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte index 41ae484d2..da772adb9 100644 --- a/packages/web/src/tabs/QueryTab.svelte +++ b/packages/web/src/tabs/QueryTab.svelte @@ -144,6 +144,9 @@ import HorizontalSplitter from '../elements/HorizontalSplitter.svelte'; import QueryAiAssistant from '../query/QueryAiAssistant.svelte'; import uuidv1 from 'uuid/v1'; + import ToolStripButton from '../buttons/ToolStripButton.svelte'; + import { getIntSettingsValue } from '../settings/settingsTools'; + import RowsLimitModal from '../modals/RowsLimitModal.svelte'; export let tabid; export let conid; @@ -197,6 +200,21 @@ let isInTransaction = false; let isAutocommit = false; + const queryRowsLimitLocalStorageKey = `tabdata_limitRows_${tabid}`; + function getInitialRowsLimit() { + const storageValue = localStorage.getItem(queryRowsLimitLocalStorageKey); + if (storageValue == 'nolimit') { + return null; + } + if (storageValue) { + return parseInt(storageValue) ?? null; + } + return getIntSettingsValue('sqlEditor.limitRows', null, 1); + } + + let queryRowsLimit = getInitialRowsLimit(); + $: localStorage.setItem(queryRowsLimitLocalStorageKey, queryRowsLimit ? queryRowsLimit.toString() : 'nolimit'); + onMount(() => { intervalId = setInterval(() => { if (!driver?.singleConnectionOnly && sessionId) { @@ -362,6 +380,7 @@ sesid, sql, autoCommit: driver?.implicitTransactions && isAutocommit, + limitRows: queryRowsLimit ? queryRowsLimit : undefined, }); } await apiCall('query-history/write', { @@ -713,6 +732,20 @@ + {#if !driver?.singleConnectionOnly} + + showModal(RowsLimitModal, { + value: queryRowsLimit, + onConfirm: value => { + queryRowsLimit = value; + }, + })} + > + {queryRowsLimit ? `Limit ${queryRowsLimit} rows` : 'Unlimited rows'} + {/if} {#if resultCount == 1} {/if} diff --git a/plugins/dbgate-plugin-duckdb/package.json b/plugins/dbgate-plugin-duckdb/package.json index fd1b853c1..77b0e5f48 100644 --- a/plugins/dbgate-plugin-duckdb/package.json +++ b/plugins/dbgate-plugin-duckdb/package.json @@ -37,7 +37,7 @@ "dependencies": { "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21", - "dbgate-query-splitter": "^4.11.3" + "dbgate-query-splitter": "^4.11.5" }, "optionalDependencies": { "@duckdb/node-api": "^1.2.1-alpha.16" diff --git a/plugins/dbgate-plugin-mongo/package.json b/plugins/dbgate-plugin-mongo/package.json index 8d26925f8..91076b030 100644 --- a/plugins/dbgate-plugin-mongo/package.json +++ b/plugins/dbgate-plugin-mongo/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "bson": "^6.8.0", - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-tools": "^6.0.0-alpha.1", "is-promise": "^4.0.0", "lodash": "^4.17.21", diff --git a/plugins/dbgate-plugin-mssql/package.json b/plugins/dbgate-plugin-mssql/package.json index 1de07ca9b..1e0e21477 100644 --- a/plugins/dbgate-plugin-mssql/package.json +++ b/plugins/dbgate-plugin-mssql/package.json @@ -38,7 +38,7 @@ "dependencies": { "@azure/identity": "^4.6.0", "async-lock": "^1.2.6", - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21", "tedious": "^18.6.1" diff --git a/plugins/dbgate-plugin-mysql/package.json b/plugins/dbgate-plugin-mysql/package.json index 09b74f0a1..b98ebbc44 100644 --- a/plugins/dbgate-plugin-mysql/package.json +++ b/plugins/dbgate-plugin-mysql/package.json @@ -36,7 +36,7 @@ "webpack-cli": "^5.1.4" }, "dependencies": { - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21", "mysql2": "^3.11.3" diff --git a/plugins/dbgate-plugin-oracle/package.json b/plugins/dbgate-plugin-oracle/package.json index 38544c880..bdec6926a 100644 --- a/plugins/dbgate-plugin-oracle/package.json +++ b/plugins/dbgate-plugin-oracle/package.json @@ -35,7 +35,7 @@ "webpack-cli": "^5.1.4" }, "dependencies": { - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21" }, diff --git a/plugins/dbgate-plugin-postgres/package.json b/plugins/dbgate-plugin-postgres/package.json index db0892ccf..fe38f9a72 100644 --- a/plugins/dbgate-plugin-postgres/package.json +++ b/plugins/dbgate-plugin-postgres/package.json @@ -37,7 +37,7 @@ "dependencies": { "wkx": "^0.5.0", "pg-copy-streams": "^6.0.6", - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21", "pg": "^8.11.5" diff --git a/plugins/dbgate-plugin-postgres/src/backend/drivers.js b/plugins/dbgate-plugin-postgres/src/backend/drivers.js index 3413915b6..1daf620da 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/backend/drivers.js @@ -164,6 +164,17 @@ const drivers = driverBases.map(driverBase => ({ return { rows: (res.rows || []).map(row => zipDataRow(row, columns)), columns }; }, stream(dbhan, sql, options) { + const handleNotice = notice => { + const { message, where } = notice; + options.info({ + message, + procedure: where, + time: new Date(), + severity: 'info', + detail: notice, + }); + }; + const query = new pg.Query({ text: sql, rowMode: 'array', @@ -171,6 +182,7 @@ const drivers = driverBases.map(driverBase => ({ let wasHeader = false; let columnsToTransform = null; + dbhan.client.on('notice', handleNotice); query.on('row', row => { if (!wasHeader) { @@ -211,6 +223,7 @@ const drivers = driverBases.map(driverBase => ({ wasHeader = true; } + dbhan.client.off('notice', handleNotice); options.done(); }); @@ -228,6 +241,7 @@ const drivers = driverBases.map(driverBase => ({ time: new Date(), severity: 'error', }); + dbhan.client.off('notice', handleNotice); options.done(); }); diff --git a/plugins/dbgate-plugin-redis/package.json b/plugins/dbgate-plugin-redis/package.json index 89ef1a763..e0581f65c 100644 --- a/plugins/dbgate-plugin-redis/package.json +++ b/plugins/dbgate-plugin-redis/package.json @@ -34,7 +34,7 @@ "webpack-cli": "^5.1.4" }, "dependencies": { - "dbgate-query-splitter": "^4.11.4", + "dbgate-query-splitter": "^4.11.5", "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21", "async": "^3.2.3", diff --git a/plugins/dbgate-plugin-sqlite/package.json b/plugins/dbgate-plugin-sqlite/package.json index 9c45ac25d..6c599ccae 100644 --- a/plugins/dbgate-plugin-sqlite/package.json +++ b/plugins/dbgate-plugin-sqlite/package.json @@ -37,7 +37,7 @@ "dependencies": { "dbgate-tools": "^6.0.0-alpha.1", "lodash": "^4.17.21", - "dbgate-query-splitter": "^4.11.4" + "dbgate-query-splitter": "^4.11.5" }, "optionalDependencies": { "libsql": "0.5.0-pre.6", diff --git a/yarn.lock b/yarn.lock index 92632a452..3d12564cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -542,7 +542,7 @@ "@azure/core-util" "^1.1.0" tslib "^2.6.2" -"@azure/core-auth@^1.7.2", "@azure/core-auth@^1.8.0", "@azure/core-auth@^1.9.0": +"@azure/core-auth@^1.7.1", "@azure/core-auth@^1.7.2", "@azure/core-auth@^1.8.0", "@azure/core-auth@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac" integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw== @@ -590,6 +590,19 @@ dependencies: tslib "^2.6.2" +"@azure/core-rest-pipeline@^1.15.1", "@azure/core-rest-pipeline@^1.8.0": + version "1.20.0" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.20.0.tgz#916d8d6c9cff6b556f0b0bfd5b923526d590e2d9" + integrity sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.8.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.11.0" + "@azure/logger" "^1.0.0" + "@typespec/ts-http-runtime" "^0.2.2" + tslib "^2.6.2" + "@azure/core-rest-pipeline@^1.17.0": version "1.18.2" resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.2.tgz#fa3a83b412d4b3e33edca30a71b1d5838306c075" @@ -625,6 +638,13 @@ dependencies: tslib "^2.6.2" +"@azure/core-tracing@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.2.0.tgz#7be5d53c3522d639cf19042cbcdb19f71bc35ab2" + integrity sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg== + dependencies: + tslib "^2.6.2" + "@azure/core-util@^1.0.0", "@azure/core-util@^1.1.0", "@azure/core-util@^1.2.0", "@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1" @@ -633,6 +653,15 @@ "@azure/abort-controller" "^2.0.0" tslib "^2.6.2" +"@azure/core-util@^1.10.0", "@azure/core-util@^1.8.1": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.12.0.tgz#0b8c2837e6d67c3fbaeae20df34cf07f66b3480d" + integrity sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@typespec/ts-http-runtime" "^0.2.2" + tslib "^2.6.2" + "@azure/core-util@^1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7" @@ -641,6 +670,23 @@ "@azure/abort-controller" "^2.0.0" tslib "^2.6.2" +"@azure/cosmos@^4.1.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-4.3.0.tgz#aeb809f2c7837ea0f5613f2376b9b756ab7f348d" + integrity sha512-0Ls3l1uWBBSphx6YRhnM+w7rSvq8qVugBCdO6kSiNuRYXEf6+YWLjbzz4e7L2kkz/6ScFdZIOJYP+XtkiRYOhA== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.7.1" + "@azure/core-rest-pipeline" "^1.15.1" + "@azure/core-tracing" "^1.1.1" + "@azure/core-util" "^1.8.1" + "@azure/keyvault-keys" "^4.8.0" + fast-json-stable-stringify "^2.1.0" + jsbi "^4.3.0" + priorityqueuejs "^2.0.0" + semaphore "^1.1.0" + tslib "^2.6.2" + "@azure/identity@^4.2.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.9.1.tgz#ee4b9435f1b96bea5985e7dec989760a67d9a119" @@ -678,6 +724,20 @@ stoppable "^1.1.0" tslib "^2.2.0" +"@azure/keyvault-common@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz#91e50df01d9bfa8f55f107bb9cdbc57586b2b2a4" + integrity sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-client" "^1.5.0" + "@azure/core-rest-pipeline" "^1.8.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.10.0" + "@azure/logger" "^1.1.4" + tslib "^2.2.0" + "@azure/keyvault-keys@^4.4.0": version "4.8.0" resolved "https://registry.yarnpkg.com/@azure/keyvault-keys/-/keyvault-keys-4.8.0.tgz#1513b3a187bb3a9a372b5980c593962fb793b2ad" @@ -695,6 +755,24 @@ "@azure/logger" "^1.0.0" tslib "^2.2.0" +"@azure/keyvault-keys@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@azure/keyvault-keys/-/keyvault-keys-4.9.0.tgz#83ad2370429d1f576e6c5c59ff165761e2d8feab" + integrity sha512-ZBP07+K4Pj3kS4TF4XdkqFcspWwBHry3vJSOFM5k5ZABvf7JfiMonvaFk2nBF6xjlEbMpz5PE1g45iTMme0raQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-client" "^1.5.0" + "@azure/core-http-compat" "^2.0.1" + "@azure/core-lro" "^2.2.0" + "@azure/core-paging" "^1.1.1" + "@azure/core-rest-pipeline" "^1.8.1" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.0.0" + "@azure/keyvault-common" "^2.0.0" + "@azure/logger" "^1.0.0" + tslib "^2.2.0" + "@azure/logger@^1.0.0": version "1.1.2" resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.2.tgz#3f4b876cefad328dc14aff8b850d63b611e249dc" @@ -702,6 +780,14 @@ dependencies: tslib "^2.6.2" +"@azure/logger@^1.1.4": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.2.0.tgz#a79aefcdd57d2a96603fab59c9a66e0d9022a564" + integrity sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA== + dependencies: + "@typespec/ts-http-runtime" "^0.2.2" + tslib "^2.6.2" + "@azure/msal-browser@^4.0.1": version "4.2.0" resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-4.2.0.tgz#3d817357cfb0e6aef68bb708df7ccce9fe14ca65" @@ -2576,6 +2662,15 @@ dependencies: "@types/yargs-parser" "*" +"@typespec/ts-http-runtime@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.2.tgz#a0c7458ed99aae6d7eb22efc17a839cec0b4a1b3" + integrity sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w== + dependencies: + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + tslib "^2.6.2" + "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" @@ -4275,15 +4370,10 @@ dbgate-plugin-tools@^1.0.4, dbgate-plugin-tools@^1.0.7, dbgate-plugin-tools@^1.0 pacote "^11.1.13" rimraf "^3.0.2" -dbgate-query-splitter@^4.11.3: - version "4.11.3" - resolved "https://registry.yarnpkg.com/dbgate-query-splitter/-/dbgate-query-splitter-4.11.3.tgz#8391363be4cac1bd41793e1aebb8c85b5b296f28" - integrity sha512-rdAGiaQ3f02gvN2SPMX5j3DqojIL/WE+EArvc7OkVk5QuCDNojWvDjqSxJoOBG593+Ob3lQ8/FYbKRCOYhAVYg== - -dbgate-query-splitter@^4.11.4: - version "4.11.4" - resolved "https://registry.yarnpkg.com/dbgate-query-splitter/-/dbgate-query-splitter-4.11.4.tgz#9a137329b84a5b353aedf41bdf58721fd9e32614" - integrity sha512-t0lsumpMsX0WSAAjsiFoYBSgj/bVOmmt6yFaPdmQcDBp1nq1wVt1iLS6oYYH9d20nrCwjhdUHBxuJFJ+bhimRw== +dbgate-query-splitter@^4.11.5: + version "4.11.5" + resolved "https://registry.yarnpkg.com/dbgate-query-splitter/-/dbgate-query-splitter-4.11.5.tgz#ed57b570303146258bc5e727c6d7f76d19082e29" + integrity sha512-xr4rWhuLeaaDdfdDpMOesCAnZGPUKTH9WPU/GSCHzoKR6NI60IyPjMccShLY+rPIsNw2SZQtbic2aCoFcwI4kg== debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" @@ -5153,7 +5243,7 @@ fast-glob@^3.0.3, fast-glob@^3.3.2: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -7365,6 +7455,11 @@ js2xmlparser@^4.0.2: dependencies: xmlcreate "^2.0.4" +jsbi@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.2.tgz#8a4d05d4e09907d73042135b6aa55a6d161ee955" + integrity sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew== + jsbn@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" @@ -9254,6 +9349,11 @@ printj@~1.1.0: resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== +priorityqueuejs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/priorityqueuejs/-/priorityqueuejs-2.0.0.tgz#96064040edd847ee9dd3013d8e16297399a6bd4f" + integrity sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ== + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -9905,6 +10005,11 @@ secure-json-parse@^2.4.0: resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== +semaphore@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + semiver@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/semiver/-/semiver-1.1.0.tgz#9c97fb02c21c7ce4fcf1b73e2c7a24324bdddd5f"