1818import java .util .LinkedList ;
1919import java .util .List ;
2020import java .util .Map ;
21+ import java .util .Optional ;
2122import java .util .Random ;
2223import java .util .Set ;
2324import java .util .Stack ;
@@ -2067,7 +2068,7 @@ private void analyzeInsertStmt(TInsertSqlStatement stmt) {
20672068 List <TableColumn > tableColumns = tableColumnMap .get (tableModel .getName ());
20682069 List <TObjectName > keyMap = insertTableKeyMap .get (tableModel );
20692070 List <TResultColumn > valueMap = insertTableValueMap .get (tableModel );
2070- boolean initColumn = tableColumns != null ;
2071+ boolean initColumn = ( tableColumns != null && ! containStarColumn ( tableColumns )) ;
20712072
20722073 if (stmt .getSubQuery () != null ) {
20732074
@@ -2147,7 +2148,9 @@ private void analyzeInsertStmt(TInsertSqlStatement stmt) {
21472148 if (!initColumn ) {
21482149 tableColumn = modelFactory .createInsertTableColumn (tableModel ,
21492150 (TObjectName ) resultColumn .getColumnObject ());
2150-
2151+ if (containStarColumn (tableColumns )){
2152+ getStarColumn (tableColumns ).getStarLinkColumns ().add ((TObjectName ) resultColumn .getColumnObject ());
2153+ }
21512154 } else {
21522155 TObjectName matchedColumnName = (TObjectName ) resultColumn .getColumnObject ();
21532156 tableColumn = matchColumn (tableColumns , matchedColumnName );
@@ -2187,6 +2190,9 @@ private void analyzeInsertStmt(TInsertSqlStatement stmt) {
21872190 if (!initColumn ) {
21882191 tableColumn = modelFactory .createInsertTableColumn (tableModel ,
21892192 alias .getAliasName ());
2193+ if (containStarColumn (tableColumns )){
2194+ getStarColumn (tableColumns ).getStarLinkColumns ().add (alias .getAliasName ());
2195+ }
21902196 } else {
21912197 TObjectName matchedColumnName = alias .getAliasName ();
21922198 tableColumn = matchColumn (tableColumns , matchedColumnName );
@@ -2462,7 +2468,18 @@ private void analyzeInsertStmt(TInsertSqlStatement stmt) {
24622468 }
24632469 }
24642470
2471+ private TableColumn getStarColumn (List <TableColumn > columns ) {
2472+ for (TableColumn column : columns ){
2473+ if (column .getName ().endsWith ("*" )){
2474+ return column ;
2475+ }
2476+ }
2477+ return null ;
2478+ }
2479+
24652480 private boolean containStarColumn (List <TableColumn > columns ) {
2481+ if (columns == null )
2482+ return false ;
24662483 for (TableColumn column : columns ){
24672484 if (column .getName ().endsWith ("*" )){
24682485 return true ;
@@ -3088,16 +3105,11 @@ private void appendRelation(dataflow dataflow, Relation[] relations, Class<? ext
30883105 Object targetElement = relation .getTarget ().getElement ();
30893106 if (targetElement instanceof ResultColumn ) {
30903107 ResultColumn targetColumn = (ResultColumn ) targetElement ;
3091- if (!targetColumn .getStarLinkColumns ().isEmpty ()) {
3092- for (int j = 0 ; j < targetColumn .getStarLinkColumns ().size (); j ++) {
3093- appendStarRelation (dataflow , relation , j );
3094- }
3095- if (!relation .isShowStarRelation ()) {
3096- continue ;
3097- }
3108+
3109+ if ("*" .equals (targetColumn .getName ()) && targetColumn .getStarLinkColumns ().isEmpty ()){
3110+ updateResultColumnStarLinks (dataflow , targetColumn , relation .getSources ());
30983111 }
3099- } else if (targetElement instanceof ViewColumn ) {
3100- ViewColumn targetColumn = (ViewColumn ) targetElement ;
3112+
31013113 if (!targetColumn .getStarLinkColumns ().isEmpty ()) {
31023114 for (int j = 0 ; j < targetColumn .getStarLinkColumns ().size (); j ++) {
31033115 appendStarRelation (dataflow , relation , j );
@@ -3108,6 +3120,11 @@ private void appendRelation(dataflow dataflow, Relation[] relations, Class<? ext
31083120 }
31093121 } else if (targetElement instanceof TableColumn ) {
31103122 TableColumn targetColumn = (TableColumn ) targetElement ;
3123+
3124+ if ("*" .equals (targetColumn .getName ()) && targetColumn .getStarLinkColumns ().isEmpty ()){
3125+ updateTableColumnStarLinks (dataflow , targetColumn , relation .getSources ());
3126+ }
3127+
31113128 if (!targetColumn .getStarLinkColumns ().isEmpty ()) {
31123129 for (int j = 0 ; j < targetColumn .getStarLinkColumns ().size (); j ++) {
31133130 appendStarRelation (dataflow , relation , j );
@@ -3458,6 +3475,117 @@ private void appendRelation(dataflow dataflow, Relation[] relations, Class<? ext
34583475 }
34593476 }
34603477
3478+
3479+
3480+ private void updateResultColumnStarLinks (dataflow dataflow , ResultColumn targetColumn ,
3481+ RelationElement <?>[] sourceElements ) {
3482+ if (sourceElements == null || sourceElements .length == 0 )
3483+ return ;
3484+
3485+ for (int j = 0 ; j < sourceElements .length ; j ++) {
3486+ Object sourceElement = sourceElements [j ].getElement ();
3487+ if (sourceElement instanceof ResultColumn ) {
3488+ ResultColumn source = (ResultColumn )sourceElement ;
3489+ if (source .getStarLinkColumns () != null && !source .getStarLinkColumns ().isEmpty ()) {
3490+ targetColumn .getStarLinkColumns ().addAll (source .getStarLinkColumns ());
3491+ }
3492+ else if (!"*" .equals (source .getName ())) {
3493+ if (source .getColumnObject () instanceof TObjectName ) {
3494+ targetColumn .getStarLinkColumns ().add ((TObjectName ) source .getColumnObject ());
3495+ } else if (source .getColumnObject () instanceof TResultColumn ) {
3496+ TObjectName field = ((TResultColumn ) source .getColumnObject ()).getFieldAttr ();
3497+ if (field != null ) {
3498+ targetColumn .getStarLinkColumns ().add (field );
3499+ }
3500+ }
3501+ }
3502+ } else if (sourceElement instanceof TableColumn ) {
3503+ TableColumn source = (TableColumn )sourceElement ;
3504+ if (source .getStarLinkColumns ()!=null ){
3505+ targetColumn .getStarLinkColumns ().addAll (source .getStarLinkColumns ());
3506+ }
3507+ else if (!"*" .equals (source .getName ())) {
3508+ targetColumn .getStarLinkColumns ().add (source .getColumnObject ());
3509+ }
3510+ }
3511+ }
3512+
3513+ if (!targetColumn .getStarLinkColumns ().isEmpty ()){
3514+ table resultSetElement = dataflow .getResultsets ().stream ().filter (t ->t .getId ().equals (String .valueOf (targetColumn .getResultSet ().getId ()))).findFirst ().get ();
3515+ for (int k = 0 ; k < targetColumn .getStarLinkColumns ().size (); k ++) {
3516+ column columnElement = new column ();
3517+ columnElement .setId ( String .valueOf (targetColumn .getId ()) + "_" + k );
3518+ TObjectName column = targetColumn .getStarLinkColumns ().get (k );
3519+ String columnName = getColumnName (column );
3520+ columnElement .setName (columnName );
3521+ if (targetColumn .isFunction ()){
3522+ columnElement .setIsFunction (String .valueOf (targetColumn .isFunction ()));
3523+ }
3524+ if (targetColumn .getStartPosition () != null && targetColumn .getEndPosition () != null ) {
3525+ columnElement .setCoordinate (
3526+ targetColumn .getStartPosition () + "," + targetColumn .getEndPosition ());
3527+ }
3528+ resultSetElement .getColumns ().add (columnElement );
3529+ }
3530+ }
3531+ }
3532+
3533+ private void updateTableColumnStarLinks (dataflow dataflow , TableColumn targetColumn , RelationElement <?>[] sourceElements ) {
3534+ if (sourceElements == null || sourceElements .length == 0 )
3535+ return ;
3536+
3537+ for (int j = 0 ; j < sourceElements .length ; j ++) {
3538+ Object sourceElement = sourceElements [j ].getElement ();
3539+ if (sourceElement instanceof ResultColumn ) {
3540+ ResultColumn source = (ResultColumn )sourceElement ;
3541+ if (source .getStarLinkColumns () != null && !source .getStarLinkColumns ().isEmpty ()) {
3542+ targetColumn .getStarLinkColumns ().addAll (source .getStarLinkColumns ());
3543+ }
3544+ else if (!"*" .equals (source .getName ())) {
3545+ if (source .getColumnObject () instanceof TObjectName ) {
3546+ targetColumn .getStarLinkColumns ().add ((TObjectName ) source .getColumnObject ());
3547+ } else if (source .getColumnObject () instanceof TResultColumn ) {
3548+ TObjectName field = ((TResultColumn ) source .getColumnObject ()).getFieldAttr ();
3549+ if (field != null ) {
3550+ targetColumn .getStarLinkColumns ().add (field );
3551+ }
3552+ }
3553+ }
3554+ } else if (sourceElement instanceof TableColumn ) {
3555+ TableColumn source = (TableColumn )sourceElement ;
3556+ if (source .getStarLinkColumns ()!=null ){
3557+ targetColumn .getStarLinkColumns ().addAll (source .getStarLinkColumns ());
3558+ }
3559+ else if (!"*" .equals (source .getName ())) {
3560+ targetColumn .getStarLinkColumns ().add (source .getColumnObject ());
3561+ }
3562+ }
3563+ }
3564+
3565+ if (!targetColumn .getStarLinkColumns ().isEmpty ()) {
3566+ Optional <table > tableElement = dataflow .getTables ().stream ()
3567+ .filter (t -> t .getId ().equals (String .valueOf (targetColumn .getTable ().getId ()))).findFirst ();
3568+ if (!tableElement .isPresent ()) {
3569+ tableElement = dataflow .getViews ().stream ()
3570+ .filter (t -> t .getId ().equals (String .valueOf (targetColumn .getTable ().getId ()))).findFirst ();
3571+ }
3572+ if (tableElement .isPresent ()) {
3573+ for (int k = 0 ; k < targetColumn .getStarLinkColumns ().size (); k ++) {
3574+ column columnElement = new column ();
3575+ columnElement .setId (String .valueOf (targetColumn .getId ()) + "_" + k );
3576+ TObjectName column = targetColumn .getStarLinkColumns ().get (k );
3577+ String columnName = getColumnName (column );
3578+ columnElement .setName (columnName );
3579+ if (targetColumn .getStartPosition () != null && targetColumn .getEndPosition () != null ) {
3580+ columnElement
3581+ .setCoordinate (targetColumn .getStartPosition () + "," + targetColumn .getEndPosition ());
3582+ }
3583+ tableElement .get ().getColumns ().add (columnElement );
3584+ }
3585+ }
3586+ }
3587+ }
3588+
34613589 private ESqlClause getSqlClause (RelationElement <?> relationElement ) {
34623590 if (relationElement instanceof TableColumnRelationElement ) {
34633591 return ((TableColumnRelationElement ) relationElement ).getRelationLocation ();
@@ -6708,11 +6836,11 @@ public boolean exprVisit(TParseTreeNode pNode, boolean isLeafNode) {
67086836 }
67096837
67106838 public static String getVersion () {
6711- return "1.3.6 " ;
6839+ return "1.3.7 " ;
67126840 }
67136841
67146842 public static String getReleaseDate () {
6715- return "2020-09-03 " ;
6843+ return "2020-09-07 " ;
67166844 }
67176845
67186846 public static void main (String [] args ) {
0 commit comments