mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-27 09:06:00 +00:00
feat: file open duckdb
This commit is contained in:
@@ -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'],
|
||||||
|
|||||||
Reference in New Issue
Block a user