@grafana/sql 13.0.0-23742865281 → 13.0.0-23743013136
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ResponseParser.cjs.map +1 -1
- package/dist/cjs/SQLVariableEditor.cjs.map +1 -1
- package/dist/cjs/SQLVariableSupport.cjs.map +1 -1
- package/dist/cjs/SQLVariableUtils.cjs.map +1 -1
- package/dist/cjs/components/ConfirmModal.cjs.map +1 -1
- package/dist/cjs/components/DatasetSelector.cjs.map +1 -1
- package/dist/cjs/components/QueryEditor.cjs.map +1 -1
- package/dist/cjs/components/QueryEditorLazy.cjs.map +1 -1
- package/dist/cjs/components/QueryHeader.cjs.map +1 -1
- package/dist/cjs/components/TableSelector.cjs.map +1 -1
- package/dist/cjs/components/configuration/ConnectionLimits.cjs.map +1 -1
- package/dist/cjs/components/configuration/Divider.cjs.map +1 -1
- package/dist/cjs/components/configuration/MaxLifetimeField.cjs.map +1 -1
- package/dist/cjs/components/configuration/MaxOpenConnectionsField.cjs.map +1 -1
- package/dist/cjs/components/configuration/TLSSecretsConfig.cjs.map +1 -1
- package/dist/cjs/components/configuration/useMigrateDatabaseFields.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/QueryEditorRaw.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/QueryToolbox.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/QueryValidator.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/RawEditor.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs +2 -2
- package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/GroupByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/OrderByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/Preview.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SQLGroupByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SQLOrderByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SQLWhereRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectColumn.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectCustomFunctionParameters.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectFunctionParameters.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/VisualEditor.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/WhereRow.cjs.map +1 -1
- package/dist/cjs/constants.cjs.map +1 -1
- package/dist/cjs/datasource/SqlDatasource.cjs.map +1 -1
- package/dist/cjs/defaults.cjs.map +1 -1
- package/dist/cjs/loadResources.cjs.map +1 -1
- package/dist/cjs/types.cjs.map +1 -1
- package/dist/cjs/utils/getColumnsWithIndices.cjs.map +1 -1
- package/dist/cjs/utils/logging.cjs.map +1 -1
- package/dist/cjs/utils/migration.cjs.map +1 -1
- package/dist/cjs/utils/sql.utils.cjs.map +1 -1
- package/dist/cjs/utils/testHelpers.cjs.map +1 -1
- package/dist/cjs/utils/useSqlChange.cjs.map +1 -1
- package/dist/esm/ResponseParser.mjs.map +1 -1
- package/dist/esm/SQLVariableEditor.mjs.map +1 -1
- package/dist/esm/SQLVariableSupport.mjs.map +1 -1
- package/dist/esm/SQLVariableUtils.mjs.map +1 -1
- package/dist/esm/components/ConfirmModal.mjs.map +1 -1
- package/dist/esm/components/DatasetSelector.mjs.map +1 -1
- package/dist/esm/components/QueryEditor.mjs.map +1 -1
- package/dist/esm/components/QueryEditorLazy.mjs.map +1 -1
- package/dist/esm/components/QueryHeader.mjs.map +1 -1
- package/dist/esm/components/TableSelector.mjs.map +1 -1
- package/dist/esm/components/configuration/ConnectionLimits.mjs.map +1 -1
- package/dist/esm/components/configuration/Divider.mjs.map +1 -1
- package/dist/esm/components/configuration/MaxLifetimeField.mjs.map +1 -1
- package/dist/esm/components/configuration/MaxOpenConnectionsField.mjs.map +1 -1
- package/dist/esm/components/configuration/TLSSecretsConfig.mjs.map +1 -1
- package/dist/esm/components/configuration/useMigrateDatabaseFields.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/QueryEditorRaw.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/QueryToolbox.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/QueryValidator.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/RawEditor.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs +2 -2
- package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/GroupByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/OrderByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/Preview.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SQLGroupByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SQLOrderByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SQLWhereRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectColumn.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectCustomFunctionParameters.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectFunctionParameters.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/VisualEditor.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/WhereRow.mjs.map +1 -1
- package/dist/esm/constants.mjs.map +1 -1
- package/dist/esm/datasource/SqlDatasource.mjs.map +1 -1
- package/dist/esm/defaults.mjs.map +1 -1
- package/dist/esm/loadResources.mjs.map +1 -1
- package/dist/esm/types.mjs.map +1 -1
- package/dist/esm/utils/getColumnsWithIndices.mjs.map +1 -1
- package/dist/esm/utils/logging.mjs.map +1 -1
- package/dist/esm/utils/migration.mjs.map +1 -1
- package/dist/esm/utils/sql.utils.mjs.map +1 -1
- package/dist/esm/utils/testHelpers.mjs.map +1 -1
- package/dist/esm/utils/useSqlChange.mjs.map +1 -1
- package/dist/types/ResponseParser.d.ts +1 -1
- package/dist/types/SQLVariableEditor.d.ts +2 -2
- package/dist/types/SQLVariableSupport.d.ts +3 -3
- package/dist/types/SQLVariableUtils.d.ts +1 -1
- package/dist/types/components/DatasetSelector.d.ts +2 -2
- package/dist/types/components/ErrorBoundary.d.ts +1 -1
- package/dist/types/components/QueryEditor.d.ts +4 -4
- package/dist/types/components/QueryHeader.d.ts +2 -2
- package/dist/types/components/SqlComponents.testHelpers.d.ts +3 -3
- package/dist/types/components/TableSelector.d.ts +2 -2
- package/dist/types/components/configuration/ConnectionLimits.d.ts +2 -2
- package/dist/types/components/configuration/MaxLifetimeField.d.ts +1 -1
- package/dist/types/components/configuration/MaxOpenConnectionsField.d.ts +1 -1
- package/dist/types/components/configuration/TLSSecretsConfig.d.ts +1 -1
- package/dist/types/components/configuration/useMigrateDatabaseFields.d.ts +2 -2
- package/dist/types/components/query-editor-raw/QueryEditorRaw.d.ts +2 -2
- package/dist/types/components/query-editor-raw/QueryToolbox.d.ts +1 -1
- package/dist/types/components/query-editor-raw/QueryValidator.d.ts +2 -2
- package/dist/types/components/query-editor-raw/RawEditor.d.ts +1 -1
- package/dist/types/components/visual-query-builder/AwesomeQueryBuilder.d.ts +1 -1
- package/dist/types/components/visual-query-builder/GroupByRow.d.ts +2 -2
- package/dist/types/components/visual-query-builder/OrderByRow.d.ts +2 -2
- package/dist/types/components/visual-query-builder/SQLGroupByRow.d.ts +3 -3
- package/dist/types/components/visual-query-builder/SQLOrderByRow.d.ts +3 -3
- package/dist/types/components/visual-query-builder/SQLWhereRow.d.ts +3 -3
- package/dist/types/components/visual-query-builder/SelectColumn.d.ts +1 -1
- package/dist/types/components/visual-query-builder/SelectCustomFunctionParameters.d.ts +2 -2
- package/dist/types/components/visual-query-builder/SelectFunctionParameters.d.ts +2 -2
- package/dist/types/components/visual-query-builder/SelectRow.d.ts +2 -2
- package/dist/types/components/visual-query-builder/VisualEditor.d.ts +1 -1
- package/dist/types/components/visual-query-builder/WhereRow.d.ts +2 -2
- package/dist/types/constants.d.ts +1 -1
- package/dist/types/datasource/SqlDatasource.d.ts +4 -4
- package/dist/types/defaults.d.ts +1 -1
- package/dist/types/loadResources.d.ts +1 -1
- package/dist/types/types.d.ts +4 -4
- package/dist/types/utils/getColumnsWithIndices.d.ts +2 -2
- package/dist/types/utils/logging.d.ts +1 -1
- package/dist/types/utils/migration.d.ts +2 -2
- package/dist/types/utils/sql.utils.d.ts +3 -3
- package/dist/types/utils/testHelpers.d.ts +1 -1
- package/dist/types/utils/useSqlChange.d.ts +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sources":["../../src/constants.ts"],"sourcesContent":["import { Func, FuncParameter } from './types';\n\nexport const COMMON_FNS: Func[] = [\n { name: 'AVG' },\n { name: 'COUNT' },\n { name: 'MAX' },\n { name: 'MIN' },\n { name: 'SUM' },\n];\n\nconst intervalParam: FuncParameter = {\n name: 'Interval',\n required: true,\n options: () => {\n return Promise.resolve([{ label: '$__interval', value: '$__interval' }]);\n },\n};\nconst fillParam: FuncParameter = {\n name: 'Fill',\n required: false,\n options: () =>\n Promise.resolve([\n { label: '0', value: '0' },\n { label: 'NULL', value: 'NULL' },\n { label: 'previous', value: 'previous' },\n ]),\n};\n\nexport const MACRO_FUNCTIONS = (columnParam: FuncParameter) => [\n {\n name: '$__timeGroup',\n description: 'Time grouping function',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__timeGroupAlias',\n description: 'Time grouping function with time as alias',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__time',\n description: 'An expression to rename the column to time',\n parameters: [columnParam],\n },\n {\n name: '$__timeEpoch',\n parameters: [columnParam],\n },\n {\n name: '$__unixEpochGroup',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__unixEpochGroupAlias',\n parameters: [columnParam, intervalParam, fillParam],\n },\n];\n\nexport const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n"],"names":[],"mappings":";;;;;AAEO,MAAM,UAAA,GAAqB;AAAA,EAChC,EAAE,MAAM,KAAA,EAAM;AAAA,EACd,EAAE,MAAM,OAAA,EAAQ;AAAA,EAChB,EAAE,MAAM,KAAA,EAAM;AAAA,EACd,EAAE,MAAM,KAAA,EAAM;AAAA,EACd,EAAE,MAAM,KAAA;AACV;AAEA,MAAM,aAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,IAAA;AAAA,EACV,SAAS,MAAM;AACb,IAAA,OAAO,OAAA,CAAQ,QAAQ,CAAC,EAAE,OAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,CAAC,CAAA;AAAA,EACzE;AACF,CAAA;AACA,MAAM,SAAA,GAA2B;AAAA,EAC/B,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAS,MACP,OAAA,CAAQ,OAAA,CAAQ;AAAA,IACd,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAO,GAAA,EAAI;AAAA,IACzB,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,IAC/B,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA;AAAW,GACxC;AACL,CAAA;AAEO,MAAM,eAAA,GAAkB,CAAC,WAAA,KAA+B;AAAA,EAC7D;AAAA,IACE,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,wBAAA;AAAA,IACb,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA,GACpD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa,2CAAA;AAAA,IACb,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA,GACpD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,UAAA,EAAY,CAAC,WAAW;AAAA,GAC1B;AAAA,EACA;AAAA,IACE,IAAA,EAAM,cAAA;AAAA,IACN,UAAA,EAAY,CAAC,WAAW;AAAA,GAC1B;AAAA,EACA;AAAA,IACE,IAAA,EAAM,mBAAA;AAAA,IACN,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA,GACpD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,wBAAA;AAAA,IACN,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA;AAEtD;AAEO,MAAM,WAAA,GAAc;AAAA,EACzB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;;;;;;"}
|
|
1
|
+
{"version":3,"file":"constants.cjs","sources":["../../src/constants.ts"],"sourcesContent":["import { type Func, type FuncParameter } from './types';\n\nexport const COMMON_FNS: Func[] = [\n { name: 'AVG' },\n { name: 'COUNT' },\n { name: 'MAX' },\n { name: 'MIN' },\n { name: 'SUM' },\n];\n\nconst intervalParam: FuncParameter = {\n name: 'Interval',\n required: true,\n options: () => {\n return Promise.resolve([{ label: '$__interval', value: '$__interval' }]);\n },\n};\nconst fillParam: FuncParameter = {\n name: 'Fill',\n required: false,\n options: () =>\n Promise.resolve([\n { label: '0', value: '0' },\n { label: 'NULL', value: 'NULL' },\n { label: 'previous', value: 'previous' },\n ]),\n};\n\nexport const MACRO_FUNCTIONS = (columnParam: FuncParameter) => [\n {\n name: '$__timeGroup',\n description: 'Time grouping function',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__timeGroupAlias',\n description: 'Time grouping function with time as alias',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__time',\n description: 'An expression to rename the column to time',\n parameters: [columnParam],\n },\n {\n name: '$__timeEpoch',\n parameters: [columnParam],\n },\n {\n name: '$__unixEpochGroup',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__unixEpochGroupAlias',\n parameters: [columnParam, intervalParam, fillParam],\n },\n];\n\nexport const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n"],"names":[],"mappings":";;;;;AAEO,MAAM,UAAA,GAAqB;AAAA,EAChC,EAAE,MAAM,KAAA,EAAM;AAAA,EACd,EAAE,MAAM,OAAA,EAAQ;AAAA,EAChB,EAAE,MAAM,KAAA,EAAM;AAAA,EACd,EAAE,MAAM,KAAA,EAAM;AAAA,EACd,EAAE,MAAM,KAAA;AACV;AAEA,MAAM,aAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,IAAA;AAAA,EACV,SAAS,MAAM;AACb,IAAA,OAAO,OAAA,CAAQ,QAAQ,CAAC,EAAE,OAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,CAAC,CAAA;AAAA,EACzE;AACF,CAAA;AACA,MAAM,SAAA,GAA2B;AAAA,EAC/B,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAS,MACP,OAAA,CAAQ,OAAA,CAAQ;AAAA,IACd,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAO,GAAA,EAAI;AAAA,IACzB,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,IAC/B,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA;AAAW,GACxC;AACL,CAAA;AAEO,MAAM,eAAA,GAAkB,CAAC,WAAA,KAA+B;AAAA,EAC7D;AAAA,IACE,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,wBAAA;AAAA,IACb,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA,GACpD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa,2CAAA;AAAA,IACb,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA,GACpD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,UAAA,EAAY,CAAC,WAAW;AAAA,GAC1B;AAAA,EACA;AAAA,IACE,IAAA,EAAM,cAAA;AAAA,IACN,UAAA,EAAY,CAAC,WAAW;AAAA,GAC1B;AAAA,EACA;AAAA,IACE,IAAA,EAAM,mBAAA;AAAA,IACN,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA,GACpD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,wBAAA;AAAA,IACN,UAAA,EAAY,CAAC,WAAA,EAAa,aAAA,EAAe,SAAS;AAAA;AAEtD;AAEO,MAAM,WAAA,GAAc;AAAA,EACzB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlDatasource.cjs","sources":["../../../src/datasource/SqlDatasource.ts"],"sourcesContent":["import { lastValueFrom, Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n getDefaultTimeRange,\n DataFrame,\n DataFrameView,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n MetricFindValue,\n ScopedVars,\n CoreApp,\n getSearchFilterScopedVar,\n LegacyMetricFindQueryOptions,\n VariableWithMultiSupport,\n TimeRange,\n} from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport {\n BackendDataSourceResponse,\n DataSourceWithBackend,\n FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n toDataQueryResponse,\n TemplateSrv,\n reportInteraction,\n} from '@grafana/runtime';\n\nimport { ResponseParser } from '../ResponseParser';\nimport { SqlQueryEditorLazy } from '../components/QueryEditorLazy';\nimport { MACRO_NAMES } from '../constants';\nimport { DB, SQLQuery, SQLOptions, SqlQueryModel, QueryFormat, SQLDialect } from '../types';\nimport migrateAnnotation from '../utils/migration';\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n uid: string;\n responseParser: ResponseParser;\n name: string;\n interval: string;\n db: DB;\n preconfiguredDatabase: string;\n dialect: SQLDialect = 'other';\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.responseParser = new ResponseParser();\n this.uid = instanceSettings.uid;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n /*\n The `settingsData.database` will be defined if a default database has been defined in either\n 1) the ConfigurationEditor.tsx, OR 2) the provisioning config file, either under `jsondata.database`, or simply `database`.\n */\n this.preconfiguredDatabase = settingsData.database ?? '';\n this.annotations = {\n prepareAnnotation: migrateAnnotation,\n QueryEditor: SqlQueryEditorLazy,\n };\n }\n\n abstract getDB(): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n getResponseParser() {\n return this.responseParser;\n }\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n return this.getQueryModel().quoteLiteral(value);\n } else {\n return String(value).replace(/'/g, \"''\");\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars) {\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(target.rawSql, scopedVars, this.interpolateVariable),\n format: target.format,\n };\n }\n\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n // This logic reenables the previous SQL behavior regarding what databases are available for the user to query.\n const databaseIssue = this.checkForDatabaseIssue(request);\n\n if (!!databaseIssue) {\n const error = new Error(databaseIssue);\n return throwError(() => error);\n }\n\n request.targets.forEach((target) => {\n if (request.app === CoreApp.Dashboard || request.app === CoreApp.PanelViewer) {\n return;\n }\n\n reportInteraction('grafana_sql_query_executed', {\n datasource: target.datasource?.type,\n editorMode: target.editorMode,\n format: target.format,\n app: request.app,\n });\n });\n\n return super.query(request);\n }\n\n private checkForDatabaseIssue(request: DataQueryRequest<SQLQuery>) {\n // If the datasource is Postgres and there is no default database configured - either never configured or removed - return a database issue.\n if (this.type === 'grafana-postgresql-datasource' && !this.preconfiguredDatabase) {\n return `You do not currently have a default database configured for this data source. Postgres requires a default\n database with which to connect. Please configure one through the Data Sources Configuration page, or if you\n are using a provisioning file, update that configuration file with a default database.`;\n }\n\n // No need to check for database change/update issues if the datasource is being used in Explore.\n if (request.app !== CoreApp.Explore) {\n /*\n If a preconfigured datasource database has been added/updated - and the user has built ANY number of queries using a\n database OTHER than the preconfigured one, return a database issue - since those databases are no longer available.\n The user will need to update their queries to use the preconfigured database.\n */\n if (!!this.preconfiguredDatabase) {\n for (const target of request.targets) {\n // Test for database configuration change only if query was made in `builder` mode.\n if (\n target.editorMode === EditorMode.Builder &&\n target.dataset &&\n target.dataset !== this.preconfiguredDatabase\n ) {\n return `The configuration for this panel's data source has been modified. The previous database used in this panel's\n saved query is no longer available. Please update the query to use the new database option.\n Previous query parameters will be preserved until the query is updated.`;\n }\n }\n }\n }\n\n return;\n }\n\n async metricFindQuery(query: string, options?: LegacyMetricFindQueryOptions): Promise<MetricFindValue[]> {\n const range = options?.range;\n if (range == null) {\n // i cannot create a scenario where this happens, we handle it just to be sure.\n return [];\n }\n\n let refId = 'tempvar';\n if (options && options.variable && options.variable.name) {\n refId = options.variable.name;\n }\n\n const scopedVars = {\n ...options?.scopedVars,\n ...getSearchFilterScopedVar({ query, wildcardChar: '%', options }),\n };\n\n const rawSql = this.templateSrv.replace(query, scopedVars, this.interpolateVariable);\n\n const interpolatedQuery: SQLQuery = {\n refId: refId,\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n // NOTE: we can remove this try-catch when https://github.com/grafana/grafana/issues/82250\n // is fixed.\n let response;\n try {\n response = await this.runMetaQuery(interpolatedQuery, range);\n } catch (error) {\n console.error(error);\n throw new Error('error when executing the sql query');\n }\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n // NOTE: this always runs with the `@grafana/data/getDefaultTimeRange` time range\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const range = getDefaultTimeRange();\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, range);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, range: TimeRange): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n headers: this.getRequestHeaders(),\n data: {\n from: range.from.valueOf().toString(),\n to: range.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0] ?? { fields: [] };\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends LegacyMetricFindQueryOptions {\n refId?: string;\n}\n"],"names":["DataSourceWithBackend","getTemplateSrv","ResponseParser","migrateAnnotation","SqlQueryEditorLazy","throwError","CoreApp","reportInteraction","EditorMode","getSearchFilterScopedVar","QueryFormat","getDefaultTimeRange","DataFrameView","lastValueFrom","getBackendSrv","map","toDataQueryResponse","MACRO_NAMES"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SqlDatasource.cjs","sources":["../../../src/datasource/SqlDatasource.ts"],"sourcesContent":["import { lastValueFrom, type Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n getDefaultTimeRange,\n type DataFrame,\n DataFrameView,\n type DataQuery,\n type DataQueryRequest,\n type DataQueryResponse,\n type DataSourceInstanceSettings,\n type MetricFindValue,\n type ScopedVars,\n CoreApp,\n getSearchFilterScopedVar,\n type LegacyMetricFindQueryOptions,\n type VariableWithMultiSupport,\n type TimeRange,\n} from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport {\n type BackendDataSourceResponse,\n DataSourceWithBackend,\n type FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n toDataQueryResponse,\n type TemplateSrv,\n reportInteraction,\n} from '@grafana/runtime';\n\nimport { ResponseParser } from '../ResponseParser';\nimport { SqlQueryEditorLazy } from '../components/QueryEditorLazy';\nimport { MACRO_NAMES } from '../constants';\nimport { type DB, type SQLQuery, type SQLOptions, type SqlQueryModel, QueryFormat, type SQLDialect } from '../types';\nimport migrateAnnotation from '../utils/migration';\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n uid: string;\n responseParser: ResponseParser;\n name: string;\n interval: string;\n db: DB;\n preconfiguredDatabase: string;\n dialect: SQLDialect = 'other';\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.responseParser = new ResponseParser();\n this.uid = instanceSettings.uid;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n /*\n The `settingsData.database` will be defined if a default database has been defined in either\n 1) the ConfigurationEditor.tsx, OR 2) the provisioning config file, either under `jsondata.database`, or simply `database`.\n */\n this.preconfiguredDatabase = settingsData.database ?? '';\n this.annotations = {\n prepareAnnotation: migrateAnnotation,\n QueryEditor: SqlQueryEditorLazy,\n };\n }\n\n abstract getDB(): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n getResponseParser() {\n return this.responseParser;\n }\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n return this.getQueryModel().quoteLiteral(value);\n } else {\n return String(value).replace(/'/g, \"''\");\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars) {\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(target.rawSql, scopedVars, this.interpolateVariable),\n format: target.format,\n };\n }\n\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n // This logic reenables the previous SQL behavior regarding what databases are available for the user to query.\n const databaseIssue = this.checkForDatabaseIssue(request);\n\n if (!!databaseIssue) {\n const error = new Error(databaseIssue);\n return throwError(() => error);\n }\n\n request.targets.forEach((target) => {\n if (request.app === CoreApp.Dashboard || request.app === CoreApp.PanelViewer) {\n return;\n }\n\n reportInteraction('grafana_sql_query_executed', {\n datasource: target.datasource?.type,\n editorMode: target.editorMode,\n format: target.format,\n app: request.app,\n });\n });\n\n return super.query(request);\n }\n\n private checkForDatabaseIssue(request: DataQueryRequest<SQLQuery>) {\n // If the datasource is Postgres and there is no default database configured - either never configured or removed - return a database issue.\n if (this.type === 'grafana-postgresql-datasource' && !this.preconfiguredDatabase) {\n return `You do not currently have a default database configured for this data source. Postgres requires a default\n database with which to connect. Please configure one through the Data Sources Configuration page, or if you\n are using a provisioning file, update that configuration file with a default database.`;\n }\n\n // No need to check for database change/update issues if the datasource is being used in Explore.\n if (request.app !== CoreApp.Explore) {\n /*\n If a preconfigured datasource database has been added/updated - and the user has built ANY number of queries using a\n database OTHER than the preconfigured one, return a database issue - since those databases are no longer available.\n The user will need to update their queries to use the preconfigured database.\n */\n if (!!this.preconfiguredDatabase) {\n for (const target of request.targets) {\n // Test for database configuration change only if query was made in `builder` mode.\n if (\n target.editorMode === EditorMode.Builder &&\n target.dataset &&\n target.dataset !== this.preconfiguredDatabase\n ) {\n return `The configuration for this panel's data source has been modified. The previous database used in this panel's\n saved query is no longer available. Please update the query to use the new database option.\n Previous query parameters will be preserved until the query is updated.`;\n }\n }\n }\n }\n\n return;\n }\n\n async metricFindQuery(query: string, options?: LegacyMetricFindQueryOptions): Promise<MetricFindValue[]> {\n const range = options?.range;\n if (range == null) {\n // i cannot create a scenario where this happens, we handle it just to be sure.\n return [];\n }\n\n let refId = 'tempvar';\n if (options && options.variable && options.variable.name) {\n refId = options.variable.name;\n }\n\n const scopedVars = {\n ...options?.scopedVars,\n ...getSearchFilterScopedVar({ query, wildcardChar: '%', options }),\n };\n\n const rawSql = this.templateSrv.replace(query, scopedVars, this.interpolateVariable);\n\n const interpolatedQuery: SQLQuery = {\n refId: refId,\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n // NOTE: we can remove this try-catch when https://github.com/grafana/grafana/issues/82250\n // is fixed.\n let response;\n try {\n response = await this.runMetaQuery(interpolatedQuery, range);\n } catch (error) {\n console.error(error);\n throw new Error('error when executing the sql query');\n }\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n // NOTE: this always runs with the `@grafana/data/getDefaultTimeRange` time range\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const range = getDefaultTimeRange();\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, range);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, range: TimeRange): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n headers: this.getRequestHeaders(),\n data: {\n from: range.from.valueOf().toString(),\n to: range.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0] ?? { fields: [] };\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends LegacyMetricFindQueryOptions {\n refId?: string;\n}\n"],"names":["DataSourceWithBackend","getTemplateSrv","ResponseParser","migrateAnnotation","SqlQueryEditorLazy","throwError","CoreApp","reportInteraction","EditorMode","getSearchFilterScopedVar","QueryFormat","getDefaultTimeRange","DataFrameView","lastValueFrom","getBackendSrv","map","toDataQueryResponse","MACRO_NAMES"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.cjs","sources":["../../src/defaults.ts"],"sourcesContent":["import { EditorMode } from '@grafana/plugin-ui';\n\nimport { QueryFormat, SQLQuery } from './types';\nimport { createFunctionField, setGroupByField } from './utils/sql.utils';\n\nexport function applyQueryDefaults(q?: SQLQuery): SQLQuery {\n let editorMode = q?.editorMode || EditorMode.Builder;\n\n // Switching to code editor if the query was created before visual query builder was introduced.\n if (q?.editorMode === undefined && q?.rawSql !== undefined) {\n editorMode = EditorMode.Code;\n }\n\n const result: SQLQuery = {\n ...q,\n refId: q?.refId || 'A',\n format: q?.format !== undefined ? q.format : QueryFormat.Table,\n rawSql: q?.rawSql || '',\n editorMode,\n sql: q?.sql ?? {\n columns: [createFunctionField()],\n groupBy: [setGroupByField()],\n limit: 50,\n },\n };\n\n return result;\n}\n\nexport type QueryWithDefaults = ReturnType<typeof applyQueryDefaults>;\n"],"names":["EditorMode","QueryFormat","createFunctionField","setGroupByField"],"mappings":";;;;;;;;;AAKO,SAAS,mBAAmB,CAAA,EAAwB;AAL3D,EAAA,IAAA,EAAA;AAME,EAAA,IAAI,UAAA,GAAA,CAAa,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,UAAA,KAAcA,mBAAA,CAAW,OAAA;AAG7C,EAAA,IAAA,CAAI,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,UAAA,MAAe,KAAA,CAAA,IAAA,CAAa,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,YAAW,KAAA,CAAA,EAAW;AAC1D,IAAA,UAAA,GAAaA,mBAAA,CAAW,IAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,GAAG,CAAA;AAAA,IACH,KAAA,EAAA,CAAO,uBAAG,KAAA,KAAS,GAAA;AAAA,IACnB,SAAQ,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,MAAA,MAAW,KAAA,CAAA,GAAY,CAAA,CAAE,SAASC,iBAAA,CAAY,KAAA;AAAA,IACzD,MAAA,EAAA,CAAQ,uBAAG,MAAA,KAAU,EAAA;AAAA,IACrB,UAAA;AAAA,IACA,GAAA,EAAA,CAAK,EAAA,GAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,GAAA,KAAH,IAAA,GAAA,EAAA,GAAU;AAAA,MACb,OAAA,EAAS,CAACC,6BAAA,EAAqB,CAAA;AAAA,MAC/B,OAAA,EAAS,CAACC,yBAAA,EAAiB,CAAA;AAAA,MAC3B,KAAA,EAAO;AAAA;AACT,GACF;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"defaults.cjs","sources":["../../src/defaults.ts"],"sourcesContent":["import { EditorMode } from '@grafana/plugin-ui';\n\nimport { QueryFormat, type SQLQuery } from './types';\nimport { createFunctionField, setGroupByField } from './utils/sql.utils';\n\nexport function applyQueryDefaults(q?: SQLQuery): SQLQuery {\n let editorMode = q?.editorMode || EditorMode.Builder;\n\n // Switching to code editor if the query was created before visual query builder was introduced.\n if (q?.editorMode === undefined && q?.rawSql !== undefined) {\n editorMode = EditorMode.Code;\n }\n\n const result: SQLQuery = {\n ...q,\n refId: q?.refId || 'A',\n format: q?.format !== undefined ? q.format : QueryFormat.Table,\n rawSql: q?.rawSql || '',\n editorMode,\n sql: q?.sql ?? {\n columns: [createFunctionField()],\n groupBy: [setGroupByField()],\n limit: 50,\n },\n };\n\n return result;\n}\n\nexport type QueryWithDefaults = ReturnType<typeof applyQueryDefaults>;\n"],"names":["EditorMode","QueryFormat","createFunctionField","setGroupByField"],"mappings":";;;;;;;;;AAKO,SAAS,mBAAmB,CAAA,EAAwB;AAL3D,EAAA,IAAA,EAAA;AAME,EAAA,IAAI,UAAA,GAAA,CAAa,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,UAAA,KAAcA,mBAAA,CAAW,OAAA;AAG7C,EAAA,IAAA,CAAI,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,UAAA,MAAe,KAAA,CAAA,IAAA,CAAa,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,YAAW,KAAA,CAAA,EAAW;AAC1D,IAAA,UAAA,GAAaA,mBAAA,CAAW,IAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,GAAG,CAAA;AAAA,IACH,KAAA,EAAA,CAAO,uBAAG,KAAA,KAAS,GAAA;AAAA,IACnB,SAAQ,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,MAAA,MAAW,KAAA,CAAA,GAAY,CAAA,CAAE,SAASC,iBAAA,CAAY,KAAA;AAAA,IACzD,MAAA,EAAA,CAAQ,uBAAG,MAAA,KAAU,EAAA;AAAA,IACrB,UAAA;AAAA,IACA,GAAA,EAAA,CAAK,EAAA,GAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,GAAA,KAAH,IAAA,GAAA,EAAA,GAAU;AAAA,MACb,OAAA,EAAS,CAACC,6BAAA,EAAqB,CAAA;AAAA,MAC/B,OAAA,EAAS,CAACC,yBAAA,EAAiB,CAAA;AAAA,MAC3B,KAAA,EAAO;AAAA;AACT,GACF;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadResources.cjs","sources":["../../src/loadResources.ts"],"sourcesContent":["import { LANGUAGES, ResourceLoader, Resources } from '@grafana/i18n';\n\nconst resources = LANGUAGES.reduce<Record<string, () => Promise<{ default: Resources }>>>((acc, lang) => {\n acc[lang.code] = async () => await import(`./locales/${lang.code}/grafana-sql.json`);\n return acc;\n}, {});\n\nexport const loadResources: ResourceLoader = async (resolvedLanguage: string) => {\n const translation = await resources[resolvedLanguage]();\n return translation.default;\n};\n"],"names":["LANGUAGES"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,SAAA,GAAYA,cAAA,CAAU,MAAA,CAA8D,CAAC,KAAK,IAAA,KAAS;AACvG,EAAA,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,YAAY,MAAM,iCAAA,CAAO,CAAA,UAAA,EAAa,KAAK,IAAI,CAAA,iBAAA,CAAA,CAAA;AAChE,EAAA,OAAO,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAEE,MAAM,aAAA,GAAgC,OAAO,gBAAA,KAA6B;AAC/E,EAAA,MAAM,WAAA,GAAc,MAAM,SAAA,CAAU,gBAAgB,CAAA,EAAE;AACtD,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;;;;"}
|
|
1
|
+
{"version":3,"file":"loadResources.cjs","sources":["../../src/loadResources.ts"],"sourcesContent":["import { LANGUAGES, type ResourceLoader, type Resources } from '@grafana/i18n';\n\nconst resources = LANGUAGES.reduce<Record<string, () => Promise<{ default: Resources }>>>((acc, lang) => {\n acc[lang.code] = async () => await import(`./locales/${lang.code}/grafana-sql.json`);\n return acc;\n}, {});\n\nexport const loadResources: ResourceLoader = async (resolvedLanguage: string) => {\n const translation = await resources[resolvedLanguage]();\n return translation.default;\n};\n"],"names":["LANGUAGES"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,SAAA,GAAYA,cAAA,CAAU,MAAA,CAA8D,CAAC,KAAK,IAAA,KAAS;AACvG,EAAA,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,YAAY,MAAM,iCAAA,CAAO,CAAA,UAAA,EAAa,KAAK,IAAI,CAAA,iBAAA,CAAA,CAAA;AAChE,EAAA,OAAO,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAEE,MAAM,aAAA,GAAgC,OAAO,gBAAA,KAA6B;AAC/E,EAAA,MAAM,WAAA,GAAc,MAAM,SAAA,CAAU,gBAAgB,CAAA,EAAE;AACtD,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB;;;;"}
|
package/dist/cjs/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","sources":["../../src/types.ts"],"sourcesContent":["import type { JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n DataFrame,\n DataQuery,\n DataSourceJsonData,\n MetricFindValue,\n SelectableValue,\n TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\nimport { CompletionItemKind, EditorMode, LanguageDefinition } from '@grafana/plugin-ui';\n\nimport { QueryWithDefaults } from './defaults';\nimport {\n QueryEditorFunctionExpression,\n QueryEditorGroupByExpression,\n QueryEditorPropertyExpression,\n} from './expressions';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n maxIdleConnsAuto: boolean;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\nexport enum QueryFormat {\n Timeseries = 'time_series',\n Table = 'table',\n}\n\nexport type SQLQueryMeta = { valueField?: string; textField?: string };\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n meta?: SQLQueryMeta;\n}\n\nexport type SQLVariableQuery = { query: string } & SQLQuery;\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: () => Promise<string[]>;\n tables: (dataset?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dispose?: (dsID?: string) => void;\n lookup?: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getEditorLanguageDefinition: () => LanguageDefinition;\n toRawSql: (query: SQLQuery) => string;\n functions: () => Func[];\n}\n\nexport interface FuncParameter {\n name: string;\n required?: boolean;\n options?: (query: SQLQuery) => Promise<SelectableValue[]>;\n}\nexport interface Func {\n name: string;\n parameters?: FuncParameter[];\n description?: string;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n\nexport type SQLDialect = 'postgres' | 'influx' | 'other';\n"],"names":["QueryFormat","toOptionFromData"],"mappings":";;;;;;;AAAA,IAAA,EAAA;AA+CO,IAAK,WAAA,qBAAAA,YAAAA,KAAL;AACL,EAAAA,aAAA,YAAA,CAAA,GAAa,aAAA;AACb,EAAAA,aAAA,OAAA,CAAA,GAAQ,OAAA;AAFE,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA4DL,MAAM,oBAAA,GAAuB;AAAA,EAClC,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,mBAAuB;AAAA,EACtD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA;AAC3B;AAEA,MAAM,mBAAmB,CAAC,KAAA,MAAmB,EAAE,KAAA,EAAO,OAAO,KAAA,EAAM,CAAA;AAE5D,MAAM,YAAW,EAAA,GAAAC,aAAA,KAAA,IAAA,GAAA,EAAA,GAAoB;;;;;;"}
|
|
1
|
+
{"version":3,"file":"types.cjs","sources":["../../src/types.ts"],"sourcesContent":["import type { JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n type DataFrame,\n type DataQuery,\n type DataSourceJsonData,\n type MetricFindValue,\n type SelectableValue,\n type TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\nimport { type CompletionItemKind, type EditorMode, type LanguageDefinition } from '@grafana/plugin-ui';\n\nimport { type QueryWithDefaults } from './defaults';\nimport {\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n} from './expressions';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n maxIdleConnsAuto: boolean;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\nexport enum QueryFormat {\n Timeseries = 'time_series',\n Table = 'table',\n}\n\nexport type SQLQueryMeta = { valueField?: string; textField?: string };\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n meta?: SQLQueryMeta;\n}\n\nexport type SQLVariableQuery = { query: string } & SQLQuery;\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: () => Promise<string[]>;\n tables: (dataset?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dispose?: (dsID?: string) => void;\n lookup?: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getEditorLanguageDefinition: () => LanguageDefinition;\n toRawSql: (query: SQLQuery) => string;\n functions: () => Func[];\n}\n\nexport interface FuncParameter {\n name: string;\n required?: boolean;\n options?: (query: SQLQuery) => Promise<SelectableValue[]>;\n}\nexport interface Func {\n name: string;\n parameters?: FuncParameter[];\n description?: string;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n\nexport type SQLDialect = 'postgres' | 'influx' | 'other';\n"],"names":["QueryFormat","toOptionFromData"],"mappings":";;;;;;;AAAA,IAAA,EAAA;AA+CO,IAAK,WAAA,qBAAAA,YAAAA,KAAL;AACL,EAAAA,aAAA,YAAA,CAAA,GAAa,aAAA;AACb,EAAAA,aAAA,OAAA,CAAA,GAAQ,OAAA;AAFE,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA4DL,MAAM,oBAAA,GAAuB;AAAA,EAClC,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,mBAAuB;AAAA,EACtD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA;AAC3B;AAEA,MAAM,mBAAmB,CAAC,KAAA,MAAmB,EAAE,KAAA,EAAO,OAAO,KAAA,EAAM,CAAA;AAE5D,MAAM,YAAW,EAAA,GAAAC,aAAA,KAAA,IAAA,GAAA,EAAA,GAAoB;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getColumnsWithIndices.cjs","sources":["../../../src/utils/getColumnsWithIndices.ts"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { SQLQuery } from '../types';\n\nexport function getColumnsWithIndices(query: SQLQuery, fields: SelectableValue[]): SelectableValue[] {\n if (!fields || !query.sql?.columns) {\n return fields;\n }\n\n const options = query.sql.columns.map((c, i) => {\n const value = c.name\n ? `${c.name}(${c.parameters?.map((p) => p.name).join(', ')})`\n : c.parameters?.map((p) => p.name).join(', ');\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n\n return [\n {\n value: '',\n label: t('grafana-sql.utils.get-columns-width-indices.label-selected-columns', 'Selected columns'),\n options,\n expanded: true,\n },\n ...fields,\n ];\n}\n"],"names":["_a","t"],"mappings":";;;;;;;AAKO,SAAS,qBAAA,CAAsB,OAAiB,MAAA,EAA8C;AALrG,EAAA,IAAA,EAAA;AAME,EAAA,IAAI,CAAC,MAAA,IAAU,EAAA,CAAC,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,mBAAW,OAAA,CAAA,EAAS;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAU,KAAA,CAAM,GAAA,CAAI,QAAQ,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AAVlD,IAAA,IAAAA,GAAAA,EAAA,EAAA;AAWI,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,GACZ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAA,CAAIA,GAAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CAAA,GAAA,CACxD,EAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAA,CAAM,IAAA,CAAK,IAAA,CAAA;AAC1C,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAC,MAAM,KAAK,CAAA;AAAA,KAC5B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAA;AAAA,MACP,KAAA,EAAOC,MAAA,CAAE,oEAAA,EAAsE,kBAAkB,CAAA;AAAA,MACjG,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,GAAG;AAAA,GACL;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"getColumnsWithIndices.cjs","sources":["../../../src/utils/getColumnsWithIndices.ts"],"sourcesContent":["import { type SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { type SQLQuery } from '../types';\n\nexport function getColumnsWithIndices(query: SQLQuery, fields: SelectableValue[]): SelectableValue[] {\n if (!fields || !query.sql?.columns) {\n return fields;\n }\n\n const options = query.sql.columns.map((c, i) => {\n const value = c.name\n ? `${c.name}(${c.parameters?.map((p) => p.name).join(', ')})`\n : c.parameters?.map((p) => p.name).join(', ');\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n\n return [\n {\n value: '',\n label: t('grafana-sql.utils.get-columns-width-indices.label-selected-columns', 'Selected columns'),\n options,\n expanded: true,\n },\n ...fields,\n ];\n}\n"],"names":["_a","t"],"mappings":";;;;;;;AAKO,SAAS,qBAAA,CAAsB,OAAiB,MAAA,EAA8C;AALrG,EAAA,IAAA,EAAA;AAME,EAAA,IAAI,CAAC,MAAA,IAAU,EAAA,CAAC,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,mBAAW,OAAA,CAAA,EAAS;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAU,KAAA,CAAM,GAAA,CAAI,QAAQ,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AAVlD,IAAA,IAAAA,GAAAA,EAAA,EAAA;AAWI,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,GACZ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAA,CAAIA,GAAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CAAA,GAAA,CACxD,EAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAA,CAAM,IAAA,CAAK,IAAA,CAAA;AAC1C,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAC,MAAM,KAAK,CAAA;AAAA,KAC5B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAA;AAAA,MACP,KAAA,EAAOC,MAAA,CAAE,oEAAA,EAAsE,kBAAkB,CAAA;AAAA,MACjG,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,GAAG;AAAA,GACL;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.cjs","sources":["../../../src/utils/logging.ts"],"sourcesContent":["import { createMonitoringLogger, MonitoringLogger } from '@grafana/runtime';\n\nexport const sqlPluginLogger: MonitoringLogger = createMonitoringLogger('features.plugins.sql');\n"],"names":["createMonitoringLogger"],"mappings":";;;;;;;AAEO,MAAM,eAAA,GAAoCA,+BAAuB,sBAAsB;;;;"}
|
|
1
|
+
{"version":3,"file":"logging.cjs","sources":["../../../src/utils/logging.ts"],"sourcesContent":["import { createMonitoringLogger, type MonitoringLogger } from '@grafana/runtime';\n\nexport const sqlPluginLogger: MonitoringLogger = createMonitoringLogger('features.plugins.sql');\n"],"names":["createMonitoringLogger"],"mappings":";;;;;;;AAEO,MAAM,eAAA,GAAoCA,+BAAuB,sBAAsB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.cjs","sources":["../../../src/utils/migration.ts"],"sourcesContent":["import { AnnotationQuery } from '@grafana/data';\n\nimport { applyQueryDefaults } from '../defaults';\nimport { SQLQuery } from '../types';\n\nexport default function migrateAnnotation(annotation: AnnotationQuery<SQLQuery>) {\n const oldQuery = typeof annotation.rawQuery === 'string' ? annotation.rawQuery : null;\n\n if (!oldQuery) {\n return annotation;\n }\n\n const newQuery = applyQueryDefaults({ refId: 'Annotation', ...(annotation.target ?? {}), rawSql: oldQuery });\n\n return {\n ...annotation,\n rawQuery: undefined,\n workspace: undefined,\n subscription: undefined,\n queryType: undefined,\n target: newQuery,\n };\n}\n"],"names":["applyQueryDefaults"],"mappings":";;;;;AAKA,SAAwB,kBAAkB,UAAA,EAAuC;AALjF,EAAA,IAAA,EAAA;AAME,EAAA,MAAM,WAAW,OAAO,UAAA,CAAW,QAAA,KAAa,QAAA,GAAW,WAAW,QAAA,GAAW,IAAA;AAEjF,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAWA,2BAAA,CAAmB,EAAE,KAAA,EAAO,YAAA,EAAc,GAAA,CAAI,EAAA,GAAA,UAAA,CAAW,MAAA,KAAX,IAAA,GAAA,EAAA,GAAqB,EAAC,EAAI,MAAA,EAAQ,UAAU,CAAA;AAE3G,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,QAAA,EAAU,KAAA,CAAA;AAAA,IACV,SAAA,EAAW,KAAA,CAAA;AAAA,IACX,YAAA,EAAc,KAAA,CAAA;AAAA,IACd,SAAA,EAAW,KAAA,CAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"migration.cjs","sources":["../../../src/utils/migration.ts"],"sourcesContent":["import { type AnnotationQuery } from '@grafana/data';\n\nimport { applyQueryDefaults } from '../defaults';\nimport { type SQLQuery } from '../types';\n\nexport default function migrateAnnotation(annotation: AnnotationQuery<SQLQuery>) {\n const oldQuery = typeof annotation.rawQuery === 'string' ? annotation.rawQuery : null;\n\n if (!oldQuery) {\n return annotation;\n }\n\n const newQuery = applyQueryDefaults({ refId: 'Annotation', ...(annotation.target ?? {}), rawSql: oldQuery });\n\n return {\n ...annotation,\n rawQuery: undefined,\n workspace: undefined,\n subscription: undefined,\n queryType: undefined,\n target: newQuery,\n };\n}\n"],"names":["applyQueryDefaults"],"mappings":";;;;;AAKA,SAAwB,kBAAkB,UAAA,EAAuC;AALjF,EAAA,IAAA,EAAA;AAME,EAAA,MAAM,WAAW,OAAO,UAAA,CAAW,QAAA,KAAa,QAAA,GAAW,WAAW,QAAA,GAAW,IAAA;AAEjF,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAWA,2BAAA,CAAmB,EAAE,KAAA,EAAO,YAAA,EAAc,GAAA,CAAI,EAAA,GAAA,UAAA,CAAW,MAAA,KAAX,IAAA,GAAA,EAAA,GAAqB,EAAC,EAAI,MAAA,EAAQ,UAAU,CAAA;AAE3G,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,QAAA,EAAU,KAAA,CAAA;AAAA,IACV,SAAA,EAAW,KAAA,CAAA;AAAA,IACX,YAAA,EAAc,KAAA,CAAA;AAAA,IACd,SAAA,EAAW,KAAA,CAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.utils.cjs","sources":["../../../src/utils/sql.utils.ts"],"sourcesContent":["import { SelectableValue, toOption } from '@grafana/data';\n\nimport {\n QueryEditorExpressionType,\n QueryEditorFunctionExpression,\n QueryEditorFunctionParameterExpression,\n QueryEditorGroupByExpression,\n QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { SQLExpression } from '../types';\n\nexport function createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name && c.alias) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)}) AS ${c.alias}`;\n } else if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else if (c.alias) {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)} AS ${c.alias}`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport const haveColumns = (columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> => {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n};\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n\n/**\n * Retrieves the column value from a QueryEditorFunctionParameterExpression object.\n *\n * @param column - The QueryEditorFunctionParameterExpression object representing the column.\n * @returns The column value as a SelectableValue<string> or null if the column is undefined or null.\n */\nexport function getColumnValue(\n column?: QueryEditorFunctionParameterExpression | QueryEditorFunctionExpression\n): SelectableValue<string> | null {\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n"],"names":["QueryEditorExpressionType","QueryEditorPropertyType","toOption"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql.utils.cjs","sources":["../../../src/utils/sql.utils.ts"],"sourcesContent":["import { type SelectableValue, toOption } from '@grafana/data';\n\nimport {\n QueryEditorExpressionType,\n type QueryEditorFunctionExpression,\n type QueryEditorFunctionParameterExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { type SQLExpression } from '../types';\n\nexport function createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name && c.alias) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)}) AS ${c.alias}`;\n } else if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else if (c.alias) {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)} AS ${c.alias}`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport const haveColumns = (columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> => {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n};\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n\n/**\n * Retrieves the column value from a QueryEditorFunctionParameterExpression object.\n *\n * @param column - The QueryEditorFunctionParameterExpression object representing the column.\n * @returns The column value as a SelectableValue<string> or null if the column is undefined or null.\n */\nexport function getColumnValue(\n column?: QueryEditorFunctionParameterExpression | QueryEditorFunctionExpression\n): SelectableValue<string> | null {\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n"],"names":["QueryEditorExpressionType","QueryEditorPropertyType","toOption"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testHelpers.cjs","sources":["../../../src/utils/testHelpers.ts"],"sourcesContent":["import { CustomVariableModel, LoadingState, VariableHide } from '@grafana/data';\n\nexport function makeVariable(id: string, name: string, attributes?: Partial<CustomVariableModel>): CustomVariableModel {\n return {\n multi: false,\n type: 'custom',\n includeAll: false,\n current: {},\n options: [],\n query: '',\n rootStateKey: null,\n global: false,\n hide: VariableHide.dontHide,\n skipUrlSync: false,\n index: -1,\n state: LoadingState.NotStarted,\n error: null,\n description: null,\n ...attributes,\n id,\n name,\n };\n}\n"],"names":["VariableHide","LoadingState"],"mappings":";;;;;;;AAEO,SAAS,YAAA,CAAa,EAAA,EAAY,IAAA,EAAc,UAAA,EAAgE;AACrH,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,KAAA,EAAO,EAAA;AAAA,IACP,YAAA,EAAc,IAAA;AAAA,IACd,MAAA,EAAQ,KAAA;AAAA,IACR,MAAMA,iBAAA,CAAa,QAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,KAAA,EAAO,CAAA,CAAA;AAAA,IACP,OAAOC,iBAAA,CAAa,UAAA;AAAA,IACpB,KAAA,EAAO,IAAA;AAAA,IACP,WAAA,EAAa,IAAA;AAAA,IACb,GAAG,UAAA;AAAA,IACH,EAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"testHelpers.cjs","sources":["../../../src/utils/testHelpers.ts"],"sourcesContent":["import { type CustomVariableModel, LoadingState, VariableHide } from '@grafana/data';\n\nexport function makeVariable(id: string, name: string, attributes?: Partial<CustomVariableModel>): CustomVariableModel {\n return {\n multi: false,\n type: 'custom',\n includeAll: false,\n current: {},\n options: [],\n query: '',\n rootStateKey: null,\n global: false,\n hide: VariableHide.dontHide,\n skipUrlSync: false,\n index: -1,\n state: LoadingState.NotStarted,\n error: null,\n description: null,\n ...attributes,\n id,\n name,\n };\n}\n"],"names":["VariableHide","LoadingState"],"mappings":";;;;;;;AAEO,SAAS,YAAA,CAAa,EAAA,EAAY,IAAA,EAAc,UAAA,EAAgE;AACrH,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,KAAA,EAAO,EAAA;AAAA,IACP,YAAA,EAAc,IAAA;AAAA,IACd,MAAA,EAAQ,KAAA;AAAA,IACR,MAAMA,iBAAA,CAAa,QAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,KAAA,EAAO,CAAA,CAAA;AAAA,IACP,OAAOC,iBAAA,CAAa,UAAA;AAAA,IACpB,KAAA,EAAO,IAAA;AAAA,IACP,WAAA,EAAa,IAAA;AAAA,IACb,GAAG,UAAA;AAAA,IACH,EAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSqlChange.cjs","sources":["../../../src/utils/useSqlChange.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { DB, SQLExpression, SQLQuery } from '../types';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = db.toRawSql;\n const rawSql = toRawSql({ sql, dataset: query.dataset, table: query.table, refId: query.refId });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n"],"names":["useCallback"],"mappings":";;;;;;;AAUO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAG,EAAiB;AACvE,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,GAAA,KAAuB;AACtB,MAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AACpB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAC/F,MAAA,MAAM,QAAA,GAAqB,EAAE,GAAG,KAAA,EAAO,KAAK,MAAA,EAAO;AACnD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,EAAA,EAAI,aAAA,EAAe,KAAK;AAAA,GAC3B;AAEA,EAAA,OAAO,EAAE,WAAA,EAAY;AACvB;;;;"}
|
|
1
|
+
{"version":3,"file":"useSqlChange.cjs","sources":["../../../src/utils/useSqlChange.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = db.toRawSql;\n const rawSql = toRawSql({ sql, dataset: query.dataset, table: query.table, refId: query.refId });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n"],"names":["useCallback"],"mappings":";;;;;;;AAUO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAG,EAAiB;AACvE,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,GAAA,KAAuB;AACtB,MAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AACpB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAC/F,MAAA,MAAM,QAAA,GAAqB,EAAE,GAAG,KAAA,EAAO,KAAK,MAAA,EAAO;AACnD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,EAAA,EAAI,aAAA,EAAe,KAAK;AAAA,GAC3B;AAEA,EAAA,OAAO,EAAE,WAAA,EAAY;AACvB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResponseParser.mjs","sources":["../../src/ResponseParser.ts"],"sourcesContent":["import { uniqBy } from 'lodash';\n\nimport { DataFrame, MetricFindValue } from '@grafana/data';\n\nimport type { ResponseParser as ResponseParserType } from './types';\n\nexport class ResponseParser implements ResponseParserType {\n transformMetricFindResponse(frame: DataFrame): MetricFindValue[] {\n const values: MetricFindValue[] = [];\n const textField = frame.fields.find((f) => f.name === '__text');\n const valueField = frame.fields.find((f) => f.name === '__value');\n\n if (textField && valueField) {\n for (let i = 0; i < textField.values.length; i++) {\n values.push({ text: '' + textField.values[i], value: '' + valueField.values[i] });\n }\n } else {\n for (const field of frame.fields) {\n for (const value of field.values) {\n values.push({ text: value });\n }\n }\n }\n\n return uniqBy(values, 'text');\n }\n}\n"],"names":[],"mappings":";;;AAMO,MAAM,cAAA,CAA6C;AAAA,EACxD,4BAA4B,KAAA,EAAqC;AAC/D,IAAA,MAAM,SAA4B,EAAC;AACnC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC9D,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA;AAEhE,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAChD,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,GAAK,UAAU,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,EAAO,EAAA,GAAK,UAAA,CAAW,MAAA,CAAO,CAAC,GAAG,CAAA;AAAA,MAClF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,UAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,MAAM,CAAA;AAAA,EAC9B;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"ResponseParser.mjs","sources":["../../src/ResponseParser.ts"],"sourcesContent":["import { uniqBy } from 'lodash';\n\nimport { type DataFrame, type MetricFindValue } from '@grafana/data';\n\nimport type { ResponseParser as ResponseParserType } from './types';\n\nexport class ResponseParser implements ResponseParserType {\n transformMetricFindResponse(frame: DataFrame): MetricFindValue[] {\n const values: MetricFindValue[] = [];\n const textField = frame.fields.find((f) => f.name === '__text');\n const valueField = frame.fields.find((f) => f.name === '__value');\n\n if (textField && valueField) {\n for (let i = 0; i < textField.values.length; i++) {\n values.push({ text: '' + textField.values[i], value: '' + valueField.values[i] });\n }\n } else {\n for (const field of frame.fields) {\n for (const value of field.values) {\n values.push({ text: value });\n }\n }\n }\n\n return uniqBy(values, 'text');\n }\n}\n"],"names":[],"mappings":";;;AAMO,MAAM,cAAA,CAA6C;AAAA,EACxD,4BAA4B,KAAA,EAAqC;AAC/D,IAAA,MAAM,SAA4B,EAAC;AACnC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC9D,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA;AAEhE,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAChD,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,GAAK,UAAU,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,EAAO,EAAA,GAAK,UAAA,CAAW,MAAA,CAAO,CAAC,GAAG,CAAA;AAAA,MAClF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,UAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,MAAM,CAAA;AAAA,EAC9B;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLVariableEditor.mjs","sources":["../../src/SQLVariableEditor.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DataQueryRequest, Field } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorRows, EditorRow, EditorField } from '@grafana/plugin-ui';\nimport { Combobox, ComboboxOption } from '@grafana/ui';\n\nimport { migrateVariableQuery } from './SQLVariableUtils';\nimport { SqlQueryEditorProps } from './components/QueryEditor';\nimport { SqlQueryEditorLazy } from './components/QueryEditorLazy';\nimport { type SQLQuery, type SQLQueryMeta, SQLDialect } from './types';\n\ntype SQLVariableQueryEditorProps = SqlQueryEditorProps;\n\nexport const SQLVariablesQueryEditor = <T extends SQLDialect>(props: SQLVariableQueryEditorProps) => {\n const query = useMemo(() => migrateVariableQuery(props.query), [props.query]);\n const dialect = props.queryHeaderProps?.dialect ?? props.datasource.dialect ?? 'other';\n return (\n <>\n <SqlQueryEditorLazy\n {...props}\n query={query}\n queryHeaderProps={{ hideFormatSelector: true, hideRunButton: true, dialect }}\n />\n <FieldMapping {...props} query={query} />\n </>\n );\n};\n\nconst FieldMapping = (props: SQLVariableQueryEditorProps) => {\n const { query, datasource, onChange } = props;\n const [choices, setChoices] = useState<ComboboxOption[]>([]);\n\n // Track the actual SQL content to avoid re-querying when only meta changes\n const queryRef = useRef(query);\n queryRef.current = query;\n\n // Only re-run the query when the SQL content changes, not when meta (valueField/textField) changes\n const queryKey = useMemo(() => JSON.stringify({ rawSql: query.rawSql, sql: query.sql }), [query.rawSql, query.sql]);\n\n useEffect(() => {\n let isActive = true;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const subscription = datasource.query({ targets: [queryRef.current] } as DataQueryRequest<SQLQuery>).subscribe({\n next: (response) => {\n if (!isActive) {\n return;\n }\n const fieldNames = (response.data[0] || { fields: [] }).fields.map((f: Field) => f.name);\n setChoices(fieldNames.map((f: Field) => ({ value: f, label: f })));\n },\n error: () => {\n if (isActive) {\n setChoices([]);\n }\n },\n });\n return () => {\n isActive = false;\n subscription.unsubscribe();\n };\n }, [datasource, queryKey]);\n const onMetaPropChange = <Key extends keyof SQLQueryMeta, Value extends SQLQueryMeta[Key]>(\n key: Key,\n value: Value,\n meta = query.meta || {}\n ) => {\n onChange({ ...query, meta: { ...meta, [key]: value } });\n };\n return (\n <EditorRows>\n <EditorRow>\n <EditorField label={t('grafana-sql.components.query-meta.variables.valueField', 'Value Field')}>\n <Combobox\n isClearable\n value={query.meta?.valueField}\n onChange={(e) => onMetaPropChange('valueField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n <EditorField label={t('grafana-sql.components.query-meta.variables.textField', 'Text Field')}>\n <Combobox\n isClearable\n value={query.meta?.textField}\n onChange={(e) => onMetaPropChange('textField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n </EditorRow>\n </EditorRows>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SQLVariableEditor.mjs","sources":["../../src/SQLVariableEditor.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type DataQueryRequest, type Field } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorRows, EditorRow, EditorField } from '@grafana/plugin-ui';\nimport { Combobox, type ComboboxOption } from '@grafana/ui';\n\nimport { migrateVariableQuery } from './SQLVariableUtils';\nimport { type SqlQueryEditorProps } from './components/QueryEditor';\nimport { SqlQueryEditorLazy } from './components/QueryEditorLazy';\nimport { type SQLQuery, type SQLQueryMeta, type SQLDialect } from './types';\n\ntype SQLVariableQueryEditorProps = SqlQueryEditorProps;\n\nexport const SQLVariablesQueryEditor = <T extends SQLDialect>(props: SQLVariableQueryEditorProps) => {\n const query = useMemo(() => migrateVariableQuery(props.query), [props.query]);\n const dialect = props.queryHeaderProps?.dialect ?? props.datasource.dialect ?? 'other';\n return (\n <>\n <SqlQueryEditorLazy\n {...props}\n query={query}\n queryHeaderProps={{ hideFormatSelector: true, hideRunButton: true, dialect }}\n />\n <FieldMapping {...props} query={query} />\n </>\n );\n};\n\nconst FieldMapping = (props: SQLVariableQueryEditorProps) => {\n const { query, datasource, onChange } = props;\n const [choices, setChoices] = useState<ComboboxOption[]>([]);\n\n // Track the actual SQL content to avoid re-querying when only meta changes\n const queryRef = useRef(query);\n queryRef.current = query;\n\n // Only re-run the query when the SQL content changes, not when meta (valueField/textField) changes\n const queryKey = useMemo(() => JSON.stringify({ rawSql: query.rawSql, sql: query.sql }), [query.rawSql, query.sql]);\n\n useEffect(() => {\n let isActive = true;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const subscription = datasource.query({ targets: [queryRef.current] } as DataQueryRequest<SQLQuery>).subscribe({\n next: (response) => {\n if (!isActive) {\n return;\n }\n const fieldNames = (response.data[0] || { fields: [] }).fields.map((f: Field) => f.name);\n setChoices(fieldNames.map((f: Field) => ({ value: f, label: f })));\n },\n error: () => {\n if (isActive) {\n setChoices([]);\n }\n },\n });\n return () => {\n isActive = false;\n subscription.unsubscribe();\n };\n }, [datasource, queryKey]);\n const onMetaPropChange = <Key extends keyof SQLQueryMeta, Value extends SQLQueryMeta[Key]>(\n key: Key,\n value: Value,\n meta = query.meta || {}\n ) => {\n onChange({ ...query, meta: { ...meta, [key]: value } });\n };\n return (\n <EditorRows>\n <EditorRow>\n <EditorField label={t('grafana-sql.components.query-meta.variables.valueField', 'Value Field')}>\n <Combobox\n isClearable\n value={query.meta?.valueField}\n onChange={(e) => onMetaPropChange('valueField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n <EditorField label={t('grafana-sql.components.query-meta.variables.textField', 'Text Field')}>\n <Combobox\n isClearable\n value={query.meta?.textField}\n onChange={(e) => onMetaPropChange('textField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n </EditorRow>\n </EditorRows>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLVariableSupport.mjs","sources":["../../src/SQLVariableSupport.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CustomVariableSupport, DataQueryRequest, DataQueryResponse, DataFrame } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { SQLVariablesQueryEditor } from './SQLVariableEditor';\nimport { migrateVariableQuery, updateFrame, refId } from './SQLVariableUtils';\nimport { SqlDatasource } from './datasource/SqlDatasource';\nimport { applyQueryDefaults } from './defaults';\nimport { QueryFormat, type SQLQuery } from './types';\n\nexport class SQLVariableSupport extends CustomVariableSupport<SqlDatasource, SQLQuery> {\n constructor(readonly datasource: SqlDatasource) {\n super();\n }\n editor = SQLVariablesQueryEditor;\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n if (request.targets.length < 1) {\n throw new Error('no variable query found');\n }\n const updatedQuery = migrateVariableQuery(request.targets[0]);\n return this.datasource.query({ ...request, targets: [updatedQuery] }).pipe(\n map((d: DataQueryResponse) => {\n return {\n ...d,\n data: (d.data || []).map((frame: DataFrame) => updateFrame(frame, updatedQuery.meta)),\n };\n })\n );\n }\n getDefaultQuery(): Partial<SQLQuery> {\n return applyQueryDefaults({ refId, editorMode: EditorMode.Builder, format: QueryFormat.Table });\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAYO,MAAM,2BAA2B,qBAAA,CAA+C;AAAA,EACrF,YAAqB,UAAA,EAA2B;AAC9C,IAAA,KAAA,EAAM;AADa,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAGrB,IAAA,IAAA,CAAA,MAAA,GAAS,uBAAA;AAAA,EADT;AAAA,EAEA,MAAM,OAAA,EAAoE;AACxE,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,CAAC,YAAY,CAAA,EAAG,CAAA,CAAE,IAAA;AAAA,MACpE,GAAA,CAAI,CAAC,CAAA,KAAyB;AAC5B,QAAA,OAAO;AAAA,UACL,GAAG,CAAA;AAAA,UACH,IAAA,EAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,KAAqB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC;AAAA,SACtF;AAAA,MACF,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EACA,eAAA,GAAqC;AACnC,IAAA,OAAO,kBAAA,CAAmB,EAAE,KAAA,EAAO,UAAA,EAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,KAAA,EAAO,CAAA;AAAA,EAChG;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"SQLVariableSupport.mjs","sources":["../../src/SQLVariableSupport.ts"],"sourcesContent":["import { type Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CustomVariableSupport, type DataQueryRequest, type DataQueryResponse, type DataFrame } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { SQLVariablesQueryEditor } from './SQLVariableEditor';\nimport { migrateVariableQuery, updateFrame, refId } from './SQLVariableUtils';\nimport { type SqlDatasource } from './datasource/SqlDatasource';\nimport { applyQueryDefaults } from './defaults';\nimport { QueryFormat, type SQLQuery } from './types';\n\nexport class SQLVariableSupport extends CustomVariableSupport<SqlDatasource, SQLQuery> {\n constructor(readonly datasource: SqlDatasource) {\n super();\n }\n editor = SQLVariablesQueryEditor;\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n if (request.targets.length < 1) {\n throw new Error('no variable query found');\n }\n const updatedQuery = migrateVariableQuery(request.targets[0]);\n return this.datasource.query({ ...request, targets: [updatedQuery] }).pipe(\n map((d: DataQueryResponse) => {\n return {\n ...d,\n data: (d.data || []).map((frame: DataFrame) => updateFrame(frame, updatedQuery.meta)),\n };\n })\n );\n }\n getDefaultQuery(): Partial<SQLQuery> {\n return applyQueryDefaults({ refId, editorMode: EditorMode.Builder, format: QueryFormat.Table });\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAYO,MAAM,2BAA2B,qBAAA,CAA+C;AAAA,EACrF,YAAqB,UAAA,EAA2B;AAC9C,IAAA,KAAA,EAAM;AADa,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAGrB,IAAA,IAAA,CAAA,MAAA,GAAS,uBAAA;AAAA,EADT;AAAA,EAEA,MAAM,OAAA,EAAoE;AACxE,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,CAAC,YAAY,CAAA,EAAG,CAAA,CAAE,IAAA;AAAA,MACpE,GAAA,CAAI,CAAC,CAAA,KAAyB;AAC5B,QAAA,OAAO;AAAA,UACL,GAAG,CAAA;AAAA,UACH,IAAA,EAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,KAAqB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC;AAAA,SACtF;AAAA,MACF,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EACA,eAAA,GAAqC;AACnC,IAAA,OAAO,kBAAA,CAAmB,EAAE,KAAA,EAAO,UAAA,EAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,KAAA,EAAO,CAAA;AAAA,EAChG;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLVariableUtils.mjs","sources":["../../src/SQLVariableUtils.ts"],"sourcesContent":["import { uniq } from 'lodash';\n\nimport { DataFrame, Field, FieldType } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type SQLVariableQuery, type SQLQueryMeta } from './types';\n\nexport const refId = 'SQLVariableQueryEditor-VariableQuery';\n\nexport const migrateVariableQuery = (rawQuery: string | SQLQuery): SQLVariableQuery => {\n if (typeof rawQuery !== 'string') {\n return {\n ...rawQuery,\n refId: rawQuery.refId || refId,\n query: rawQuery.rawSql || '',\n };\n }\n return {\n ...applyQueryDefaults({\n refId,\n rawSql: rawQuery,\n editorMode: rawQuery ? EditorMode.Code : EditorMode.Builder,\n }),\n query: rawQuery,\n };\n};\n\nexport const updateFrame = (frame: DataFrame, meta?: SQLQueryMeta): DataFrame => {\n const fields = convertFieldsToVariableFields(frame.fields, meta);\n let length = fields.length > 0 ? fields[0].values.length : frame.length;\n return { ...frame, length, fields };\n};\n\nexport const convertFieldsToVariableFields = (original_fields: Field[], meta?: SQLQueryMeta): Field[] => {\n // scenario 1 : If no fields found, throw error\n if (original_fields.length < 1) {\n throw new Error('at least one field expected for variable');\n }\n // scenario 2 : If meta field found, use and return ( at least one text field / value field exist / or first field )\n if (meta) {\n let tf = meta.textField ? original_fields.find((f) => f.name === meta.textField) : undefined;\n let vf = meta.valueField ? original_fields.find((f) => f.name === meta.valueField) : undefined;\n const textField = tf || vf || original_fields[0];\n const valueField = vf || tf || original_fields[0];\n const otherFields = original_fields.filter((f: Field) => f.name !== 'value' && f.name !== 'text');\n return [{ ...textField, name: 'text' }, { ...valueField, name: 'value' }, ...otherFields];\n }\n // scenario 3 : If both __text field & __value field found\n let tf = original_fields.find((f) => f.name === '__text');\n let vf = original_fields.find((f) => f.name === '__value');\n if (tf && vf) {\n const otherFields = original_fields.filter((f: Field) => f.name !== '__text' && f.name !== '__value');\n return [\n { ...tf, name: 'text', values: tf.values.map((v) => '' + v) },\n { ...vf, name: 'value', values: vf.values.map((v) => '' + v) },\n ...otherFields,\n ];\n }\n // scenario 4 : fallback scenario / legacy scenario where return all fields into a single field.\n let values: string[] = [];\n for (const field of original_fields) {\n for (const value of field.values) {\n if (value !== null && value !== undefined) {\n values.push('' + value);\n }\n }\n }\n values = uniq(values);\n return [\n { name: 'text', type: FieldType.string, config: {}, values },\n { name: 'value', type: FieldType.string, config: {}, values },\n ];\n};\n"],"names":["tf","vf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SQLVariableUtils.mjs","sources":["../../src/SQLVariableUtils.ts"],"sourcesContent":["import { uniq } from 'lodash';\n\nimport { type DataFrame, type Field, FieldType } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type SQLVariableQuery, type SQLQueryMeta } from './types';\n\nexport const refId = 'SQLVariableQueryEditor-VariableQuery';\n\nexport const migrateVariableQuery = (rawQuery: string | SQLQuery): SQLVariableQuery => {\n if (typeof rawQuery !== 'string') {\n return {\n ...rawQuery,\n refId: rawQuery.refId || refId,\n query: rawQuery.rawSql || '',\n };\n }\n return {\n ...applyQueryDefaults({\n refId,\n rawSql: rawQuery,\n editorMode: rawQuery ? EditorMode.Code : EditorMode.Builder,\n }),\n query: rawQuery,\n };\n};\n\nexport const updateFrame = (frame: DataFrame, meta?: SQLQueryMeta): DataFrame => {\n const fields = convertFieldsToVariableFields(frame.fields, meta);\n let length = fields.length > 0 ? fields[0].values.length : frame.length;\n return { ...frame, length, fields };\n};\n\nexport const convertFieldsToVariableFields = (original_fields: Field[], meta?: SQLQueryMeta): Field[] => {\n // scenario 1 : If no fields found, throw error\n if (original_fields.length < 1) {\n throw new Error('at least one field expected for variable');\n }\n // scenario 2 : If meta field found, use and return ( at least one text field / value field exist / or first field )\n if (meta) {\n let tf = meta.textField ? original_fields.find((f) => f.name === meta.textField) : undefined;\n let vf = meta.valueField ? original_fields.find((f) => f.name === meta.valueField) : undefined;\n const textField = tf || vf || original_fields[0];\n const valueField = vf || tf || original_fields[0];\n const otherFields = original_fields.filter((f: Field) => f.name !== 'value' && f.name !== 'text');\n return [{ ...textField, name: 'text' }, { ...valueField, name: 'value' }, ...otherFields];\n }\n // scenario 3 : If both __text field & __value field found\n let tf = original_fields.find((f) => f.name === '__text');\n let vf = original_fields.find((f) => f.name === '__value');\n if (tf && vf) {\n const otherFields = original_fields.filter((f: Field) => f.name !== '__text' && f.name !== '__value');\n return [\n { ...tf, name: 'text', values: tf.values.map((v) => '' + v) },\n { ...vf, name: 'value', values: vf.values.map((v) => '' + v) },\n ...otherFields,\n ];\n }\n // scenario 4 : fallback scenario / legacy scenario where return all fields into a single field.\n let values: string[] = [];\n for (const field of original_fields) {\n for (const value of field.values) {\n if (value !== null && value !== undefined) {\n values.push('' + value);\n }\n }\n }\n values = uniq(values);\n return [\n { name: 'text', type: FieldType.string, config: {}, values },\n { name: 'value', type: FieldType.string, config: {}, values },\n ];\n};\n"],"names":["tf","vf"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmModal.mjs","sources":["../../../src/components/ConfirmModal.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useRef, useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button, Icon, Modal, useStyles2 } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const styles = useStyles2(getStyles);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className={styles.modalHeaderTitle}>\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className={styles.titleText}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.warning\">Warning</Trans>\n </span>\n </div>\n }\n ariaLabel={t('grafana-sql.components.confirm-modal.warning', 'Warning')}\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.builder-mode\">\n Builder mode does not display changes made in code. The query builder will display the last changes you made\n in builder mode.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.clipboard\">\n Do you want to copy your code to the clipboard?\n </Trans>\n </p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.cancel\">Cancel</Trans>\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.discard-code-and-switch\">Discard code and switch</Trans>\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.copy-code-and-switch\">Copy code and switch</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n titleText: css({\n paddingLeft: theme.spacing(2),\n }),\n modalHeaderTitle: css({\n fontSize: theme.typography.size.lg,\n float: 'left',\n paddingTop: theme.spacing(1),\n margin: theme.spacing(0, 2),\n }),\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfirmModal.mjs","sources":["../../../src/components/ConfirmModal.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useRef, useEffect } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button, Icon, Modal, useStyles2 } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const styles = useStyles2(getStyles);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className={styles.modalHeaderTitle}>\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className={styles.titleText}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.warning\">Warning</Trans>\n </span>\n </div>\n }\n ariaLabel={t('grafana-sql.components.confirm-modal.warning', 'Warning')}\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.builder-mode\">\n Builder mode does not display changes made in code. The query builder will display the last changes you made\n in builder mode.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.clipboard\">\n Do you want to copy your code to the clipboard?\n </Trans>\n </p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.cancel\">Cancel</Trans>\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.discard-code-and-switch\">Discard code and switch</Trans>\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.copy-code-and-switch\">Copy code and switch</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n titleText: css({\n paddingLeft: theme.spacing(2),\n }),\n modalHeaderTitle: css({\n fontSize: theme.typography.size.lg,\n float: 'left',\n paddingTop: theme.spacing(1),\n margin: theme.spacing(0, 2),\n }),\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetSelector.mjs","sources":["../../../src/components/DatasetSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { DB, ResourceSelectorProps, SQLDialect, toOption } from '../types';\n\nexport interface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset: string | undefined;\n preconfiguredDataset: string;\n dialect: SQLDialect;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const DatasetSelector = ({\n dataset,\n db,\n dialect,\n onChange,\n inputId,\n preconfiguredDataset,\n}: DatasetSelectorProps) => {\n /*\n The behavior of this component - for MSSQL and MySQL datasources - is based on whether the user chose to create a datasource\n with or without a default database (preconfiguredDataset). If the user configured a default database, this selector\n should only allow that single preconfigured database option to be selected. If the user chose to NOT assign/configure a default database,\n then the user should be able to use this component to choose between multiple databases available to the datasource.\n */\n // `hasPreconfigCondition` is true if either 1) the sql datasource has a preconfigured default database,\n // OR if 2) the datasource is Postgres. In either case the only option available to the user is the preconfigured database.\n const hasPreconfigCondition = !!preconfiguredDataset || dialect === 'postgres';\n\n const state = useAsync(async () => {\n // If a default database is already configured for a MSSQL or MySQL data source, OR the data source is Postgres, no need to fetch other databases.\n if (hasPreconfigCondition) {\n // Set the current database to the preconfigured database.\n onChange(toOption(preconfiguredDataset));\n return [toOption(preconfiguredDataset)];\n }\n\n // If there is no preconfigured database, but there is a selected dataset, set the current database to the selected dataset.\n if (dataset) {\n onChange(toOption(dataset));\n }\n\n // Otherwise, fetch all databases available to the datasource.\n const datasets = await db.datasets();\n return datasets.map(toOption);\n }, []);\n\n return (\n <Select\n aria-label={t('grafana-sql.components.dataset-selector.aria-label-dataset-selector', 'Dataset selector')}\n inputId={inputId}\n value={dataset}\n options={state.value}\n onChange={onChange}\n disabled={state.loading}\n isLoading={state.loading}\n menuShouldPortal={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAiBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,OAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAA4B;AAS1B,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAC,oBAAA,IAAwB,OAAA,KAAY,UAAA;AAEpE,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AAEjC,IAAA,IAAI,qBAAA,EAAuB;AAEzB,MAAA,QAAA,CAAS,QAAA,CAAS,oBAAoB,CAAC,CAAA;AACvC,MAAA,OAAO,CAAC,QAAA,CAAS,oBAAoB,CAAC,CAAA;AAAA,IACxC;AAGA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,QAAA,EAAS;AACnC,IAAA,OAAO,QAAA,CAAS,IAAI,QAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,CAAA,CAAE,qEAAA,EAAuE,kBAAkB,CAAA;AAAA,MACvG,OAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"DatasetSelector.mjs","sources":["../../../src/components/DatasetSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps, type SQLDialect, toOption } from '../types';\n\nexport interface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset: string | undefined;\n preconfiguredDataset: string;\n dialect: SQLDialect;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const DatasetSelector = ({\n dataset,\n db,\n dialect,\n onChange,\n inputId,\n preconfiguredDataset,\n}: DatasetSelectorProps) => {\n /*\n The behavior of this component - for MSSQL and MySQL datasources - is based on whether the user chose to create a datasource\n with or without a default database (preconfiguredDataset). If the user configured a default database, this selector\n should only allow that single preconfigured database option to be selected. If the user chose to NOT assign/configure a default database,\n then the user should be able to use this component to choose between multiple databases available to the datasource.\n */\n // `hasPreconfigCondition` is true if either 1) the sql datasource has a preconfigured default database,\n // OR if 2) the datasource is Postgres. In either case the only option available to the user is the preconfigured database.\n const hasPreconfigCondition = !!preconfiguredDataset || dialect === 'postgres';\n\n const state = useAsync(async () => {\n // If a default database is already configured for a MSSQL or MySQL data source, OR the data source is Postgres, no need to fetch other databases.\n if (hasPreconfigCondition) {\n // Set the current database to the preconfigured database.\n onChange(toOption(preconfiguredDataset));\n return [toOption(preconfiguredDataset)];\n }\n\n // If there is no preconfigured database, but there is a selected dataset, set the current database to the selected dataset.\n if (dataset) {\n onChange(toOption(dataset));\n }\n\n // Otherwise, fetch all databases available to the datasource.\n const datasets = await db.datasets();\n return datasets.map(toOption);\n }, []);\n\n return (\n <Select\n aria-label={t('grafana-sql.components.dataset-selector.aria-label-dataset-selector', 'Dataset selector')}\n inputId={inputId}\n value={dataset}\n options={state.value}\n onChange={onChange}\n disabled={state.loading}\n isLoading={state.loading}\n menuShouldPortal={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAiBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,OAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAA4B;AAS1B,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAC,oBAAA,IAAwB,OAAA,KAAY,UAAA;AAEpE,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AAEjC,IAAA,IAAI,qBAAA,EAAuB;AAEzB,MAAA,QAAA,CAAS,QAAA,CAAS,oBAAoB,CAAC,CAAA;AACvC,MAAA,OAAO,CAAC,QAAA,CAAS,oBAAoB,CAAC,CAAA;AAAA,IACxC;AAGA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,QAAA,EAAS;AACnC,IAAA,OAAO,QAAA,CAAS,IAAI,QAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,CAAA,CAAE,qEAAA,EAAuE,kBAAkB,CAAA;AAAA,MACvG,OAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditor.mjs","sources":["../../../src/components/QueryEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport { Space } from '@grafana/ui';\n\nimport { SqlDatasource } from '../datasource/SqlDatasource';\nimport { applyQueryDefaults } from '../defaults';\nimport { SQLQuery, QueryRowFilter, SQLOptions } from '../types';\nimport { haveColumns } from '../utils/sql.utils';\n\nimport { QueryHeader, QueryHeaderProps } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nexport interface SqlQueryEditorProps extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {\n queryHeaderProps?: Pick<QueryHeaderProps, 'dialect' | 'hideRunButton' | 'hideFormatSelector'>;\n}\n\nexport default function SqlQueryEditor({\n datasource,\n query,\n onChange,\n onRunQuery,\n range,\n queryHeaderProps,\n}: SqlQueryEditorProps) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n\n const { preconfiguredDatabase } = datasource;\n const dialect = queryHeaderProps?.dialect ?? 'other';\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB().init !== undefined) {\n datasource.getDB().init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB().dispose !== undefined) {\n datasource.getDB().dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n return (\n <>\n <QueryHeader\n db={db}\n preconfiguredDataset={preconfiguredDatabase}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n hideFormatSelector={queryHeaderProps?.hideFormatSelector}\n hideRunButton={queryHeaderProps?.hideRunButton}\n dialect={dialect}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n"],"names":["_a","_b"],"mappings":";;;;;;;;;;;;AAoBA,SAAwB,cAAA,CAAe;AAAA,EACrC,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAwB;AA3BxB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA4BE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,IAAI,CAAA;AAC3D,EAAA,MAAM,EAAA,GAAK,WAAW,KAAA,EAAM;AAE5B,EAAA,MAAM,EAAE,uBAAsB,GAAI,UAAA;AAClC,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,OAAA,KAAlB,IAAA,GAAA,EAAA,GAA6B,OAAA;AAC7C,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,SAAS,YAAY;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAA,CAAW,KAAA,EAAM,CAAE,IAAA,KAAS,MAAA,EAAW;AACzC,QAAA,UAAA,CAAW,KAAA,GAAQ,IAAA,EAAM;AAAA,MAC3B;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,iBAAA,GAAoB,mBAAmB,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,CAAyB;AAAA,IACnE,MAAA,EAAQ,CAAC,EAAA,CAAC,EAAA,GAAA,iBAAA,CAAkB,QAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,WAAA,CAAA;AAAA,IACjC,KAAA,EAAO,CAAC,EAAA,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,iBAAA,CAAkB,GAAA,KAAlB,mBAAuB,OAAA,KAAvB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiC,CAAA,CAAA,KAAjC,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqC,QAAA,CAAS,IAAA,CAAA;AAAA,IACvD,KAAA,EAAO,CAAC,EAAA,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,iBAAA,CAAkB,QAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,OAAA,KAAvB,mBAAgC,QAAA,CAAS,IAAA,CAAA;AAAA,IAClD,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,iBAAiB,CAAA;AAExE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAA,CAAW,KAAA,EAAM,CAAE,OAAA,KAAY,MAAA,EAAW;AAC5C,QAAA,UAAA,CAAW,KAAA,GAAQ,OAAA,EAAS;AAAA,MAC9B;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,CAAA,KAAgB;AACf,MAAA,IAAI,YAAA,CAAa,CAAC,CAAA,IAAK,UAAA,EAAY;AACjC,QAAA,UAAA,EAAW;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,EAAa,OAAA,GAAU,IAAA,KAAS;AAnEzD,IAAA,IAAAA,GAAAA,EAAAC,GAAAA;AAoEI,IAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,IAAA,QAAA,CAAS,CAAC,CAAA;AAEV,IAAA,IAAI,WAAA,CAAA,CAAYD,MAAA,CAAA,CAAE,GAAA,KAAF,gBAAAA,GAAAA,CAAO,OAAO,OAAKC,GAAAA,GAAA,CAAA,CAAE,QAAF,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAO,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,CAAA,CAAA,IAAS,CAAC,cAAA,CAAe,KAAA,EAAO;AAC9F,MAAA,iBAAA,CAAkB,EAAE,GAAG,cAAA,EAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,CAAA,KAAgB;AAC3C,IAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,IAAA,QAAA,CAAS,CAAC,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,oBAAA,EAAsB,qBAAA;AAAA,QACtB,QAAA,EAAU,mBAAA;AAAA,QACV,UAAA;AAAA,QACA,gBAAA,EAAkB,iBAAA;AAAA,QAClB,cAAA;AAAA,QACA,KAAA,EAAO,iBAAA;AAAA,QACP,eAAA;AAAA,QACA,oBAAoB,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAkB,kBAAA;AAAA,QACtC,eAAe,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAkB,aAAA;AAAA,QACjC;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA,CAAC,KAAA,EAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAA;AAAA,IAEd,iBAAA,CAAkB,UAAA,KAAe,UAAA,CAAW,IAAA,oBAC3C,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,KAAA,EAAO,iBAAA;AAAA,QACP,QAAA,EAAU,CAAC,CAAA,KAAgB,aAAA,CAAc,GAAG,KAAK,CAAA;AAAA,QACjD,cAAA;AAAA,QACA,UAAA,EAAY,kBAAA;AAAA,QACZ;AAAA;AAAA,KACF;AAAA,IAGD,iBAAA,CAAkB,UAAA,KAAe,UAAA,CAAW,IAAA,oBAC3C,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,KAAA,EAAO,iBAAA;AAAA,QACP,eAAA;AAAA,QACA,QAAA,EAAU,aAAA;AAAA,QACV,UAAA;AAAA,QACA,UAAA,EAAY,kBAAA;AAAA,QACZ;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AAEA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAgB;AACpC,EAAA,OAAO,OAAA,CAAQ,EAAE,MAAM,CAAA;AACzB,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"QueryEditor.mjs","sources":["../../../src/components/QueryEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type QueryEditorProps } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport { Space } from '@grafana/ui';\n\nimport { type SqlDatasource } from '../datasource/SqlDatasource';\nimport { applyQueryDefaults } from '../defaults';\nimport { type SQLQuery, type QueryRowFilter, type SQLOptions } from '../types';\nimport { haveColumns } from '../utils/sql.utils';\n\nimport { QueryHeader, type QueryHeaderProps } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nexport interface SqlQueryEditorProps extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {\n queryHeaderProps?: Pick<QueryHeaderProps, 'dialect' | 'hideRunButton' | 'hideFormatSelector'>;\n}\n\nexport default function SqlQueryEditor({\n datasource,\n query,\n onChange,\n onRunQuery,\n range,\n queryHeaderProps,\n}: SqlQueryEditorProps) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n\n const { preconfiguredDatabase } = datasource;\n const dialect = queryHeaderProps?.dialect ?? 'other';\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB().init !== undefined) {\n datasource.getDB().init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB().dispose !== undefined) {\n datasource.getDB().dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n return (\n <>\n <QueryHeader\n db={db}\n preconfiguredDataset={preconfiguredDatabase}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n hideFormatSelector={queryHeaderProps?.hideFormatSelector}\n hideRunButton={queryHeaderProps?.hideRunButton}\n dialect={dialect}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorLazy.mjs","sources":["../../../src/components/QueryEditorLazy.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { lazy, Suspense } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport type { SqlQueryEditorProps } from './QueryEditor';\nconst QueryEditor = lazy(() => import(/* webpackChunkName: \"sql-query-editor\" */ './QueryEditor'));\n\nexport function SqlQueryEditorLazy(props: SqlQueryEditorProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <Suspense\n fallback={\n <LoadingPlaceholder\n text={t('grafana-sql.components.sql-query-editor-lazy.text-loading-editor', 'Loading editor')}\n className={styles.container}\n />\n }\n >\n <QueryEditor {...props} />\n </Suspense>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: 'unset',\n marginLeft: theme.spacing(1),\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;;AAQA,MAAM,WAAA,GAAc,KAAK,MAAM;AAAA;AAAA,EAAkD;AAAe,CAAC,CAAA;AAE1F,SAAS,mBAAmB,KAAA,EAA4B;AAC7D,EAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,kBACE,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,CAAA,CAAE,kEAAA,EAAoE,gBAAgB,CAAA;AAAA,UAC5F,WAAW,MAAA,CAAO;AAAA;AAAA,OACpB;AAAA,MAGF,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO;AAAA;AAAA,GAC1B;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,WAAW,GAAA,CAAI;AAAA,MACb,YAAA,EAAc,OAAA;AAAA,MACd,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,KAC5B;AAAA,GACH;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"QueryEditorLazy.mjs","sources":["../../../src/components/QueryEditorLazy.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { lazy, Suspense } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport type { SqlQueryEditorProps } from './QueryEditor';\nconst QueryEditor = lazy(() => import(/* webpackChunkName: \"sql-query-editor\" */ './QueryEditor'));\n\nexport function SqlQueryEditorLazy(props: SqlQueryEditorProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <Suspense\n fallback={\n <LoadingPlaceholder\n text={t('grafana-sql.components.sql-query-editor-lazy.text-loading-editor', 'Loading editor')}\n className={styles.container}\n />\n }\n >\n <QueryEditor {...props} />\n </Suspense>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: 'unset',\n marginLeft: theme.spacing(1),\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;;AAQA,MAAM,WAAA,GAAc,KAAK,MAAM;AAAA;AAAA,EAAkD;AAAe,CAAC,CAAA;AAE1F,SAAS,mBAAmB,KAAA,EAA4B;AAC7D,EAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,kBACE,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,CAAA,CAAE,kEAAA,EAAoE,gBAAgB,CAAA;AAAA,UAC5F,WAAW,MAAA,CAAO;AAAA;AAAA,OACpB;AAAA,MAGF,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO;AAAA;AAAA,GAC1B;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,WAAW,GAAA,CAAI;AAAA,MACb,YAAA,EAAc,OAAA;AAAA,MACd,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,KAC5B;AAAA,GACH;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryHeader.mjs","sources":["../../../src/components/QueryHeader.tsx"],"sourcesContent":["import { useCallback, useId, useState } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, InlineSwitch, RadioButtonGroup, Tooltip, Space } from '@grafana/ui';\n\nimport { QueryWithDefaults } from '../defaults';\nimport { SQLQuery, QueryFormat, QueryRowFilter, QUERY_FORMAT_OPTIONS, DB, SQLDialect } from '../types';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\n\nexport interface QueryHeaderProps {\n db: DB;\n dialect: SQLDialect;\n isQueryRunnable: boolean;\n onChange: (query: SQLQuery) => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n onRunQuery: () => void;\n preconfiguredDataset: string;\n query: QueryWithDefaults;\n queryRowFilter: QueryRowFilter;\n hideFormatSelector?: boolean;\n hideRunButton?: boolean;\n}\n\nexport function QueryHeader({\n db,\n dialect,\n isQueryRunnable,\n onChange,\n onQueryRowChange,\n onRunQuery,\n preconfiguredDataset,\n query,\n queryRowFilter,\n hideFormatSelector,\n hideRunButton,\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = db.toRawSql;\n\n const htmlId = useId();\n\n const editorModes = [\n {\n label: t('grafana-sql.components.query-header.editor-modes.label-builder', 'Builder'),\n value: EditorMode.Builder,\n },\n { label: t('grafana-sql.components.query-header.editor-modes.label-code', 'Code'), value: EditorMode.Code },\n ];\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (newEditorMode === EditorMode.Code) {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Code,\n });\n }\n\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n\n reportInteraction('grafana_sql_format_changed', {\n datasource: query.datasource?.type,\n selectedFormat: next.format,\n });\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const datasetDropdownIsAvailable = () => {\n if (dialect === 'influx') {\n return false;\n }\n\n return true;\n };\n\n return (\n <>\n <EditorHeader>\n {!hideFormatSelector && (\n <InlineSelect\n label={t('grafana-sql.components.query-header.label-format', 'Format')}\n value={query.format}\n placeholder={t('grafana-sql.components.query-header.placeholder-select-format', 'Select format')}\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n )}\n\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-filter', 'Filter')}\n data-testid={selectors.components.SQLQueryEditor.headerFilterSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_filter_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-group', 'Group')}\n data-testid={selectors.components.SQLQueryEditor.headerGroupSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_group_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-order', 'Order')}\n data-testid={selectors.components.SQLQueryEditor.headerOrderSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_order_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-preview', 'Preview')}\n data-testid={selectors.components.SQLQueryEditor.headerPreviewSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_preview_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked });\n }}\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n {!hideRunButton &&\n (isQueryRunnable ? (\n <Button icon=\"play\" variant=\"primary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n ) : (\n <Tooltip\n theme=\"error\"\n content={\n <Trans i18nKey=\"grafana-sql.components.query-header.content-invalid-query\">\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </Trans>\n }\n placement=\"top\"\n >\n <Button icon=\"exclamation-triangle\" variant=\"secondary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n </Tooltip>\n ))}\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'copy',\n });\n\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'discard',\n });\n\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'cancel',\n });\n\n setShowConfirm(false);\n }}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n <EditorRow>\n {datasetDropdownIsAvailable() && (\n <EditorField label={t('grafana-sql.components.query-header.label-dataset', 'Dataset')} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={query.dataset}\n dialect={dialect}\n preconfiguredDataset={preconfiguredDataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n <EditorField label={t('grafana-sql.components.query-header.label-table', 'Table')} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-tableselect-${htmlId}`}\n dataset={query.dataset || preconfiguredDataset}\n table={query.table}\n onChange={onTableChange}\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryHeader.mjs","sources":["../../../src/components/QueryHeader.tsx"],"sourcesContent":["import { useCallback, useId, useState } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, InlineSwitch, RadioButtonGroup, Tooltip, Space } from '@grafana/ui';\n\nimport { type QueryWithDefaults } from '../defaults';\nimport {\n type SQLQuery,\n QueryFormat,\n type QueryRowFilter,\n QUERY_FORMAT_OPTIONS,\n type DB,\n type SQLDialect,\n} from '../types';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\n\nexport interface QueryHeaderProps {\n db: DB;\n dialect: SQLDialect;\n isQueryRunnable: boolean;\n onChange: (query: SQLQuery) => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n onRunQuery: () => void;\n preconfiguredDataset: string;\n query: QueryWithDefaults;\n queryRowFilter: QueryRowFilter;\n hideFormatSelector?: boolean;\n hideRunButton?: boolean;\n}\n\nexport function QueryHeader({\n db,\n dialect,\n isQueryRunnable,\n onChange,\n onQueryRowChange,\n onRunQuery,\n preconfiguredDataset,\n query,\n queryRowFilter,\n hideFormatSelector,\n hideRunButton,\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = db.toRawSql;\n\n const htmlId = useId();\n\n const editorModes = [\n {\n label: t('grafana-sql.components.query-header.editor-modes.label-builder', 'Builder'),\n value: EditorMode.Builder,\n },\n { label: t('grafana-sql.components.query-header.editor-modes.label-code', 'Code'), value: EditorMode.Code },\n ];\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (newEditorMode === EditorMode.Code) {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Code,\n });\n }\n\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n\n reportInteraction('grafana_sql_format_changed', {\n datasource: query.datasource?.type,\n selectedFormat: next.format,\n });\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const datasetDropdownIsAvailable = () => {\n if (dialect === 'influx') {\n return false;\n }\n\n return true;\n };\n\n return (\n <>\n <EditorHeader>\n {!hideFormatSelector && (\n <InlineSelect\n label={t('grafana-sql.components.query-header.label-format', 'Format')}\n value={query.format}\n placeholder={t('grafana-sql.components.query-header.placeholder-select-format', 'Select format')}\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n )}\n\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-filter', 'Filter')}\n data-testid={selectors.components.SQLQueryEditor.headerFilterSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_filter_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-group', 'Group')}\n data-testid={selectors.components.SQLQueryEditor.headerGroupSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_group_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-order', 'Order')}\n data-testid={selectors.components.SQLQueryEditor.headerOrderSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_order_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-preview', 'Preview')}\n data-testid={selectors.components.SQLQueryEditor.headerPreviewSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_preview_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked });\n }}\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n {!hideRunButton &&\n (isQueryRunnable ? (\n <Button icon=\"play\" variant=\"primary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n ) : (\n <Tooltip\n theme=\"error\"\n content={\n <Trans i18nKey=\"grafana-sql.components.query-header.content-invalid-query\">\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </Trans>\n }\n placement=\"top\"\n >\n <Button icon=\"exclamation-triangle\" variant=\"secondary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n </Tooltip>\n ))}\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'copy',\n });\n\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'discard',\n });\n\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'cancel',\n });\n\n setShowConfirm(false);\n }}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n <EditorRow>\n {datasetDropdownIsAvailable() && (\n <EditorField label={t('grafana-sql.components.query-header.label-dataset', 'Dataset')} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={query.dataset}\n dialect={dialect}\n preconfiguredDataset={preconfiguredDataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n <EditorField label={t('grafana-sql.components.query-header.label-table', 'Table')} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-tableselect-${htmlId}`}\n dataset={query.dataset || preconfiguredDataset}\n table={query.table}\n onChange={onTableChange}\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableSelector.mjs","sources":["../../../src/components/TableSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { DB, ResourceSelectorProps } from '../types';\n\nexport interface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n table: string | undefined;\n dataset: string | undefined;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const TableSelector = ({ db, dataset, table, className, onChange, inputId }: TableSelectorProps) => {\n const state = useAsync(async () => {\n // No need to attempt to fetch tables for an unknown dataset.\n if (!dataset) {\n return [];\n }\n\n const tables = await db.tables(dataset);\n return tables.map(toOption);\n }, [dataset]);\n\n return (\n <Select\n className={className}\n disabled={state.loading}\n aria-label={t('grafana-sql.components.table-selector.aria-label-table-selector', 'Table selector')}\n inputId={inputId}\n data-testid={selectors.components.SQLQueryEditor.headerTableSelector}\n value={table}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={\n state.loading\n ? t('grafana-sql.components.table-selector.placeholder-loading', 'Loading tables')\n : t('grafana-sql.components.table-selector.placeholder-select-table', 'Select table')\n }\n allowCustomValue={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAiBO,MAAM,aAAA,GAAgB,CAAC,EAAE,EAAA,EAAI,SAAS,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,OAAA,EAAQ,KAA0B;AACzG,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AAEjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,OAAO,MAAA,CAAO,IAAI,QAAQ,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,YAAA,EAAY,CAAA,CAAE,iEAAA,EAAmE,gBAAgB,CAAA;AAAA,MACjG,OAAA;AAAA,MACA,aAAA,EAAa,SAAA,CAAU,UAAA,CAAW,cAAA,CAAe,mBAAA;AAAA,MACjD,KAAA,EAAO,KAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,WAAA,EACE,MAAM,OAAA,GACF,CAAA,CAAE,6DAA6D,gBAAgB,CAAA,GAC/E,CAAA,CAAE,gEAAA,EAAkE,cAAc,CAAA;AAAA,MAExF,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"TableSelector.mjs","sources":["../../../src/components/TableSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps } from '../types';\n\nexport interface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n table: string | undefined;\n dataset: string | undefined;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const TableSelector = ({ db, dataset, table, className, onChange, inputId }: TableSelectorProps) => {\n const state = useAsync(async () => {\n // No need to attempt to fetch tables for an unknown dataset.\n if (!dataset) {\n return [];\n }\n\n const tables = await db.tables(dataset);\n return tables.map(toOption);\n }, [dataset]);\n\n return (\n <Select\n className={className}\n disabled={state.loading}\n aria-label={t('grafana-sql.components.table-selector.aria-label-table-selector', 'Table selector')}\n inputId={inputId}\n data-testid={selectors.components.SQLQueryEditor.headerTableSelector}\n value={table}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={\n state.loading\n ? t('grafana-sql.components.table-selector.placeholder-loading', 'Loading tables')\n : t('grafana-sql.components.table-selector.placeholder-select-table', 'Select table')\n }\n allowCustomValue={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAiBO,MAAM,aAAA,GAAgB,CAAC,EAAE,EAAA,EAAI,SAAS,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,OAAA,EAAQ,KAA0B;AACzG,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AAEjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,OAAO,MAAA,CAAO,IAAI,QAAQ,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,YAAA,EAAY,CAAA,CAAE,iEAAA,EAAmE,gBAAgB,CAAA;AAAA,MACjG,OAAA;AAAA,MACA,aAAA,EAAa,SAAA,CAAU,UAAA,CAAW,cAAA,CAAe,mBAAA;AAAA,MACjD,KAAA,EAAO,KAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,WAAA,EACE,MAAM,OAAA,GACF,CAAA,CAAE,6DAA6D,gBAAgB,CAAA,GAC/E,CAAA,CAAE,gEAAA,EAAkE,cAAc,CAAA;AAAA,MAExF,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|