mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 14:16:01 +00:00
sql template => script template
This commit is contained in:
50
packages/web/src/utility/applyScriptTemplate.ts
Normal file
50
packages/web/src/utility/applyScriptTemplate.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { getDbCore, getConnectionInfo, getSqlObjectInfo } from './metadataLoaders';
|
||||
import sqlFormatter from 'sql-formatter';
|
||||
import { driverBase, findEngineDriver } from 'dbgate-tools';
|
||||
|
||||
async function generateTableSql(extensions, props, dumpProc, format = false) {
|
||||
const tableInfo = await getDbCore(props, props.objectTypeField || 'tables');
|
||||
const connection = await getConnectionInfo(props);
|
||||
const driver = findEngineDriver(connection, extensions) || driverBase;
|
||||
const dmp = driver.createDumper();
|
||||
if (tableInfo) dumpProc(dmp, tableInfo);
|
||||
return format ? sqlFormatter.format(dmp.s) : dmp.s;
|
||||
}
|
||||
|
||||
export default async function applyScriptTemplate(scriptTemplate, extensions, props) {
|
||||
if (scriptTemplate == 'CREATE TABLE') {
|
||||
return generateTableSql(extensions, props, (dmp, tableInfo) => dmp.createTable(tableInfo));
|
||||
}
|
||||
if (scriptTemplate == 'SELECT') {
|
||||
return generateTableSql(
|
||||
extensions,
|
||||
props,
|
||||
(dmp, tableInfo) => {
|
||||
dmp.put(
|
||||
'^select %,i ^from %f',
|
||||
tableInfo.columns.map(x => x.columnName),
|
||||
tableInfo
|
||||
);
|
||||
},
|
||||
true
|
||||
);
|
||||
}
|
||||
if (scriptTemplate == 'CREATE OBJECT') {
|
||||
const objectInfo = await getSqlObjectInfo(props);
|
||||
if (objectInfo) {
|
||||
if (objectInfo.requiresFormat && objectInfo.createSql) return sqlFormatter.format(objectInfo.createSql);
|
||||
else return objectInfo.createSql;
|
||||
}
|
||||
}
|
||||
if (scriptTemplate == 'EXECUTE PROCEDURE') {
|
||||
const procedureInfo = await getSqlObjectInfo(props);
|
||||
const connection = await getConnectionInfo(props);
|
||||
|
||||
const driver = findEngineDriver(connection, extensions) || driverBase;
|
||||
const dmp = driver.createDumper();
|
||||
if (procedureInfo) dmp.put('^execute %f', procedureInfo);
|
||||
return dmp.s;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user