frontend - removed references to dbgate-engines

This commit is contained in:
Jan Prochazka
2020-11-24 20:15:07 +01:00
parent 644a35d8c3
commit 424aff5d93
10 changed files with 75 additions and 20 deletions

View File

@@ -4,13 +4,14 @@ import DataGrid from './DataGrid';
import styled from 'styled-components';
import { TableGridDisplay, createGridConfig, createGridCache } from 'dbgate-datalib';
import { getFilterValueExpression } from 'dbgate-filterparser';
import { findEngineDriver } from 'dbgate-tools';
import { useConnectionInfo, getTableInfo, useDatabaseInfo } from '../utility/metadataLoaders';
import engines from 'dbgate-engines';
import useSocket from '../utility/SocketProvider';
import { VerticalSplitter } from '../widgets/Splitter';
import stableStringify from 'json-stable-stringify';
import ReferenceHeader from './ReferenceHeader';
import SqlDataGridCore from './SqlDataGridCore';
import useExtensions from '../utility/useExtensions';
const ReferenceContainer = styled.div`
position: absolute;
@@ -49,6 +50,7 @@ export default function TableDataGrid({
const [childCache, setChildCache] = React.useState(createGridCache());
const [refReloadToken, setRefReloadToken] = React.useState(0);
const [myLoadedTime, setMyLoadedTime] = React.useState(0);
const extension = useExtensions();
const { childConfig } = config;
const setChildConfig = (value, reference = undefined) => {
@@ -75,7 +77,7 @@ export default function TableDataGrid({
return connection
? new TableGridDisplay(
{ schemaName, pureName },
engines(connection),
findEngineDriver(connection, extension),
config,
setConfig,
cache || myCache,

View File

@@ -2,8 +2,7 @@ import _ from 'lodash';
import ScriptWriter from './ScriptWriter';
import getAsArray from '../utility/getAsArray';
import { getConnectionInfo } from '../utility/metadataLoaders';
import engines from 'dbgate-engines';
import { findObjectLike } from 'dbgate-tools';
import { findEngineDriver, findObjectLike } from 'dbgate-tools';
import { findFileFormat } from '../utility/fileformats';
export function getTargetName(extensions, source, values) {
@@ -26,10 +25,10 @@ function extractApiParameters(values, direction, format) {
return _.fromPairs(pairs);
}
async function getConnection(storageType, conid, database) {
async function getConnection(extensions, storageType, conid, database) {
if (storageType == 'database' || storageType == 'query') {
const conn = await getConnectionInfo({ conid });
const driver = engines(conn);
const driver = findEngineDriver(conn, extensions);
return [
{
..._.pick(conn, ['server', 'engine', 'user', 'password', 'port']),
@@ -154,11 +153,13 @@ export default async function createImpExpScript(extensions, values, addEditorIn
const script = new ScriptWriter();
const [sourceConnection, sourceDriver] = await getConnection(
extensions,
values.sourceStorageType,
values.sourceConnectionId,
values.sourceDatabaseName
);
const [targetConnection, targetDriver] = await getConnection(
extensions,
values.targetStorageType,
values.targetConnectionId,
values.targetDatabaseName
@@ -223,6 +224,7 @@ export function getActionOptions(extensions, source, values, targetDbinfo) {
export async function createPreviewReader(extensions, values, sourceName) {
const [sourceConnection, sourceDriver] = await getConnection(
extensions,
values.sourceStorageType,
values.sourceConnectionId,
values.sourceDatabaseName

View File

@@ -7,10 +7,12 @@ import { Formik, Form } from 'formik';
import ModalHeader from './ModalHeader';
import ModalFooter from './ModalFooter';
import ModalContent from './ModalContent';
import useExtensions from '../utility/useExtensions';
// import FormikForm from '../utility/FormikForm';
export default function ConnectionModal({ modalState, connection = undefined }) {
const [sqlConnectResult, setSqlConnectResult] = React.useState('Not connected');
const extensions = useExtensions();
const handleTest = async (values) => {
const resp = await axios.post('connections/test', values);
@@ -31,9 +33,15 @@ export default function ConnectionModal({ modalState, connection = undefined })
<Form>
<ModalContent>
<FormSelectField label="Database engine" name="engine">
<option value="mssql">Microsoft SQL Server</option>
<option value=""></option>
{extensions.drivers.map((driver) => (
<option value={driver.engine} key={driver.engine}>
{driver.title}
</option>
))}
{/* <option value="mssql">Microsoft SQL Server</option>
<option value="mysql">MySQL</option>
<option value="postgres">Postgre SQL</option>
<option value="postgres">Postgre SQL</option> */}
</FormSelectField>
<FormTextField label="Server" name="server" />
<FormTextField label="Port" name="port" />

View File

@@ -2,14 +2,8 @@ import React from 'react';
import ReactDOM from 'react-dom';
import _ from 'lodash';
import axios from '../utility/axios';
import engines from 'dbgate-engines';
import {
useConnectionInfo,
getDbCore,
getConnectionInfo,
getSqlObjectInfo,
} from '../utility/metadataLoaders';
import { useConnectionInfo, getDbCore, getConnectionInfo, getSqlObjectInfo } from '../utility/metadataLoaders';
import SqlEditor from '../sqleditor/SqlEditor';
import { useUpdateDatabaseForTab, useSetOpenedTabs, useOpenedTabs } from '../utility/globalState';
import QueryToolbar from '../query/QueryToolbar';
@@ -23,15 +17,18 @@ import useSocket from '../utility/SocketProvider';
import SaveSqlFileModal from '../modals/SaveSqlFileModal';
import useModalState from '../modals/useModalState';
import sqlFormatter from 'sql-formatter';
import useExtensions from '../utility/useExtensions';
import { driverBase, findEngineDriver } from 'dbgate-tools';
function useSqlTemplate(sqlTemplate, props) {
const [sql, setSql] = React.useState('');
const extensions = useExtensions();
async function loadTemplate() {
if (sqlTemplate == 'CREATE TABLE') {
const tableInfo = await getDbCore(props, props.objectTypeField || 'tables');
const connection = await getConnectionInfo(props);
const driver = engines(connection.engine);
const driver = findEngineDriver(connection, extensions) || driverBase;
const dmp = driver.createDumper();
if (tableInfo) dmp.createTable(tableInfo);
setSql(dmp.s);
@@ -47,7 +44,7 @@ function useSqlTemplate(sqlTemplate, props) {
const procedureInfo = await getSqlObjectInfo(props);
const connection = await getConnectionInfo(props);
const driver = engines(connection.engine);
const driver = findEngineDriver(connection, extensions) || driverBase;
const dmp = driver.createDumper();
if (procedureInfo) dmp.put('^execute %f', procedureInfo);
setSql(dmp.s);

View File

@@ -2,18 +2,20 @@ import React from 'react';
import DataGrid from '../datagrid/DataGrid';
import { ViewGridDisplay, createGridCache, createChangeSet } from 'dbgate-datalib';
import { useConnectionInfo, useViewInfo } from '../utility/metadataLoaders';
import engines from 'dbgate-engines';
import useUndoReducer from '../utility/useUndoReducer';
import usePropsCompare from '../utility/usePropsCompare';
import { useUpdateDatabaseForTab } from '../utility/globalState';
import useGridConfig from '../utility/useGridConfig';
import SqlDataGridCore from '../datagrid/SqlDataGridCore';
import useExtensions from '../utility/useExtensions';
import { findEngineDriver } from 'dbgate-tools';
export default function ViewDataTab({ conid, database, schemaName, pureName, tabVisible, toolbarPortalRef, tabid }) {
const viewInfo = useViewInfo({ conid, database, schemaName, pureName });
const [config, setConfig] = useGridConfig(tabid);
const [cache, setCache] = React.useState(createGridCache());
const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet());
const extensions = useExtensions()
useUpdateDatabaseForTab(tabVisible, conid, database);
const connection = useConnectionInfo({ conid });
@@ -25,7 +27,7 @@ export default function ViewDataTab({ conid, database, schemaName, pureName, tab
viewInfo && connection
? new ViewGridDisplay(
viewInfo,
engines(connection),
findEngineDriver(connection, extensions),
//@ts-ignore
config,
setConfig,

View File

@@ -10,11 +10,21 @@ export function ExtensionsProvider({ children }) {
return <ExtensionsContext.Provider value={extensions}>{children}</ExtensionsContext.Provider>;
}
function buildDrivers(plugins) {
const res = [];
for (const { content } of plugins) {
if (content.driver) res.push(content.driver);
if (content.drivers) res.push(...content.drivers);
}
return res;
}
export function buildExtensions(plugins) {
/** @type {import('dbgate-types').ExtensionsDirectory} */
const extensions = {
plugins,
fileFormats: buildFileFormats(plugins),
drivers: buildDrivers(plugins),
};
return extensions;
}