mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 01:12:56 +03:00
console: Add readOnly: true
in a few places where necessary.
I set up a local PostgreSQL read replica, loaded the Chinook dataset, and poked around finding bugs here and there. I added `read_only: true` to the relevant SQL queries to mitigate these. I did not test exhaustively or even that well, and I only tried this with PostgreSQL, so I am sure that I have missed some, but this at least seems to make the console's Data tab usable. Note that this removes the check for the `READ_ONLY_RUN_SQL_QUERIES` feature flag, which seems pointless, as it's checking whether we're running v1.1.0 of the HGE server or later. I sincerely hope no one is actually running such an old version. If this change is acceptable, we can probably remove the feature flag logic entirely, but that is not something I want to do here. [DSF-218]: https://hasurahq.atlassian.net/browse/DSF-218?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ PR-URL: https://github.com/hasura/graphql-engine-mono/pull/8451 Co-authored-by: Luca Restagno <59067245+lucarestagno@users.noreply.github.com> GitOrigin-RevId: 5f4ebfa8f44e2921071699085b877db78aaa4e24
This commit is contained in:
parent
bdfea39de2
commit
b167aa84d1
@ -48,10 +48,6 @@ import {
|
|||||||
import { getRunSqlQuery } from '../../Common/utils/v1QueryUtils';
|
import { getRunSqlQuery } from '../../Common/utils/v1QueryUtils';
|
||||||
import { services } from '../../../dataSources/services';
|
import { services } from '../../../dataSources/services';
|
||||||
import insertReducer from './TableInsertItem/InsertActions';
|
import insertReducer from './TableInsertItem/InsertActions';
|
||||||
import {
|
|
||||||
checkFeatureSupport,
|
|
||||||
READ_ONLY_RUN_SQL_QUERIES,
|
|
||||||
} from '../../../helpers/versionUtils';
|
|
||||||
import { FiRefreshCw } from 'react-icons/fi';
|
import { FiRefreshCw } from 'react-icons/fi';
|
||||||
|
|
||||||
const SET_TABLE = 'Data/SET_TABLE';
|
const SET_TABLE = 'Data/SET_TABLE';
|
||||||
@ -1078,7 +1074,7 @@ export const fetchTableIndexDetails = tableInfo => {
|
|||||||
dataSource.tableIndexSql({ table, schema }),
|
dataSource.tableIndexSql({ table, schema }),
|
||||||
currentDataSource,
|
currentDataSource,
|
||||||
false,
|
false,
|
||||||
checkFeatureSupport(READ_ONLY_RUN_SQL_QUERIES) || false
|
true
|
||||||
);
|
);
|
||||||
const options = {
|
const options = {
|
||||||
credentials: globalCookiePolicy,
|
credentials: globalCookiePolicy,
|
||||||
|
@ -33,6 +33,7 @@ export const runMetadataQuery = async <ResponseType>({
|
|||||||
type RunSqlArgs = {
|
type RunSqlArgs = {
|
||||||
source: Pick<Source, 'kind' | 'name'>;
|
source: Pick<Source, 'kind' | 'name'>;
|
||||||
sql: string;
|
sql: string;
|
||||||
|
readOnly?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type RunSQLSelectResponse = {
|
export type RunSQLSelectResponse = {
|
||||||
@ -96,9 +97,14 @@ export const runGraphQL = async ({
|
|||||||
export const runSQL = async ({
|
export const runSQL = async ({
|
||||||
source,
|
source,
|
||||||
sql,
|
sql,
|
||||||
|
readOnly,
|
||||||
httpClient,
|
httpClient,
|
||||||
}: RunSqlArgs & NetworkArgs): Promise<RunSQLResponse> => {
|
}: RunSqlArgs & NetworkArgs): Promise<RunSQLResponse> => {
|
||||||
const type = getRunSqlType(source.kind as NativeDrivers);
|
const type = getRunSqlType(source.kind as NativeDrivers);
|
||||||
|
|
||||||
|
const readOnlyArg =
|
||||||
|
readOnly === null || readOnly === undefined ? {} : { read_only: readOnly };
|
||||||
|
|
||||||
const result = await runQuery<RunSQLResponse>({
|
const result = await runQuery<RunSQLResponse>({
|
||||||
httpClient,
|
httpClient,
|
||||||
body: {
|
body: {
|
||||||
@ -106,6 +112,7 @@ export const runSQL = async ({
|
|||||||
args: {
|
args: {
|
||||||
sql,
|
sql,
|
||||||
source: source.name,
|
source: source.name,
|
||||||
|
...readOnlyArg,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -50,6 +50,7 @@ export const getTableColumns = async ({
|
|||||||
kind: 'citus',
|
kind: 'citus',
|
||||||
},
|
},
|
||||||
sql,
|
sql,
|
||||||
|
readOnly: true,
|
||||||
httpClient,
|
httpClient,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -106,6 +107,7 @@ export const getTableColumns = async ({
|
|||||||
kind: 'postgres',
|
kind: 'postgres',
|
||||||
},
|
},
|
||||||
sql: primaryKeySql,
|
sql: primaryKeySql,
|
||||||
|
readOnly: true,
|
||||||
httpClient,
|
httpClient,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ export const getTableColumns = async ({
|
|||||||
kind: 'cockroach',
|
kind: 'cockroach',
|
||||||
},
|
},
|
||||||
sql,
|
sql,
|
||||||
|
readOnly: true,
|
||||||
httpClient,
|
httpClient,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ export const getTableColumns = async ({
|
|||||||
kind: 'postgres',
|
kind: 'postgres',
|
||||||
},
|
},
|
||||||
sql,
|
sql,
|
||||||
|
readOnly: true,
|
||||||
httpClient,
|
httpClient,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -105,6 +106,7 @@ export const getTableColumns = async ({
|
|||||||
kind: 'postgres',
|
kind: 'postgres',
|
||||||
},
|
},
|
||||||
sql: primaryKeySql,
|
sql: primaryKeySql,
|
||||||
|
readOnly: true,
|
||||||
httpClient,
|
httpClient,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user