{"version":3,"file":"mssqlPlugin.2b42bd7d19bb972fd637.js","mappings":"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","sources":["webpack://grafana/./public/app/plugins/datasource/mssql/CheatSheet.tsx","webpack://grafana/./public/app/plugins/datasource/mssql/types.ts","webpack://grafana/./public/app/plugins/datasource/mssql/azureauth/AzureCredentials.ts","webpack://grafana/./public/app/plugins/datasource/mssql/azureauth/AzureCredentialsConfig.ts","webpack://grafana/./public/app/plugins/datasource/mssql/azureauth/AzureCredentialsForm.tsx","webpack://grafana/./public/app/plugins/datasource/mssql/azureauth/AzureAuthSettings.tsx","webpack://grafana/./public/app/plugins/datasource/mssql/configuration/ConfigurationEditor.tsx","webpack://grafana/./public/app/plugins/datasource/mssql/MSSqlMetaQuery.ts","webpack://grafana/./public/app/plugins/datasource/mssql/MSSqlQueryModel.ts","webpack://grafana/./public/app/plugins/datasource/mssql/sqlCompletionProvider.ts","webpack://grafana/./public/app/plugins/datasource/mssql/sqlUtil.ts","webpack://grafana/./public/app/plugins/datasource/mssql/datasource.ts","webpack://grafana/./public/app/plugins/datasource/mssql/module.ts"],"sourcesContent":["import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport function CheatSheet() {\n const styles = useStyles2(getStyles);\n\n return (\n
\n

MSSQL cheat sheet

\n Time series:\n \n Optional:\n \n

Resultsets of time series queries need to be sorted by time.

\n Table:\n \n Macros:\n \n

Example of group by and order by with $__timeGroup:

\n
\n        \n          SELECT $__timeGroup(date_time_col, '1h') AS time, sum(value) as value 
\n FROM yourtable\n
\n GROUP BY $__timeGroup(date_time_col, '1h')\n
\n ORDER BY 1\n
\n
\n
\n Or build your own conditionals using these macros which just return the values:\n \n
\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n ulPadding: css({\n margin: theme.spacing(1, 0),\n paddingLeft: theme.spacing(5),\n }),\n };\n}\n","import { DataSourceJsonData } from '@grafana/data';\nimport { SQLOptions } from '@grafana/sql';\nimport { HttpSettingsBaseProps } from '@grafana/ui/src/components/DataSourceSettings/types';\n\nexport enum MSSQLAuthenticationType {\n sqlAuth = 'SQL Server Authentication',\n windowsAuth = 'Windows Authentication',\n azureAuth = 'Azure AD Authentication',\n}\n\nexport enum MSSQLEncryptOptions {\n disable = 'disable',\n false = 'false',\n true = 'true',\n}\n\nexport enum AzureCloud {\n Public = 'AzureCloud',\n None = '',\n}\n\nexport type ConcealedSecretType = symbol;\n\nexport enum AzureAuthType {\n MSI = 'msi',\n CLIENT_SECRET = 'clientsecret',\n}\n\nexport interface AzureCredentialsType {\n authType: AzureAuthType;\n azureCloud?: string;\n tenantId?: string;\n clientId?: string;\n clientSecret?: string | ConcealedSecretType;\n}\n\nexport interface MssqlOptions extends SQLOptions {\n authenticationType?: MSSQLAuthenticationType;\n encrypt?: MSSQLEncryptOptions;\n sslRootCertFile?: string;\n serverName?: string;\n connectionTimeout?: number;\n azureCredentials?: AzureCredentialsType;\n}\n\nexport interface MssqlSecureOptions {\n password?: string;\n}\n\nexport type AzureAuthJSONDataType = DataSourceJsonData & {\n azureCredentials: AzureCredentialsType;\n};\n\nexport type AzureAuthSecureJSONDataType = {\n azureClientSecret: undefined | string | ConcealedSecretType;\n};\n\nexport type AzureAuthConfigType = {\n azureAuthIsSupported: boolean;\n azureAuthSettingsUI: (props: HttpSettingsBaseProps) => JSX.Element;\n};\n","import { SelectableValue } from '@grafana/data';\n\nimport { AzureCredentialsType, AzureAuthType } from '../types';\n\nexport enum AzureCloud {\n Public = 'AzureCloud',\n None = '',\n}\n\nexport const KnownAzureClouds: Array> = [{ value: AzureCloud.Public, label: 'Azure' }];\n\nexport function isCredentialsComplete(credentials: AzureCredentialsType): boolean {\n switch (credentials.authType) {\n case AzureAuthType.MSI:\n return true;\n case AzureAuthType.CLIENT_SECRET:\n return !!(credentials.azureCloud && credentials.tenantId && credentials.clientId && credentials.clientSecret);\n }\n}\n","import { DataSourceSettings } from '@grafana/data';\nimport { GrafanaBootConfig } from '@grafana/runtime';\n\nimport {\n AzureCloud,\n AzureCredentialsType,\n ConcealedSecretType,\n AzureAuthSecureJSONDataType,\n AzureAuthJSONDataType,\n AzureAuthType,\n} from '../types';\n\nexport const getDefaultCredentials = (managedIdentityEnabled: boolean, cloud: string): AzureCredentialsType => {\n if (managedIdentityEnabled) {\n return { authType: AzureAuthType.MSI };\n } else {\n return { authType: AzureAuthType.CLIENT_SECRET, azureCloud: cloud };\n }\n};\n\nexport const getSecret = (\n clientSecretStoredServerSide: boolean,\n clientSecret: string | symbol | undefined\n): undefined | string | ConcealedSecretType => {\n const concealedSecret: ConcealedSecretType = Symbol('Concealed client secret');\n if (clientSecretStoredServerSide) {\n // The secret is concealed server side, so return the symbol\n return concealedSecret;\n } else {\n return typeof clientSecret === 'string' && clientSecret.length > 0 ? clientSecret : undefined;\n }\n};\n\nexport const getCredentials = (\n dsSettings: DataSourceSettings,\n bootConfig: GrafanaBootConfig\n): AzureCredentialsType => {\n // JSON data\n const credentials = dsSettings.jsonData?.azureCredentials;\n\n // Secure JSON data/fields\n const clientSecretStoredServerSide = dsSettings.secureJsonFields?.azureClientSecret;\n const clientSecret = dsSettings.secureJsonData?.azureClientSecret;\n\n // BootConfig data\n const managedIdentityEnabled = !!bootConfig.azure?.managedIdentityEnabled;\n const cloud = bootConfig.azure?.cloud || AzureCloud.Public;\n\n // If no credentials saved, then return empty credentials\n // of type based on whether the managed identity enabled\n if (!credentials) {\n return getDefaultCredentials(managedIdentityEnabled, cloud);\n }\n\n switch (credentials.authType) {\n case AzureAuthType.MSI:\n if (managedIdentityEnabled) {\n return {\n authType: AzureAuthType.MSI,\n };\n } else {\n // If authentication type is managed identity but managed identities were disabled in Grafana config,\n // then we should fallback to an empty app registration (client secret) configuration\n return {\n authType: AzureAuthType.CLIENT_SECRET,\n azureCloud: cloud,\n };\n }\n case AzureAuthType.CLIENT_SECRET:\n return {\n authType: AzureAuthType.CLIENT_SECRET,\n azureCloud: credentials.azureCloud || cloud,\n tenantId: credentials.tenantId,\n clientId: credentials.clientId,\n clientSecret: getSecret(clientSecretStoredServerSide, clientSecret),\n };\n }\n};\n\nexport const updateCredentials = (\n dsSettings: DataSourceSettings,\n bootConfig: GrafanaBootConfig,\n credentials: AzureCredentialsType\n): DataSourceSettings => {\n // BootConfig data\n const managedIdentityEnabled = !!bootConfig.azure?.managedIdentityEnabled;\n const cloud = bootConfig.azure?.cloud || AzureCloud.Public;\n\n switch (credentials.authType) {\n case AzureAuthType.MSI:\n if (!managedIdentityEnabled) {\n throw new Error('Managed Identity authentication is not enabled in Grafana config.');\n }\n\n dsSettings = {\n ...dsSettings,\n jsonData: {\n ...dsSettings.jsonData,\n azureCredentials: {\n authType: AzureAuthType.MSI,\n },\n },\n };\n\n return dsSettings;\n\n case AzureAuthType.CLIENT_SECRET:\n dsSettings = {\n ...dsSettings,\n jsonData: {\n ...dsSettings.jsonData,\n azureCredentials: {\n authType: AzureAuthType.CLIENT_SECRET,\n azureCloud: credentials.azureCloud || cloud,\n tenantId: credentials.tenantId,\n clientId: credentials.clientId,\n },\n },\n secureJsonData: {\n ...dsSettings.secureJsonData,\n azureClientSecret:\n typeof credentials.clientSecret === 'string' && credentials.clientSecret.length > 0\n ? credentials.clientSecret\n : undefined,\n },\n secureJsonFields: {\n ...dsSettings.secureJsonFields,\n azureClientSecret: typeof credentials.clientSecret === 'symbol',\n },\n };\n\n return dsSettings;\n }\n};\n","import React, { ChangeEvent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Button, Field, Select, Input } from '@grafana/ui/src/components';\n\nimport { AzureCredentialsType, AzureAuthType } from '../types';\n\nexport interface Props {\n managedIdentityEnabled: boolean;\n credentials: AzureCredentialsType;\n azureCloudOptions?: SelectableValue[];\n onCredentialsChange: (updatedCredentials: AzureCredentialsType) => void;\n disabled?: boolean;\n}\n\nconst authTypeOptions: Array> = [\n {\n value: AzureAuthType.MSI,\n label: 'Managed Identity',\n },\n {\n value: AzureAuthType.CLIENT_SECRET,\n label: 'App Registration',\n },\n];\n\nexport const AzureCredentialsForm = (props: Props) => {\n const { managedIdentityEnabled, credentials, azureCloudOptions, onCredentialsChange, disabled } = props;\n\n const onAuthTypeChange = (selected: SelectableValue) => {\n if (onCredentialsChange) {\n const updated: AzureCredentialsType = {\n ...credentials,\n authType: selected.value || AzureAuthType.MSI,\n };\n onCredentialsChange(updated);\n }\n };\n\n const onInputChange = ({ property, value }: { property: keyof AzureCredentialsType; value: string }) => {\n if (onCredentialsChange && credentials.authType === 'clientsecret') {\n const updated: AzureCredentialsType = {\n ...credentials,\n [property]: value,\n };\n onCredentialsChange(updated);\n }\n };\n\n return (\n
\n {managedIdentityEnabled && (\n \n opt.value === credentials.authType)}\n options={authTypeOptions}\n onChange={onAuthTypeChange}\n disabled={disabled}\n />\n \n )}\n {credentials.authType === 'clientsecret' && (\n <>\n {azureCloudOptions && (\n \n opt.value === credentials.azureCloud)}\n options={azureCloudOptions}\n onChange={(selected: SelectableValue) => {\n const value = selected.value || '';\n onInputChange({ property: 'azureCloud', value });\n }}\n isDisabled={disabled}\n inputId=\"azure-cloud-type\"\n aria-label=\"Azure Cloud\"\n width={20}\n />\n \n )}\n \n ) => {\n const value = event.target.value;\n onInputChange({ property: 'tenantId', value });\n }}\n disabled={disabled}\n aria-label=\"Tenant ID\"\n />\n \n \n ) => {\n const value = event.target.value;\n onInputChange({ property: 'clientId', value });\n }}\n disabled={disabled}\n aria-label=\"Client ID\"\n />\n \n {!disabled &&\n (typeof credentials.clientSecret === 'symbol' ? (\n \n
\n \n {\n onInputChange({ property: 'clientSecret', value: '' });\n }}\n disabled={disabled}\n >\n Reset\n \n
\n
\n ) : (\n \n ) => {\n const value = event.target.value;\n onInputChange({ property: 'clientSecret', value });\n }}\n id=\"client-secret\"\n disabled={disabled}\n />\n \n ))}\n \n )}\n
\n );\n};\n\nexport default AzureCredentialsForm;\n","import React, { useMemo } from 'react';\n\nimport { config } from '@grafana/runtime';\nimport { HttpSettingsBaseProps } from '@grafana/ui/src/components/DataSourceSettings/types';\n\nimport { AzureCredentialsType } from '../types';\n\nimport { KnownAzureClouds } from './AzureCredentials';\nimport { getCredentials, updateCredentials } from './AzureCredentialsConfig';\nimport { AzureCredentialsForm } from './AzureCredentialsForm';\n\nexport const AzureAuthSettings = (props: HttpSettingsBaseProps) => {\n const { dataSourceConfig: dsSettings, onChange } = props;\n const managedIdentityEnabled = config.azure.managedIdentityEnabled;\n\n const credentials = useMemo(() => getCredentials(dsSettings, config), [dsSettings]);\n\n const onCredentialsChange = (credentials: AzureCredentialsType): void => {\n onChange(updateCredentials(dsSettings, config, credentials));\n };\n\n return (\n \n );\n};\n\nexport default AzureAuthSettings;\n","import { css } from '@emotion/css';\nimport React, { SyntheticEvent } from 'react';\n\nimport {\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n SelectableValue,\n updateDatasourcePluginJsonDataOption,\n updateDatasourcePluginResetOption,\n} from '@grafana/data';\nimport { ConfigSection, ConfigSubSection, DataSourceDescription } from '@grafana/experimental';\nimport { ConnectionLimits, useMigrateDatabaseFields } from '@grafana/sql';\nimport {\n Alert,\n FieldSet,\n Input,\n Link,\n SecretInput,\n Select,\n useStyles2,\n SecureSocksProxySettings,\n Divider,\n Field,\n Switch,\n} from '@grafana/ui';\nimport { NumberInput } from 'app/core/components/OptionsUI/NumberInput';\nimport { config } from 'app/core/config';\n\nimport { AzureAuthSettings } from '../azureauth/AzureAuthSettings';\nimport {\n MSSQLAuthenticationType,\n MSSQLEncryptOptions,\n MssqlOptions,\n AzureAuthConfigType,\n MssqlSecureOptions,\n} from '../types';\n\nconst LONG_WIDTH = 40;\n\nexport const ConfigurationEditor = (props: DataSourcePluginOptionsEditorProps) => {\n useMigrateDatabaseFields(props);\n\n const { options: dsSettings, onOptionsChange } = props;\n const styles = useStyles2(getStyles);\n const jsonData = dsSettings.jsonData;\n const azureAuthIsSupported = config.azureAuthEnabled;\n\n const azureAuthSettings: AzureAuthConfigType = {\n azureAuthIsSupported,\n azureAuthSettingsUI: AzureAuthSettings,\n };\n\n const onResetPassword = () => {\n updateDatasourcePluginResetOption(props, 'password');\n };\n\n const onDSOptionChanged = (property: keyof MssqlOptions) => {\n return (event: SyntheticEvent) => {\n onOptionsChange({ ...dsSettings, ...{ [property]: event.currentTarget.value } });\n };\n };\n\n const onSkipTLSVerifyChanged = (event: SyntheticEvent) => {\n updateDatasourcePluginJsonDataOption(props, 'tlsSkipVerify', event.currentTarget.checked);\n };\n\n const onEncryptChanged = (value: SelectableValue) => {\n updateDatasourcePluginJsonDataOption(props, 'encrypt', value.value);\n };\n\n const onAuthenticationMethodChanged = (value: SelectableValue) => {\n onOptionsChange({\n ...dsSettings,\n ...{\n jsonData: { ...jsonData, ...{ authenticationType: value.value }, azureCredentials: undefined },\n secureJsonData: { ...dsSettings.secureJsonData, ...{ password: '' } },\n secureJsonFields: { ...dsSettings.secureJsonFields, ...{ password: false } },\n user: '',\n },\n });\n };\n\n const onConnectionTimeoutChanged = (connectionTimeout?: number) => {\n updateDatasourcePluginJsonDataOption(props, 'connectionTimeout', connectionTimeout ?? 0);\n };\n\n const buildAuthenticationOptions = (): Array> => {\n const basicAuthenticationOptions: Array> = [\n { value: MSSQLAuthenticationType.sqlAuth, label: 'SQL Server Authentication' },\n { value: MSSQLAuthenticationType.windowsAuth, label: 'Windows Authentication' },\n ];\n\n if (azureAuthIsSupported) {\n return [\n ...basicAuthenticationOptions,\n { value: MSSQLAuthenticationType.azureAuth, label: 'Azure AD Authentication' },\n ];\n }\n\n return basicAuthenticationOptions;\n };\n\n const encryptOptions: Array> = [\n { value: MSSQLEncryptOptions.disable, label: 'disable' },\n { value: MSSQLEncryptOptions.false, label: 'false' },\n { value: MSSQLEncryptOptions.true, label: 'true' },\n ];\n\n return (\n <>\n \n \n The database user should only be granted SELECT permissions on the specified database and tables you want to\n query. Grafana does not validate that queries are safe so queries can contain any SQL statement. For example,\n statements like USE otherdb; and DROP TABLE user; would be executed. To protect\n against this we highly recommend you create a specific MS SQL user with restricted permissions. Check\n out the{' '}\n \n Microsoft SQL Server Data Source Docs\n {' '}\n for more information.\n \n \n \n \n \n \n \n \n \n \n\n \n \n Determines whether or to which extent a secure SSL TCP/IP connection will be negotiated with the server.\n
    \n
  • \n disable - Data sent between client and server is not encrypted.\n
  • \n
  • \n false - Data sent between client and server is not encrypted beyond the login packet. (default)\n
  • \n
  • \n true - Data sent between client and server is encrypted.\n
  • \n
\n If you're using an older version of Microsoft SQL Server like 2008 and 2008R2 you may need to disable\n encryption to be able to connect.\n \n }\n label=\"Encrypt\"\n >\n \n \n\n {jsonData.encrypt === MSSQLEncryptOptions.true ? (\n <>\n \n \n \n {jsonData.tlsSkipVerify ? null : (\n <>\n \n Path to file containing the public key certificate of the CA that signed the SQL Server\n certificate. Needed when the server certificate is self signed.\n \n }\n label=\"TLS/SSL Root Certificate\"\n >\n \n \n \n \n \n \n )}\n \n ) : null}\n
\n\n \n \n
  • \n SQL Server Authentication This is the default mechanism to connect to MS SQL Server. Enter the\n SQL Server Authentication login or the Windows Authentication login in the DOMAIN\\User format.\n
  • \n
  • \n Windows Authentication Windows Integrated Security - single sign on for users who are already\n logged onto Windows and have enabled this option for MS SQL Server.\n
  • \n {azureAuthIsSupported && (\n
  • \n Azure Authentication Securely authenticate and access Azure resources and applications using\n Azure AD credentials - Managed Service Identity and Client Secret Credentials are supported.\n
  • \n )}\n \n }\n >\n \n \n\n {/* Basic SQL auth. Render if authType === MSSQLAuthenticationType.sqlAuth OR\n if no authType exists, which will be the case when creating a new data source */}\n {(jsonData.authenticationType === MSSQLAuthenticationType.sqlAuth || !jsonData.authenticationType) && (\n <>\n \n \n \n \n \n \n \n )}\n\n {azureAuthIsSupported && jsonData.authenticationType === MSSQLAuthenticationType.azureAuth && (\n
    \n \n
    \n )}\n
    \n\n \n \n \n\n \n \n A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example\n 1m if your data is written every minute.\n \n }\n label=\"Min time interval\"\n >\n \n \n \n The number of seconds to wait before canceling the request when connecting to the database. The default\n is 0, meaning no timeout.\n \n }\n label=\"Connection timeout\"\n >\n \n \n \n {config.secureSocksDSProxyEnabled && (\n \n )}\n \n \n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n ulPadding: css({\n margin: theme.spacing(1, 0),\n paddingLeft: theme.spacing(5),\n }),\n };\n}\n","export function showDatabases() {\n // Return only user defined databases\n return `SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');`;\n}\n\nexport function getSchemaAndName(database?: string) {\n return `SELECT TABLE_SCHEMA + '.' + TABLE_NAME as schemaAndName\n FROM [${database}].INFORMATION_SCHEMA.TABLES`;\n}\n\nexport function getSchema(database?: string, table?: string) {\n return `\n USE ${database}\n SELECT COLUMN_NAME as 'column',DATA_TYPE as 'type'\n FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='${table}';`;\n}\n","import { ScopedVars } from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { applyQueryDefaults, SQLQuery, SqlQueryModel } from '@grafana/sql';\n\nexport class MSSqlQueryModel implements SqlQueryModel {\n target: SQLQuery;\n templateSrv?: TemplateSrv;\n scopedVars?: ScopedVars;\n\n constructor(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars) {\n this.target = applyQueryDefaults(target || { refId: 'A' });\n this.templateSrv = templateSrv;\n this.scopedVars = scopedVars;\n }\n\n quoteLiteral(value: string) {\n return \"'\" + value.replace(/'/g, \"''\") + \"'\";\n }\n}\n","import {\n ColumnDefinition,\n getStandardSQLCompletionProvider,\n LanguageCompletionProvider,\n LinkedToken,\n TableDefinition,\n TableIdentifier,\n TokenType,\n} from '@grafana/experimental';\nimport { DB, SQLQuery } from '@grafana/sql';\n\ninterface CompletionProviderGetterArgs {\n getColumns: React.MutableRefObject<(t: SQLQuery) => Promise>;\n getTables: React.MutableRefObject<(d?: string) => Promise>;\n}\n\nexport const getSqlCompletionProvider: (args: CompletionProviderGetterArgs) => LanguageCompletionProvider =\n ({ getColumns, getTables }) =>\n (monaco, language) => ({\n ...(language && getStandardSQLCompletionProvider(monaco, language)),\n tables: {\n resolve: async (identifier) => {\n return await getTables.current(identifier?.table);\n },\n parseName: (token: LinkedToken | undefined | null) => {\n if (!token) {\n return { table: '' };\n }\n\n let processedToken = token;\n let tablePath = processedToken.value;\n\n while (processedToken.next && processedToken.next.type !== TokenType.Whitespace) {\n tablePath += processedToken.next.value;\n processedToken = processedToken.next;\n }\n\n if (processedToken.value.endsWith('.')) {\n tablePath = processedToken.value.slice(0, processedToken.value.length - 1);\n }\n\n return { table: tablePath };\n },\n },\n\n columns: {\n resolve: async (t: TableIdentifier | undefined) => {\n if (!t?.table) {\n return [];\n }\n // TODO: Use schema instead of table\n const [database, schema, tableName] = t.table.split('.');\n return await getColumns.current({ table: `${schema}.${tableName}`, dataset: database, refId: 'A' });\n },\n },\n });\n\nexport async function fetchColumns(db: DB, q: SQLQuery) {\n const cols = await db.fields(q);\n if (cols.length > 0) {\n return cols.map((c) => {\n return { name: c.value, type: c.value, description: c.value };\n });\n } else {\n return [];\n }\n}\n\nexport async function fetchTables(db: DB, dataset?: string) {\n const tables = await db.lookup?.(dataset);\n return tables || [];\n}\n","import { isEmpty } from 'lodash';\n\nimport { RAQBFieldTypes, SQLExpression, SQLQuery, haveColumns } from '@grafana/sql';\n\nexport function getIcon(type: string): string | undefined {\n switch (type) {\n case 'datetimeoffset':\n case 'date':\n case 'datetime2':\n case 'smalldatetime':\n case 'datetime':\n case 'time':\n return 'clock-nine';\n case 'bit':\n return 'toggle-off';\n case 'tinyint':\n case 'smallint':\n case 'int':\n case 'bigint':\n case 'decimal':\n case 'numeric':\n case 'real':\n case 'float':\n case 'money':\n case 'smallmoney':\n return 'calculator-alt';\n case 'char':\n case 'varchar':\n case 'text':\n case 'nchar':\n case 'nvarchar':\n case 'ntext':\n case 'binary':\n case 'varbinary':\n case 'image':\n return 'text';\n default:\n return undefined;\n }\n}\n\nexport function getRAQBType(type: string): RAQBFieldTypes {\n switch (type) {\n case 'datetimeoffset':\n case 'datetime2':\n case 'smalldatetime':\n case 'datetime':\n return 'datetime';\n case 'time':\n return 'time';\n case 'date':\n return 'date';\n case 'bit':\n return 'boolean';\n case 'tinyint':\n case 'smallint':\n case 'int':\n case 'bigint':\n case 'decimal':\n case 'numeric':\n case 'real':\n case 'float':\n case 'money':\n case 'smallmoney':\n return 'number';\n case 'char':\n case 'varchar':\n case 'text':\n case 'nchar':\n case 'nvarchar':\n case 'ntext':\n case 'binary':\n case 'varbinary':\n case 'image':\n return 'text';\n default:\n return 'text';\n }\n}\n\nexport function toRawSql({ sql, dataset, table }: SQLQuery): string {\n let rawQuery = '';\n\n // Return early with empty string if there is no sql column\n if (!sql || !haveColumns(sql.columns)) {\n return rawQuery;\n }\n\n rawQuery += createSelectClause(sql.columns, sql.limit);\n\n if (dataset && table) {\n rawQuery += `FROM ${dataset}.${table} `;\n }\n\n if (sql.whereString) {\n rawQuery += `WHERE ${sql.whereString} `;\n }\n\n if (sql.groupBy?.[0]?.property.name) {\n const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));\n rawQuery += `GROUP BY ${groupBy.join(', ')} `;\n }\n\n if (sql.orderBy?.property.name) {\n rawQuery += `ORDER BY ${sql.orderBy.property.name} `;\n }\n\n if (sql.orderBy?.property.name && sql.orderByDirection) {\n rawQuery += `${sql.orderByDirection} `;\n }\n\n return rawQuery;\n}\n\nfunction createSelectClause(sqlColumns: NonNullable, limit?: number): 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 ${isLimit(limit) ? 'TOP(' + limit + ')' : ''} ${columns.join(', ')} `;\n}\n\nconst isLimit = (limit: number | undefined): boolean => limit !== undefined && limit >= 0;\n","import { DataSourceInstanceSettings, ScopedVars } from '@grafana/data';\nimport { LanguageDefinition } from '@grafana/experimental';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { DB, SQLQuery, SqlDatasource, SQLSelectableValue, formatSQL } from '@grafana/sql';\n\nimport { getSchema, showDatabases, getSchemaAndName } from './MSSqlMetaQuery';\nimport { MSSqlQueryModel } from './MSSqlQueryModel';\nimport { fetchColumns, fetchTables, getSqlCompletionProvider } from './sqlCompletionProvider';\nimport { getIcon, getRAQBType, toRawSql } from './sqlUtil';\nimport { MssqlOptions } from './types';\n\nexport class MssqlDatasource extends SqlDatasource {\n sqlLanguageDefinition: LanguageDefinition | undefined = undefined;\n constructor(instanceSettings: DataSourceInstanceSettings) {\n super(instanceSettings);\n }\n\n getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): MSSqlQueryModel {\n return new MSSqlQueryModel(target, templateSrv, scopedVars);\n }\n\n async fetchDatasets(): Promise {\n const datasets = await this.runSql<{ name: string[] }>(showDatabases(), { refId: 'datasets' });\n return datasets.fields.name?.values.flat() ?? [];\n }\n\n async fetchTables(dataset?: string): Promise {\n // We get back the table name with the schema as well. like dbo.table\n const tables = await this.runSql<{ schemaAndName: string[] }>(getSchemaAndName(dataset), { refId: 'tables' });\n return tables.fields.schemaAndName?.values.flat() ?? [];\n }\n\n async fetchFields(query: SQLQuery): Promise {\n if (!query.table) {\n return [];\n }\n const [_, table] = query.table.split('.');\n const schema = await this.runSql<{ column: string; type: string }>(getSchema(query.dataset, table), {\n refId: 'columns',\n });\n const result: SQLSelectableValue[] = [];\n for (let i = 0; i < schema.length; i++) {\n const column = schema.fields.column.values[i];\n const type = schema.fields.type.values[i];\n result.push({ label: column, value: column, type, icon: getIcon(type), raqbFieldType: getRAQBType(type) });\n }\n return result;\n }\n\n getSqlLanguageDefinition(db: DB): LanguageDefinition {\n if (this.sqlLanguageDefinition !== undefined) {\n return this.sqlLanguageDefinition;\n }\n const args = {\n getColumns: { current: (query: SQLQuery) => fetchColumns(db, query) },\n getTables: { current: (dataset?: string) => fetchTables(db, dataset) },\n };\n this.sqlLanguageDefinition = {\n id: 'sql',\n completionProvider: getSqlCompletionProvider(args),\n formatter: formatSQL,\n };\n return this.sqlLanguageDefinition;\n }\n\n getDB(): DB {\n if (this.db !== undefined) {\n return this.db;\n }\n return {\n init: () => Promise.resolve(true),\n datasets: () => this.fetchDatasets(),\n tables: (dataset?: string) => this.fetchTables(dataset),\n getEditorLanguageDefinition: () => this.getSqlLanguageDefinition(this.db),\n fields: async (query: SQLQuery) => {\n if (!query?.dataset || !query?.table) {\n return [];\n }\n return this.fetchFields(query);\n },\n validateQuery: (query) =>\n Promise.resolve({ isError: false, isValid: true, query, error: '', rawSql: query.rawSql }),\n dsID: () => this.id,\n dispose: (_dsID?: string) => {},\n toRawSql,\n lookup: async (path?: string) => {\n if (!path) {\n const datasets = await this.fetchDatasets();\n return datasets.map((d) => ({ name: d, completion: `${d}.` }));\n } else {\n const parts = path.split('.').filter((s: string) => s);\n if (parts.length > 2) {\n return [];\n }\n if (parts.length === 1) {\n const tables = await this.fetchTables(parts[0]);\n return tables.map((t) => ({ name: t, completion: t }));\n } else {\n return [];\n }\n }\n },\n };\n }\n}\n","import { DataSourcePlugin } from '@grafana/data';\nimport { SQLQuery, SqlQueryEditor } from '@grafana/sql';\n\nimport { CheatSheet } from './CheatSheet';\nimport { ConfigurationEditor } from './configuration/ConfigurationEditor';\nimport { MssqlDatasource } from './datasource';\nimport { MssqlOptions } from './types';\n\nexport const plugin = new DataSourcePlugin(MssqlDatasource)\n .setQueryEditor(SqlQueryEditor)\n .setQueryEditorHelp(CheatSheet)\n .setConfigEditor(ConfigurationEditor);\n"],"names":["CheatSheet","styles","getStyles","theme","MSSQLAuthenticationType","MSSQLEncryptOptions","AzureCloud","AzureAuthType","KnownAzureClouds","isCredentialsComplete","credentials","getDefaultCredentials","managedIdentityEnabled","cloud","getSecret","clientSecretStoredServerSide","clientSecret","concealedSecret","getCredentials","dsSettings","bootConfig","updateCredentials","authTypeOptions","AzureCredentialsForm","props","azureCloudOptions","onCredentialsChange","disabled","onAuthTypeChange","selected","updated","onInputChange","property","value","Field","Select","opt","Input","event","Button","AzureAuthSettings","onChange","LONG_WIDTH","ConfigurationEditor","onOptionsChange","jsonData","azureAuthIsSupported","config","azureAuthSettings","onResetPassword","onDSOptionChanged","onSkipTLSVerifyChanged","onEncryptChanged","onAuthenticationMethodChanged","onConnectionTimeoutChanged","connectionTimeout","buildAuthenticationOptions","basicAuthenticationOptions","encryptOptions","DataSourceDescription","Alert","Link","Divider","ConfigSection","Switch","SecretInput","FieldSet","ConfigSubSection","NumberInput","SecureSocksProxySettings","showDatabases","getSchemaAndName","database","getSchema","table","MSSqlQueryModel","target","templateSrv","scopedVars","getSqlCompletionProvider","getColumns","getTables","monaco","language","identifier","token","processedToken","tablePath","t","schema","tableName","fetchColumns","db","q","cols","c","fetchTables","dataset","getIcon","type","getRAQBType","toRawSql","sql","rawQuery","createSelectClause","groupBy","g","sqlColumns","limit","columns","rawColumn","p","isLimit","MssqlDatasource","instanceSettings","query","_","result","i","column","args","_dsID","path","parts","s","d"],"sourceRoot":""}