mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
Compare commits
9 Commits
v0.7.17
...
v0.7.19-be
Author | SHA1 | Date | |
---|---|---|---|
580973fd04 | |||
215ab783ab | |||
72148e991c | |||
6e4c16741a | |||
9f9c63bfcc | |||
c0dcf30e73 | |||
ddd290c903 | |||
267c017921 | |||
b3b698b3a2 |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -2,6 +2,26 @@
|
||||
|
||||
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.19-beta.0](https://github.com/antares-sql/antares/compare/v0.7.18...v0.7.19-beta.0) (2023-10-14)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* "now" and "random" options added in datetime related data in insert rows tool, closes [#402](https://github.com/antares-sql/antares/issues/402) ([9f9c63b](https://github.com/antares-sql/antares/commit/9f9c63bfcc3423bfeef143cd835f48c62900a799))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* IN and NOT IN filters not working properly, fixes [#687](https://github.com/antares-sql/antares/issues/687) ([c0dcf30](https://github.com/antares-sql/antares/commit/c0dcf30e73a69b25b01ba31d21b27c1983ed2db6))
|
||||
* timeout issue on long time sql import ([ddd290c](https://github.com/antares-sql/antares/commit/ddd290c90344241eaa70cb528552e942fd7edec0))
|
||||
|
||||
### [0.7.18](https://github.com/antares-sql/antares/compare/v0.7.17...v0.7.18) (2023-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* hotfix for Microsoft Store unauthorized process ([b3b698b](https://github.com/antares-sql/antares/commit/b3b698b3a23a3c848921ab40fc0fec5d8178ef0e))
|
||||
|
||||
### [0.7.17](https://github.com/antares-sql/antares/compare/v0.7.17-beta.2...v0.7.17) (2023-09-30)
|
||||
|
||||
### [0.7.17-beta.2](https://github.com/antares-sql/antares/compare/v0.7.17-beta.1...v0.7.17-beta.2) (2023-09-28)
|
||||
|
@@ -61,7 +61,7 @@ representative at an online or offline event.
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
fabio286@gmail.com.
|
||||
info@fabiodistasio.it.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"version": "0.7.17",
|
||||
"version": "0.7.19-beta.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "antares",
|
||||
"version": "0.7.17",
|
||||
"version": "0.7.19-beta.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"productName": "Antares",
|
||||
"version": "0.7.17",
|
||||
"version": "0.7.19-beta.0",
|
||||
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/antares-sql/antares.git",
|
||||
@@ -27,7 +27,7 @@
|
||||
"contributors:add": "all-contributors add",
|
||||
"contributors:generate": "all-contributors generate"
|
||||
},
|
||||
"author": "Fabio Di Stasio <fabio286@gmail.com>",
|
||||
"author": "Fabio Di Stasio <info@fabiodistasio.it>",
|
||||
"main": "./dist/main.js",
|
||||
"antares": {
|
||||
"devtoolsId": "nhdogjmejiglipccpnnnanhbledajbpd"
|
||||
|
@@ -51,6 +51,7 @@ export default class {
|
||||
{ name: 'collation', group: 'database', types: ['string'] },
|
||||
{ name: 'engine', group: 'database', types: ['string'] },
|
||||
|
||||
{ name: 'now', group: 'date', types: ['string', 'datetime'] },
|
||||
{ name: 'past', group: 'date', types: ['string', 'datetime'] },
|
||||
{ name: 'future', group: 'date', types: ['string', 'datetime'] },
|
||||
// { name: 'between', group: 'date', types: ['string'] },
|
||||
@@ -161,7 +162,9 @@ export default class {
|
||||
{ name: 'filePath', group: 'system', types: ['string'] },
|
||||
{ name: 'semver', group: 'system', types: ['string'] },
|
||||
|
||||
{ name: 'now', group: 'time', types: ['string', 'time'] },
|
||||
{ name: 'recent', group: 'time', types: ['string', 'time'] },
|
||||
{ name: 'random', group: 'time', types: ['string', 'time'] },
|
||||
|
||||
{ name: 'vehicle', group: 'vehicle', types: ['string'] },
|
||||
{ name: 'manufacturer', group: 'vehicle', types: ['string'] },
|
||||
|
@@ -363,8 +363,7 @@ export interface QueryBuilderObject {
|
||||
offset: number;
|
||||
join: string[];
|
||||
update: string[];
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
insert: {[key: string]: any}[];
|
||||
insert: {[key: string]: string | boolean | number }[];
|
||||
delete: boolean;
|
||||
}
|
||||
|
||||
|
17
src/common/libs/fakerCustom.ts
Normal file
17
src/common/libs/fakerCustom.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { faker } from '@faker-js/faker';
|
||||
import * as moment from 'moment';
|
||||
|
||||
export const fakerCustom = {
|
||||
seed: faker.seed,
|
||||
setLocale: faker.setLocale,
|
||||
...faker,
|
||||
date: {
|
||||
now: () => moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
...faker.date
|
||||
},
|
||||
time: {
|
||||
now: () => moment().format('HH:mm:ss'),
|
||||
random: () => moment(faker.date.recent()).format('HH:mm:ss'),
|
||||
...faker.time
|
||||
}
|
||||
};
|
@@ -1,8 +1,8 @@
|
||||
import { faker } from '@faker-js/faker';
|
||||
import customizations from 'common/customizations';
|
||||
import { ARRAY, BIT, BLOB, BOOLEAN, DATE, DATETIME, FLOAT, LONG_TEXT, NUMBER, TEXT, TEXT_SEARCH } from 'common/fieldTypes';
|
||||
import * as antares from 'common/interfaces/antares';
|
||||
import { InsertRowsParams } from 'common/interfaces/tableApis';
|
||||
import { fakerCustom } from 'common/libs/fakerCustom';
|
||||
import { sqlEscaper } from 'common/libs/sqlUtils';
|
||||
import { ipcMain } from 'electron';
|
||||
import * as fs from 'fs';
|
||||
@@ -371,19 +371,19 @@ export default (connections: {[key: string]: antares.Client}) => {
|
||||
let fakeValue;
|
||||
|
||||
if (params.locale)
|
||||
faker.locale = params.locale;
|
||||
fakerCustom.locale = params.locale;
|
||||
|
||||
if (Object.keys(params.row[key].params).length) {
|
||||
Object.keys(params.row[key].params).forEach(param => {
|
||||
if (!isNaN(params.row[key].params[param]))
|
||||
parsedParams[param] = +params.row[key].params[param];
|
||||
if (!isNaN(params.row[key].params[param]))// Converts string numerics params to number
|
||||
parsedParams[param] = Number(params.row[key].params[param]);
|
||||
});
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
fakeValue = (faker as any)[params.row[key].group][params.row[key].method](parsedParams);
|
||||
fakeValue = (fakerCustom as any)[params.row[key].group][params.row[key].method](parsedParams);
|
||||
}
|
||||
else
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
fakeValue = (faker as any)[params.row[key].group][params.row[key].method]();
|
||||
fakeValue = (fakerCustom as any)[params.row[key].group][params.row[key].method]();
|
||||
|
||||
if (typeof fakeValue === 'string') {
|
||||
if (params.row[key].length)
|
||||
|
@@ -256,10 +256,13 @@ export class MySQLClient extends AntaresCore {
|
||||
}
|
||||
|
||||
private async keepAlive () {
|
||||
try {
|
||||
const connection = await (this._connection as mysql.Pool).getConnection();
|
||||
await connection.ping();
|
||||
connection.release();
|
||||
}
|
||||
catch (_) {}
|
||||
}
|
||||
|
||||
use (schema: string) {
|
||||
this._schema = schema;
|
||||
|
@@ -240,10 +240,13 @@ export class PostgreSQLClient extends AntaresCore {
|
||||
}
|
||||
|
||||
private async keepAlive () {
|
||||
try {
|
||||
const connection = await this._connection.connect() as pg.PoolClient;
|
||||
await connection.query('SELECT 1+1');
|
||||
connection.release();
|
||||
}
|
||||
catch (_) {}
|
||||
}
|
||||
|
||||
use (schema: string, connection?: pg.Client | pg.PoolClient) {
|
||||
this._schema = schema;
|
||||
|
@@ -6,6 +6,7 @@ const isWindows = process.platform === 'win32';
|
||||
const indexPath = path.resolve(__dirname, 'index.html').split(path.sep).join('/');
|
||||
|
||||
export function validateSender (frame: WebFrameMain) {
|
||||
if (process.windowsStore) return true; // TEMP HOTFIX
|
||||
const frameUrl = new URL(frame.url);
|
||||
const prefix = isWindows ? 'file:///' : 'file://';
|
||||
const framePath = frameUrl.href.replace(prefix, '');
|
||||
|
@@ -27,11 +27,7 @@
|
||||
:title="t('general.cancel')"
|
||||
@click="killTabQuery()"
|
||||
>
|
||||
<BaseIcon
|
||||
class="mr-1"
|
||||
icon-name="mdiWindowCLose"
|
||||
:size="24"
|
||||
/>
|
||||
<BaseIcon icon-name="mdiWindowClose" :size="24" />
|
||||
<span class="d-invisible pr-1">{{ t('general.run') }}</span>
|
||||
</button>
|
||||
<button
|
||||
|
@@ -235,7 +235,10 @@
|
||||
</label>
|
||||
</div>
|
||||
<div class="column col-7">
|
||||
<label class="form-switch d-inline-block" @click.prevent="csvExportOptions.header = !csvExportOptions.header">
|
||||
<label
|
||||
class="form-switch d-inline-block"
|
||||
@click.prevent="csvExportOptions.header = !csvExportOptions.header"
|
||||
>
|
||||
<input type="checkbox" :checked="csvExportOptions.header">
|
||||
<i class="form-icon" />
|
||||
</label>
|
||||
@@ -249,10 +252,10 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import faker from '@faker-js/faker';
|
||||
import { BLOB, DATE, DATETIME, LONG_TEXT, TEXT, TIME } from 'common/fieldTypes';
|
||||
import { QueryResult, TableField } from 'common/interfaces/antares';
|
||||
import { TableUpdateParams } from 'common/interfaces/tableApis';
|
||||
import { fakerCustom } from 'common/libs/fakerCustom';
|
||||
import { jsonToSqlInsert } from 'common/libs/sqlUtils';
|
||||
import { uidGen } from 'common/libs/uidGen';
|
||||
import * as json2php from 'json2php';
|
||||
@@ -670,16 +673,7 @@ const fillCell = (event: { name: string; group: string; type: string }) => {
|
||||
datePrecision += i === 0 ? '.S' : 'S';
|
||||
}
|
||||
|
||||
if (event.group === 'custom') {
|
||||
if (event.type === 'time' && event.name === 'now')
|
||||
fakeValue = moment().format(`HH:mm:ss${datePrecision}`);
|
||||
else if (event.type === 'time' && event.name === 'random')
|
||||
fakeValue = moment(faker.date.recent()).format(`HH:mm:ss${datePrecision}`);
|
||||
else if (event.type === 'datetime' && event.name === 'now')
|
||||
fakeValue = moment().format(`YYYY-MM-DD HH:mm:ss${datePrecision}`);
|
||||
}
|
||||
else {
|
||||
fakeValue = (faker as any)[event.group][event.name]();
|
||||
fakeValue = (fakerCustom as any)[event.group][event.name]();
|
||||
if (['string', 'number'].includes(typeof fakeValue)) {
|
||||
if (typeof fakeValue === 'number')
|
||||
fakeValue = String(fakeValue);
|
||||
@@ -691,7 +685,6 @@ const fillCell = (event: { name: string; group: string; type: string }) => {
|
||||
fakeValue = moment(fakeValue).format(`YYYY-MM-DD HH:mm:ss${datePrecision}`);
|
||||
else if (TIME.includes(selectedCell.value.type))
|
||||
fakeValue = moment(fakeValue).format(`HH:mm:ss${datePrecision}`);
|
||||
}
|
||||
|
||||
const params = {
|
||||
primary: primaryField.value?.name,
|
||||
@@ -1055,6 +1048,7 @@ onUnmounted(() => {
|
||||
}
|
||||
|
||||
.column-resizable {
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
resize: horizontal;
|
||||
|
@@ -197,13 +197,13 @@ const fakerMethods = {
|
||||
{ name: 'amount', group: 'finance' }
|
||||
],
|
||||
datetime: [
|
||||
{ name: 'now', group: 'custom' },
|
||||
{ name: 'now', group: 'date' },
|
||||
{ name: 'past', group: 'date' },
|
||||
{ name: 'future', group: 'date' }
|
||||
],
|
||||
time: [
|
||||
{ name: 'now', group: 'custom' },
|
||||
{ name: 'random', group: 'custom' }
|
||||
{ name: 'now', group: 'time' },
|
||||
{ name: 'random', group: 'time' }
|
||||
],
|
||||
uuid: [
|
||||
{ name: 'uuid', group: 'random' }
|
||||
|
@@ -122,7 +122,7 @@ const createClausole = (filter: TableFilterClausole) => {
|
||||
const { elementsWrapper: ew, stringsWrapper: sw } = clientCustomizations.value;
|
||||
let value;
|
||||
|
||||
if (isNumeric) {
|
||||
if (isNumeric && !['IN', 'NOT IN'].includes(filter.op)) {
|
||||
if (isNaN(Number(filter.value)))
|
||||
filter.value = '';
|
||||
if (isNaN(Number(filter.value2)))
|
||||
@@ -145,7 +145,7 @@ const createClausole = (filter: TableFilterClausole) => {
|
||||
val = val.trim();
|
||||
return isNumeric ? val : `${sw}${val}${sw}`;
|
||||
}).join(',');
|
||||
value = `(${filter.value})`;
|
||||
value = `(${value})`;
|
||||
break;
|
||||
case 'IS NULL':
|
||||
case 'IS NOT NULL':
|
||||
|
Reference in New Issue
Block a user