From 861c66d180c5bd15873cb82e5c6dd4ca343808df Mon Sep 17 00:00:00 2001 From: Pravesh Sharma Date: Wed, 26 Apr 2023 15:41:10 +0530 Subject: [PATCH] Ensure that when pasting a row in query tool grid, default value is used for autogenerated/serial columns. #5922 --- docs/en_US/images/query_data_editing.png | Bin 12996 -> 17381 bytes docs/en_US/query_tool_toolbar.rst | 7 ++++++- .../templates/columns/sql/default/nodes.sql | 3 ++- .../js/components/sections/ResultSet.jsx | 19 ++++++++++++------ .../components/sections/ResultSetToolbar.jsx | 15 ++++++++++++-- .../tools/sqleditor/utils/get_column_types.py | 7 +++++++ 6 files changed, 41 insertions(+), 10 deletions(-) diff --git a/docs/en_US/images/query_data_editing.png b/docs/en_US/images/query_data_editing.png index c379e23c972055d9c56a2dd1d90eceb9b600ed60..47ae2e20ab7a330d06303ea89fc6269b22a58cc9 100644 GIT binary patch literal 17381 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 -1 && arrayBracketIdx + 2 == columnTypeInternal.length, + 'seqtypid': c.seqtypid, + 'isPK': isPK }; } @@ -559,14 +561,19 @@ export class ResultSetUtils { return columns; } - processClipboardVal(columnVal, col, rawCopiedVal) { - if(columnVal === '') { + processClipboardVal(columnVal, col, rawCopiedVal, pasteSerials) { + if(columnVal === '' ) { if(col.has_default_val) { + // if column has default value columnVal = undefined; } else if(rawCopiedVal === null) { columnVal = null; } + } else if (col.has_default_val && col.seqtypid && !pasteSerials) { + // if column has default value and is serial type + columnVal = undefined; } + if(col.cell === 'boolean') { if(columnVal == 'true') { columnVal = true; @@ -581,7 +588,7 @@ export class ResultSetUtils { return columnVal; } - processRows(result, columns, fromClipboard=false) { + processRows(result, columns, fromClipboard=false, pasteSerials=false) { let retVal = []; if(!_.isArray(result) || !_.size(result)) { return retVal; @@ -598,7 +605,7 @@ export class ResultSetUtils { let columnVal = rec[col.pos]; /* If the source is clipboard, then it needs some extra handling */ if(fromClipboard) { - columnVal = this.processClipboardVal(columnVal, col, copiedRowsObjects[recIdx]?.[col.key]); + columnVal = this.processClipboardVal(columnVal, col, copiedRowsObjects[recIdx]?.[col.key], pasteSerials); } rowObj[col.key] = columnVal; } @@ -1207,14 +1214,14 @@ export function ResultSet() { }, [selectedRows, queryData, dataChangeStore, rows]); useEffect(()=>{ - const triggerAddRows = (_rows, fromClipboard)=>{ + const triggerAddRows = (_rows, fromClipboard, pasteSerials)=>{ let insPosn = 0; if(selectedRows.size > 0) { let selectedRowsSorted = Array.from(selectedRows); selectedRowsSorted.sort(); insPosn = _.findIndex(rows, (r)=>rowKeyGetter(r)==selectedRowsSorted[selectedRowsSorted.length-1])+1; } - let newRows = rsu.current.processRows(_rows, columns, fromClipboard); + let newRows = rsu.current.processRows(_rows, columns, fromClipboard, pasteSerials); setRows((prev)=>[ ...prev.slice(0, insPosn), ...newRows, diff --git a/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSetToolbar.jsx b/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSetToolbar.jsx index 9e708fc6c..1bdb46d7e 100644 --- a/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSetToolbar.jsx +++ b/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSetToolbar.jsx @@ -53,6 +53,7 @@ export function ResultSetToolbar({containerRef, canEdit, totalRowCount}) { const [checkedMenuItems, setCheckedMenuItems] = React.useState({}); /* Menu button refs */ const copyMenuRef = React.useRef(null); + const pasetMenuRef = React.useRef(null); const queryToolPref = queryToolCtx.preferences.sqleditor; @@ -72,8 +73,8 @@ export function ResultSetToolbar({containerRef, canEdit, totalRowCount}) { field_separator: queryToolPref.results_grid_field_separator, }); let copiedRows = copyUtils.getCopiedRows(); - eventBus.fireEvent(QUERY_TOOL_EVENTS.TRIGGER_ADD_ROWS, copiedRows, true); - }, [queryToolPref]); + eventBus.fireEvent(QUERY_TOOL_EVENTS.TRIGGER_ADD_ROWS, copiedRows, true, checkedMenuItems['paste_with_serials']); + }, [queryToolPref, checkedMenuItems['paste_with_serials']]); const copyData = ()=>{ eventBus.fireEvent(QUERY_TOOL_EVENTS.COPY_DATA, checkedMenuItems['copy_with_headers']); }; @@ -163,6 +164,8 @@ export function ResultSetToolbar({containerRef, canEdit, totalRowCount}) { name="menu-copyheader" ref={copyMenuRef} onClick={openMenu} /> } accesskey={shortcut_key(queryToolPref.btn_paste_row)} disabled={!canEdit} onClick={pasteRows} /> + } splitButton + name="menu-pasteoptions" ref={pasetMenuRef} onClick={openMenu} /> } accesskey={shortcut_key(queryToolPref.btn_delete_row)} disabled={buttonsDisabled['delete-rows'] || !canEdit} onClick={deleteRows} /> @@ -188,6 +191,14 @@ export function ResultSetToolbar({containerRef, canEdit, totalRowCount}) { > {gettext('Copy with headers')} + + {gettext('Paste with SERIAL/IDENTITY values?')} + ); } diff --git a/web/pgadmin/tools/sqleditor/utils/get_column_types.py b/web/pgadmin/tools/sqleditor/utils/get_column_types.py index 3af6b72b5..49035cdb2 100644 --- a/web/pgadmin/tools/sqleditor/utils/get_column_types.py +++ b/web/pgadmin/tools/sqleditor/utils/get_column_types.py @@ -49,6 +49,9 @@ def get_columns_types(is_query_tool, columns_info, table_oid, conn, has_oids): col['has_default_val'] = \ rset['rows'][key]['has_default_val'] + col_type['seqtypid'] = col['seqtypid'] = \ + rset['rows'][key]['seqtypid'] + else: for row in rset['rows']: if row['oid'] == col['table_column']: @@ -56,10 +59,14 @@ def get_columns_types(is_query_tool, columns_info, table_oid, conn, has_oids): col_type['has_default_val'] = \ col['has_default_val'] = row['has_default_val'] + + col_type['seqtypid'] = col['seqtypid'] = \ + rset['rows'][key]['seqtypid'] break else: col_type['not_null'] = col['not_null'] = None col_type['has_default_val'] = col['has_default_val'] = None + col_type['seqtypid'] = col['seqtypid'] = None return column_types