mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-24 10:36:00 +00:00
79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
// @ts-check
|
|
|
|
const { driverBase } = global.DBGATE_PACKAGES['dbgate-tools'];
|
|
const Dumper = require('./Dumper');
|
|
const { sqliteSplitterOptions, noSplitSplitterOptions } = require('dbgate-query-splitter/lib/options');
|
|
|
|
/**
|
|
* @param {string} databaseFile
|
|
*/
|
|
function getDatabaseFileLabel(databaseFile) {
|
|
if (!databaseFile) return databaseFile;
|
|
const m = databaseFile.match(/[\/]([^\/]+)$/);
|
|
if (m) return m[1];
|
|
return databaseFile;
|
|
}
|
|
|
|
/** @type {import('dbgate-types').SqlDialect} */
|
|
const dialect = {
|
|
limitSelect: true,
|
|
rangeSelect: true,
|
|
defaultSchemaName: 'main',
|
|
offsetFetchRangeSyntax: false,
|
|
explicitDropConstraint: true,
|
|
stringEscapeChar: "'",
|
|
fallbackDataType: 'nvarchar',
|
|
allowMultipleValuesInsert: true,
|
|
dropColumnDependencies: ['indexes', 'primaryKey', 'uniques'],
|
|
quoteIdentifier(s) {
|
|
return `"${s}"`;
|
|
},
|
|
anonymousPrimaryKey: true,
|
|
requireStandaloneSelectForScopeIdentity: true,
|
|
|
|
createColumn: true,
|
|
dropColumn: true,
|
|
multipleSchema: true,
|
|
createIndex: true,
|
|
dropIndex: true,
|
|
createForeignKey: false,
|
|
enableForeignKeyChecks: false,
|
|
// dropCheck: true,
|
|
// dropUnique: true,
|
|
// dropForeignKey: true,
|
|
createPrimaryKey: false,
|
|
// dropPrimaryKey: true,
|
|
dropReferencesWhenDropTable: true,
|
|
// dropIndexContainsTableSpec: true,
|
|
// filteredIndexes: true,
|
|
anonymousForeignKey: true,
|
|
};
|
|
|
|
/** @type {import('dbgate-types').EngineDriver} */
|
|
const driver = {
|
|
...driverBase,
|
|
dumperClass: Dumper,
|
|
dialect,
|
|
engine: 'duckdb@dbgate-plugin-duckdb',
|
|
title: 'DuckDB',
|
|
readOnlySessions: false,
|
|
supportsTransactions: true,
|
|
singleConnectionOnly: true,
|
|
|
|
getQuerySplitterOptions: (usage) =>
|
|
usage == 'editor'
|
|
? { ...sqliteSplitterOptions, ignoreComments: true, preventSingleLineSplit: true }
|
|
: usage == 'stream'
|
|
? noSplitSplitterOptions
|
|
: sqliteSplitterOptions,
|
|
showConnectionTab: (field) => false,
|
|
showConnectionField: (field) => ['databaseFile'].includes(field),
|
|
beforeConnectionSave: (connection) => ({
|
|
...connection,
|
|
singleDatabase: true,
|
|
defaultDatabase: getDatabaseFileLabel(connection.databaseFile),
|
|
}),
|
|
};
|
|
|
|
module.exports = driver;
|