const { driverBase } = global.DBGATE_PACKAGES['dbgate-tools']; const Dumper = require('./Dumper'); const { sqliteSplitterOptions, noSplitSplitterOptions } = require('dbgate-query-splitter/lib/options'); 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, 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, createIndex: true, dropIndex: true, createForeignKey: false, dropForeignKey: false, createPrimaryKey: false, dropPrimaryKey: false, dropReferencesWhenDropTable: false, }; /** @type {import('dbgate-types').EngineDriver} */ const driver = { ...driverBase, dumperClass: Dumper, dialect, engine: 'sqlite@dbgate-plugin-sqlite', title: 'SQLite', readOnlySessions: true, supportsTransactions: true, showConnectionField: (field, values) => field == 'databaseFile' || field == 'isReadOnly', showConnectionTab: (field) => false, beforeConnectionSave: (connection) => ({ ...connection, singleDatabase: true, defaultDatabase: getDatabaseFileLabel(connection.databaseFile), }), getQuerySplitterOptions: (usage) => usage == 'editor' ? { ...sqliteSplitterOptions, ignoreComments: true, preventSingleLineSplit: true } : usage == 'stream' ? noSplitSplitterOptions : sqliteSplitterOptions, // isFileDatabase: true, isElectronOnly: true, predefinedDataTypes: ['integer', 'real', 'text', 'blob'], }; module.exports = driver;