generate script fixes

This commit is contained in:
Jan Prochazka 2020-06-06 22:17:17 +02:00
parent 74aa90fd2a
commit 617548cd50
6 changed files with 40 additions and 28 deletions

View File

@ -5,3 +5,4 @@ export * from "./ViewGridDisplay";
export * from "./JslGridDisplay";
export * from "./ChangeSet";
export * from "./filterName";
export * from "./nameTools";

View File

@ -0,0 +1,25 @@
export function fullNameFromString(name) {
const m = name.match(/\[([^\]]+)\]\.\[([^\]]+)\]/);
if (m) {
return {
schemaName: m[1],
pureName: m[2],
};
}
return {
schemaName: null,
pureName: name,
};
}
export function fullNameToString({ schemaName, pureName }) {
if (schemaName) {
return `[${schemaName}].[${pureName}]`;
}
return pureName;
}
export function quoteFullName(dialect, { schemaName, pureName }) {
if (schemaName) return `${dialect.quoteIdentifier(schemaName)}.${dialect.quoteIdentifier(pureName)}`;
return `${dialect.quoteIdentifier(pureName)}`;
}

View File

@ -28,6 +28,7 @@ import {
deleteChangeSetRows,
batchUpdateChangeSet,
setChangeSetValue,
fullNameToString,
} from '@dbgate/datalib';
import { scriptToSql } from '@dbgate/sqltree';
import { copyTextToClipboard } from '../utility/clipboard';
@ -603,9 +604,7 @@ export default function DataGridCore(props) {
sourceStorageType: 'database',
sourceConnectionId: conid,
sourceDatabaseName: database,
sourceTables: [
`${display.baseTable && display.baseTable.schemaName}.${display.baseTable && display.baseTable.pureName}`,
],
sourceTables: display.baseTable ? [fullNameToString(display.baseTable)] : [],
}}
/>
));

View File

@ -2,25 +2,26 @@ export default class ScriptWriter {
constructor() {
this.s = '';
this.put('const dbgateApi = require("@dbgate/api");');
this.put();
this.put('async function run() {');
}
put(s) {
put(s = '') {
this.s += s;
this.s += '\n';
}
finish() {
this.put('await dbgateApi.copyStream(queryReader, csvWriter);');
this.put('dbgateApi.runScript(run);');
this.put('}');
this.put();
this.put('dbgateApi.runScript(run);');
}
assign(variableName, functionName, props) {
this.put(`const ${variableName} = await dbgateApi.${functionName}(${JSON.stringify(props)});`);
this.put(` const ${variableName} = await dbgateApi.${functionName}(${JSON.stringify(props)});`);
}
copyStream(sourceVar, targetVar) {
this.put(`await dbgateApi.copyStream(${sourceVar}, ${targetVar});`);
this.put(` await dbgateApi.copyStream(${sourceVar}, ${targetVar});`);
}
}

View File

@ -1,24 +1,9 @@
import _ from 'lodash';
import ScriptCreator from './ScriptCreator';
import getAsArray from '../utility/getAsArray';
import { getConnectionInfo } from '../utility/metadataLoaders';
import engines from '@dbgate/engines';
function splitFullName(name) {
const i = name.indexOf('.');
if (i >= 0)
return {
schemaName: name.substr(0, i),
pureName: name.substr(i + 1),
};
return {
schemaName: null,
pureName: name,
};
}
function quoteFullName(dialect, { schemaName, pureName }) {
if (schemaName) return `${dialect.quoteIdentifier(schemaName)}.${dialect.quoteIdentifier(pureName)}`;
return `${dialect.quoteIdentifier(pureName)}`;
}
import { quoteFullName, fullNameFromString } from '@dbgate/datalib';
export default async function createImpExpScript(values) {
const script = new ScriptCreator();
@ -29,10 +14,10 @@ export default async function createImpExpScript(values) {
const connection = await getConnectionInfo({ conid: values.sourceConnectionId });
const driver = engines(connection);
const fullName = splitFullName(table);
const fullName = fullNameFromString(table);
script.assign(sourceVar, 'queryReader', {
connection: {
...connection,
..._.pick(connection, ['server', 'engine', 'user', 'password', 'port']),
database: values.sourceDatabaseName,
},
sql: `select * from ${quoteFullName(driver.dialect, fullName)}`,

View File

@ -7,6 +7,7 @@ import FormStyledButton from '../widgets/FormStyledButton';
import { useConnectionList, useDatabaseList, useDatabaseInfo } from './metadataLoaders';
import useSocket from './SocketProvider';
import getAsArray from './getAsArray';
import { fullNameToString } from '@dbgate/datalib';
export const FormRow = styled.div`
display: flex;
@ -143,7 +144,7 @@ export function FormTablesSelect({ conidName, databaseName, name }) {
const tablesOptions = React.useMemo(
() =>
[...((dbinfo && dbinfo.tables) || []), ...((dbinfo && dbinfo.views) || [])].map((x) => ({
value: `${x.schemaName}.${x.pureName}`,
value: fullNameToString(x),
label: x.pureName,
})),
[dbinfo]