Skip to content

Commit 41bfd35

Browse files
authored
fix: write queries in ai assistant (supabase#37938)
Some read-only errors from running SQL in the AI Assistant aren't being properly detected, so the action item to review and confirm running the SQL isn't showing up. Add test against another variant of read-only error message that can show up.
1 parent f9a6af7 commit 41bfd35

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

apps/studio/components/ui/QueryBlock/QueryBlock.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import dayjs from 'dayjs'
12
import { Code, Play } from 'lucide-react'
23
import { DragEvent, ReactNode, useEffect, useMemo, useState } from 'react'
34
import { Bar, BarChart, CartesianGrid, Cell, Tooltip, XAxis, YAxis } from 'recharts'
@@ -8,10 +9,9 @@ import { ReportBlockContainer } from 'components/interfaces/Reports/ReportBlock/
89
import { ChartConfig } from 'components/interfaces/SQLEditor/UtilityPanel/ChartConfig'
910
import Results from 'components/interfaces/SQLEditor/UtilityPanel/Results'
1011
import { usePrimaryDatabase } from 'data/read-replicas/replicas-query'
11-
import { QueryResponseError, useExecuteSqlMutation } from 'data/sql/execute-sql-mutation'
12-
import dayjs from 'dayjs'
13-
import { Parameter, parseParameters } from 'lib/sql-parameters'
14-
import { Dashboards } from 'types'
12+
import { type QueryResponseError, useExecuteSqlMutation } from 'data/sql/execute-sql-mutation'
13+
import { type Parameter, parseParameters } from 'lib/sql-parameters'
14+
import type { Dashboards } from 'types'
1515
import { ChartContainer, ChartTooltipContent, cn, CodeBlock, SQL_ICON } from 'ui'
1616
import ShimmeringLoader from 'ui-patterns/ShimmeringLoader'
1717
import { ButtonTooltip } from '../ButtonTooltip'
@@ -172,9 +172,10 @@ export const QueryBlock = ({
172172
setQueryError(undefined)
173173
},
174174
onError: (error) => {
175+
const readOnlyTransaction = /cannot execute .+ in a read-only transaction/.test(error.message)
175176
const permissionDenied = error.message.includes('permission denied')
176177
const notOwner = error.message.includes('must be owner')
177-
if (permissionDenied || notOwner) {
178+
if (readOnlyTransaction || permissionDenied || notOwner) {
178179
setReadOnlyError(true)
179180
if (showRunButtonIfNotReadOnly) setShowWarning('hasWriteOperation')
180181
} else {

0 commit comments

Comments
 (0)