@@ -602,6 +602,13 @@ public static ISelect<T1> AsTreeCte<T1>(this ISelect<T1> that,
602602 if ( select . _orm . CodeFirst . IsSyncStructureToLower ) cteName = cteName . ToLower ( ) ;
603603 if ( select . _orm . CodeFirst . IsSyncStructureToUpper ) cteName = cteName . ToUpper ( ) ;
604604
605+ var tableRule = select . _tableRule ;
606+ var tbDbName = ( tableRule ? . Invoke ( tb . Type , tb . DbName ) ?? tb . DbName ) ;
607+ if ( select . _orm . CodeFirst . IsSyncStructureToLower ) tbDbName = tbDbName . ToLower ( ) ;
608+ if ( select . _orm . CodeFirst . IsSyncStructureToUpper ) tbDbName = tbDbName . ToUpper ( ) ;
609+ if ( select . _orm . CodeFirst . IsAutoSyncStructure )
610+ select . _orm . CodeFirst . SyncStructure ( tb . Type , tbDbName ) ;
611+
605612 switch ( select . _orm . Ado . DataType )
606613 {
607614 case DataType . GBase :
@@ -649,31 +656,31 @@ public static ISelect<T1> AsTreeCte<T1>(this ISelect<T1> that,
649656 FROM (
650657 SELECT @cte_ids as cte_ids, (
651658 SELECT @cte_ids := group_concat({ select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } )
652- FROM { select . _commonUtils . QuoteSqlName ( tb . DbName ) }
659+ FROM { select . _commonUtils . QuoteSqlName ( tbDbName ) }
653660 WHERE find_in_set({ select . _commonUtils . QuoteSqlName ( tbref . RefColumns [ 0 ] . Attribute . Name ) } , @cte_ids)
654661 ) as cte_cids, @cte_level := @cte_idcte_levels + 1 as cte_level
655- FROM { select . _commonUtils . QuoteSqlName ( tb . DbName ) } , (
662+ FROM { select . _commonUtils . QuoteSqlName ( tbDbName ) } , (
656663 SELECT @cte_ids := a.{ select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } , @cte_idcte_levels := 0
657- FROM { select . _commonUtils . QuoteSqlName ( tb . DbName ) } a
664+ FROM { select . _commonUtils . QuoteSqlName ( tbDbName ) } a
658665 WHERE 1=1{ select . _where }
659666 LIMIT 1) cte_tbb
660667 WHERE @cte_ids IS NOT NULL
661- ) cte_tbc, { select . _commonUtils . QuoteSqlName ( tb . DbName ) } a
668+ ) cte_tbc, { select . _commonUtils . QuoteSqlName ( tbDbName ) } a
662669 WHERE find_in_set(a.{ select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } , cte_tbc.cte_ids)" ;
663670 select . WithSql ( mysql56Sql ) . OrderBy ( "a.cte_level DESC" ) ;
664671 select . _where . Clear ( ) ;
665672 return select ;
666673 }
667674 mysql56Sql = $@ "SELECT cte_tbc.cte_level, { select . GetAllFieldExpressionTreeLevel2 ( ) . Field }
668675FROM (
669- SELECT @cte_pid as cte_id, (SELECT @cte_pid := { select . _commonUtils . QuoteSqlName ( tbref . RefColumns [ 0 ] . Attribute . Name ) } FROM { select . _commonUtils . QuoteSqlName ( tb . DbName ) } WHERE { select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } = cte_id) as cte_pid, @cte_level := @cte_level + 1 as cte_level
670- FROM { select . _commonUtils . QuoteSqlName ( tb . DbName ) } , (
676+ SELECT @cte_pid as cte_id, (SELECT @cte_pid := { select . _commonUtils . QuoteSqlName ( tbref . RefColumns [ 0 ] . Attribute . Name ) } FROM { select . _commonUtils . QuoteSqlName ( tbDbName ) } WHERE { select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } = cte_id) as cte_pid, @cte_level := @cte_level + 1 as cte_level
677+ FROM { select . _commonUtils . QuoteSqlName ( tbDbName ) } , (
671678 SELECT @cte_pid := a.{ select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } , @cte_level := 0
672- FROM { select . _commonUtils . QuoteSqlName ( tb . DbName ) } a
679+ FROM { select . _commonUtils . QuoteSqlName ( tbDbName ) } a
673680 WHERE 1=1{ select . _where }
674681 LIMIT 1) cte_tbb
675682) cte_tbc
676- JOIN { select . _commonUtils . QuoteSqlName ( tb . DbName ) } a ON cte_tbc.cte_id = a.{ select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } " ;
683+ JOIN { select . _commonUtils . QuoteSqlName ( tbDbName ) } a ON cte_tbc.cte_id = a.{ select . _commonUtils . QuoteSqlName ( tbref . Columns [ 0 ] . Attribute . Name ) } " ;
677684 select . WithSql ( mysql56Sql ) . OrderBy ( "a.cte_level" ) ;
678685 select . _where . Clear ( ) ;
679686 return select ;
@@ -732,10 +739,12 @@ WHERE @cte_ids IS NOT NULL
732739 }
733740 if ( select . _orm . CodeFirst . IsAutoSyncStructure )
734741 ( select . _orm . CodeFirst as CodeFirstProvider ) . _dicSycedTryAdd ( tb . Type , cteName ) ; //#476
742+
743+ select . _tableRules . Clear ( ) ;
735744 var sql2 = select
736745 . AsAlias ( ( type , old ) => type == tb . Type ? old . Replace ( "wct2" , "wct1" ) : old )
737- . AsTable ( ( type , old ) => type == tb . Type ? cteName : old )
738- . InnerJoin ( $ "{ select . _commonUtils . QuoteSqlName ( tb . DbName ) } wct2 ON { sql2InnerJoinOn } ")
746+ . AsTable ( ( type , old ) => type == tb . Type ? cteName : ( tableRule ? . Invoke ( type , old ) ?? old ) )
747+ . InnerJoin ( $ "{ select . _commonUtils . QuoteSqlName ( tbDbName ) } wct2 ON { sql2InnerJoinOn } ")
739748 . ToSql ( $ "wct1.cte_level + 1 as cte_level, { sql2ctePath } { sql2Field } ") . Trim ( ) ;
740749
741750 var newSelect = select . _orm . Select < T1 > ( )
0 commit comments