Skip to content

Commit 467197a

Browse files
committed
fixed the deleting row function
1 parent 6585a7a commit 467197a

File tree

5 files changed

+58
-89
lines changed

5 files changed

+58
-89
lines changed

server/controllers/helperFunctions/universal.helpers.ts

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export const updateRow: RequestHandler = async (req: Request, _res: Response, ne
187187

188188
await dbDataSource.destroy();
189189
console.log('Database has been disconnected');
190-
return dbUpdatedRow;
190+
return dbUpdatedRow;
191191

192192
} catch (err: unknown) {
193193
console.log('Error occurred in the updatedRow middleware: ', err);
@@ -202,35 +202,25 @@ export const updateRow: RequestHandler = async (req: Request, _res: Response, ne
202202
export const deleteRow: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
203203
const dbDataSource = await dbConnect(req);
204204
const { db_type } = req.session;
205-
const { primaryKey, value, deletedRow } = req.body
205+
const { value } = req.body
206206

207207
try{
208208
const tableNameDelete = await Promise.resolve(tableNameFormat(req, dbDataSource));
209209

210-
if (primaryKey){
211-
// Deleting a row that has a PK
212-
await dbDataSource.query(`
213-
DELETE FROM ${tableNameDelete}
214-
WHERE ${db_type === 'oracle' ? `"${primaryKey}"` : primaryKey} = ${db_type === 'oracle' || db_type === 'mysql' ? `'${value}'` : value}
215-
`)
216-
217-
} else {
218-
// Deleting a row that does NOT have a PK
219-
const deleteEntries = Object.entries(deletedRow).filter(([_key, value]) => value !== null);
220-
const deleteKeys = deleteEntries.map(([key, _value]) => key);
221-
const deleteValues = deleteEntries.map(([_key, value]) => value);
222-
223-
let oracleKeyValueString = '';
224-
for (let i = 0; i < deleteKeys.length; i++) {
225-
oracleKeyValueString += `"${deleteKeys[i]}" = '${deleteValues[i]}'${i < deleteKeys.length - 1 ? ' AND ' : ''}`
226-
};
227-
const keyValueString = oracleKeyValueString.replace(/"/g, '');
210+
const deleteEntries = Object.entries(value).filter(([_key, value]) => value !== null);
211+
const deleteKeys = deleteEntries.map(([key, _value]) => key);
212+
const deleteValues = deleteEntries.map(([_key, value]) => value);
228213

229-
await dbDataSource.query(`
230-
DELETE FROM ${tableNameDelete}
231-
WHERE ${db_type === 'oracle' ? oracleKeyValueString : keyValueString }
232-
`)
214+
let oracleKeyValueString = '';
215+
for (let i = 0; i < deleteKeys.length; i++) {
216+
oracleKeyValueString += `"${deleteKeys[i]}" = '${deleteValues[i]}'${i < deleteKeys.length - 1 ? ' AND ' : ''}`
233217
};
218+
const keyValueString = oracleKeyValueString.replace(/"/g, '');
219+
220+
await dbDataSource.query(`
221+
DELETE FROM ${tableNameDelete}
222+
WHERE ${db_type === 'oracle' ? oracleKeyValueString : keyValueString }
223+
`)
234224

235225
dbDataSource.destroy();
236226
console.log('Database has been disconnected');
@@ -280,7 +270,7 @@ export const addNewDbColumn: RequestHandler = async (req: Request, _res: Respons
280270
newColumnString = keyValueString.slice(0, -1);
281271
} else {
282272
newColumnString = keyValueString.slice(0, -2);
283-
}
273+
};
284274

285275
if (db_type === 'mssql' || db_type === 'oracle') {
286276
const addedNewColumn: Promise<unknown> = await dbDataSource.query(`
@@ -315,26 +305,22 @@ export const addNewDbColumn: RequestHandler = async (req: Request, _res: Respons
315305
export const updateDbColumn: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
316306
const dbDataSource = await dbConnect(req);
317307
const { db_type, username } = req.session;
308+
const { tableName, columnName, schemaData, columnData } = req.body;
318309

319310
try{
320-
const updateColumnData: {[key: string]: string } = req.body;
321-
322-
const schemaName = db_type === 'mssql' ? await dbDataSource.query(`SELECT SCHEMA_NAME() AS SchemaName;`) : '';
311+
const tableNameUpdateColumn = await Promise.resolve(tableNameFormat(req, dbDataSource));
312+
console.log('schemaData: ', schemaData)
313+
console.log('columnData: ', columnData)
323314

324-
const slicedTableName = updateColumnData.tableName.slice(7, updateColumnData.tableName.length + 1);
325-
const tableName: string = db_type === 'oracle' ? `"${(username as string).toUpperCase()}"."${slicedTableName}"` :
326-
db_type === 'mssql' ? `${schemaName[0].SchemaName}.${slicedTableName}` : updateColumnData.tableName;
327-
328-
329-
const updatedColumn: Promise<unknown> = await dbDataSource.query(`
330-
ALTER TABLE ${tableName}
331-
${db_type === 'postgres' || db_type === 'microsoft' ? 'ALTER COLUMN' : 'MODIFY' } "${updateColumnData.columnName}" ${updateColumnData.dataType} ${db_type === 'postgres' ? updateColumnData.constraintName : null} ${updateColumnData.constraintExpression}
332-
`);
315+
// const updatedColumn: Promise<unknown> = await dbDataSource.query(`
316+
// ALTER TABLE ${tableNameUpdateColumn}
317+
// ${db_type === 'postgres' || db_type === 'microsoft' ? 'ALTER COLUMN' : 'MODIFY' } "${columnName}" ${db_type} ${db_type === 'postgres' ? updateColumnData.constraintName : null} ${updateColumnData.constraintExpression}
318+
// `);
333319

334320
dbDataSource.destroy();
335321
console.log('Database has been disconnected');
336-
console.log('addedForeignKey in helper: ', updatedColumn);
337-
return updatedColumn;
322+
// console.log('addedForeignKey in helper: ', updatedColumn);
323+
// return updatedColumn;
338324

339325
} catch (err: unknown) {
340326
console.log('Error occurred in the addedForeignKey middleware: ', err);

server/controllers/mysqlData.controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ const mysqlController = {
143143
//----------------DELETE ROW---------------------------------------------------------------
144144
mysqlDeleteRow: async (req: Request, res: Response, next: NextFunction) => {
145145
try {
146-
deleteRow(req, res, next);
146+
await Promise.resolve(deleteRow(req, res, next));
147147
console.log("mysqlDeleteRow function has concluded");
148148
return next();
149149
} catch (err: unknown) {

src/components/ReactFlow/DataTableNode.tsx

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import Tippy from '@tippyjs/react';
1111
import 'tippy.js/dist/tippy.css';
1212
import informationIcon from '../../../images/informationSqIcon.png';
1313
import useCredentialsStore from '../../store/credentialsStore';
14-
import { Edge, DataNode, DataStore ,RowsOfData , Data, dbCredentials } from '@/Types';
14+
import { Edge, DataNode, DataStore, RowsOfData, Data, dbCredentials } from '@/Types';
15+
16+
1517

1618
export default function DataTableNode({ data} : {data:Data} ) { //this 'data' is created and passed from createdDataNodes, need DATA, not SCHEMA
1719

@@ -27,7 +29,7 @@ export default function DataTableNode({ data} : {data:Data} ) { //this 'data' i
2729

2830
const infoIconStr: string = "Please strictly follow syntax of your database. Ex) leave blank for auto-generating values, primary key must have value, etc. It may cause an error in updating database if you not strictly follow the syntax."
2931

30-
//split up the table into different parts based on how the data is structured.
32+
//split up the table into different parts based on how the data is structured. fetch
3133
const tableName = tableData[0];
3234
let firstRow : string[] = []
3335
let restRowsData : RowsOfData[]|[] = []
@@ -135,54 +137,19 @@ const newDatastore = structuredClone(dataStore)
135137

136138
newDatastore[tableName] = restRowsData
137139
setDataStore({...newDatastore,[id]:restRowsData});
138-
// setDataStore(restRowData);
139-
140-
141-
if('db_type' in dbCredentials){
142-
const sendDeleteRequest = fetch(`/api/sql/${dbCredentials.db_type as string}/deleteRow`,{
143-
method:'DELETE',
144-
headers:{
145-
'Content-Type':'application/json'
146-
},
147-
body:JSON.stringify({tableName : tableName, primaryKey: PK, value: PK !== null ? value[PK]:null })
148-
})
149-
}
150-
151-
if (PK !== null && value[PK] !== undefined) {
152-
const sendDeleteRequest = fetch(`/api/sql/${dbCredentials.db_type}/deleteRow`, {
140+
await fetch(`/api/sql/${dbCredentials.db_type}/deleteRow`, {
153141
method: 'DELETE',
154142
headers: {
155143
'Content-Type': 'application/json'
156144
},
157-
body: JSON.stringify({ tableName: tableName, primaryKey: PK, value: value[PK] })
145+
body: JSON.stringify({ tableName: tableName, value: value })
158146
})
159147
.then((res) => {
160148
//console.log("deleting row info sent")
161149
return res
162150
})
163151
.catch((err: ErrorEvent) => { console.error('deleting row error', err) })
164-
} else {
165-
const sendDeleteRequest = fetch(`/api/sql/${dbCredentials.db_type}/deleteRow`, {
166-
method: 'DELETE',
167-
headers: {
168-
'Content-Type': 'application/json'
169-
},
170-
body: JSON.stringify({ tableName: tableName, deletedRow: value })
171-
})
172-
.then((res) => {
173-
//console.log("deleting row info sent")
174-
return res
175-
})
176-
.catch((err: ErrorEvent) => { console.error('deleting row error', err) })
177-
}
178-
////////////////// Fetch path: /api/delete ///////////////////
179-
// {
180-
// tableName: name of table,
181-
// primaryKey: primary key,
182-
// value: corresponding value of the primary key
183-
// }
184-
////////////////////////////////////////////
185-
}
152+
};
186153

187154

188155
//cannot make handles for data table dynamic since size of each column can vary

src/components/ReactFlow/DataTableNodeColumn.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,26 +36,24 @@ export default function DataTableNodeColumn({row,id,deleteRow,index, PK}: DataTa
3636

3737
const [mode, setMode] = useState('default');
3838

39-
const rowDataKeys = Object.keys(row)
39+
const rowDataKeys = Object.keys(row);
4040

4141
interface rowData {
4242
[key:string|number]:string|number|boolean|null
43-
}
43+
};
4444
interface tempData {
4545
[key:string|number]:string|number|boolean|null
46-
}
46+
};
4747
interface changes{
4848
newRow?: tempData;
4949
primaryKey?: tempData;
5050
tableName?: string|number;
51-
}
51+
};
5252

5353
const onCancel = () => {
5454
setTempData(rowData);
5555
setMode('default');
56-
}
57-
58-
56+
};
5957

6058
//on save suppose to save changes to edits on data row.
6159
const onSave = async () => {

src/components/ReactFlow/TableNodeColumn.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,23 @@ export default function TableNodeColumn({
2626

2727
const newColumn = JSON.parse(JSON.stringify(column))
2828
const [columnData, setColumnData] = useState<ColumnSchema>({ ...newColumn });
29-
29+
const [selectedConstraint, setSelectedConstraint] = useState('NA');
30+
31+
const handleConstraintChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
32+
e.preventDefault();
33+
setSelectedConstraint(e.target.value);
34+
};
3035

3136
useEffect(()=> {
3237
setColumnData({...newColumn})
3338
},[column])
3439

35-
const onSave = () => {
40+
const onSave = async () => {
3641
const currentSchema = { ...schemaStore };
42+
const tableRef = columnData.TableName;
43+
const colRef = columnData.field_name;
44+
const colData = columnData
45+
const tableName = tableRef.substring(tableRef.indexOf('.') + 1);
3746
currentSchema[columnData.TableName][columnData.field_name] = {
3847
...columnData,
3948
// References was updated by AddReference modal, this avoids that change being overwritten
@@ -43,6 +52,13 @@ export default function TableNodeColumn({
4352
if (column.field_name !== columnData.field_name) {
4453
delete currentSchema[column.TableName][column.field_name];
4554
}
55+
await fetch(`/api/sql/${dbCredentials.db_type}/updateColumn`, {
56+
method:'PATCH',
57+
headers:{
58+
'Content-Type':'application/json'
59+
},
60+
body:JSON.stringify({tableName: tableName, columnName: colRef, schemaData: currentSchema[tableRef][colRef], columnData: colData})
61+
})
4662
setSchemaStore(currentSchema);
4763
setMode('default');
4864
};
@@ -110,6 +126,8 @@ export default function TableNodeColumn({
110126
{mode === 'edit' ? (
111127
<select
112128
className="bg-[#f8f4eb] dark:text-black"
129+
value={selectedConstraint}
130+
onChange={handleConstraintChange}
113131
>
114132
{/* TODO: CHANGE TO NULLABLE BOOLEAN */}
115133
<option value="NA">NA</option>

0 commit comments

Comments
 (0)