mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
174aa3c508 | |||
729edd40a6 | |||
c7ab3b77a2 | |||
5624b3b2d7 | |||
4c16d8c61f | |||
|
9aca89477f | ||
0e80e823d0 | |||
ff4bc6c39b | |||
b4e1e9ac26 | |||
f177c7f1f1 | |||
6a67c27915 | |||
374cedba2b | |||
|
de8097c297 | ||
6fa430adf6 | |||
|
a71ae05c6f |
15
CHANGELOG.md
15
CHANGELOG.md
@@ -2,6 +2,21 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.7.2](https://github.com/antares-sql/antares/compare/v0.7.1...v0.7.2) (2023-01-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add copy shortcut and default copy type setting ([9aca894](https://github.com/antares-sql/antares/commit/9aca89477f1fd7b7f55f1e5c290d495c46f61d8e))
|
||||
* connection info icons in footer ([ff4bc6c](https://github.com/antares-sql/antares/commit/ff4bc6c39b05a827cebde84466814cf246908208))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow comments in queies, fixes [#519](https://github.com/antares-sql/antares/issues/519) ([c7ab3b7](https://github.com/antares-sql/antares/commit/c7ab3b77a22e85cee6fb93064eaad5a8e8ad9fd2))
|
||||
* **SQLite:** exception saving tables without INT fields length ([0e80e82](https://github.com/antares-sql/antares/commit/0e80e823d059dfe24995b5848d88cc84235e6275))
|
||||
* ssh connection closed after idle time, fixes [#425](https://github.com/antares-sql/antares/issues/425) ([6fa430a](https://github.com/antares-sql/antares/commit/6fa430adf68013a9d0a093031f56dd741bdc0299))
|
||||
|
||||
### [0.7.1](https://github.com/antares-sql/antares/compare/v0.7.0...v0.7.1) (2022-12-23)
|
||||
|
||||
|
||||
|
7735
package-lock.json
generated
7735
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"productName": "Antares",
|
||||
"version": "0.7.1",
|
||||
"version": "0.7.2",
|
||||
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/antares-sql/antares.git",
|
||||
@@ -127,7 +127,7 @@
|
||||
"ace-builds": "~1.14.0",
|
||||
"better-sqlite3": "~8.0.0",
|
||||
"electron-log": "~4.4.1",
|
||||
"electron-store": "~8.0.1",
|
||||
"electron-store": "~8.1.0",
|
||||
"electron-updater": "~4.6.5",
|
||||
"electron-window-state": "~5.0.3",
|
||||
"encoding": "~0.1.13",
|
||||
@@ -141,7 +141,7 @@
|
||||
"pg-connection-string": "~2.5.0",
|
||||
"pg-query-stream": "~4.2.3",
|
||||
"pgsql-ast-parser": "~7.2.1",
|
||||
"pinia": "~2.0.23",
|
||||
"pinia": "~2.0.28",
|
||||
"source-map-support": "~0.5.20",
|
||||
"spectre.css": "~0.5.9",
|
||||
"sql-formatter": "~12.0.3",
|
||||
@@ -161,6 +161,7 @@
|
||||
"@types/marked": "~4.0.7",
|
||||
"@types/node": "~17.0.23",
|
||||
"@types/pg": "~8.6.5",
|
||||
"@types/ssh2": "~1.11.6",
|
||||
"@typescript-eslint/eslint-plugin": "~5.18.0",
|
||||
"@typescript-eslint/parser": "~5.18.0",
|
||||
"@vue/compiler-sfc": "~3.2.33",
|
||||
@@ -169,7 +170,7 @@
|
||||
"chalk": "~4.1.2",
|
||||
"cross-env": "~7.0.2",
|
||||
"css-loader": "~6.5.0",
|
||||
"electron": "~22.0.0",
|
||||
"electron": "~22.0.3",
|
||||
"electron-builder": "~22.10.3",
|
||||
"eslint": "~7.32.0",
|
||||
"eslint-config-standard": "~16.0.3",
|
||||
@@ -204,5 +205,10 @@
|
||||
"webpack-cli": "~4.9.1",
|
||||
"webpack-dev-server": "~4.11.1",
|
||||
"xvfb-maybe": "~0.2.1"
|
||||
},
|
||||
"overrides": {
|
||||
"ssh2-promise": {
|
||||
"ssh2": "github:Fabio286/ssh2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@ export default [
|
||||
types: [
|
||||
{
|
||||
name: 'INT',
|
||||
length: true,
|
||||
length: 10,
|
||||
collation: false,
|
||||
unsigned: true,
|
||||
zerofill: true
|
||||
|
@@ -62,7 +62,7 @@ export default (connections: {[key: string]: antares.Client}) => {
|
||||
|
||||
ipcMain.handle('get-structure', async (event, params) => {
|
||||
try {
|
||||
const structure = await connections[params.uid].getStructure(
|
||||
const structure: unknown = await connections[params.uid].getStructure(
|
||||
params.schemas
|
||||
);
|
||||
|
||||
@@ -160,8 +160,7 @@ export default (connections: {[key: string]: antares.Client}) => {
|
||||
details: true,
|
||||
schema,
|
||||
tabUid,
|
||||
autocommit,
|
||||
comments: false
|
||||
autocommit
|
||||
});
|
||||
|
||||
return { status: 'success', response: result };
|
||||
|
@@ -147,7 +147,14 @@ export class MySQLClient extends AntaresCore {
|
||||
|
||||
if (this._params.ssh) {
|
||||
try {
|
||||
this._ssh = new SSH2Promise({ ...this._params.ssh });
|
||||
if (this._params.ssh.password === '') delete this._params.ssh.password;
|
||||
if (this._params.ssh.passphrase === '') delete this._params.ssh.passphrase;
|
||||
|
||||
this._ssh = new SSH2Promise({
|
||||
...this._params.ssh,
|
||||
keepaliveInterval: 30*60*1000,
|
||||
debug: process.env.NODE_ENV !== 'production' ? (s) => console.log(s) : null
|
||||
});
|
||||
|
||||
const tunnel = await this._ssh.addTunnel({
|
||||
remoteAddr: this._params.host,
|
||||
@@ -1607,7 +1614,7 @@ export class MySQLClient extends AntaresCore {
|
||||
if (!field || Array.isArray(field))
|
||||
return undefined;
|
||||
|
||||
const type = this._getType(field);
|
||||
const type = this._getType(field as undefined);
|
||||
|
||||
return {
|
||||
name: field.orgName,
|
||||
|
@@ -162,7 +162,11 @@ export class PostgreSQLClient extends AntaresCore {
|
||||
|
||||
if (this._params.ssh) {
|
||||
try {
|
||||
this._ssh = new SSH2Promise({ ...this._params.ssh });
|
||||
this._ssh = new SSH2Promise({
|
||||
...this._params.ssh,
|
||||
keepaliveInterval: 30*60*1000,
|
||||
debug: process.env.NODE_ENV !== 'production' ? (s) => console.log(s) : null
|
||||
});
|
||||
|
||||
const tunnel = await this._ssh.addTunnel({
|
||||
remoteAddr: this._params.host,
|
||||
|
@@ -99,7 +99,7 @@
|
||||
</div>
|
||||
<div class="panel-footer text-center py-0">
|
||||
<div v-if="connection.ssl" class="chip bg-success mt-2">
|
||||
<i class="mdi mdi-lock mdi-18px mr-1" />
|
||||
<i class="mdi mdi-shield-key mdi-18px mr-1" />
|
||||
SSL
|
||||
</div>
|
||||
<div v-if="connection.ssh" class="chip bg-success mt-2">
|
||||
|
@@ -210,6 +210,28 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column col-12 h6 mt-4 text-uppercase mb-1">
|
||||
{{ t('word.resultsTable') }}
|
||||
</div>
|
||||
<div class="column col-12 col-sm-12 columns">
|
||||
<div class="form-group column col-12">
|
||||
<div class="col-5 col-sm-12">
|
||||
<label class="form-label">
|
||||
{{ t('message.defaultCopyType') }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-3 col-sm-12">
|
||||
<BaseSelect
|
||||
v-model="defaultCopyType"
|
||||
class="form-select"
|
||||
:options="copyTypes"
|
||||
option-track-by="code"
|
||||
option-label="name"
|
||||
@change="changeDefaultCopyType(defaultCopyType)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -393,6 +415,7 @@ const {
|
||||
autoComplete: selectedAutoComplete,
|
||||
lineWrap: selectedLineWrap,
|
||||
executeSelected: selectedExecuteSelected,
|
||||
defaultCopyType: selectedCopyType,
|
||||
notificationsTimeout,
|
||||
restoreTabs,
|
||||
disableBlur,
|
||||
@@ -416,7 +439,8 @@ const {
|
||||
changeApplicationTheme,
|
||||
changeEditorTheme,
|
||||
changeEditorFontSize,
|
||||
updateNotificationsTimeout
|
||||
updateNotificationsTimeout,
|
||||
changeDefaultCopyType
|
||||
} = settingsStore;
|
||||
const {
|
||||
hideSettingModal: closeModal,
|
||||
@@ -432,7 +456,7 @@ const appLogo = require('../images/logo.svg');
|
||||
const darkPreview = require('../images/dark.png');
|
||||
const lightPreview = require('../images/light.png');
|
||||
const exampleQuery = `-- This is an example
|
||||
SELECT
|
||||
SELECT
|
||||
employee.id,
|
||||
employee.first_name,
|
||||
employee.last_name,
|
||||
@@ -448,6 +472,7 @@ ORDER BY
|
||||
`;
|
||||
|
||||
const localLocale: Ref<AvailableLocale> = ref(null);
|
||||
const defaultCopyType: Ref<string> = ref(null);
|
||||
const localPageSize: Ref<number> = ref(null);
|
||||
const localTimeout: Ref<number> = ref(null);
|
||||
const localEditorTheme: Ref<string> = ref(null);
|
||||
@@ -511,6 +536,14 @@ const locales = computed(() => {
|
||||
return locales;
|
||||
});
|
||||
|
||||
const copyTypes = computed(() => [
|
||||
{ code: 'cell', name: t('word.cell') },
|
||||
{ code: 'html', name: t('word.table') },
|
||||
{ code: 'json', name: 'JSON' },
|
||||
{ code: 'csv', name: 'CSV' },
|
||||
{ code: 'sql', name: 'SQL insert' }
|
||||
]);
|
||||
|
||||
const hasUpdates = computed(() => ['available', 'downloading', 'downloaded', 'link'].includes(updateStatus.value));
|
||||
|
||||
const workspace = computed(() => {
|
||||
@@ -570,6 +603,7 @@ const toggleExecuteSelected = () => {
|
||||
};
|
||||
|
||||
localLocale.value = selectedLocale.value;
|
||||
defaultCopyType.value = selectedCopyType.value;
|
||||
localPageSize.value = pageSize.value as number;
|
||||
localTimeout.value = notificationsTimeout.value as number;
|
||||
localEditorTheme.value = editorTheme.value as string;
|
||||
|
@@ -10,13 +10,25 @@
|
||||
<i class="mdi mdi-18px mdi-database mr-1" />
|
||||
<small>{{ versionString }}</small>
|
||||
</li>
|
||||
<li v-if="connectionInfos && connectionInfos.readonly" class="footer-element">
|
||||
<i class="mdi mdi-18px mdi-lock mr-1" />
|
||||
<small>{{ t('message.readOnlyMode') }}</small>
|
||||
</li>
|
||||
<li v-if="connectionInfos && connectionInfos.ssl" class="footer-element">
|
||||
<i class="mdi mdi-18px mdi-shield-key mr-1" />
|
||||
<small>SSL</small>
|
||||
</li>
|
||||
<li v-if="connectionInfos && connectionInfos.ssh" class="footer-element">
|
||||
<i class="mdi mdi-18px mdi-console-network mr-1" />
|
||||
<small>SSH</small>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="footer-right-elements">
|
||||
<ul class="footer-elements">
|
||||
<li
|
||||
v-if="workspace?.connectionStatus === 'connected' "
|
||||
v-if="workspace?.connectionStatus === 'connected'"
|
||||
class="footer-element footer-link"
|
||||
@click="toggleConsole()"
|
||||
>
|
||||
@@ -76,10 +88,11 @@ const { toggleConsole } = useConsoleStore();
|
||||
|
||||
const { showSettingModal } = applicationStore;
|
||||
const { getWorkspace } = workspacesStore;
|
||||
const { getConnectionFolder } = connectionsStore;
|
||||
const { getConnectionFolder, getConnectionByUid } = connectionsStore;
|
||||
|
||||
const workspace = computed(() => getWorkspace(workspaceUid.value));
|
||||
const footerColor = computed(() => getConnectionFolder(workspaceUid.value)?.color || '#E36929');
|
||||
const connectionInfos = computed(() => getConnectionByUid(workspaceUid.value));
|
||||
const version: ComputedRef<DatabaseInfos> = computed(() => {
|
||||
return getWorkspace(workspaceUid.value) ? workspace.value.version : null;
|
||||
});
|
||||
|
@@ -312,9 +312,10 @@ const clearChanges = () => {
|
||||
};
|
||||
|
||||
const addField = () => {
|
||||
const uid = uidGen();
|
||||
localFields.value.push({
|
||||
_antares_id: uidGen(),
|
||||
name: `${t('word.field', 1)}_${++newFieldsCounter.value}`,
|
||||
_antares_id: uid,
|
||||
name: `${t('word.field', 1)}_${uid.substring(0, 4)}`,
|
||||
key: '',
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type: (workspace.value.dataTypes[0] as any).types[0].name,
|
||||
|
@@ -142,7 +142,7 @@ const settingsStore = useSettingsStore();
|
||||
const consoleStore = useConsoleStore();
|
||||
const { getWorkspace } = useWorkspacesStore();
|
||||
|
||||
const { dataTabLimit: pageSize } = storeToRefs(settingsStore);
|
||||
const { dataTabLimit: pageSize, defaultCopyType } = storeToRefs(settingsStore);
|
||||
|
||||
const { consoleHeight } = storeToRefs(consoleStore);
|
||||
|
||||
@@ -697,6 +697,18 @@ const onKey = async (e: KeyboardEvent) => {
|
||||
if ((e.ctrlKey || e.metaKey) && e.code === 'KeyA' && !e.altKey)
|
||||
selectAllRows(e);
|
||||
|
||||
if ((e.ctrlKey || e.metaKey) && e.code === 'KeyC' && !e.altKey) {
|
||||
const copyType = defaultCopyType.value;
|
||||
if (selectedRows.value.length >= 1) {
|
||||
if (selectedRows.value.length === 1 && copyType === 'cell')
|
||||
await navigator.clipboard.writeText(scrollElement.value.querySelector('.td.selected').innerText);
|
||||
else if (selectedRows.value.length > 1 && copyType === 'cell')
|
||||
copyRow('html');
|
||||
else
|
||||
copyRow(copyType);
|
||||
}
|
||||
}
|
||||
|
||||
// row navigation stuff
|
||||
if (!(e.ctrlKey || e.metaKey) && (e.code.includes('Arrow') || e.code === 'Tab') && sortedResults.value.length > 0 && !e.altKey) {
|
||||
e.preventDefault();
|
||||
|
@@ -148,7 +148,8 @@ export const enUS = {
|
||||
appearence: 'Appearence',
|
||||
color: 'Color',
|
||||
label: 'Label',
|
||||
icon: 'Icon'
|
||||
icon: 'Icon',
|
||||
resultsTable: 'Results table'
|
||||
},
|
||||
message: {
|
||||
appWelcome: 'Welcome to Antares SQL Client!',
|
||||
@@ -333,7 +334,8 @@ export const enUS = {
|
||||
folderName: 'Folder name',
|
||||
deleteFolder: 'Delete folder',
|
||||
editConnectionAppearence: 'Edit connection appearence',
|
||||
executeSelectedQuery: 'Execute selected query'
|
||||
executeSelectedQuery: 'Execute selected query',
|
||||
defaultCopyType: 'Default copy type'
|
||||
},
|
||||
faker: {
|
||||
address: 'Address',
|
||||
|
@@ -333,7 +333,8 @@ export const idID = {
|
||||
folderName: 'Nama folder',
|
||||
deleteFolder: 'Hapus folder',
|
||||
editConnectionAppearence: 'Ubah connection appearence',
|
||||
executeSelectedQuery: 'Eksekusi query yang dipilih'
|
||||
executeSelectedQuery: 'Eksekusi query yang dipilih',
|
||||
defaultCopyType: 'Jenis salin default'
|
||||
},
|
||||
faker: {
|
||||
address: 'Alamat',
|
||||
|
@@ -29,7 +29,8 @@ export const useSettingsStore = defineStore('settings', {
|
||||
restoreTabs: settingsStore.get('restore_tabs', true) as boolean,
|
||||
disableBlur: settingsStore.get('disable_blur', false) as boolean,
|
||||
disableScratchpad: settingsStore.get('disable_scratchpad', false) as boolean,
|
||||
shortcuts: shortcutsStore.get('shortcuts', []) as ShortcutRecord[]
|
||||
shortcuts: shortcutsStore.get('shortcuts', []) as ShortcutRecord[],
|
||||
defaultCopyType: settingsStore.get('default_copy_type', 'cell') as string
|
||||
}),
|
||||
actions: {
|
||||
changeLocale (locale: AvailableLocale) {
|
||||
@@ -92,6 +93,10 @@ export const useSettingsStore = defineStore('settings', {
|
||||
},
|
||||
updateShortcuts (shortcuts: ShortcutRecord[]) {
|
||||
this.shortcuts = shortcuts;
|
||||
},
|
||||
changeDefaultCopyType (type: string) {
|
||||
this.defaultCopyType = type;
|
||||
settingsStore.set('default_copy_type', this.defaultCopyType);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user