feat: file open duckdb

This commit is contained in:
Nybkox
2025-04-08 20:23:16 +02:00
parent 5e9366fa92
commit ccf78285b6

View File

@@ -2,7 +2,7 @@ import { showModal } from '../modals/modalTools';
import { get } from 'svelte/store'; import { get } from 'svelte/store';
import newQuery from '../query/newQuery'; import newQuery from '../query/newQuery';
import getElectron from './getElectron'; import getElectron from './getElectron';
import { currentDatabase, extensions, getCurrentDatabase } from '../stores'; import { extensions, getCurrentDatabase } from '../stores';
import { getUploadListener } from './uploadFiles'; import { getUploadListener } from './uploadFiles';
import { getConnectionLabel, getDatabaseFileLabel } from 'dbgate-tools'; import { getConnectionLabel, getDatabaseFileLabel } from 'dbgate-tools';
import { apiCall } from './api'; import { apiCall } from './api';
@@ -13,6 +13,7 @@ import _ from 'lodash';
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte'; import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
import { openImportExportTab } from './importExportTools'; import { openImportExportTab } from './importExportTools';
import { switchCurrentDatabase } from './common'; import { switchCurrentDatabase } from './common';
import { _t } from '../translations';
export function canOpenByElectron(file, extensions) { export function canOpenByElectron(file, extensions) {
if (!file) return false; if (!file) return false;
@@ -22,7 +23,13 @@ export function canOpenByElectron(file, extensions) {
if (nameLower.endsWith('.qdesign')) return true; if (nameLower.endsWith('.qdesign')) return true;
if (nameLower.endsWith('.perspective')) return true; if (nameLower.endsWith('.perspective')) return true;
if (nameLower.endsWith('.json')) return true; if (nameLower.endsWith('.json')) return true;
if (nameLower.endsWith('.db') || nameLower.endsWith('.sqlite') || nameLower.endsWith('.sqlite3')) return true; if (
nameLower.endsWith('.db') ||
nameLower.endsWith('.sqlite') ||
nameLower.endsWith('.sqlite3') ||
nameLower.endsWith('.duckdb')
)
return true;
for (const format of extensions.fileFormats) { for (const format of extensions.fileFormats) {
if (nameLower.endsWith(`.${format.extension}`)) return true; if (nameLower.endsWith(`.${format.extension}`)) return true;
if (format.extensions?.find(ext => nameLower.endsWith(`.${ext}`))) return true; if (format.extensions?.find(ext => nameLower.endsWith(`.${ext}`))) return true;
@@ -30,12 +37,12 @@ export function canOpenByElectron(file, extensions) {
return false; return false;
} }
export async function openSqliteFile(filePath) { export async function openDatabaseFile(filePath, engine) {
const defaultDatabase = getDatabaseFileLabel(filePath); const defaultDatabase = getDatabaseFileLabel(filePath);
const resp = await apiCall('connections/save', { const resp = await apiCall('connections/save', {
_id: undefined, _id: undefined,
databaseFile: filePath, databaseFile: filePath,
engine: 'sqlite@dbgate-plugin-sqlite', engine,
singleDatabase: true, singleDatabase: true,
defaultDatabase, defaultDatabase,
}); });
@@ -136,7 +143,11 @@ export function openElectronFileCore(filePath, extensions) {
return; return;
} }
if (nameLower.endsWith('.db') || nameLower.endsWith('.sqlite') || nameLower.endsWith('.sqlite')) { if (nameLower.endsWith('.db') || nameLower.endsWith('.sqlite') || nameLower.endsWith('.sqlite')) {
openSqliteFile(filePath); openDatabaseFile(filePath, 'sqlite@dbgate-plugin-sqlite');
return;
}
if (nameLower.endsWith('.duckdb')) {
openDatabaseFile(filePath, 'duckdb@dbgate-plugin-duckdb');
return; return;
} }
if (nameLower.endsWith('.jsonl') || nameLower.endsWith('.ndjson')) { if (nameLower.endsWith('.jsonl') || nameLower.endsWith('.ndjson')) {
@@ -225,7 +236,7 @@ export async function openElectronFile() {
const filePaths = await electron.showOpenDialog({ const filePaths = await electron.showOpenDialog({
filters: [ filters: [
{ {
name: `All supported files`, name: _t('file.allSupported', { defaultMessage: 'All supported files' }),
extensions: [ extensions: [
'sql', 'sql',
'sqlite', 'sqlite',
@@ -235,15 +246,20 @@ export async function openElectronFile() {
'qdesign', 'qdesign',
'perspective', 'perspective',
'json', 'json',
'duckdb',
...getFileFormatExtensions(ext), ...getFileFormatExtensions(ext),
], ],
}, },
{ name: `SQL files`, extensions: ['sql'] }, { name: _t('file.sqlFiles', { defaultMessage: 'SQL files' }), extensions: ['sql'] },
{ name: `JSON files`, extensions: ['json'] }, { name: _t('file.jsonFiles', { defaultMessage: 'JSON files' }), extensions: ['json'] },
{ name: `Diagram files`, extensions: ['diagram'] }, { name: _t('file.diagramFiles', { defaultMessage: 'Diagram files' }), extensions: ['diagram'] },
{ name: `Query designer files`, extensions: ['qdesign'] }, { name: _t('file.queryDesignerFiles', { defaultMessage: 'Query designer files' }), extensions: ['qdesign'] },
{ name: `Perspective files`, extensions: ['perspective'] }, { name: _t('file.perspectiveFiles', { defaultMessage: 'Perspective files' }), extensions: ['perspective'] },
{ name: `SQLite database`, extensions: ['sqlite', 'db', 'sqlite3'] }, {
name: _t('file.sqliteDatabase', { defaultMessage: 'SQLite database' }),
extensions: ['sqlite', 'db', 'sqlite3'],
},
{ name: _t('file.duckdb', { defaultMessage: 'DuckDB database' }), extensions: ['duckdb', 'db'] },
...getFileFormatFilters(ext), ...getFileFormatFilters(ext),
], ],
properties: ['showHiddenFiles', 'openFile'], properties: ['showHiddenFiles', 'openFile'],