Skip to content

Commit 9fd01ba

Browse files
authored
Drop most database deps and code in JavaScript since they're now implemented in Go (#125)
* Drop most deps * Try upgrading go-ora * override default clickhouse database * Fix go mod * Bring jest required coverage back down
1 parent e200d3a commit 9fd01ba

File tree

19 files changed

+96
-1465
lines changed

19 files changed

+96
-1465
lines changed

desktop/panel/database.test.js

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ const DATABASES = [
1616
type: 'postgres',
1717
query: `SELECT 1 AS "1", 2.2 AS "2", true AS "true", 'string' AS "string", CAST('2021-01-01' AS DATE) AS "date"`,
1818
},
19+
{
20+
type: 'clickhouse',
21+
query: `SELECT 1 AS "1", 2.2 AS "2", true AS "true", 'string' AS "string", parseDateTimeBestEffortOrNull('2021-01-01') AS "date"`,
22+
},
1923
{
2024
type: 'sqlserver',
2125
// SQL Server doesn't have true/false literals
@@ -57,6 +61,9 @@ const vendorOverride = {
5761
postgres: {
5862
address: 'localhost?sslmode=disable',
5963
},
64+
clickhouse: {
65+
database: 'default',
66+
},
6067
oracle: {
6168
database: 'XEPDB1',
6269
},
@@ -69,12 +76,12 @@ const vendorOverride = {
6976
};
7077

7178
for (const subprocess of RUNNERS) {
72-
for (const t of DATABASES) {
73-
// Only test Oracle with the Go runner for now
74-
if (t.type === 'oracle' && !subprocess?.go) {
75-
continue;
76-
}
79+
// Most databases now only work with the Go runner.
80+
if (!subprocess?.go) {
81+
continue;
82+
}
7783

84+
for (const t of DATABASES) {
7885
describe(
7986
t.type +
8087
' running via ' +
@@ -108,54 +115,39 @@ for (const subprocess of RUNNERS) {
108115

109116
let finished = false;
110117
const panels = [lp, dp];
111-
try {
112-
await withSavedPanels(
113-
panels,
114-
async (project) => {
115-
const panelValueBuffer = fs.readFileSync(
116-
getProjectResultsFile(project.projectName) + dp.id
117-
);
118+
await withSavedPanels(
119+
panels,
120+
async (project) => {
121+
const panelValueBuffer = fs.readFileSync(
122+
getProjectResultsFile(project.projectName) + dp.id
123+
);
118124

119-
const v = JSON.parse(panelValueBuffer.toString());
120-
if (t.query.startsWith('SELECT 1')) {
121-
expect(v.length).toBe(1);
122-
// These database drivers are all over the place between Node and Go.
123-
// Close enough is fine I guess.
124-
expect(v[0]['1']).toBe(1);
125-
// TODO: fix the Oracle driver reading floats as zero
126-
// https://github.com/sijms/go-ora/issues/135
127-
if (t.type !== 'oracle') {
128-
expect(String(v[0]['2'])).toBe('2.2');
129-
}
130-
expect(v[0]['true'] == '1').toBe(true);
131-
expect(v[0].string).toBe('string');
132-
expect(new Date(v[0].date)).toStrictEqual(
133-
new Date('2021-01-01')
134-
);
135-
} else {
136-
expect(v).toStrictEqual([
137-
{ name: 'Kate', age: 9 },
138-
{ name: 'Bake', age: 10 },
139-
]);
140-
}
125+
const v = JSON.parse(panelValueBuffer.toString());
126+
if (t.query.startsWith('SELECT 1')) {
127+
expect(v.length).toBe(1);
128+
// These database drivers are all over the place between Node and Go.
129+
// Close enough is fine I guess.
130+
expect(v[0]['1']).toBe(1);
131+
expect(String(v[0]['2'])).toBe('2.2');
132+
expect(v[0]['true'] == '1').toBe(true);
133+
expect(v[0].string).toBe('string');
134+
expect(new Date(v[0].date)).toStrictEqual(
135+
new Date('2021-01-01')
136+
);
137+
} else {
138+
expect(v).toStrictEqual([
139+
{ name: 'Kate', age: 9 },
140+
{ name: 'Bake', age: 10 },
141+
]);
142+
}
141143

142-
finished = true;
143-
},
144-
{ evalPanels: true, connectors, subprocessName: subprocess }
145-
);
144+
finished = true;
145+
},
146+
{ evalPanels: true, connectors, subprocessName: subprocess }
147+
);
146148

147-
if (!finished) {
148-
throw new Error('Callback did not finish');
149-
}
150-
} finally {
151-
// Delete sqlite file
152-
if (t.type === 'sqlite') {
153-
try {
154-
fs.unlinkSync('test');
155-
} catch (e) {
156-
console.error(e);
157-
}
158-
}
149+
if (!finished) {
150+
throw new Error('Callback did not finish');
159151
}
160152
// sqlserver at least can take longer than 5s to fail
161153
}, 30_000);

desktop/panel/database.ts

Lines changed: 6 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import log from '../../shared/log';
2-
import { ANSI_SQL_QUOTE, MYSQL_QUOTE } from '../../shared/sql';
32
import {
43
DatabaseConnectorInfo,
54
DatabasePanelInfo,
@@ -9,18 +8,11 @@ import {
98
import { fullHttpURL } from '../../shared/url';
109
import { Dispatch } from '../rpc';
1110
import { decryptFields } from '../secret';
12-
import { evalClickHouse } from './databases/clickhouse';
1311
import { evalElasticsearch } from './databases/elasticsearch';
1412
import { evalInflux } from './databases/influx';
15-
import { evalMySQL } from './databases/mysql';
16-
import { evalOracle } from './databases/oracle';
17-
import { evalPostgres } from './databases/postgres';
1813
import { evalPrometheus } from './databases/prometheus';
1914
import { evalSnowflake } from './databases/snowflake';
2015
import { evalSplunk } from './databases/splunk';
21-
import { evalSQLite } from './databases/sqlite';
22-
import { evalSQLServer } from './databases/sqlserver';
23-
import { transformDM_getPanelCalls } from './databases/sqlutil';
2416
import { tunnel } from './tunnel';
2517
import { EvalHandlerExtra, EvalHandlerResponse, guardPanel } from './types';
2618

@@ -43,18 +35,18 @@ export function getAndDecryptConnector(
4335

4436
const DEFAULT_PORT = {
4537
postgres: 5432,
46-
mysql: 3306,
4738
sqlite: 0,
48-
sqlserver: 1433,
49-
oracle: 1521,
50-
clickhouse: 8123,
5139
cassandra: 9160,
5240
snowflake: 443,
5341
presto: 8080,
5442
elasticsearch: 9200,
5543
influx: 8086,
5644
splunk: 443,
5745
prometheus: 9090,
46+
mysql: 3306,
47+
sqlserver: 1433,
48+
oracle: 1521,
49+
clickhouse: 8123,
5850
};
5951

6052
export function portHostFromAddress(
@@ -153,83 +145,9 @@ export async function evalDatabase(
153145
);
154146
}
155147

156-
const { query, panelsToImport } = transformDM_getPanelCalls(
157-
content,
158-
extra.idShapeMap,
159-
extra.idMap,
160-
['mysql', 'postgres', 'sqlite'].includes(connector.database.type),
161-
connector.database.type === 'mysql' ? MYSQL_QUOTE : ANSI_SQL_QUOTE
162-
);
163-
164-
// SQLite is file, not network based so handle separately.
165-
if (connector.database.type === 'sqlite') {
166-
return await evalSQLite(
167-
dispatch,
168-
query,
169-
info,
170-
connector,
171-
project,
172-
panelsToImport
173-
);
174-
}
175-
176148
if (connector.database.type === 'snowflake') {
177-
return await evalSnowflake(query, connector);
178-
}
179-
180-
const { host, port } = portHostFromAddress(info, connector);
181-
182-
// The way hosts are formatted is unique so have sqlserver manage its own call to tunnel()
183-
if (connector.database.type === 'sqlserver') {
184-
return await tunnel(
185-
project,
186-
serverId,
187-
host.split('\\')[0],
188-
port,
189-
(host: string, port: number): any =>
190-
evalSQLServer(query, host, port, connector)
191-
);
149+
return await evalSnowflake(content, connector);
192150
}
193151

194-
return await tunnel(
195-
project,
196-
serverId,
197-
host,
198-
port,
199-
(host: string, port: number): any => {
200-
if (connector.database.type === 'postgres') {
201-
return evalPostgres(
202-
dispatch,
203-
query,
204-
host,
205-
port,
206-
connector,
207-
project.projectName,
208-
panelsToImport
209-
);
210-
}
211-
212-
if (connector.database.type === 'mysql') {
213-
return evalMySQL(
214-
dispatch,
215-
query,
216-
host,
217-
port,
218-
connector,
219-
project.projectName,
220-
panelsToImport
221-
);
222-
}
223-
224-
if (connector.database.type === 'oracle') {
225-
return evalOracle(query, host, port, connector);
226-
}
227-
228-
if (connector.database.type === 'clickhouse') {
229-
return evalClickHouse(query, host, port, connector);
230-
}
231-
232-
throw new Error(`Unknown SQL type: ${connector.database.type}`);
233-
}
234-
);
152+
throw new Error(`Unknown SQL type: ${connector.database.type}`);
235153
}

desktop/panel/databases/clickhouse.test.js

Lines changed: 0 additions & 55 deletions
This file was deleted.

desktop/panel/databases/clickhouse.ts

Lines changed: 0 additions & 31 deletions
This file was deleted.

desktop/panel/databases/mysql.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)