Skip to content

Commit 4736da4

Browse files
authored
feat: export result into excel and csv (#55)
* feat: export result into excel and csv * fix: fixing code smell * fix: remove @types/xlsx as xlsx already provided its own type
1 parent 95e0347 commit 4736da4

26 files changed

Lines changed: 676 additions & 83 deletions

package-lock.json

Lines changed: 159 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@
7373
"react-router-dom": "^6.8.1",
7474
"react-syntax-highlighter": "^15.5.0",
7575
"sqlstring": "^2.3.3",
76-
"uuid": "^9.0.0"
76+
"uuid": "^9.0.0",
77+
"xlsx": "^0.18.5"
7778
},
7879
"optionalDependencies": {
7980
"dmg-license": "^1.0.11"

release/app/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/libs/ApplyQueryResultChanges.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
import { QueryRowBasedResult } from 'types/SqlResult';
1+
import { QueryResult } from 'types/SqlResult';
22
import { ResultChangeCollectorItem } from './ResultChangeCollector';
33

44
export default function applyQueryResultChanges(
5-
result: QueryRowBasedResult,
5+
result: QueryResult,
66
changes: ResultChangeCollectorItem[]
7-
): QueryRowBasedResult {
7+
): QueryResult {
88
const newResult = { ...result };
9+
const headers = result.headers;
910

1011
for (const change of changes) {
1112
for (const col of change.cols) {
12-
newResult.rows[change.row][col.col] = col.value;
13+
newResult.rows[change.row][headers[col.col].name] = col.value;
1314
}
1415
}
1516

src/libs/GenerateSqlFromChanges.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { QueryRowBasedResult } from 'types/SqlResult';
1+
import { QueryResult } from 'types/SqlResult';
22
import generateSqlFromChanges from './GenerateSqlFromChanges';
33
import ResultChangeCollector from './ResultChangeCollector';
44
import { SqlStatementPlan } from 'types/SqlStatement';
@@ -24,7 +24,7 @@ test('Generate Sql from changes with primary key', () => {
2424
},
2525
} as unknown as DatabaseSchema;
2626

27-
const data: QueryRowBasedResult = {
27+
const data: QueryResult = {
2828
keys: {},
2929
error: null,
3030
headers: [
@@ -45,9 +45,9 @@ test('Generate Sql from changes with primary key', () => {
4545
},
4646
],
4747
rows: [
48-
[1, 'Henry', 25],
49-
[2, 'Jenny', 20],
50-
[3, 'Zeus', 30],
48+
{ id: 1, name: 'Henry', age: 25 },
49+
{ id: 2, name: 'Jenny', age: 20 },
50+
{ id: 3, name: 'Zeus', age: 30 },
5151
],
5252
};
5353

src/libs/GenerateSqlFromChanges.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { QueryResultHeader, QueryRowBasedResult } from 'types/SqlResult';
1+
import { QueryResult, QueryResultHeader } from 'types/SqlResult';
22
import { DatabaseSchema } from 'types/SqlSchema';
33
import { ResultChangeCollectorItem } from './ResultChangeCollector';
44
import { SqlStatementPlan } from 'types/SqlStatement';
@@ -66,7 +66,7 @@ export function getUpdatableTable(
6666

6767
function getSqlPlanFromChange(
6868
change: ResultChangeCollectorItem,
69-
data: QueryRowBasedResult,
69+
data: QueryResult,
7070
updatable: UpdatableTableDict
7171
): SqlStatementPlan[] {
7272
const changedTable: Record<string, SqlStatementPlan> = {};
@@ -92,7 +92,8 @@ function getSqlPlanFromChange(
9292
where: updatable[tableName].reduce((a, b) => {
9393
return {
9494
...a,
95-
[b.columnNames]: data.rows[change.row][b.columnNumber],
95+
[b.columnNames]:
96+
data.rows[change.row][headers[b.columnNumber].name],
9697
};
9798
}, {}),
9899
};
@@ -106,7 +107,7 @@ function getSqlPlanFromChange(
106107

107108
export default function generateSqlFromChanges(
108109
schema: DatabaseSchema,
109-
currentData: QueryRowBasedResult,
110+
currentData: QueryResult,
110111
changes: ResultChangeCollectorItem[]
111112
): SqlStatementPlan[] {
112113
const updatableTables = getUpdatableTable(currentData.headers, schema);

0 commit comments

Comments
 (0)