diff --git a/src/renderer/app.tsx b/src/renderer/app.tsx
index 04b3314..a1df078 100644
--- a/src/renderer/app.tsx
+++ b/src/renderer/app.tsx
@@ -18,7 +18,7 @@ import ConnectionErrorPage from './routes/errors/ConnectionsErrorPage';
import RootErrorPage from './routes/errors/RootErrorPage';
import { Home } from './routes/home';
import Root from './routes/root';
-import SqlPage from './routes/sql.$connectionName';
+import SqlPage, { action as sqlPageAction } from './routes/sql.$connectionName';
const appElement = document.getElementById('App');
@@ -61,6 +61,9 @@ const router = createHashRouter([
{
path: 'connections/:connectionName',
loader: connectionDetailPageLoader,
+ shouldRevalidate: ({ currentParams, nextParams }) => {
+ return currentParams.connectionName !== nextParams.connectionName;
+ },
element: ,
children: [
{
@@ -77,6 +80,7 @@ const router = createHashRouter([
{
path: 'sql',
element: ,
+ action: sqlPageAction,
},
],
},
diff --git a/src/renderer/component/MonacoEditor/RawSqlEditor.tsx b/src/renderer/component/MonacoEditor/RawSqlEditor.tsx
index d0211c6..a8b81bf 100644
--- a/src/renderer/component/MonacoEditor/RawSqlEditor.tsx
+++ b/src/renderer/component/MonacoEditor/RawSqlEditor.tsx
@@ -51,6 +51,7 @@ export function RawSqlEditor({
language: 'sql',
theme: 'currentTheme',
minimap: { enabled: false },
+ automaticLayout: true,
...memoizedMonacoOptions,
});
diff --git a/src/renderer/routes/connections.$connectionName.tsx b/src/renderer/routes/connections.$connectionName.tsx
index 46b8fb3..529a119 100644
--- a/src/renderer/routes/connections.$connectionName.tsx
+++ b/src/renderer/routes/connections.$connectionName.tsx
@@ -51,7 +51,7 @@ export async function loader({ params, request }: RouteParams) {
openedTable ? `/tables/${openedTable}` : ''
}`;
- if (!request.url.endsWith(expectedUrl)) {
+ if (new URL(request.url).pathname !== expectedUrl) {
return redirect(expectedUrl);
}
diff --git a/src/renderer/routes/sql.$connectionName.tsx b/src/renderer/routes/sql.$connectionName.tsx
index 776e324..910c353 100644
--- a/src/renderer/routes/sql.$connectionName.tsx
+++ b/src/renderer/routes/sql.$connectionName.tsx
@@ -1,29 +1,39 @@
-import { useState } from 'react';
import { Button, Flex, Form } from 'antd';
+import { ActionFunctionArgs, useFetcher } from 'react-router-dom';
import invariant from 'tiny-invariant';
import { useConnectionContext } from '../../contexts/ConnectionContext';
-import { useDatabaseContext } from '../../contexts/DatabaseContext';
import { useTranslation } from '../../i18n';
import { isResultSetHeader, isRowDataPacketArray } from '../../sql/type-guard';
-import { QueryResult } from '../../sql/types';
import { RawSqlEditor } from '../component/MonacoEditor/RawSqlEditor';
import TableGrid from '../component/TableGrid';
import { useTableHeight } from '../component/TableLayout/useTableHeight';
-const DEFAULT_VALUE = `SELECT *
-FROM cart c
-WHERE c.id > 5
-LIMIT 10;`;
+const DEFAULT_VALUE = `SELECT * FROM employees e WHERE e.gender = 'F' LIMIT 10;`;
+
+export async function action({ request, params }: ActionFunctionArgs) {
+ const { databaseName, connectionName } = params;
+
+ invariant(connectionName, 'Connection name is required');
+ invariant(databaseName, 'Database name is required');
+
+ const formData = await request.formData();
+ const query = formData.get('raw');
+
+ invariant(typeof query === 'string', 'Query as string is required');
+
+ await window.sql.executeQuery(connectionName, `USE ${databaseName};`);
+ const result = await window.sql.executeQuery(connectionName, query);
+
+ return result;
+}
// TODO : create an element for the `yScroll` (actually need to be wrapped in a Flex height 100 and overflow, etc.)
export default function SqlPage() {
const { t } = useTranslation();
- const [result, setResult] = useState | null>(null);
- const { database } = useDatabaseContext();
- const { currentConnectionName } = useConnectionContext();
const [form] = Form.useForm();
+ const fetcher = useFetcher();
- invariant(currentConnectionName, 'Connection name is required');
+ const result = fetcher.data;
const [yTableScroll, resizeRef] = useTableHeight();
@@ -31,26 +41,11 @@ export default function SqlPage() {