@@ -2,7 +2,7 @@ import React, { useMemo } from 'react';
22import styles from './styles.module.scss' ;
33import TableCell from 'renderer/screens/DatabaseScreen/QueryResultViewer/TableCell/TableCell' ;
44import Icon from 'renderer/components/Icon' ;
5- import { QueryResult } from 'types/SqlResult' ;
5+ import { QueryResult , QueryResultHeader } from 'types/SqlResult' ;
66import { getUpdatableTable } from 'libs/GenerateSqlFromChanges' ;
77import { useSchmea } from 'renderer/contexts/SchemaProvider' ;
88import { useContextMenu } from 'renderer/contexts/ContextMenuProvider' ;
@@ -82,19 +82,48 @@ function QueryResultTable({ result, page, pageSize }: QueryResultTableProps) {
8282 return list ;
8383 } , [ result , page , pageSize ] ) ;
8484
85+ const headerMemo = useMemo ( ( ) => {
86+ function getInitialSizeByHeaderType (
87+ idx : number ,
88+ header : QueryResultHeader
89+ ) {
90+ if ( header . type . type === 'number' ) {
91+ return 100 ;
92+ } else if (
93+ header . type . type === 'string' ||
94+ header . type . type === 'decimal'
95+ ) {
96+ // Check the last 100 records
97+ const maxLength = Math . max (
98+ ...result . rows . slice ( 0 , 100 ) . map ( ( row ) => {
99+ if ( typeof row [ idx ] === 'string' )
100+ return ( row [ idx ] as string ) . length ;
101+ return 10 ;
102+ } )
103+ ) ;
104+
105+ return Math . max ( 150 , Math . min ( 500 , maxLength * 8 ) ) ;
106+ }
107+
108+ return 150 ;
109+ }
110+
111+ return result . headers . map ( ( header , idx ) => ( {
112+ name : header . name || '' ,
113+ icon : header ?. schema ?. primaryKey ? < Icon . GreenKey /> : undefined ,
114+ initialSize : Math . max (
115+ header . name . length * 10 ,
116+ getInitialSizeByHeaderType ( idx , header )
117+ ) ,
118+ } ) ) ;
119+ } , [ result ] ) ;
120+
85121 return (
86122 < div
87123 className = { `${ styles . container } scroll` }
88124 onContextMenu = { handleContextMenu }
89125 >
90- < ResizableTable
91- headers = { result . headers . map ( ( header ) => ( {
92- name : header . name || '' ,
93- icon : header ?. schema ?. primaryKey ? < Icon . GreenKey /> : undefined ,
94- } ) ) }
95- >
96- { RowList }
97- </ ResizableTable >
126+ < ResizableTable headers = { headerMemo } > { RowList } </ ResizableTable >
98127 </ div >
99128 ) ;
100129}
0 commit comments