vitess.io/vitess@v0.16.2/go/vt/sqlparser/ast_rewrite.go (about)

     1  /*
     2  Copyright 2023 The Vitess Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  // Code generated by ASTHelperGen. DO NOT EDIT.
    17  
    18  package sqlparser
    19  
    20  func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer replacerFunc) bool {
    21  	if node == nil {
    22  		return true
    23  	}
    24  	switch node := node.(type) {
    25  	case *AddColumns:
    26  		return a.rewriteRefOfAddColumns(parent, node, replacer)
    27  	case *AddConstraintDefinition:
    28  		return a.rewriteRefOfAddConstraintDefinition(parent, node, replacer)
    29  	case *AddIndexDefinition:
    30  		return a.rewriteRefOfAddIndexDefinition(parent, node, replacer)
    31  	case AlgorithmValue:
    32  		return a.rewriteAlgorithmValue(parent, node, replacer)
    33  	case *AliasedExpr:
    34  		return a.rewriteRefOfAliasedExpr(parent, node, replacer)
    35  	case *AliasedTableExpr:
    36  		return a.rewriteRefOfAliasedTableExpr(parent, node, replacer)
    37  	case *AlterCharset:
    38  		return a.rewriteRefOfAlterCharset(parent, node, replacer)
    39  	case *AlterCheck:
    40  		return a.rewriteRefOfAlterCheck(parent, node, replacer)
    41  	case *AlterColumn:
    42  		return a.rewriteRefOfAlterColumn(parent, node, replacer)
    43  	case *AlterDatabase:
    44  		return a.rewriteRefOfAlterDatabase(parent, node, replacer)
    45  	case *AlterIndex:
    46  		return a.rewriteRefOfAlterIndex(parent, node, replacer)
    47  	case *AlterMigration:
    48  		return a.rewriteRefOfAlterMigration(parent, node, replacer)
    49  	case *AlterTable:
    50  		return a.rewriteRefOfAlterTable(parent, node, replacer)
    51  	case *AlterView:
    52  		return a.rewriteRefOfAlterView(parent, node, replacer)
    53  	case *AlterVschema:
    54  		return a.rewriteRefOfAlterVschema(parent, node, replacer)
    55  	case *AndExpr:
    56  		return a.rewriteRefOfAndExpr(parent, node, replacer)
    57  	case Argument:
    58  		return a.rewriteArgument(parent, node, replacer)
    59  	case *ArgumentLessWindowExpr:
    60  		return a.rewriteRefOfArgumentLessWindowExpr(parent, node, replacer)
    61  	case *AutoIncSpec:
    62  		return a.rewriteRefOfAutoIncSpec(parent, node, replacer)
    63  	case *Avg:
    64  		return a.rewriteRefOfAvg(parent, node, replacer)
    65  	case *Begin:
    66  		return a.rewriteRefOfBegin(parent, node, replacer)
    67  	case *BetweenExpr:
    68  		return a.rewriteRefOfBetweenExpr(parent, node, replacer)
    69  	case *BinaryExpr:
    70  		return a.rewriteRefOfBinaryExpr(parent, node, replacer)
    71  	case *BitAnd:
    72  		return a.rewriteRefOfBitAnd(parent, node, replacer)
    73  	case *BitOr:
    74  		return a.rewriteRefOfBitOr(parent, node, replacer)
    75  	case *BitXor:
    76  		return a.rewriteRefOfBitXor(parent, node, replacer)
    77  	case BoolVal:
    78  		return a.rewriteBoolVal(parent, node, replacer)
    79  	case *CallProc:
    80  		return a.rewriteRefOfCallProc(parent, node, replacer)
    81  	case *CaseExpr:
    82  		return a.rewriteRefOfCaseExpr(parent, node, replacer)
    83  	case *CastExpr:
    84  		return a.rewriteRefOfCastExpr(parent, node, replacer)
    85  	case *ChangeColumn:
    86  		return a.rewriteRefOfChangeColumn(parent, node, replacer)
    87  	case *CharExpr:
    88  		return a.rewriteRefOfCharExpr(parent, node, replacer)
    89  	case *CheckConstraintDefinition:
    90  		return a.rewriteRefOfCheckConstraintDefinition(parent, node, replacer)
    91  	case *ColName:
    92  		return a.rewriteRefOfColName(parent, node, replacer)
    93  	case *CollateExpr:
    94  		return a.rewriteRefOfCollateExpr(parent, node, replacer)
    95  	case *ColumnDefinition:
    96  		return a.rewriteRefOfColumnDefinition(parent, node, replacer)
    97  	case *ColumnType:
    98  		return a.rewriteRefOfColumnType(parent, node, replacer)
    99  	case Columns:
   100  		return a.rewriteColumns(parent, node, replacer)
   101  	case *CommentOnly:
   102  		return a.rewriteRefOfCommentOnly(parent, node, replacer)
   103  	case *Commit:
   104  		return a.rewriteRefOfCommit(parent, node, replacer)
   105  	case *CommonTableExpr:
   106  		return a.rewriteRefOfCommonTableExpr(parent, node, replacer)
   107  	case *ComparisonExpr:
   108  		return a.rewriteRefOfComparisonExpr(parent, node, replacer)
   109  	case *ConstraintDefinition:
   110  		return a.rewriteRefOfConstraintDefinition(parent, node, replacer)
   111  	case *ConvertExpr:
   112  		return a.rewriteRefOfConvertExpr(parent, node, replacer)
   113  	case *ConvertType:
   114  		return a.rewriteRefOfConvertType(parent, node, replacer)
   115  	case *ConvertUsingExpr:
   116  		return a.rewriteRefOfConvertUsingExpr(parent, node, replacer)
   117  	case *Count:
   118  		return a.rewriteRefOfCount(parent, node, replacer)
   119  	case *CountStar:
   120  		return a.rewriteRefOfCountStar(parent, node, replacer)
   121  	case *CreateDatabase:
   122  		return a.rewriteRefOfCreateDatabase(parent, node, replacer)
   123  	case *CreateTable:
   124  		return a.rewriteRefOfCreateTable(parent, node, replacer)
   125  	case *CreateView:
   126  		return a.rewriteRefOfCreateView(parent, node, replacer)
   127  	case *CurTimeFuncExpr:
   128  		return a.rewriteRefOfCurTimeFuncExpr(parent, node, replacer)
   129  	case *DeallocateStmt:
   130  		return a.rewriteRefOfDeallocateStmt(parent, node, replacer)
   131  	case *Default:
   132  		return a.rewriteRefOfDefault(parent, node, replacer)
   133  	case *Definer:
   134  		return a.rewriteRefOfDefiner(parent, node, replacer)
   135  	case *Delete:
   136  		return a.rewriteRefOfDelete(parent, node, replacer)
   137  	case *DerivedTable:
   138  		return a.rewriteRefOfDerivedTable(parent, node, replacer)
   139  	case *DropColumn:
   140  		return a.rewriteRefOfDropColumn(parent, node, replacer)
   141  	case *DropDatabase:
   142  		return a.rewriteRefOfDropDatabase(parent, node, replacer)
   143  	case *DropKey:
   144  		return a.rewriteRefOfDropKey(parent, node, replacer)
   145  	case *DropTable:
   146  		return a.rewriteRefOfDropTable(parent, node, replacer)
   147  	case *DropView:
   148  		return a.rewriteRefOfDropView(parent, node, replacer)
   149  	case *ExecuteStmt:
   150  		return a.rewriteRefOfExecuteStmt(parent, node, replacer)
   151  	case *ExistsExpr:
   152  		return a.rewriteRefOfExistsExpr(parent, node, replacer)
   153  	case *ExplainStmt:
   154  		return a.rewriteRefOfExplainStmt(parent, node, replacer)
   155  	case *ExplainTab:
   156  		return a.rewriteRefOfExplainTab(parent, node, replacer)
   157  	case Exprs:
   158  		return a.rewriteExprs(parent, node, replacer)
   159  	case *ExtractFuncExpr:
   160  		return a.rewriteRefOfExtractFuncExpr(parent, node, replacer)
   161  	case *ExtractValueExpr:
   162  		return a.rewriteRefOfExtractValueExpr(parent, node, replacer)
   163  	case *ExtractedSubquery:
   164  		return a.rewriteRefOfExtractedSubquery(parent, node, replacer)
   165  	case *FirstOrLastValueExpr:
   166  		return a.rewriteRefOfFirstOrLastValueExpr(parent, node, replacer)
   167  	case *Flush:
   168  		return a.rewriteRefOfFlush(parent, node, replacer)
   169  	case *Force:
   170  		return a.rewriteRefOfForce(parent, node, replacer)
   171  	case *ForeignKeyDefinition:
   172  		return a.rewriteRefOfForeignKeyDefinition(parent, node, replacer)
   173  	case *FrameClause:
   174  		return a.rewriteRefOfFrameClause(parent, node, replacer)
   175  	case *FramePoint:
   176  		return a.rewriteRefOfFramePoint(parent, node, replacer)
   177  	case *FromFirstLastClause:
   178  		return a.rewriteRefOfFromFirstLastClause(parent, node, replacer)
   179  	case *FuncExpr:
   180  		return a.rewriteRefOfFuncExpr(parent, node, replacer)
   181  	case *GTIDFuncExpr:
   182  		return a.rewriteRefOfGTIDFuncExpr(parent, node, replacer)
   183  	case GroupBy:
   184  		return a.rewriteGroupBy(parent, node, replacer)
   185  	case *GroupConcatExpr:
   186  		return a.rewriteRefOfGroupConcatExpr(parent, node, replacer)
   187  	case IdentifierCI:
   188  		return a.rewriteIdentifierCI(parent, node, replacer)
   189  	case IdentifierCS:
   190  		return a.rewriteIdentifierCS(parent, node, replacer)
   191  	case *IndexDefinition:
   192  		return a.rewriteRefOfIndexDefinition(parent, node, replacer)
   193  	case *IndexHint:
   194  		return a.rewriteRefOfIndexHint(parent, node, replacer)
   195  	case IndexHints:
   196  		return a.rewriteIndexHints(parent, node, replacer)
   197  	case *IndexInfo:
   198  		return a.rewriteRefOfIndexInfo(parent, node, replacer)
   199  	case *Insert:
   200  		return a.rewriteRefOfInsert(parent, node, replacer)
   201  	case *InsertExpr:
   202  		return a.rewriteRefOfInsertExpr(parent, node, replacer)
   203  	case *IntervalExpr:
   204  		return a.rewriteRefOfIntervalExpr(parent, node, replacer)
   205  	case *IntervalFuncExpr:
   206  		return a.rewriteRefOfIntervalFuncExpr(parent, node, replacer)
   207  	case *IntroducerExpr:
   208  		return a.rewriteRefOfIntroducerExpr(parent, node, replacer)
   209  	case *IsExpr:
   210  		return a.rewriteRefOfIsExpr(parent, node, replacer)
   211  	case *JSONArrayExpr:
   212  		return a.rewriteRefOfJSONArrayExpr(parent, node, replacer)
   213  	case *JSONAttributesExpr:
   214  		return a.rewriteRefOfJSONAttributesExpr(parent, node, replacer)
   215  	case *JSONContainsExpr:
   216  		return a.rewriteRefOfJSONContainsExpr(parent, node, replacer)
   217  	case *JSONContainsPathExpr:
   218  		return a.rewriteRefOfJSONContainsPathExpr(parent, node, replacer)
   219  	case *JSONExtractExpr:
   220  		return a.rewriteRefOfJSONExtractExpr(parent, node, replacer)
   221  	case *JSONKeysExpr:
   222  		return a.rewriteRefOfJSONKeysExpr(parent, node, replacer)
   223  	case *JSONObjectExpr:
   224  		return a.rewriteRefOfJSONObjectExpr(parent, node, replacer)
   225  	case *JSONObjectParam:
   226  		return a.rewriteRefOfJSONObjectParam(parent, node, replacer)
   227  	case *JSONOverlapsExpr:
   228  		return a.rewriteRefOfJSONOverlapsExpr(parent, node, replacer)
   229  	case *JSONPrettyExpr:
   230  		return a.rewriteRefOfJSONPrettyExpr(parent, node, replacer)
   231  	case *JSONQuoteExpr:
   232  		return a.rewriteRefOfJSONQuoteExpr(parent, node, replacer)
   233  	case *JSONRemoveExpr:
   234  		return a.rewriteRefOfJSONRemoveExpr(parent, node, replacer)
   235  	case *JSONSchemaValidFuncExpr:
   236  		return a.rewriteRefOfJSONSchemaValidFuncExpr(parent, node, replacer)
   237  	case *JSONSchemaValidationReportFuncExpr:
   238  		return a.rewriteRefOfJSONSchemaValidationReportFuncExpr(parent, node, replacer)
   239  	case *JSONSearchExpr:
   240  		return a.rewriteRefOfJSONSearchExpr(parent, node, replacer)
   241  	case *JSONStorageFreeExpr:
   242  		return a.rewriteRefOfJSONStorageFreeExpr(parent, node, replacer)
   243  	case *JSONStorageSizeExpr:
   244  		return a.rewriteRefOfJSONStorageSizeExpr(parent, node, replacer)
   245  	case *JSONTableExpr:
   246  		return a.rewriteRefOfJSONTableExpr(parent, node, replacer)
   247  	case *JSONUnquoteExpr:
   248  		return a.rewriteRefOfJSONUnquoteExpr(parent, node, replacer)
   249  	case *JSONValueExpr:
   250  		return a.rewriteRefOfJSONValueExpr(parent, node, replacer)
   251  	case *JSONValueMergeExpr:
   252  		return a.rewriteRefOfJSONValueMergeExpr(parent, node, replacer)
   253  	case *JSONValueModifierExpr:
   254  		return a.rewriteRefOfJSONValueModifierExpr(parent, node, replacer)
   255  	case *JoinCondition:
   256  		return a.rewriteRefOfJoinCondition(parent, node, replacer)
   257  	case *JoinTableExpr:
   258  		return a.rewriteRefOfJoinTableExpr(parent, node, replacer)
   259  	case *JtColumnDefinition:
   260  		return a.rewriteRefOfJtColumnDefinition(parent, node, replacer)
   261  	case *JtOnResponse:
   262  		return a.rewriteRefOfJtOnResponse(parent, node, replacer)
   263  	case *KeyState:
   264  		return a.rewriteRefOfKeyState(parent, node, replacer)
   265  	case *LagLeadExpr:
   266  		return a.rewriteRefOfLagLeadExpr(parent, node, replacer)
   267  	case *Limit:
   268  		return a.rewriteRefOfLimit(parent, node, replacer)
   269  	case ListArg:
   270  		return a.rewriteListArg(parent, node, replacer)
   271  	case *Literal:
   272  		return a.rewriteRefOfLiteral(parent, node, replacer)
   273  	case *Load:
   274  		return a.rewriteRefOfLoad(parent, node, replacer)
   275  	case *LocateExpr:
   276  		return a.rewriteRefOfLocateExpr(parent, node, replacer)
   277  	case *LockOption:
   278  		return a.rewriteRefOfLockOption(parent, node, replacer)
   279  	case *LockTables:
   280  		return a.rewriteRefOfLockTables(parent, node, replacer)
   281  	case *LockingFunc:
   282  		return a.rewriteRefOfLockingFunc(parent, node, replacer)
   283  	case MatchAction:
   284  		return a.rewriteMatchAction(parent, node, replacer)
   285  	case *MatchExpr:
   286  		return a.rewriteRefOfMatchExpr(parent, node, replacer)
   287  	case *Max:
   288  		return a.rewriteRefOfMax(parent, node, replacer)
   289  	case *MemberOfExpr:
   290  		return a.rewriteRefOfMemberOfExpr(parent, node, replacer)
   291  	case *Min:
   292  		return a.rewriteRefOfMin(parent, node, replacer)
   293  	case *ModifyColumn:
   294  		return a.rewriteRefOfModifyColumn(parent, node, replacer)
   295  	case *NTHValueExpr:
   296  		return a.rewriteRefOfNTHValueExpr(parent, node, replacer)
   297  	case *NamedWindow:
   298  		return a.rewriteRefOfNamedWindow(parent, node, replacer)
   299  	case NamedWindows:
   300  		return a.rewriteNamedWindows(parent, node, replacer)
   301  	case *Nextval:
   302  		return a.rewriteRefOfNextval(parent, node, replacer)
   303  	case *NotExpr:
   304  		return a.rewriteRefOfNotExpr(parent, node, replacer)
   305  	case *NtileExpr:
   306  		return a.rewriteRefOfNtileExpr(parent, node, replacer)
   307  	case *NullTreatmentClause:
   308  		return a.rewriteRefOfNullTreatmentClause(parent, node, replacer)
   309  	case *NullVal:
   310  		return a.rewriteRefOfNullVal(parent, node, replacer)
   311  	case *Offset:
   312  		return a.rewriteRefOfOffset(parent, node, replacer)
   313  	case OnDup:
   314  		return a.rewriteOnDup(parent, node, replacer)
   315  	case *OptLike:
   316  		return a.rewriteRefOfOptLike(parent, node, replacer)
   317  	case *OrExpr:
   318  		return a.rewriteRefOfOrExpr(parent, node, replacer)
   319  	case *Order:
   320  		return a.rewriteRefOfOrder(parent, node, replacer)
   321  	case OrderBy:
   322  		return a.rewriteOrderBy(parent, node, replacer)
   323  	case *OrderByOption:
   324  		return a.rewriteRefOfOrderByOption(parent, node, replacer)
   325  	case *OtherAdmin:
   326  		return a.rewriteRefOfOtherAdmin(parent, node, replacer)
   327  	case *OtherRead:
   328  		return a.rewriteRefOfOtherRead(parent, node, replacer)
   329  	case *OverClause:
   330  		return a.rewriteRefOfOverClause(parent, node, replacer)
   331  	case *ParenTableExpr:
   332  		return a.rewriteRefOfParenTableExpr(parent, node, replacer)
   333  	case *ParsedComments:
   334  		return a.rewriteRefOfParsedComments(parent, node, replacer)
   335  	case *PartitionDefinition:
   336  		return a.rewriteRefOfPartitionDefinition(parent, node, replacer)
   337  	case *PartitionDefinitionOptions:
   338  		return a.rewriteRefOfPartitionDefinitionOptions(parent, node, replacer)
   339  	case *PartitionEngine:
   340  		return a.rewriteRefOfPartitionEngine(parent, node, replacer)
   341  	case *PartitionOption:
   342  		return a.rewriteRefOfPartitionOption(parent, node, replacer)
   343  	case *PartitionSpec:
   344  		return a.rewriteRefOfPartitionSpec(parent, node, replacer)
   345  	case *PartitionValueRange:
   346  		return a.rewriteRefOfPartitionValueRange(parent, node, replacer)
   347  	case Partitions:
   348  		return a.rewritePartitions(parent, node, replacer)
   349  	case *PerformanceSchemaFuncExpr:
   350  		return a.rewriteRefOfPerformanceSchemaFuncExpr(parent, node, replacer)
   351  	case *PrepareStmt:
   352  		return a.rewriteRefOfPrepareStmt(parent, node, replacer)
   353  	case ReferenceAction:
   354  		return a.rewriteReferenceAction(parent, node, replacer)
   355  	case *ReferenceDefinition:
   356  		return a.rewriteRefOfReferenceDefinition(parent, node, replacer)
   357  	case *RegexpInstrExpr:
   358  		return a.rewriteRefOfRegexpInstrExpr(parent, node, replacer)
   359  	case *RegexpLikeExpr:
   360  		return a.rewriteRefOfRegexpLikeExpr(parent, node, replacer)
   361  	case *RegexpReplaceExpr:
   362  		return a.rewriteRefOfRegexpReplaceExpr(parent, node, replacer)
   363  	case *RegexpSubstrExpr:
   364  		return a.rewriteRefOfRegexpSubstrExpr(parent, node, replacer)
   365  	case *Release:
   366  		return a.rewriteRefOfRelease(parent, node, replacer)
   367  	case *RenameColumn:
   368  		return a.rewriteRefOfRenameColumn(parent, node, replacer)
   369  	case *RenameIndex:
   370  		return a.rewriteRefOfRenameIndex(parent, node, replacer)
   371  	case *RenameTable:
   372  		return a.rewriteRefOfRenameTable(parent, node, replacer)
   373  	case *RenameTableName:
   374  		return a.rewriteRefOfRenameTableName(parent, node, replacer)
   375  	case *RevertMigration:
   376  		return a.rewriteRefOfRevertMigration(parent, node, replacer)
   377  	case *Rollback:
   378  		return a.rewriteRefOfRollback(parent, node, replacer)
   379  	case RootNode:
   380  		return a.rewriteRootNode(parent, node, replacer)
   381  	case *SRollback:
   382  		return a.rewriteRefOfSRollback(parent, node, replacer)
   383  	case *Savepoint:
   384  		return a.rewriteRefOfSavepoint(parent, node, replacer)
   385  	case *Select:
   386  		return a.rewriteRefOfSelect(parent, node, replacer)
   387  	case SelectExprs:
   388  		return a.rewriteSelectExprs(parent, node, replacer)
   389  	case *SelectInto:
   390  		return a.rewriteRefOfSelectInto(parent, node, replacer)
   391  	case *Set:
   392  		return a.rewriteRefOfSet(parent, node, replacer)
   393  	case *SetExpr:
   394  		return a.rewriteRefOfSetExpr(parent, node, replacer)
   395  	case SetExprs:
   396  		return a.rewriteSetExprs(parent, node, replacer)
   397  	case *Show:
   398  		return a.rewriteRefOfShow(parent, node, replacer)
   399  	case *ShowBasic:
   400  		return a.rewriteRefOfShowBasic(parent, node, replacer)
   401  	case *ShowCreate:
   402  		return a.rewriteRefOfShowCreate(parent, node, replacer)
   403  	case *ShowFilter:
   404  		return a.rewriteRefOfShowFilter(parent, node, replacer)
   405  	case *ShowMigrationLogs:
   406  		return a.rewriteRefOfShowMigrationLogs(parent, node, replacer)
   407  	case *ShowOther:
   408  		return a.rewriteRefOfShowOther(parent, node, replacer)
   409  	case *ShowThrottledApps:
   410  		return a.rewriteRefOfShowThrottledApps(parent, node, replacer)
   411  	case *ShowThrottlerStatus:
   412  		return a.rewriteRefOfShowThrottlerStatus(parent, node, replacer)
   413  	case *StarExpr:
   414  		return a.rewriteRefOfStarExpr(parent, node, replacer)
   415  	case *Std:
   416  		return a.rewriteRefOfStd(parent, node, replacer)
   417  	case *StdDev:
   418  		return a.rewriteRefOfStdDev(parent, node, replacer)
   419  	case *StdPop:
   420  		return a.rewriteRefOfStdPop(parent, node, replacer)
   421  	case *StdSamp:
   422  		return a.rewriteRefOfStdSamp(parent, node, replacer)
   423  	case *Stream:
   424  		return a.rewriteRefOfStream(parent, node, replacer)
   425  	case *SubPartition:
   426  		return a.rewriteRefOfSubPartition(parent, node, replacer)
   427  	case *SubPartitionDefinition:
   428  		return a.rewriteRefOfSubPartitionDefinition(parent, node, replacer)
   429  	case *SubPartitionDefinitionOptions:
   430  		return a.rewriteRefOfSubPartitionDefinitionOptions(parent, node, replacer)
   431  	case SubPartitionDefinitions:
   432  		return a.rewriteSubPartitionDefinitions(parent, node, replacer)
   433  	case *Subquery:
   434  		return a.rewriteRefOfSubquery(parent, node, replacer)
   435  	case *SubstrExpr:
   436  		return a.rewriteRefOfSubstrExpr(parent, node, replacer)
   437  	case *Sum:
   438  		return a.rewriteRefOfSum(parent, node, replacer)
   439  	case TableExprs:
   440  		return a.rewriteTableExprs(parent, node, replacer)
   441  	case TableName:
   442  		return a.rewriteTableName(parent, node, replacer)
   443  	case TableNames:
   444  		return a.rewriteTableNames(parent, node, replacer)
   445  	case TableOptions:
   446  		return a.rewriteTableOptions(parent, node, replacer)
   447  	case *TableSpec:
   448  		return a.rewriteRefOfTableSpec(parent, node, replacer)
   449  	case *TablespaceOperation:
   450  		return a.rewriteRefOfTablespaceOperation(parent, node, replacer)
   451  	case *TimestampFuncExpr:
   452  		return a.rewriteRefOfTimestampFuncExpr(parent, node, replacer)
   453  	case *TrimFuncExpr:
   454  		return a.rewriteRefOfTrimFuncExpr(parent, node, replacer)
   455  	case *TruncateTable:
   456  		return a.rewriteRefOfTruncateTable(parent, node, replacer)
   457  	case *UnaryExpr:
   458  		return a.rewriteRefOfUnaryExpr(parent, node, replacer)
   459  	case *Union:
   460  		return a.rewriteRefOfUnion(parent, node, replacer)
   461  	case *UnlockTables:
   462  		return a.rewriteRefOfUnlockTables(parent, node, replacer)
   463  	case *Update:
   464  		return a.rewriteRefOfUpdate(parent, node, replacer)
   465  	case *UpdateExpr:
   466  		return a.rewriteRefOfUpdateExpr(parent, node, replacer)
   467  	case UpdateExprs:
   468  		return a.rewriteUpdateExprs(parent, node, replacer)
   469  	case *UpdateXMLExpr:
   470  		return a.rewriteRefOfUpdateXMLExpr(parent, node, replacer)
   471  	case *Use:
   472  		return a.rewriteRefOfUse(parent, node, replacer)
   473  	case *VExplainStmt:
   474  		return a.rewriteRefOfVExplainStmt(parent, node, replacer)
   475  	case *VStream:
   476  		return a.rewriteRefOfVStream(parent, node, replacer)
   477  	case ValTuple:
   478  		return a.rewriteValTuple(parent, node, replacer)
   479  	case *Validation:
   480  		return a.rewriteRefOfValidation(parent, node, replacer)
   481  	case Values:
   482  		return a.rewriteValues(parent, node, replacer)
   483  	case *ValuesFuncExpr:
   484  		return a.rewriteRefOfValuesFuncExpr(parent, node, replacer)
   485  	case *VarPop:
   486  		return a.rewriteRefOfVarPop(parent, node, replacer)
   487  	case *VarSamp:
   488  		return a.rewriteRefOfVarSamp(parent, node, replacer)
   489  	case *Variable:
   490  		return a.rewriteRefOfVariable(parent, node, replacer)
   491  	case *Variance:
   492  		return a.rewriteRefOfVariance(parent, node, replacer)
   493  	case VindexParam:
   494  		return a.rewriteVindexParam(parent, node, replacer)
   495  	case *VindexSpec:
   496  		return a.rewriteRefOfVindexSpec(parent, node, replacer)
   497  	case *WeightStringFuncExpr:
   498  		return a.rewriteRefOfWeightStringFuncExpr(parent, node, replacer)
   499  	case *When:
   500  		return a.rewriteRefOfWhen(parent, node, replacer)
   501  	case *Where:
   502  		return a.rewriteRefOfWhere(parent, node, replacer)
   503  	case *WindowDefinition:
   504  		return a.rewriteRefOfWindowDefinition(parent, node, replacer)
   505  	case WindowDefinitions:
   506  		return a.rewriteWindowDefinitions(parent, node, replacer)
   507  	case *WindowSpecification:
   508  		return a.rewriteRefOfWindowSpecification(parent, node, replacer)
   509  	case *With:
   510  		return a.rewriteRefOfWith(parent, node, replacer)
   511  	case *XorExpr:
   512  		return a.rewriteRefOfXorExpr(parent, node, replacer)
   513  	default:
   514  		// this should never happen
   515  		return true
   516  	}
   517  }
   518  func (a *application) rewriteRefOfAddColumns(parent SQLNode, node *AddColumns, replacer replacerFunc) bool {
   519  	if node == nil {
   520  		return true
   521  	}
   522  	if a.pre != nil {
   523  		a.cur.replacer = replacer
   524  		a.cur.parent = parent
   525  		a.cur.node = node
   526  		if !a.pre(&a.cur) {
   527  			return true
   528  		}
   529  	}
   530  	for x, el := range node.Columns {
   531  		if !a.rewriteRefOfColumnDefinition(node, el, func(idx int) replacerFunc {
   532  			return func(newNode, parent SQLNode) {
   533  				parent.(*AddColumns).Columns[idx] = newNode.(*ColumnDefinition)
   534  			}
   535  		}(x)) {
   536  			return false
   537  		}
   538  	}
   539  	if !a.rewriteRefOfColName(node, node.After, func(newNode, parent SQLNode) {
   540  		parent.(*AddColumns).After = newNode.(*ColName)
   541  	}) {
   542  		return false
   543  	}
   544  	if a.post != nil {
   545  		a.cur.replacer = replacer
   546  		a.cur.parent = parent
   547  		a.cur.node = node
   548  		if !a.post(&a.cur) {
   549  			return false
   550  		}
   551  	}
   552  	return true
   553  }
   554  func (a *application) rewriteRefOfAddConstraintDefinition(parent SQLNode, node *AddConstraintDefinition, replacer replacerFunc) bool {
   555  	if node == nil {
   556  		return true
   557  	}
   558  	if a.pre != nil {
   559  		a.cur.replacer = replacer
   560  		a.cur.parent = parent
   561  		a.cur.node = node
   562  		if !a.pre(&a.cur) {
   563  			return true
   564  		}
   565  	}
   566  	if !a.rewriteRefOfConstraintDefinition(node, node.ConstraintDefinition, func(newNode, parent SQLNode) {
   567  		parent.(*AddConstraintDefinition).ConstraintDefinition = newNode.(*ConstraintDefinition)
   568  	}) {
   569  		return false
   570  	}
   571  	if a.post != nil {
   572  		a.cur.replacer = replacer
   573  		a.cur.parent = parent
   574  		a.cur.node = node
   575  		if !a.post(&a.cur) {
   576  			return false
   577  		}
   578  	}
   579  	return true
   580  }
   581  func (a *application) rewriteRefOfAddIndexDefinition(parent SQLNode, node *AddIndexDefinition, replacer replacerFunc) bool {
   582  	if node == nil {
   583  		return true
   584  	}
   585  	if a.pre != nil {
   586  		a.cur.replacer = replacer
   587  		a.cur.parent = parent
   588  		a.cur.node = node
   589  		if !a.pre(&a.cur) {
   590  			return true
   591  		}
   592  	}
   593  	if !a.rewriteRefOfIndexDefinition(node, node.IndexDefinition, func(newNode, parent SQLNode) {
   594  		parent.(*AddIndexDefinition).IndexDefinition = newNode.(*IndexDefinition)
   595  	}) {
   596  		return false
   597  	}
   598  	if a.post != nil {
   599  		a.cur.replacer = replacer
   600  		a.cur.parent = parent
   601  		a.cur.node = node
   602  		if !a.post(&a.cur) {
   603  			return false
   604  		}
   605  	}
   606  	return true
   607  }
   608  func (a *application) rewriteRefOfAliasedExpr(parent SQLNode, node *AliasedExpr, replacer replacerFunc) bool {
   609  	if node == nil {
   610  		return true
   611  	}
   612  	if a.pre != nil {
   613  		a.cur.replacer = replacer
   614  		a.cur.parent = parent
   615  		a.cur.node = node
   616  		if !a.pre(&a.cur) {
   617  			return true
   618  		}
   619  	}
   620  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
   621  		parent.(*AliasedExpr).Expr = newNode.(Expr)
   622  	}) {
   623  		return false
   624  	}
   625  	if !a.rewriteIdentifierCI(node, node.As, func(newNode, parent SQLNode) {
   626  		parent.(*AliasedExpr).As = newNode.(IdentifierCI)
   627  	}) {
   628  		return false
   629  	}
   630  	if a.post != nil {
   631  		a.cur.replacer = replacer
   632  		a.cur.parent = parent
   633  		a.cur.node = node
   634  		if !a.post(&a.cur) {
   635  			return false
   636  		}
   637  	}
   638  	return true
   639  }
   640  func (a *application) rewriteRefOfAliasedTableExpr(parent SQLNode, node *AliasedTableExpr, replacer replacerFunc) bool {
   641  	if node == nil {
   642  		return true
   643  	}
   644  	if a.pre != nil {
   645  		a.cur.replacer = replacer
   646  		a.cur.parent = parent
   647  		a.cur.node = node
   648  		if !a.pre(&a.cur) {
   649  			return true
   650  		}
   651  	}
   652  	if !a.rewriteSimpleTableExpr(node, node.Expr, func(newNode, parent SQLNode) {
   653  		parent.(*AliasedTableExpr).Expr = newNode.(SimpleTableExpr)
   654  	}) {
   655  		return false
   656  	}
   657  	if !a.rewritePartitions(node, node.Partitions, func(newNode, parent SQLNode) {
   658  		parent.(*AliasedTableExpr).Partitions = newNode.(Partitions)
   659  	}) {
   660  		return false
   661  	}
   662  	if !a.rewriteIdentifierCS(node, node.As, func(newNode, parent SQLNode) {
   663  		parent.(*AliasedTableExpr).As = newNode.(IdentifierCS)
   664  	}) {
   665  		return false
   666  	}
   667  	if !a.rewriteIndexHints(node, node.Hints, func(newNode, parent SQLNode) {
   668  		parent.(*AliasedTableExpr).Hints = newNode.(IndexHints)
   669  	}) {
   670  		return false
   671  	}
   672  	if !a.rewriteColumns(node, node.Columns, func(newNode, parent SQLNode) {
   673  		parent.(*AliasedTableExpr).Columns = newNode.(Columns)
   674  	}) {
   675  		return false
   676  	}
   677  	if a.post != nil {
   678  		a.cur.replacer = replacer
   679  		a.cur.parent = parent
   680  		a.cur.node = node
   681  		if !a.post(&a.cur) {
   682  			return false
   683  		}
   684  	}
   685  	return true
   686  }
   687  func (a *application) rewriteRefOfAlterCharset(parent SQLNode, node *AlterCharset, replacer replacerFunc) bool {
   688  	if node == nil {
   689  		return true
   690  	}
   691  	if a.pre != nil {
   692  		a.cur.replacer = replacer
   693  		a.cur.parent = parent
   694  		a.cur.node = node
   695  		if !a.pre(&a.cur) {
   696  			return true
   697  		}
   698  	}
   699  	if a.post != nil {
   700  		if a.pre == nil {
   701  			a.cur.replacer = replacer
   702  			a.cur.parent = parent
   703  			a.cur.node = node
   704  		}
   705  		if !a.post(&a.cur) {
   706  			return false
   707  		}
   708  	}
   709  	return true
   710  }
   711  func (a *application) rewriteRefOfAlterCheck(parent SQLNode, node *AlterCheck, replacer replacerFunc) bool {
   712  	if node == nil {
   713  		return true
   714  	}
   715  	if a.pre != nil {
   716  		a.cur.replacer = replacer
   717  		a.cur.parent = parent
   718  		a.cur.node = node
   719  		if !a.pre(&a.cur) {
   720  			return true
   721  		}
   722  	}
   723  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
   724  		parent.(*AlterCheck).Name = newNode.(IdentifierCI)
   725  	}) {
   726  		return false
   727  	}
   728  	if a.post != nil {
   729  		a.cur.replacer = replacer
   730  		a.cur.parent = parent
   731  		a.cur.node = node
   732  		if !a.post(&a.cur) {
   733  			return false
   734  		}
   735  	}
   736  	return true
   737  }
   738  func (a *application) rewriteRefOfAlterColumn(parent SQLNode, node *AlterColumn, replacer replacerFunc) bool {
   739  	if node == nil {
   740  		return true
   741  	}
   742  	if a.pre != nil {
   743  		a.cur.replacer = replacer
   744  		a.cur.parent = parent
   745  		a.cur.node = node
   746  		if !a.pre(&a.cur) {
   747  			return true
   748  		}
   749  	}
   750  	if !a.rewriteRefOfColName(node, node.Column, func(newNode, parent SQLNode) {
   751  		parent.(*AlterColumn).Column = newNode.(*ColName)
   752  	}) {
   753  		return false
   754  	}
   755  	if !a.rewriteExpr(node, node.DefaultVal, func(newNode, parent SQLNode) {
   756  		parent.(*AlterColumn).DefaultVal = newNode.(Expr)
   757  	}) {
   758  		return false
   759  	}
   760  	if a.post != nil {
   761  		a.cur.replacer = replacer
   762  		a.cur.parent = parent
   763  		a.cur.node = node
   764  		if !a.post(&a.cur) {
   765  			return false
   766  		}
   767  	}
   768  	return true
   769  }
   770  func (a *application) rewriteRefOfAlterDatabase(parent SQLNode, node *AlterDatabase, replacer replacerFunc) bool {
   771  	if node == nil {
   772  		return true
   773  	}
   774  	if a.pre != nil {
   775  		a.cur.replacer = replacer
   776  		a.cur.parent = parent
   777  		a.cur.node = node
   778  		if !a.pre(&a.cur) {
   779  			return true
   780  		}
   781  	}
   782  	if !a.rewriteIdentifierCS(node, node.DBName, func(newNode, parent SQLNode) {
   783  		parent.(*AlterDatabase).DBName = newNode.(IdentifierCS)
   784  	}) {
   785  		return false
   786  	}
   787  	if a.post != nil {
   788  		a.cur.replacer = replacer
   789  		a.cur.parent = parent
   790  		a.cur.node = node
   791  		if !a.post(&a.cur) {
   792  			return false
   793  		}
   794  	}
   795  	return true
   796  }
   797  func (a *application) rewriteRefOfAlterIndex(parent SQLNode, node *AlterIndex, replacer replacerFunc) bool {
   798  	if node == nil {
   799  		return true
   800  	}
   801  	if a.pre != nil {
   802  		a.cur.replacer = replacer
   803  		a.cur.parent = parent
   804  		a.cur.node = node
   805  		if !a.pre(&a.cur) {
   806  			return true
   807  		}
   808  	}
   809  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
   810  		parent.(*AlterIndex).Name = newNode.(IdentifierCI)
   811  	}) {
   812  		return false
   813  	}
   814  	if a.post != nil {
   815  		a.cur.replacer = replacer
   816  		a.cur.parent = parent
   817  		a.cur.node = node
   818  		if !a.post(&a.cur) {
   819  			return false
   820  		}
   821  	}
   822  	return true
   823  }
   824  func (a *application) rewriteRefOfAlterMigration(parent SQLNode, node *AlterMigration, replacer replacerFunc) bool {
   825  	if node == nil {
   826  		return true
   827  	}
   828  	if a.pre != nil {
   829  		a.cur.replacer = replacer
   830  		a.cur.parent = parent
   831  		a.cur.node = node
   832  		if !a.pre(&a.cur) {
   833  			return true
   834  		}
   835  	}
   836  	if !a.rewriteRefOfLiteral(node, node.Ratio, func(newNode, parent SQLNode) {
   837  		parent.(*AlterMigration).Ratio = newNode.(*Literal)
   838  	}) {
   839  		return false
   840  	}
   841  	if a.post != nil {
   842  		a.cur.replacer = replacer
   843  		a.cur.parent = parent
   844  		a.cur.node = node
   845  		if !a.post(&a.cur) {
   846  			return false
   847  		}
   848  	}
   849  	return true
   850  }
   851  func (a *application) rewriteRefOfAlterTable(parent SQLNode, node *AlterTable, replacer replacerFunc) bool {
   852  	if node == nil {
   853  		return true
   854  	}
   855  	if a.pre != nil {
   856  		a.cur.replacer = replacer
   857  		a.cur.parent = parent
   858  		a.cur.node = node
   859  		if !a.pre(&a.cur) {
   860  			return true
   861  		}
   862  	}
   863  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
   864  		parent.(*AlterTable).Table = newNode.(TableName)
   865  	}) {
   866  		return false
   867  	}
   868  	for x, el := range node.AlterOptions {
   869  		if !a.rewriteAlterOption(node, el, func(idx int) replacerFunc {
   870  			return func(newNode, parent SQLNode) {
   871  				parent.(*AlterTable).AlterOptions[idx] = newNode.(AlterOption)
   872  			}
   873  		}(x)) {
   874  			return false
   875  		}
   876  	}
   877  	if !a.rewriteRefOfPartitionSpec(node, node.PartitionSpec, func(newNode, parent SQLNode) {
   878  		parent.(*AlterTable).PartitionSpec = newNode.(*PartitionSpec)
   879  	}) {
   880  		return false
   881  	}
   882  	if !a.rewriteRefOfPartitionOption(node, node.PartitionOption, func(newNode, parent SQLNode) {
   883  		parent.(*AlterTable).PartitionOption = newNode.(*PartitionOption)
   884  	}) {
   885  		return false
   886  	}
   887  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
   888  		parent.(*AlterTable).Comments = newNode.(*ParsedComments)
   889  	}) {
   890  		return false
   891  	}
   892  	if a.post != nil {
   893  		a.cur.replacer = replacer
   894  		a.cur.parent = parent
   895  		a.cur.node = node
   896  		if !a.post(&a.cur) {
   897  			return false
   898  		}
   899  	}
   900  	return true
   901  }
   902  func (a *application) rewriteRefOfAlterView(parent SQLNode, node *AlterView, replacer replacerFunc) bool {
   903  	if node == nil {
   904  		return true
   905  	}
   906  	if a.pre != nil {
   907  		a.cur.replacer = replacer
   908  		a.cur.parent = parent
   909  		a.cur.node = node
   910  		if !a.pre(&a.cur) {
   911  			return true
   912  		}
   913  	}
   914  	if !a.rewriteTableName(node, node.ViewName, func(newNode, parent SQLNode) {
   915  		parent.(*AlterView).ViewName = newNode.(TableName)
   916  	}) {
   917  		return false
   918  	}
   919  	if !a.rewriteRefOfDefiner(node, node.Definer, func(newNode, parent SQLNode) {
   920  		parent.(*AlterView).Definer = newNode.(*Definer)
   921  	}) {
   922  		return false
   923  	}
   924  	if !a.rewriteColumns(node, node.Columns, func(newNode, parent SQLNode) {
   925  		parent.(*AlterView).Columns = newNode.(Columns)
   926  	}) {
   927  		return false
   928  	}
   929  	if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) {
   930  		parent.(*AlterView).Select = newNode.(SelectStatement)
   931  	}) {
   932  		return false
   933  	}
   934  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
   935  		parent.(*AlterView).Comments = newNode.(*ParsedComments)
   936  	}) {
   937  		return false
   938  	}
   939  	if a.post != nil {
   940  		a.cur.replacer = replacer
   941  		a.cur.parent = parent
   942  		a.cur.node = node
   943  		if !a.post(&a.cur) {
   944  			return false
   945  		}
   946  	}
   947  	return true
   948  }
   949  func (a *application) rewriteRefOfAlterVschema(parent SQLNode, node *AlterVschema, replacer replacerFunc) bool {
   950  	if node == nil {
   951  		return true
   952  	}
   953  	if a.pre != nil {
   954  		a.cur.replacer = replacer
   955  		a.cur.parent = parent
   956  		a.cur.node = node
   957  		if !a.pre(&a.cur) {
   958  			return true
   959  		}
   960  	}
   961  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
   962  		parent.(*AlterVschema).Table = newNode.(TableName)
   963  	}) {
   964  		return false
   965  	}
   966  	if !a.rewriteRefOfVindexSpec(node, node.VindexSpec, func(newNode, parent SQLNode) {
   967  		parent.(*AlterVschema).VindexSpec = newNode.(*VindexSpec)
   968  	}) {
   969  		return false
   970  	}
   971  	for x, el := range node.VindexCols {
   972  		if !a.rewriteIdentifierCI(node, el, func(idx int) replacerFunc {
   973  			return func(newNode, parent SQLNode) {
   974  				parent.(*AlterVschema).VindexCols[idx] = newNode.(IdentifierCI)
   975  			}
   976  		}(x)) {
   977  			return false
   978  		}
   979  	}
   980  	if !a.rewriteRefOfAutoIncSpec(node, node.AutoIncSpec, func(newNode, parent SQLNode) {
   981  		parent.(*AlterVschema).AutoIncSpec = newNode.(*AutoIncSpec)
   982  	}) {
   983  		return false
   984  	}
   985  	if a.post != nil {
   986  		a.cur.replacer = replacer
   987  		a.cur.parent = parent
   988  		a.cur.node = node
   989  		if !a.post(&a.cur) {
   990  			return false
   991  		}
   992  	}
   993  	return true
   994  }
   995  func (a *application) rewriteRefOfAndExpr(parent SQLNode, node *AndExpr, replacer replacerFunc) bool {
   996  	if node == nil {
   997  		return true
   998  	}
   999  	if a.pre != nil {
  1000  		a.cur.replacer = replacer
  1001  		a.cur.parent = parent
  1002  		a.cur.node = node
  1003  		if !a.pre(&a.cur) {
  1004  			return true
  1005  		}
  1006  	}
  1007  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  1008  		parent.(*AndExpr).Left = newNode.(Expr)
  1009  	}) {
  1010  		return false
  1011  	}
  1012  	if !a.rewriteExpr(node, node.Right, func(newNode, parent SQLNode) {
  1013  		parent.(*AndExpr).Right = newNode.(Expr)
  1014  	}) {
  1015  		return false
  1016  	}
  1017  	if a.post != nil {
  1018  		a.cur.replacer = replacer
  1019  		a.cur.parent = parent
  1020  		a.cur.node = node
  1021  		if !a.post(&a.cur) {
  1022  			return false
  1023  		}
  1024  	}
  1025  	return true
  1026  }
  1027  func (a *application) rewriteRefOfArgumentLessWindowExpr(parent SQLNode, node *ArgumentLessWindowExpr, replacer replacerFunc) bool {
  1028  	if node == nil {
  1029  		return true
  1030  	}
  1031  	if a.pre != nil {
  1032  		a.cur.replacer = replacer
  1033  		a.cur.parent = parent
  1034  		a.cur.node = node
  1035  		if !a.pre(&a.cur) {
  1036  			return true
  1037  		}
  1038  	}
  1039  	if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
  1040  		parent.(*ArgumentLessWindowExpr).OverClause = newNode.(*OverClause)
  1041  	}) {
  1042  		return false
  1043  	}
  1044  	if a.post != nil {
  1045  		a.cur.replacer = replacer
  1046  		a.cur.parent = parent
  1047  		a.cur.node = node
  1048  		if !a.post(&a.cur) {
  1049  			return false
  1050  		}
  1051  	}
  1052  	return true
  1053  }
  1054  func (a *application) rewriteRefOfAutoIncSpec(parent SQLNode, node *AutoIncSpec, replacer replacerFunc) bool {
  1055  	if node == nil {
  1056  		return true
  1057  	}
  1058  	if a.pre != nil {
  1059  		a.cur.replacer = replacer
  1060  		a.cur.parent = parent
  1061  		a.cur.node = node
  1062  		if !a.pre(&a.cur) {
  1063  			return true
  1064  		}
  1065  	}
  1066  	if !a.rewriteIdentifierCI(node, node.Column, func(newNode, parent SQLNode) {
  1067  		parent.(*AutoIncSpec).Column = newNode.(IdentifierCI)
  1068  	}) {
  1069  		return false
  1070  	}
  1071  	if !a.rewriteTableName(node, node.Sequence, func(newNode, parent SQLNode) {
  1072  		parent.(*AutoIncSpec).Sequence = newNode.(TableName)
  1073  	}) {
  1074  		return false
  1075  	}
  1076  	if a.post != nil {
  1077  		a.cur.replacer = replacer
  1078  		a.cur.parent = parent
  1079  		a.cur.node = node
  1080  		if !a.post(&a.cur) {
  1081  			return false
  1082  		}
  1083  	}
  1084  	return true
  1085  }
  1086  func (a *application) rewriteRefOfAvg(parent SQLNode, node *Avg, replacer replacerFunc) bool {
  1087  	if node == nil {
  1088  		return true
  1089  	}
  1090  	if a.pre != nil {
  1091  		a.cur.replacer = replacer
  1092  		a.cur.parent = parent
  1093  		a.cur.node = node
  1094  		if !a.pre(&a.cur) {
  1095  			return true
  1096  		}
  1097  	}
  1098  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  1099  		parent.(*Avg).Arg = newNode.(Expr)
  1100  	}) {
  1101  		return false
  1102  	}
  1103  	if a.post != nil {
  1104  		a.cur.replacer = replacer
  1105  		a.cur.parent = parent
  1106  		a.cur.node = node
  1107  		if !a.post(&a.cur) {
  1108  			return false
  1109  		}
  1110  	}
  1111  	return true
  1112  }
  1113  func (a *application) rewriteRefOfBegin(parent SQLNode, node *Begin, replacer replacerFunc) bool {
  1114  	if node == nil {
  1115  		return true
  1116  	}
  1117  	if a.pre != nil {
  1118  		a.cur.replacer = replacer
  1119  		a.cur.parent = parent
  1120  		a.cur.node = node
  1121  		if !a.pre(&a.cur) {
  1122  			return true
  1123  		}
  1124  	}
  1125  	if a.post != nil {
  1126  		if a.pre == nil {
  1127  			a.cur.replacer = replacer
  1128  			a.cur.parent = parent
  1129  			a.cur.node = node
  1130  		}
  1131  		if !a.post(&a.cur) {
  1132  			return false
  1133  		}
  1134  	}
  1135  	return true
  1136  }
  1137  func (a *application) rewriteRefOfBetweenExpr(parent SQLNode, node *BetweenExpr, replacer replacerFunc) bool {
  1138  	if node == nil {
  1139  		return true
  1140  	}
  1141  	if a.pre != nil {
  1142  		a.cur.replacer = replacer
  1143  		a.cur.parent = parent
  1144  		a.cur.node = node
  1145  		if !a.pre(&a.cur) {
  1146  			return true
  1147  		}
  1148  	}
  1149  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  1150  		parent.(*BetweenExpr).Left = newNode.(Expr)
  1151  	}) {
  1152  		return false
  1153  	}
  1154  	if !a.rewriteExpr(node, node.From, func(newNode, parent SQLNode) {
  1155  		parent.(*BetweenExpr).From = newNode.(Expr)
  1156  	}) {
  1157  		return false
  1158  	}
  1159  	if !a.rewriteExpr(node, node.To, func(newNode, parent SQLNode) {
  1160  		parent.(*BetweenExpr).To = newNode.(Expr)
  1161  	}) {
  1162  		return false
  1163  	}
  1164  	if a.post != nil {
  1165  		a.cur.replacer = replacer
  1166  		a.cur.parent = parent
  1167  		a.cur.node = node
  1168  		if !a.post(&a.cur) {
  1169  			return false
  1170  		}
  1171  	}
  1172  	return true
  1173  }
  1174  func (a *application) rewriteRefOfBinaryExpr(parent SQLNode, node *BinaryExpr, replacer replacerFunc) bool {
  1175  	if node == nil {
  1176  		return true
  1177  	}
  1178  	if a.pre != nil {
  1179  		a.cur.replacer = replacer
  1180  		a.cur.parent = parent
  1181  		a.cur.node = node
  1182  		if !a.pre(&a.cur) {
  1183  			return true
  1184  		}
  1185  	}
  1186  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  1187  		parent.(*BinaryExpr).Left = newNode.(Expr)
  1188  	}) {
  1189  		return false
  1190  	}
  1191  	if !a.rewriteExpr(node, node.Right, func(newNode, parent SQLNode) {
  1192  		parent.(*BinaryExpr).Right = newNode.(Expr)
  1193  	}) {
  1194  		return false
  1195  	}
  1196  	if a.post != nil {
  1197  		a.cur.replacer = replacer
  1198  		a.cur.parent = parent
  1199  		a.cur.node = node
  1200  		if !a.post(&a.cur) {
  1201  			return false
  1202  		}
  1203  	}
  1204  	return true
  1205  }
  1206  func (a *application) rewriteRefOfBitAnd(parent SQLNode, node *BitAnd, replacer replacerFunc) bool {
  1207  	if node == nil {
  1208  		return true
  1209  	}
  1210  	if a.pre != nil {
  1211  		a.cur.replacer = replacer
  1212  		a.cur.parent = parent
  1213  		a.cur.node = node
  1214  		if !a.pre(&a.cur) {
  1215  			return true
  1216  		}
  1217  	}
  1218  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  1219  		parent.(*BitAnd).Arg = newNode.(Expr)
  1220  	}) {
  1221  		return false
  1222  	}
  1223  	if a.post != nil {
  1224  		a.cur.replacer = replacer
  1225  		a.cur.parent = parent
  1226  		a.cur.node = node
  1227  		if !a.post(&a.cur) {
  1228  			return false
  1229  		}
  1230  	}
  1231  	return true
  1232  }
  1233  func (a *application) rewriteRefOfBitOr(parent SQLNode, node *BitOr, replacer replacerFunc) bool {
  1234  	if node == nil {
  1235  		return true
  1236  	}
  1237  	if a.pre != nil {
  1238  		a.cur.replacer = replacer
  1239  		a.cur.parent = parent
  1240  		a.cur.node = node
  1241  		if !a.pre(&a.cur) {
  1242  			return true
  1243  		}
  1244  	}
  1245  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  1246  		parent.(*BitOr).Arg = newNode.(Expr)
  1247  	}) {
  1248  		return false
  1249  	}
  1250  	if a.post != nil {
  1251  		a.cur.replacer = replacer
  1252  		a.cur.parent = parent
  1253  		a.cur.node = node
  1254  		if !a.post(&a.cur) {
  1255  			return false
  1256  		}
  1257  	}
  1258  	return true
  1259  }
  1260  func (a *application) rewriteRefOfBitXor(parent SQLNode, node *BitXor, replacer replacerFunc) bool {
  1261  	if node == nil {
  1262  		return true
  1263  	}
  1264  	if a.pre != nil {
  1265  		a.cur.replacer = replacer
  1266  		a.cur.parent = parent
  1267  		a.cur.node = node
  1268  		if !a.pre(&a.cur) {
  1269  			return true
  1270  		}
  1271  	}
  1272  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  1273  		parent.(*BitXor).Arg = newNode.(Expr)
  1274  	}) {
  1275  		return false
  1276  	}
  1277  	if a.post != nil {
  1278  		a.cur.replacer = replacer
  1279  		a.cur.parent = parent
  1280  		a.cur.node = node
  1281  		if !a.post(&a.cur) {
  1282  			return false
  1283  		}
  1284  	}
  1285  	return true
  1286  }
  1287  func (a *application) rewriteRefOfCallProc(parent SQLNode, node *CallProc, replacer replacerFunc) bool {
  1288  	if node == nil {
  1289  		return true
  1290  	}
  1291  	if a.pre != nil {
  1292  		a.cur.replacer = replacer
  1293  		a.cur.parent = parent
  1294  		a.cur.node = node
  1295  		if !a.pre(&a.cur) {
  1296  			return true
  1297  		}
  1298  	}
  1299  	if !a.rewriteTableName(node, node.Name, func(newNode, parent SQLNode) {
  1300  		parent.(*CallProc).Name = newNode.(TableName)
  1301  	}) {
  1302  		return false
  1303  	}
  1304  	if !a.rewriteExprs(node, node.Params, func(newNode, parent SQLNode) {
  1305  		parent.(*CallProc).Params = newNode.(Exprs)
  1306  	}) {
  1307  		return false
  1308  	}
  1309  	if a.post != nil {
  1310  		a.cur.replacer = replacer
  1311  		a.cur.parent = parent
  1312  		a.cur.node = node
  1313  		if !a.post(&a.cur) {
  1314  			return false
  1315  		}
  1316  	}
  1317  	return true
  1318  }
  1319  func (a *application) rewriteRefOfCaseExpr(parent SQLNode, node *CaseExpr, replacer replacerFunc) bool {
  1320  	if node == nil {
  1321  		return true
  1322  	}
  1323  	if a.pre != nil {
  1324  		a.cur.replacer = replacer
  1325  		a.cur.parent = parent
  1326  		a.cur.node = node
  1327  		if !a.pre(&a.cur) {
  1328  			return true
  1329  		}
  1330  	}
  1331  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  1332  		parent.(*CaseExpr).Expr = newNode.(Expr)
  1333  	}) {
  1334  		return false
  1335  	}
  1336  	for x, el := range node.Whens {
  1337  		if !a.rewriteRefOfWhen(node, el, func(idx int) replacerFunc {
  1338  			return func(newNode, parent SQLNode) {
  1339  				parent.(*CaseExpr).Whens[idx] = newNode.(*When)
  1340  			}
  1341  		}(x)) {
  1342  			return false
  1343  		}
  1344  	}
  1345  	if !a.rewriteExpr(node, node.Else, func(newNode, parent SQLNode) {
  1346  		parent.(*CaseExpr).Else = newNode.(Expr)
  1347  	}) {
  1348  		return false
  1349  	}
  1350  	if a.post != nil {
  1351  		a.cur.replacer = replacer
  1352  		a.cur.parent = parent
  1353  		a.cur.node = node
  1354  		if !a.post(&a.cur) {
  1355  			return false
  1356  		}
  1357  	}
  1358  	return true
  1359  }
  1360  func (a *application) rewriteRefOfCastExpr(parent SQLNode, node *CastExpr, replacer replacerFunc) bool {
  1361  	if node == nil {
  1362  		return true
  1363  	}
  1364  	if a.pre != nil {
  1365  		a.cur.replacer = replacer
  1366  		a.cur.parent = parent
  1367  		a.cur.node = node
  1368  		if !a.pre(&a.cur) {
  1369  			return true
  1370  		}
  1371  	}
  1372  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  1373  		parent.(*CastExpr).Expr = newNode.(Expr)
  1374  	}) {
  1375  		return false
  1376  	}
  1377  	if !a.rewriteRefOfConvertType(node, node.Type, func(newNode, parent SQLNode) {
  1378  		parent.(*CastExpr).Type = newNode.(*ConvertType)
  1379  	}) {
  1380  		return false
  1381  	}
  1382  	if a.post != nil {
  1383  		a.cur.replacer = replacer
  1384  		a.cur.parent = parent
  1385  		a.cur.node = node
  1386  		if !a.post(&a.cur) {
  1387  			return false
  1388  		}
  1389  	}
  1390  	return true
  1391  }
  1392  func (a *application) rewriteRefOfChangeColumn(parent SQLNode, node *ChangeColumn, replacer replacerFunc) bool {
  1393  	if node == nil {
  1394  		return true
  1395  	}
  1396  	if a.pre != nil {
  1397  		a.cur.replacer = replacer
  1398  		a.cur.parent = parent
  1399  		a.cur.node = node
  1400  		if !a.pre(&a.cur) {
  1401  			return true
  1402  		}
  1403  	}
  1404  	if !a.rewriteRefOfColName(node, node.OldColumn, func(newNode, parent SQLNode) {
  1405  		parent.(*ChangeColumn).OldColumn = newNode.(*ColName)
  1406  	}) {
  1407  		return false
  1408  	}
  1409  	if !a.rewriteRefOfColumnDefinition(node, node.NewColDefinition, func(newNode, parent SQLNode) {
  1410  		parent.(*ChangeColumn).NewColDefinition = newNode.(*ColumnDefinition)
  1411  	}) {
  1412  		return false
  1413  	}
  1414  	if !a.rewriteRefOfColName(node, node.After, func(newNode, parent SQLNode) {
  1415  		parent.(*ChangeColumn).After = newNode.(*ColName)
  1416  	}) {
  1417  		return false
  1418  	}
  1419  	if a.post != nil {
  1420  		a.cur.replacer = replacer
  1421  		a.cur.parent = parent
  1422  		a.cur.node = node
  1423  		if !a.post(&a.cur) {
  1424  			return false
  1425  		}
  1426  	}
  1427  	return true
  1428  }
  1429  func (a *application) rewriteRefOfCharExpr(parent SQLNode, node *CharExpr, replacer replacerFunc) bool {
  1430  	if node == nil {
  1431  		return true
  1432  	}
  1433  	if a.pre != nil {
  1434  		a.cur.replacer = replacer
  1435  		a.cur.parent = parent
  1436  		a.cur.node = node
  1437  		if !a.pre(&a.cur) {
  1438  			return true
  1439  		}
  1440  	}
  1441  	if !a.rewriteExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  1442  		parent.(*CharExpr).Exprs = newNode.(Exprs)
  1443  	}) {
  1444  		return false
  1445  	}
  1446  	if a.post != nil {
  1447  		a.cur.replacer = replacer
  1448  		a.cur.parent = parent
  1449  		a.cur.node = node
  1450  		if !a.post(&a.cur) {
  1451  			return false
  1452  		}
  1453  	}
  1454  	return true
  1455  }
  1456  func (a *application) rewriteRefOfCheckConstraintDefinition(parent SQLNode, node *CheckConstraintDefinition, replacer replacerFunc) bool {
  1457  	if node == nil {
  1458  		return true
  1459  	}
  1460  	if a.pre != nil {
  1461  		a.cur.replacer = replacer
  1462  		a.cur.parent = parent
  1463  		a.cur.node = node
  1464  		if !a.pre(&a.cur) {
  1465  			return true
  1466  		}
  1467  	}
  1468  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  1469  		parent.(*CheckConstraintDefinition).Expr = newNode.(Expr)
  1470  	}) {
  1471  		return false
  1472  	}
  1473  	if a.post != nil {
  1474  		a.cur.replacer = replacer
  1475  		a.cur.parent = parent
  1476  		a.cur.node = node
  1477  		if !a.post(&a.cur) {
  1478  			return false
  1479  		}
  1480  	}
  1481  	return true
  1482  }
  1483  func (a *application) rewriteRefOfColName(parent SQLNode, node *ColName, replacer replacerFunc) bool {
  1484  	if node == nil {
  1485  		return true
  1486  	}
  1487  	if a.pre != nil {
  1488  		a.cur.replacer = replacer
  1489  		a.cur.parent = parent
  1490  		a.cur.node = node
  1491  		if !a.pre(&a.cur) {
  1492  			return true
  1493  		}
  1494  	}
  1495  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  1496  		parent.(*ColName).Name = newNode.(IdentifierCI)
  1497  	}) {
  1498  		return false
  1499  	}
  1500  	if !a.rewriteTableName(node, node.Qualifier, func(newNode, parent SQLNode) {
  1501  		parent.(*ColName).Qualifier = newNode.(TableName)
  1502  	}) {
  1503  		return false
  1504  	}
  1505  	if a.post != nil {
  1506  		a.cur.replacer = replacer
  1507  		a.cur.parent = parent
  1508  		a.cur.node = node
  1509  		if !a.post(&a.cur) {
  1510  			return false
  1511  		}
  1512  	}
  1513  	return true
  1514  }
  1515  func (a *application) rewriteRefOfCollateExpr(parent SQLNode, node *CollateExpr, replacer replacerFunc) bool {
  1516  	if node == nil {
  1517  		return true
  1518  	}
  1519  	if a.pre != nil {
  1520  		a.cur.replacer = replacer
  1521  		a.cur.parent = parent
  1522  		a.cur.node = node
  1523  		if !a.pre(&a.cur) {
  1524  			return true
  1525  		}
  1526  	}
  1527  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  1528  		parent.(*CollateExpr).Expr = newNode.(Expr)
  1529  	}) {
  1530  		return false
  1531  	}
  1532  	if a.post != nil {
  1533  		a.cur.replacer = replacer
  1534  		a.cur.parent = parent
  1535  		a.cur.node = node
  1536  		if !a.post(&a.cur) {
  1537  			return false
  1538  		}
  1539  	}
  1540  	return true
  1541  }
  1542  func (a *application) rewriteRefOfColumnDefinition(parent SQLNode, node *ColumnDefinition, replacer replacerFunc) bool {
  1543  	if node == nil {
  1544  		return true
  1545  	}
  1546  	if a.pre != nil {
  1547  		a.cur.replacer = replacer
  1548  		a.cur.parent = parent
  1549  		a.cur.node = node
  1550  		if !a.pre(&a.cur) {
  1551  			return true
  1552  		}
  1553  	}
  1554  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  1555  		parent.(*ColumnDefinition).Name = newNode.(IdentifierCI)
  1556  	}) {
  1557  		return false
  1558  	}
  1559  	if !a.rewriteRefOfColumnType(node, node.Type, func(newNode, parent SQLNode) {
  1560  		parent.(*ColumnDefinition).Type = newNode.(*ColumnType)
  1561  	}) {
  1562  		return false
  1563  	}
  1564  	if a.post != nil {
  1565  		a.cur.replacer = replacer
  1566  		a.cur.parent = parent
  1567  		a.cur.node = node
  1568  		if !a.post(&a.cur) {
  1569  			return false
  1570  		}
  1571  	}
  1572  	return true
  1573  }
  1574  func (a *application) rewriteRefOfColumnType(parent SQLNode, node *ColumnType, replacer replacerFunc) bool {
  1575  	if node == nil {
  1576  		return true
  1577  	}
  1578  	if a.pre != nil {
  1579  		a.cur.replacer = replacer
  1580  		a.cur.parent = parent
  1581  		a.cur.node = node
  1582  		if !a.pre(&a.cur) {
  1583  			return true
  1584  		}
  1585  	}
  1586  	if !a.rewriteRefOfLiteral(node, node.Length, func(newNode, parent SQLNode) {
  1587  		parent.(*ColumnType).Length = newNode.(*Literal)
  1588  	}) {
  1589  		return false
  1590  	}
  1591  	if !a.rewriteRefOfLiteral(node, node.Scale, func(newNode, parent SQLNode) {
  1592  		parent.(*ColumnType).Scale = newNode.(*Literal)
  1593  	}) {
  1594  		return false
  1595  	}
  1596  	if a.post != nil {
  1597  		a.cur.replacer = replacer
  1598  		a.cur.parent = parent
  1599  		a.cur.node = node
  1600  		if !a.post(&a.cur) {
  1601  			return false
  1602  		}
  1603  	}
  1604  	return true
  1605  }
  1606  func (a *application) rewriteColumns(parent SQLNode, node Columns, replacer replacerFunc) bool {
  1607  	if node == nil {
  1608  		return true
  1609  	}
  1610  	if a.pre != nil {
  1611  		a.cur.replacer = replacer
  1612  		a.cur.parent = parent
  1613  		a.cur.node = node
  1614  		kontinue := !a.pre(&a.cur)
  1615  		if a.cur.revisit {
  1616  			node = a.cur.node.(Columns)
  1617  			a.cur.revisit = false
  1618  			return a.rewriteColumns(parent, node, replacer)
  1619  		}
  1620  		if kontinue {
  1621  			return true
  1622  		}
  1623  	}
  1624  	for x, el := range node {
  1625  		if !a.rewriteIdentifierCI(node, el, func(idx int) replacerFunc {
  1626  			return func(newNode, parent SQLNode) {
  1627  				parent.(Columns)[idx] = newNode.(IdentifierCI)
  1628  			}
  1629  		}(x)) {
  1630  			return false
  1631  		}
  1632  	}
  1633  	if a.post != nil {
  1634  		a.cur.replacer = replacer
  1635  		a.cur.parent = parent
  1636  		a.cur.node = node
  1637  		if !a.post(&a.cur) {
  1638  			return false
  1639  		}
  1640  	}
  1641  	return true
  1642  }
  1643  func (a *application) rewriteRefOfCommentOnly(parent SQLNode, node *CommentOnly, replacer replacerFunc) bool {
  1644  	if node == nil {
  1645  		return true
  1646  	}
  1647  	if a.pre != nil {
  1648  		a.cur.replacer = replacer
  1649  		a.cur.parent = parent
  1650  		a.cur.node = node
  1651  		if !a.pre(&a.cur) {
  1652  			return true
  1653  		}
  1654  	}
  1655  	if a.post != nil {
  1656  		if a.pre == nil {
  1657  			a.cur.replacer = replacer
  1658  			a.cur.parent = parent
  1659  			a.cur.node = node
  1660  		}
  1661  		if !a.post(&a.cur) {
  1662  			return false
  1663  		}
  1664  	}
  1665  	return true
  1666  }
  1667  func (a *application) rewriteRefOfCommit(parent SQLNode, node *Commit, replacer replacerFunc) bool {
  1668  	if node == nil {
  1669  		return true
  1670  	}
  1671  	if a.pre != nil {
  1672  		a.cur.replacer = replacer
  1673  		a.cur.parent = parent
  1674  		a.cur.node = node
  1675  		if !a.pre(&a.cur) {
  1676  			return true
  1677  		}
  1678  	}
  1679  	if a.post != nil {
  1680  		if a.pre == nil {
  1681  			a.cur.replacer = replacer
  1682  			a.cur.parent = parent
  1683  			a.cur.node = node
  1684  		}
  1685  		if !a.post(&a.cur) {
  1686  			return false
  1687  		}
  1688  	}
  1689  	return true
  1690  }
  1691  func (a *application) rewriteRefOfCommonTableExpr(parent SQLNode, node *CommonTableExpr, replacer replacerFunc) bool {
  1692  	if node == nil {
  1693  		return true
  1694  	}
  1695  	if a.pre != nil {
  1696  		a.cur.replacer = replacer
  1697  		a.cur.parent = parent
  1698  		a.cur.node = node
  1699  		if !a.pre(&a.cur) {
  1700  			return true
  1701  		}
  1702  	}
  1703  	if !a.rewriteIdentifierCS(node, node.ID, func(newNode, parent SQLNode) {
  1704  		parent.(*CommonTableExpr).ID = newNode.(IdentifierCS)
  1705  	}) {
  1706  		return false
  1707  	}
  1708  	if !a.rewriteColumns(node, node.Columns, func(newNode, parent SQLNode) {
  1709  		parent.(*CommonTableExpr).Columns = newNode.(Columns)
  1710  	}) {
  1711  		return false
  1712  	}
  1713  	if !a.rewriteRefOfSubquery(node, node.Subquery, func(newNode, parent SQLNode) {
  1714  		parent.(*CommonTableExpr).Subquery = newNode.(*Subquery)
  1715  	}) {
  1716  		return false
  1717  	}
  1718  	if a.post != nil {
  1719  		a.cur.replacer = replacer
  1720  		a.cur.parent = parent
  1721  		a.cur.node = node
  1722  		if !a.post(&a.cur) {
  1723  			return false
  1724  		}
  1725  	}
  1726  	return true
  1727  }
  1728  func (a *application) rewriteRefOfComparisonExpr(parent SQLNode, node *ComparisonExpr, replacer replacerFunc) bool {
  1729  	if node == nil {
  1730  		return true
  1731  	}
  1732  	if a.pre != nil {
  1733  		a.cur.replacer = replacer
  1734  		a.cur.parent = parent
  1735  		a.cur.node = node
  1736  		if !a.pre(&a.cur) {
  1737  			return true
  1738  		}
  1739  	}
  1740  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  1741  		parent.(*ComparisonExpr).Left = newNode.(Expr)
  1742  	}) {
  1743  		return false
  1744  	}
  1745  	if !a.rewriteExpr(node, node.Right, func(newNode, parent SQLNode) {
  1746  		parent.(*ComparisonExpr).Right = newNode.(Expr)
  1747  	}) {
  1748  		return false
  1749  	}
  1750  	if !a.rewriteExpr(node, node.Escape, func(newNode, parent SQLNode) {
  1751  		parent.(*ComparisonExpr).Escape = newNode.(Expr)
  1752  	}) {
  1753  		return false
  1754  	}
  1755  	if a.post != nil {
  1756  		a.cur.replacer = replacer
  1757  		a.cur.parent = parent
  1758  		a.cur.node = node
  1759  		if !a.post(&a.cur) {
  1760  			return false
  1761  		}
  1762  	}
  1763  	return true
  1764  }
  1765  func (a *application) rewriteRefOfConstraintDefinition(parent SQLNode, node *ConstraintDefinition, replacer replacerFunc) bool {
  1766  	if node == nil {
  1767  		return true
  1768  	}
  1769  	if a.pre != nil {
  1770  		a.cur.replacer = replacer
  1771  		a.cur.parent = parent
  1772  		a.cur.node = node
  1773  		if !a.pre(&a.cur) {
  1774  			return true
  1775  		}
  1776  	}
  1777  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  1778  		parent.(*ConstraintDefinition).Name = newNode.(IdentifierCI)
  1779  	}) {
  1780  		return false
  1781  	}
  1782  	if !a.rewriteConstraintInfo(node, node.Details, func(newNode, parent SQLNode) {
  1783  		parent.(*ConstraintDefinition).Details = newNode.(ConstraintInfo)
  1784  	}) {
  1785  		return false
  1786  	}
  1787  	if a.post != nil {
  1788  		a.cur.replacer = replacer
  1789  		a.cur.parent = parent
  1790  		a.cur.node = node
  1791  		if !a.post(&a.cur) {
  1792  			return false
  1793  		}
  1794  	}
  1795  	return true
  1796  }
  1797  func (a *application) rewriteRefOfConvertExpr(parent SQLNode, node *ConvertExpr, replacer replacerFunc) bool {
  1798  	if node == nil {
  1799  		return true
  1800  	}
  1801  	if a.pre != nil {
  1802  		a.cur.replacer = replacer
  1803  		a.cur.parent = parent
  1804  		a.cur.node = node
  1805  		if !a.pre(&a.cur) {
  1806  			return true
  1807  		}
  1808  	}
  1809  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  1810  		parent.(*ConvertExpr).Expr = newNode.(Expr)
  1811  	}) {
  1812  		return false
  1813  	}
  1814  	if !a.rewriteRefOfConvertType(node, node.Type, func(newNode, parent SQLNode) {
  1815  		parent.(*ConvertExpr).Type = newNode.(*ConvertType)
  1816  	}) {
  1817  		return false
  1818  	}
  1819  	if a.post != nil {
  1820  		a.cur.replacer = replacer
  1821  		a.cur.parent = parent
  1822  		a.cur.node = node
  1823  		if !a.post(&a.cur) {
  1824  			return false
  1825  		}
  1826  	}
  1827  	return true
  1828  }
  1829  func (a *application) rewriteRefOfConvertType(parent SQLNode, node *ConvertType, replacer replacerFunc) bool {
  1830  	if node == nil {
  1831  		return true
  1832  	}
  1833  	if a.pre != nil {
  1834  		a.cur.replacer = replacer
  1835  		a.cur.parent = parent
  1836  		a.cur.node = node
  1837  		if !a.pre(&a.cur) {
  1838  			return true
  1839  		}
  1840  	}
  1841  	if !a.rewriteRefOfLiteral(node, node.Length, func(newNode, parent SQLNode) {
  1842  		parent.(*ConvertType).Length = newNode.(*Literal)
  1843  	}) {
  1844  		return false
  1845  	}
  1846  	if !a.rewriteRefOfLiteral(node, node.Scale, func(newNode, parent SQLNode) {
  1847  		parent.(*ConvertType).Scale = newNode.(*Literal)
  1848  	}) {
  1849  		return false
  1850  	}
  1851  	if a.post != nil {
  1852  		a.cur.replacer = replacer
  1853  		a.cur.parent = parent
  1854  		a.cur.node = node
  1855  		if !a.post(&a.cur) {
  1856  			return false
  1857  		}
  1858  	}
  1859  	return true
  1860  }
  1861  func (a *application) rewriteRefOfConvertUsingExpr(parent SQLNode, node *ConvertUsingExpr, replacer replacerFunc) bool {
  1862  	if node == nil {
  1863  		return true
  1864  	}
  1865  	if a.pre != nil {
  1866  		a.cur.replacer = replacer
  1867  		a.cur.parent = parent
  1868  		a.cur.node = node
  1869  		if !a.pre(&a.cur) {
  1870  			return true
  1871  		}
  1872  	}
  1873  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  1874  		parent.(*ConvertUsingExpr).Expr = newNode.(Expr)
  1875  	}) {
  1876  		return false
  1877  	}
  1878  	if a.post != nil {
  1879  		a.cur.replacer = replacer
  1880  		a.cur.parent = parent
  1881  		a.cur.node = node
  1882  		if !a.post(&a.cur) {
  1883  			return false
  1884  		}
  1885  	}
  1886  	return true
  1887  }
  1888  func (a *application) rewriteRefOfCount(parent SQLNode, node *Count, replacer replacerFunc) bool {
  1889  	if node == nil {
  1890  		return true
  1891  	}
  1892  	if a.pre != nil {
  1893  		a.cur.replacer = replacer
  1894  		a.cur.parent = parent
  1895  		a.cur.node = node
  1896  		if !a.pre(&a.cur) {
  1897  			return true
  1898  		}
  1899  	}
  1900  	if !a.rewriteExprs(node, node.Args, func(newNode, parent SQLNode) {
  1901  		parent.(*Count).Args = newNode.(Exprs)
  1902  	}) {
  1903  		return false
  1904  	}
  1905  	if a.post != nil {
  1906  		a.cur.replacer = replacer
  1907  		a.cur.parent = parent
  1908  		a.cur.node = node
  1909  		if !a.post(&a.cur) {
  1910  			return false
  1911  		}
  1912  	}
  1913  	return true
  1914  }
  1915  func (a *application) rewriteRefOfCountStar(parent SQLNode, node *CountStar, replacer replacerFunc) bool {
  1916  	if node == nil {
  1917  		return true
  1918  	}
  1919  	if a.pre != nil {
  1920  		a.cur.replacer = replacer
  1921  		a.cur.parent = parent
  1922  		a.cur.node = node
  1923  		if !a.pre(&a.cur) {
  1924  			return true
  1925  		}
  1926  	}
  1927  	if a.post != nil {
  1928  		if a.pre == nil {
  1929  			a.cur.replacer = replacer
  1930  			a.cur.parent = parent
  1931  			a.cur.node = node
  1932  		}
  1933  		if !a.post(&a.cur) {
  1934  			return false
  1935  		}
  1936  	}
  1937  	return true
  1938  }
  1939  func (a *application) rewriteRefOfCreateDatabase(parent SQLNode, node *CreateDatabase, replacer replacerFunc) bool {
  1940  	if node == nil {
  1941  		return true
  1942  	}
  1943  	if a.pre != nil {
  1944  		a.cur.replacer = replacer
  1945  		a.cur.parent = parent
  1946  		a.cur.node = node
  1947  		if !a.pre(&a.cur) {
  1948  			return true
  1949  		}
  1950  	}
  1951  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  1952  		parent.(*CreateDatabase).Comments = newNode.(*ParsedComments)
  1953  	}) {
  1954  		return false
  1955  	}
  1956  	if !a.rewriteIdentifierCS(node, node.DBName, func(newNode, parent SQLNode) {
  1957  		parent.(*CreateDatabase).DBName = newNode.(IdentifierCS)
  1958  	}) {
  1959  		return false
  1960  	}
  1961  	if a.post != nil {
  1962  		a.cur.replacer = replacer
  1963  		a.cur.parent = parent
  1964  		a.cur.node = node
  1965  		if !a.post(&a.cur) {
  1966  			return false
  1967  		}
  1968  	}
  1969  	return true
  1970  }
  1971  func (a *application) rewriteRefOfCreateTable(parent SQLNode, node *CreateTable, replacer replacerFunc) bool {
  1972  	if node == nil {
  1973  		return true
  1974  	}
  1975  	if a.pre != nil {
  1976  		a.cur.replacer = replacer
  1977  		a.cur.parent = parent
  1978  		a.cur.node = node
  1979  		if !a.pre(&a.cur) {
  1980  			return true
  1981  		}
  1982  	}
  1983  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  1984  		parent.(*CreateTable).Table = newNode.(TableName)
  1985  	}) {
  1986  		return false
  1987  	}
  1988  	if !a.rewriteRefOfTableSpec(node, node.TableSpec, func(newNode, parent SQLNode) {
  1989  		parent.(*CreateTable).TableSpec = newNode.(*TableSpec)
  1990  	}) {
  1991  		return false
  1992  	}
  1993  	if !a.rewriteRefOfOptLike(node, node.OptLike, func(newNode, parent SQLNode) {
  1994  		parent.(*CreateTable).OptLike = newNode.(*OptLike)
  1995  	}) {
  1996  		return false
  1997  	}
  1998  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  1999  		parent.(*CreateTable).Comments = newNode.(*ParsedComments)
  2000  	}) {
  2001  		return false
  2002  	}
  2003  	if a.post != nil {
  2004  		a.cur.replacer = replacer
  2005  		a.cur.parent = parent
  2006  		a.cur.node = node
  2007  		if !a.post(&a.cur) {
  2008  			return false
  2009  		}
  2010  	}
  2011  	return true
  2012  }
  2013  func (a *application) rewriteRefOfCreateView(parent SQLNode, node *CreateView, replacer replacerFunc) bool {
  2014  	if node == nil {
  2015  		return true
  2016  	}
  2017  	if a.pre != nil {
  2018  		a.cur.replacer = replacer
  2019  		a.cur.parent = parent
  2020  		a.cur.node = node
  2021  		if !a.pre(&a.cur) {
  2022  			return true
  2023  		}
  2024  	}
  2025  	if !a.rewriteTableName(node, node.ViewName, func(newNode, parent SQLNode) {
  2026  		parent.(*CreateView).ViewName = newNode.(TableName)
  2027  	}) {
  2028  		return false
  2029  	}
  2030  	if !a.rewriteRefOfDefiner(node, node.Definer, func(newNode, parent SQLNode) {
  2031  		parent.(*CreateView).Definer = newNode.(*Definer)
  2032  	}) {
  2033  		return false
  2034  	}
  2035  	if !a.rewriteColumns(node, node.Columns, func(newNode, parent SQLNode) {
  2036  		parent.(*CreateView).Columns = newNode.(Columns)
  2037  	}) {
  2038  		return false
  2039  	}
  2040  	if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) {
  2041  		parent.(*CreateView).Select = newNode.(SelectStatement)
  2042  	}) {
  2043  		return false
  2044  	}
  2045  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2046  		parent.(*CreateView).Comments = newNode.(*ParsedComments)
  2047  	}) {
  2048  		return false
  2049  	}
  2050  	if a.post != nil {
  2051  		a.cur.replacer = replacer
  2052  		a.cur.parent = parent
  2053  		a.cur.node = node
  2054  		if !a.post(&a.cur) {
  2055  			return false
  2056  		}
  2057  	}
  2058  	return true
  2059  }
  2060  func (a *application) rewriteRefOfCurTimeFuncExpr(parent SQLNode, node *CurTimeFuncExpr, replacer replacerFunc) bool {
  2061  	if node == nil {
  2062  		return true
  2063  	}
  2064  	if a.pre != nil {
  2065  		a.cur.replacer = replacer
  2066  		a.cur.parent = parent
  2067  		a.cur.node = node
  2068  		if !a.pre(&a.cur) {
  2069  			return true
  2070  		}
  2071  	}
  2072  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  2073  		parent.(*CurTimeFuncExpr).Name = newNode.(IdentifierCI)
  2074  	}) {
  2075  		return false
  2076  	}
  2077  	if !a.rewriteExpr(node, node.Fsp, func(newNode, parent SQLNode) {
  2078  		parent.(*CurTimeFuncExpr).Fsp = newNode.(Expr)
  2079  	}) {
  2080  		return false
  2081  	}
  2082  	if a.post != nil {
  2083  		a.cur.replacer = replacer
  2084  		a.cur.parent = parent
  2085  		a.cur.node = node
  2086  		if !a.post(&a.cur) {
  2087  			return false
  2088  		}
  2089  	}
  2090  	return true
  2091  }
  2092  func (a *application) rewriteRefOfDeallocateStmt(parent SQLNode, node *DeallocateStmt, replacer replacerFunc) bool {
  2093  	if node == nil {
  2094  		return true
  2095  	}
  2096  	if a.pre != nil {
  2097  		a.cur.replacer = replacer
  2098  		a.cur.parent = parent
  2099  		a.cur.node = node
  2100  		if !a.pre(&a.cur) {
  2101  			return true
  2102  		}
  2103  	}
  2104  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2105  		parent.(*DeallocateStmt).Comments = newNode.(*ParsedComments)
  2106  	}) {
  2107  		return false
  2108  	}
  2109  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  2110  		parent.(*DeallocateStmt).Name = newNode.(IdentifierCI)
  2111  	}) {
  2112  		return false
  2113  	}
  2114  	if a.post != nil {
  2115  		a.cur.replacer = replacer
  2116  		a.cur.parent = parent
  2117  		a.cur.node = node
  2118  		if !a.post(&a.cur) {
  2119  			return false
  2120  		}
  2121  	}
  2122  	return true
  2123  }
  2124  func (a *application) rewriteRefOfDefault(parent SQLNode, node *Default, replacer replacerFunc) bool {
  2125  	if node == nil {
  2126  		return true
  2127  	}
  2128  	if a.pre != nil {
  2129  		a.cur.replacer = replacer
  2130  		a.cur.parent = parent
  2131  		a.cur.node = node
  2132  		if !a.pre(&a.cur) {
  2133  			return true
  2134  		}
  2135  	}
  2136  	if a.post != nil {
  2137  		if a.pre == nil {
  2138  			a.cur.replacer = replacer
  2139  			a.cur.parent = parent
  2140  			a.cur.node = node
  2141  		}
  2142  		if !a.post(&a.cur) {
  2143  			return false
  2144  		}
  2145  	}
  2146  	return true
  2147  }
  2148  func (a *application) rewriteRefOfDefiner(parent SQLNode, node *Definer, replacer replacerFunc) bool {
  2149  	if node == nil {
  2150  		return true
  2151  	}
  2152  	if a.pre != nil {
  2153  		a.cur.replacer = replacer
  2154  		a.cur.parent = parent
  2155  		a.cur.node = node
  2156  		if !a.pre(&a.cur) {
  2157  			return true
  2158  		}
  2159  	}
  2160  	if a.post != nil {
  2161  		if a.pre == nil {
  2162  			a.cur.replacer = replacer
  2163  			a.cur.parent = parent
  2164  			a.cur.node = node
  2165  		}
  2166  		if !a.post(&a.cur) {
  2167  			return false
  2168  		}
  2169  	}
  2170  	return true
  2171  }
  2172  func (a *application) rewriteRefOfDelete(parent SQLNode, node *Delete, replacer replacerFunc) bool {
  2173  	if node == nil {
  2174  		return true
  2175  	}
  2176  	if a.pre != nil {
  2177  		a.cur.replacer = replacer
  2178  		a.cur.parent = parent
  2179  		a.cur.node = node
  2180  		if !a.pre(&a.cur) {
  2181  			return true
  2182  		}
  2183  	}
  2184  	if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) {
  2185  		parent.(*Delete).With = newNode.(*With)
  2186  	}) {
  2187  		return false
  2188  	}
  2189  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2190  		parent.(*Delete).Comments = newNode.(*ParsedComments)
  2191  	}) {
  2192  		return false
  2193  	}
  2194  	if !a.rewriteTableNames(node, node.Targets, func(newNode, parent SQLNode) {
  2195  		parent.(*Delete).Targets = newNode.(TableNames)
  2196  	}) {
  2197  		return false
  2198  	}
  2199  	if !a.rewriteTableExprs(node, node.TableExprs, func(newNode, parent SQLNode) {
  2200  		parent.(*Delete).TableExprs = newNode.(TableExprs)
  2201  	}) {
  2202  		return false
  2203  	}
  2204  	if !a.rewritePartitions(node, node.Partitions, func(newNode, parent SQLNode) {
  2205  		parent.(*Delete).Partitions = newNode.(Partitions)
  2206  	}) {
  2207  		return false
  2208  	}
  2209  	if !a.rewriteRefOfWhere(node, node.Where, func(newNode, parent SQLNode) {
  2210  		parent.(*Delete).Where = newNode.(*Where)
  2211  	}) {
  2212  		return false
  2213  	}
  2214  	if !a.rewriteOrderBy(node, node.OrderBy, func(newNode, parent SQLNode) {
  2215  		parent.(*Delete).OrderBy = newNode.(OrderBy)
  2216  	}) {
  2217  		return false
  2218  	}
  2219  	if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) {
  2220  		parent.(*Delete).Limit = newNode.(*Limit)
  2221  	}) {
  2222  		return false
  2223  	}
  2224  	if a.post != nil {
  2225  		a.cur.replacer = replacer
  2226  		a.cur.parent = parent
  2227  		a.cur.node = node
  2228  		if !a.post(&a.cur) {
  2229  			return false
  2230  		}
  2231  	}
  2232  	return true
  2233  }
  2234  func (a *application) rewriteRefOfDerivedTable(parent SQLNode, node *DerivedTable, replacer replacerFunc) bool {
  2235  	if node == nil {
  2236  		return true
  2237  	}
  2238  	if a.pre != nil {
  2239  		a.cur.replacer = replacer
  2240  		a.cur.parent = parent
  2241  		a.cur.node = node
  2242  		if !a.pre(&a.cur) {
  2243  			return true
  2244  		}
  2245  	}
  2246  	if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) {
  2247  		parent.(*DerivedTable).Select = newNode.(SelectStatement)
  2248  	}) {
  2249  		return false
  2250  	}
  2251  	if a.post != nil {
  2252  		a.cur.replacer = replacer
  2253  		a.cur.parent = parent
  2254  		a.cur.node = node
  2255  		if !a.post(&a.cur) {
  2256  			return false
  2257  		}
  2258  	}
  2259  	return true
  2260  }
  2261  func (a *application) rewriteRefOfDropColumn(parent SQLNode, node *DropColumn, replacer replacerFunc) bool {
  2262  	if node == nil {
  2263  		return true
  2264  	}
  2265  	if a.pre != nil {
  2266  		a.cur.replacer = replacer
  2267  		a.cur.parent = parent
  2268  		a.cur.node = node
  2269  		if !a.pre(&a.cur) {
  2270  			return true
  2271  		}
  2272  	}
  2273  	if !a.rewriteRefOfColName(node, node.Name, func(newNode, parent SQLNode) {
  2274  		parent.(*DropColumn).Name = newNode.(*ColName)
  2275  	}) {
  2276  		return false
  2277  	}
  2278  	if a.post != nil {
  2279  		a.cur.replacer = replacer
  2280  		a.cur.parent = parent
  2281  		a.cur.node = node
  2282  		if !a.post(&a.cur) {
  2283  			return false
  2284  		}
  2285  	}
  2286  	return true
  2287  }
  2288  func (a *application) rewriteRefOfDropDatabase(parent SQLNode, node *DropDatabase, replacer replacerFunc) bool {
  2289  	if node == nil {
  2290  		return true
  2291  	}
  2292  	if a.pre != nil {
  2293  		a.cur.replacer = replacer
  2294  		a.cur.parent = parent
  2295  		a.cur.node = node
  2296  		if !a.pre(&a.cur) {
  2297  			return true
  2298  		}
  2299  	}
  2300  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2301  		parent.(*DropDatabase).Comments = newNode.(*ParsedComments)
  2302  	}) {
  2303  		return false
  2304  	}
  2305  	if !a.rewriteIdentifierCS(node, node.DBName, func(newNode, parent SQLNode) {
  2306  		parent.(*DropDatabase).DBName = newNode.(IdentifierCS)
  2307  	}) {
  2308  		return false
  2309  	}
  2310  	if a.post != nil {
  2311  		a.cur.replacer = replacer
  2312  		a.cur.parent = parent
  2313  		a.cur.node = node
  2314  		if !a.post(&a.cur) {
  2315  			return false
  2316  		}
  2317  	}
  2318  	return true
  2319  }
  2320  func (a *application) rewriteRefOfDropKey(parent SQLNode, node *DropKey, replacer replacerFunc) bool {
  2321  	if node == nil {
  2322  		return true
  2323  	}
  2324  	if a.pre != nil {
  2325  		a.cur.replacer = replacer
  2326  		a.cur.parent = parent
  2327  		a.cur.node = node
  2328  		if !a.pre(&a.cur) {
  2329  			return true
  2330  		}
  2331  	}
  2332  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  2333  		parent.(*DropKey).Name = newNode.(IdentifierCI)
  2334  	}) {
  2335  		return false
  2336  	}
  2337  	if a.post != nil {
  2338  		a.cur.replacer = replacer
  2339  		a.cur.parent = parent
  2340  		a.cur.node = node
  2341  		if !a.post(&a.cur) {
  2342  			return false
  2343  		}
  2344  	}
  2345  	return true
  2346  }
  2347  func (a *application) rewriteRefOfDropTable(parent SQLNode, node *DropTable, replacer replacerFunc) bool {
  2348  	if node == nil {
  2349  		return true
  2350  	}
  2351  	if a.pre != nil {
  2352  		a.cur.replacer = replacer
  2353  		a.cur.parent = parent
  2354  		a.cur.node = node
  2355  		if !a.pre(&a.cur) {
  2356  			return true
  2357  		}
  2358  	}
  2359  	if !a.rewriteTableNames(node, node.FromTables, func(newNode, parent SQLNode) {
  2360  		parent.(*DropTable).FromTables = newNode.(TableNames)
  2361  	}) {
  2362  		return false
  2363  	}
  2364  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2365  		parent.(*DropTable).Comments = newNode.(*ParsedComments)
  2366  	}) {
  2367  		return false
  2368  	}
  2369  	if a.post != nil {
  2370  		a.cur.replacer = replacer
  2371  		a.cur.parent = parent
  2372  		a.cur.node = node
  2373  		if !a.post(&a.cur) {
  2374  			return false
  2375  		}
  2376  	}
  2377  	return true
  2378  }
  2379  func (a *application) rewriteRefOfDropView(parent SQLNode, node *DropView, replacer replacerFunc) bool {
  2380  	if node == nil {
  2381  		return true
  2382  	}
  2383  	if a.pre != nil {
  2384  		a.cur.replacer = replacer
  2385  		a.cur.parent = parent
  2386  		a.cur.node = node
  2387  		if !a.pre(&a.cur) {
  2388  			return true
  2389  		}
  2390  	}
  2391  	if !a.rewriteTableNames(node, node.FromTables, func(newNode, parent SQLNode) {
  2392  		parent.(*DropView).FromTables = newNode.(TableNames)
  2393  	}) {
  2394  		return false
  2395  	}
  2396  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2397  		parent.(*DropView).Comments = newNode.(*ParsedComments)
  2398  	}) {
  2399  		return false
  2400  	}
  2401  	if a.post != nil {
  2402  		a.cur.replacer = replacer
  2403  		a.cur.parent = parent
  2404  		a.cur.node = node
  2405  		if !a.post(&a.cur) {
  2406  			return false
  2407  		}
  2408  	}
  2409  	return true
  2410  }
  2411  func (a *application) rewriteRefOfExecuteStmt(parent SQLNode, node *ExecuteStmt, replacer replacerFunc) bool {
  2412  	if node == nil {
  2413  		return true
  2414  	}
  2415  	if a.pre != nil {
  2416  		a.cur.replacer = replacer
  2417  		a.cur.parent = parent
  2418  		a.cur.node = node
  2419  		if !a.pre(&a.cur) {
  2420  			return true
  2421  		}
  2422  	}
  2423  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  2424  		parent.(*ExecuteStmt).Name = newNode.(IdentifierCI)
  2425  	}) {
  2426  		return false
  2427  	}
  2428  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2429  		parent.(*ExecuteStmt).Comments = newNode.(*ParsedComments)
  2430  	}) {
  2431  		return false
  2432  	}
  2433  	for x, el := range node.Arguments {
  2434  		if !a.rewriteRefOfVariable(node, el, func(idx int) replacerFunc {
  2435  			return func(newNode, parent SQLNode) {
  2436  				parent.(*ExecuteStmt).Arguments[idx] = newNode.(*Variable)
  2437  			}
  2438  		}(x)) {
  2439  			return false
  2440  		}
  2441  	}
  2442  	if a.post != nil {
  2443  		a.cur.replacer = replacer
  2444  		a.cur.parent = parent
  2445  		a.cur.node = node
  2446  		if !a.post(&a.cur) {
  2447  			return false
  2448  		}
  2449  	}
  2450  	return true
  2451  }
  2452  func (a *application) rewriteRefOfExistsExpr(parent SQLNode, node *ExistsExpr, replacer replacerFunc) bool {
  2453  	if node == nil {
  2454  		return true
  2455  	}
  2456  	if a.pre != nil {
  2457  		a.cur.replacer = replacer
  2458  		a.cur.parent = parent
  2459  		a.cur.node = node
  2460  		if !a.pre(&a.cur) {
  2461  			return true
  2462  		}
  2463  	}
  2464  	if !a.rewriteRefOfSubquery(node, node.Subquery, func(newNode, parent SQLNode) {
  2465  		parent.(*ExistsExpr).Subquery = newNode.(*Subquery)
  2466  	}) {
  2467  		return false
  2468  	}
  2469  	if a.post != nil {
  2470  		a.cur.replacer = replacer
  2471  		a.cur.parent = parent
  2472  		a.cur.node = node
  2473  		if !a.post(&a.cur) {
  2474  			return false
  2475  		}
  2476  	}
  2477  	return true
  2478  }
  2479  func (a *application) rewriteRefOfExplainStmt(parent SQLNode, node *ExplainStmt, replacer replacerFunc) bool {
  2480  	if node == nil {
  2481  		return true
  2482  	}
  2483  	if a.pre != nil {
  2484  		a.cur.replacer = replacer
  2485  		a.cur.parent = parent
  2486  		a.cur.node = node
  2487  		if !a.pre(&a.cur) {
  2488  			return true
  2489  		}
  2490  	}
  2491  	if !a.rewriteStatement(node, node.Statement, func(newNode, parent SQLNode) {
  2492  		parent.(*ExplainStmt).Statement = newNode.(Statement)
  2493  	}) {
  2494  		return false
  2495  	}
  2496  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  2497  		parent.(*ExplainStmt).Comments = newNode.(*ParsedComments)
  2498  	}) {
  2499  		return false
  2500  	}
  2501  	if a.post != nil {
  2502  		a.cur.replacer = replacer
  2503  		a.cur.parent = parent
  2504  		a.cur.node = node
  2505  		if !a.post(&a.cur) {
  2506  			return false
  2507  		}
  2508  	}
  2509  	return true
  2510  }
  2511  func (a *application) rewriteRefOfExplainTab(parent SQLNode, node *ExplainTab, replacer replacerFunc) bool {
  2512  	if node == nil {
  2513  		return true
  2514  	}
  2515  	if a.pre != nil {
  2516  		a.cur.replacer = replacer
  2517  		a.cur.parent = parent
  2518  		a.cur.node = node
  2519  		if !a.pre(&a.cur) {
  2520  			return true
  2521  		}
  2522  	}
  2523  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  2524  		parent.(*ExplainTab).Table = newNode.(TableName)
  2525  	}) {
  2526  		return false
  2527  	}
  2528  	if a.post != nil {
  2529  		a.cur.replacer = replacer
  2530  		a.cur.parent = parent
  2531  		a.cur.node = node
  2532  		if !a.post(&a.cur) {
  2533  			return false
  2534  		}
  2535  	}
  2536  	return true
  2537  }
  2538  func (a *application) rewriteExprs(parent SQLNode, node Exprs, replacer replacerFunc) bool {
  2539  	if node == nil {
  2540  		return true
  2541  	}
  2542  	if a.pre != nil {
  2543  		a.cur.replacer = replacer
  2544  		a.cur.parent = parent
  2545  		a.cur.node = node
  2546  		kontinue := !a.pre(&a.cur)
  2547  		if a.cur.revisit {
  2548  			node = a.cur.node.(Exprs)
  2549  			a.cur.revisit = false
  2550  			return a.rewriteExprs(parent, node, replacer)
  2551  		}
  2552  		if kontinue {
  2553  			return true
  2554  		}
  2555  	}
  2556  	for x, el := range node {
  2557  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  2558  			return func(newNode, parent SQLNode) {
  2559  				parent.(Exprs)[idx] = newNode.(Expr)
  2560  			}
  2561  		}(x)) {
  2562  			return false
  2563  		}
  2564  	}
  2565  	if a.post != nil {
  2566  		a.cur.replacer = replacer
  2567  		a.cur.parent = parent
  2568  		a.cur.node = node
  2569  		if !a.post(&a.cur) {
  2570  			return false
  2571  		}
  2572  	}
  2573  	return true
  2574  }
  2575  func (a *application) rewriteRefOfExtractFuncExpr(parent SQLNode, node *ExtractFuncExpr, replacer replacerFunc) bool {
  2576  	if node == nil {
  2577  		return true
  2578  	}
  2579  	if a.pre != nil {
  2580  		a.cur.replacer = replacer
  2581  		a.cur.parent = parent
  2582  		a.cur.node = node
  2583  		if !a.pre(&a.cur) {
  2584  			return true
  2585  		}
  2586  	}
  2587  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  2588  		parent.(*ExtractFuncExpr).Expr = newNode.(Expr)
  2589  	}) {
  2590  		return false
  2591  	}
  2592  	if a.post != nil {
  2593  		a.cur.replacer = replacer
  2594  		a.cur.parent = parent
  2595  		a.cur.node = node
  2596  		if !a.post(&a.cur) {
  2597  			return false
  2598  		}
  2599  	}
  2600  	return true
  2601  }
  2602  func (a *application) rewriteRefOfExtractValueExpr(parent SQLNode, node *ExtractValueExpr, replacer replacerFunc) bool {
  2603  	if node == nil {
  2604  		return true
  2605  	}
  2606  	if a.pre != nil {
  2607  		a.cur.replacer = replacer
  2608  		a.cur.parent = parent
  2609  		a.cur.node = node
  2610  		if !a.pre(&a.cur) {
  2611  			return true
  2612  		}
  2613  	}
  2614  	if !a.rewriteExpr(node, node.Fragment, func(newNode, parent SQLNode) {
  2615  		parent.(*ExtractValueExpr).Fragment = newNode.(Expr)
  2616  	}) {
  2617  		return false
  2618  	}
  2619  	if !a.rewriteExpr(node, node.XPathExpr, func(newNode, parent SQLNode) {
  2620  		parent.(*ExtractValueExpr).XPathExpr = newNode.(Expr)
  2621  	}) {
  2622  		return false
  2623  	}
  2624  	if a.post != nil {
  2625  		a.cur.replacer = replacer
  2626  		a.cur.parent = parent
  2627  		a.cur.node = node
  2628  		if !a.post(&a.cur) {
  2629  			return false
  2630  		}
  2631  	}
  2632  	return true
  2633  }
  2634  func (a *application) rewriteRefOfExtractedSubquery(parent SQLNode, node *ExtractedSubquery, replacer replacerFunc) bool {
  2635  	if node == nil {
  2636  		return true
  2637  	}
  2638  	if a.pre != nil {
  2639  		a.cur.replacer = replacer
  2640  		a.cur.parent = parent
  2641  		a.cur.node = node
  2642  		if !a.pre(&a.cur) {
  2643  			return true
  2644  		}
  2645  	}
  2646  	if !a.rewriteExpr(node, node.Original, func(newNode, parent SQLNode) {
  2647  		parent.(*ExtractedSubquery).Original = newNode.(Expr)
  2648  	}) {
  2649  		return false
  2650  	}
  2651  	if !a.rewriteRefOfSubquery(node, node.Subquery, func(newNode, parent SQLNode) {
  2652  		parent.(*ExtractedSubquery).Subquery = newNode.(*Subquery)
  2653  	}) {
  2654  		return false
  2655  	}
  2656  	if !a.rewriteExpr(node, node.OtherSide, func(newNode, parent SQLNode) {
  2657  		parent.(*ExtractedSubquery).OtherSide = newNode.(Expr)
  2658  	}) {
  2659  		return false
  2660  	}
  2661  	if !a.rewriteExpr(node, node.alternative, func(newNode, parent SQLNode) {
  2662  		parent.(*ExtractedSubquery).alternative = newNode.(Expr)
  2663  	}) {
  2664  		return false
  2665  	}
  2666  	if a.post != nil {
  2667  		a.cur.replacer = replacer
  2668  		a.cur.parent = parent
  2669  		a.cur.node = node
  2670  		if !a.post(&a.cur) {
  2671  			return false
  2672  		}
  2673  	}
  2674  	return true
  2675  }
  2676  func (a *application) rewriteRefOfFirstOrLastValueExpr(parent SQLNode, node *FirstOrLastValueExpr, replacer replacerFunc) bool {
  2677  	if node == nil {
  2678  		return true
  2679  	}
  2680  	if a.pre != nil {
  2681  		a.cur.replacer = replacer
  2682  		a.cur.parent = parent
  2683  		a.cur.node = node
  2684  		if !a.pre(&a.cur) {
  2685  			return true
  2686  		}
  2687  	}
  2688  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  2689  		parent.(*FirstOrLastValueExpr).Expr = newNode.(Expr)
  2690  	}) {
  2691  		return false
  2692  	}
  2693  	if !a.rewriteRefOfNullTreatmentClause(node, node.NullTreatmentClause, func(newNode, parent SQLNode) {
  2694  		parent.(*FirstOrLastValueExpr).NullTreatmentClause = newNode.(*NullTreatmentClause)
  2695  	}) {
  2696  		return false
  2697  	}
  2698  	if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
  2699  		parent.(*FirstOrLastValueExpr).OverClause = newNode.(*OverClause)
  2700  	}) {
  2701  		return false
  2702  	}
  2703  	if a.post != nil {
  2704  		a.cur.replacer = replacer
  2705  		a.cur.parent = parent
  2706  		a.cur.node = node
  2707  		if !a.post(&a.cur) {
  2708  			return false
  2709  		}
  2710  	}
  2711  	return true
  2712  }
  2713  func (a *application) rewriteRefOfFlush(parent SQLNode, node *Flush, replacer replacerFunc) bool {
  2714  	if node == nil {
  2715  		return true
  2716  	}
  2717  	if a.pre != nil {
  2718  		a.cur.replacer = replacer
  2719  		a.cur.parent = parent
  2720  		a.cur.node = node
  2721  		if !a.pre(&a.cur) {
  2722  			return true
  2723  		}
  2724  	}
  2725  	if !a.rewriteTableNames(node, node.TableNames, func(newNode, parent SQLNode) {
  2726  		parent.(*Flush).TableNames = newNode.(TableNames)
  2727  	}) {
  2728  		return false
  2729  	}
  2730  	if a.post != nil {
  2731  		a.cur.replacer = replacer
  2732  		a.cur.parent = parent
  2733  		a.cur.node = node
  2734  		if !a.post(&a.cur) {
  2735  			return false
  2736  		}
  2737  	}
  2738  	return true
  2739  }
  2740  func (a *application) rewriteRefOfForce(parent SQLNode, node *Force, replacer replacerFunc) bool {
  2741  	if node == nil {
  2742  		return true
  2743  	}
  2744  	if a.pre != nil {
  2745  		a.cur.replacer = replacer
  2746  		a.cur.parent = parent
  2747  		a.cur.node = node
  2748  		if !a.pre(&a.cur) {
  2749  			return true
  2750  		}
  2751  	}
  2752  	if a.post != nil {
  2753  		if a.pre == nil {
  2754  			a.cur.replacer = replacer
  2755  			a.cur.parent = parent
  2756  			a.cur.node = node
  2757  		}
  2758  		if !a.post(&a.cur) {
  2759  			return false
  2760  		}
  2761  	}
  2762  	return true
  2763  }
  2764  func (a *application) rewriteRefOfForeignKeyDefinition(parent SQLNode, node *ForeignKeyDefinition, replacer replacerFunc) bool {
  2765  	if node == nil {
  2766  		return true
  2767  	}
  2768  	if a.pre != nil {
  2769  		a.cur.replacer = replacer
  2770  		a.cur.parent = parent
  2771  		a.cur.node = node
  2772  		if !a.pre(&a.cur) {
  2773  			return true
  2774  		}
  2775  	}
  2776  	if !a.rewriteColumns(node, node.Source, func(newNode, parent SQLNode) {
  2777  		parent.(*ForeignKeyDefinition).Source = newNode.(Columns)
  2778  	}) {
  2779  		return false
  2780  	}
  2781  	if !a.rewriteIdentifierCI(node, node.IndexName, func(newNode, parent SQLNode) {
  2782  		parent.(*ForeignKeyDefinition).IndexName = newNode.(IdentifierCI)
  2783  	}) {
  2784  		return false
  2785  	}
  2786  	if !a.rewriteRefOfReferenceDefinition(node, node.ReferenceDefinition, func(newNode, parent SQLNode) {
  2787  		parent.(*ForeignKeyDefinition).ReferenceDefinition = newNode.(*ReferenceDefinition)
  2788  	}) {
  2789  		return false
  2790  	}
  2791  	if a.post != nil {
  2792  		a.cur.replacer = replacer
  2793  		a.cur.parent = parent
  2794  		a.cur.node = node
  2795  		if !a.post(&a.cur) {
  2796  			return false
  2797  		}
  2798  	}
  2799  	return true
  2800  }
  2801  func (a *application) rewriteRefOfFrameClause(parent SQLNode, node *FrameClause, replacer replacerFunc) bool {
  2802  	if node == nil {
  2803  		return true
  2804  	}
  2805  	if a.pre != nil {
  2806  		a.cur.replacer = replacer
  2807  		a.cur.parent = parent
  2808  		a.cur.node = node
  2809  		if !a.pre(&a.cur) {
  2810  			return true
  2811  		}
  2812  	}
  2813  	if !a.rewriteRefOfFramePoint(node, node.Start, func(newNode, parent SQLNode) {
  2814  		parent.(*FrameClause).Start = newNode.(*FramePoint)
  2815  	}) {
  2816  		return false
  2817  	}
  2818  	if !a.rewriteRefOfFramePoint(node, node.End, func(newNode, parent SQLNode) {
  2819  		parent.(*FrameClause).End = newNode.(*FramePoint)
  2820  	}) {
  2821  		return false
  2822  	}
  2823  	if a.post != nil {
  2824  		a.cur.replacer = replacer
  2825  		a.cur.parent = parent
  2826  		a.cur.node = node
  2827  		if !a.post(&a.cur) {
  2828  			return false
  2829  		}
  2830  	}
  2831  	return true
  2832  }
  2833  func (a *application) rewriteRefOfFramePoint(parent SQLNode, node *FramePoint, replacer replacerFunc) bool {
  2834  	if node == nil {
  2835  		return true
  2836  	}
  2837  	if a.pre != nil {
  2838  		a.cur.replacer = replacer
  2839  		a.cur.parent = parent
  2840  		a.cur.node = node
  2841  		if !a.pre(&a.cur) {
  2842  			return true
  2843  		}
  2844  	}
  2845  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  2846  		parent.(*FramePoint).Expr = newNode.(Expr)
  2847  	}) {
  2848  		return false
  2849  	}
  2850  	if a.post != nil {
  2851  		a.cur.replacer = replacer
  2852  		a.cur.parent = parent
  2853  		a.cur.node = node
  2854  		if !a.post(&a.cur) {
  2855  			return false
  2856  		}
  2857  	}
  2858  	return true
  2859  }
  2860  func (a *application) rewriteRefOfFromFirstLastClause(parent SQLNode, node *FromFirstLastClause, replacer replacerFunc) bool {
  2861  	if node == nil {
  2862  		return true
  2863  	}
  2864  	if a.pre != nil {
  2865  		a.cur.replacer = replacer
  2866  		a.cur.parent = parent
  2867  		a.cur.node = node
  2868  		if !a.pre(&a.cur) {
  2869  			return true
  2870  		}
  2871  	}
  2872  	if a.post != nil {
  2873  		if a.pre == nil {
  2874  			a.cur.replacer = replacer
  2875  			a.cur.parent = parent
  2876  			a.cur.node = node
  2877  		}
  2878  		if !a.post(&a.cur) {
  2879  			return false
  2880  		}
  2881  	}
  2882  	return true
  2883  }
  2884  func (a *application) rewriteRefOfFuncExpr(parent SQLNode, node *FuncExpr, replacer replacerFunc) bool {
  2885  	if node == nil {
  2886  		return true
  2887  	}
  2888  	if a.pre != nil {
  2889  		a.cur.replacer = replacer
  2890  		a.cur.parent = parent
  2891  		a.cur.node = node
  2892  		if !a.pre(&a.cur) {
  2893  			return true
  2894  		}
  2895  	}
  2896  	if !a.rewriteIdentifierCS(node, node.Qualifier, func(newNode, parent SQLNode) {
  2897  		parent.(*FuncExpr).Qualifier = newNode.(IdentifierCS)
  2898  	}) {
  2899  		return false
  2900  	}
  2901  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  2902  		parent.(*FuncExpr).Name = newNode.(IdentifierCI)
  2903  	}) {
  2904  		return false
  2905  	}
  2906  	if !a.rewriteSelectExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  2907  		parent.(*FuncExpr).Exprs = newNode.(SelectExprs)
  2908  	}) {
  2909  		return false
  2910  	}
  2911  	if a.post != nil {
  2912  		a.cur.replacer = replacer
  2913  		a.cur.parent = parent
  2914  		a.cur.node = node
  2915  		if !a.post(&a.cur) {
  2916  			return false
  2917  		}
  2918  	}
  2919  	return true
  2920  }
  2921  func (a *application) rewriteRefOfGTIDFuncExpr(parent SQLNode, node *GTIDFuncExpr, replacer replacerFunc) bool {
  2922  	if node == nil {
  2923  		return true
  2924  	}
  2925  	if a.pre != nil {
  2926  		a.cur.replacer = replacer
  2927  		a.cur.parent = parent
  2928  		a.cur.node = node
  2929  		if !a.pre(&a.cur) {
  2930  			return true
  2931  		}
  2932  	}
  2933  	if !a.rewriteExpr(node, node.Set1, func(newNode, parent SQLNode) {
  2934  		parent.(*GTIDFuncExpr).Set1 = newNode.(Expr)
  2935  	}) {
  2936  		return false
  2937  	}
  2938  	if !a.rewriteExpr(node, node.Set2, func(newNode, parent SQLNode) {
  2939  		parent.(*GTIDFuncExpr).Set2 = newNode.(Expr)
  2940  	}) {
  2941  		return false
  2942  	}
  2943  	if !a.rewriteExpr(node, node.Timeout, func(newNode, parent SQLNode) {
  2944  		parent.(*GTIDFuncExpr).Timeout = newNode.(Expr)
  2945  	}) {
  2946  		return false
  2947  	}
  2948  	if !a.rewriteExpr(node, node.Channel, func(newNode, parent SQLNode) {
  2949  		parent.(*GTIDFuncExpr).Channel = newNode.(Expr)
  2950  	}) {
  2951  		return false
  2952  	}
  2953  	if a.post != nil {
  2954  		a.cur.replacer = replacer
  2955  		a.cur.parent = parent
  2956  		a.cur.node = node
  2957  		if !a.post(&a.cur) {
  2958  			return false
  2959  		}
  2960  	}
  2961  	return true
  2962  }
  2963  func (a *application) rewriteGroupBy(parent SQLNode, node GroupBy, replacer replacerFunc) bool {
  2964  	if node == nil {
  2965  		return true
  2966  	}
  2967  	if a.pre != nil {
  2968  		a.cur.replacer = replacer
  2969  		a.cur.parent = parent
  2970  		a.cur.node = node
  2971  		kontinue := !a.pre(&a.cur)
  2972  		if a.cur.revisit {
  2973  			node = a.cur.node.(GroupBy)
  2974  			a.cur.revisit = false
  2975  			return a.rewriteGroupBy(parent, node, replacer)
  2976  		}
  2977  		if kontinue {
  2978  			return true
  2979  		}
  2980  	}
  2981  	for x, el := range node {
  2982  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  2983  			return func(newNode, parent SQLNode) {
  2984  				parent.(GroupBy)[idx] = newNode.(Expr)
  2985  			}
  2986  		}(x)) {
  2987  			return false
  2988  		}
  2989  	}
  2990  	if a.post != nil {
  2991  		a.cur.replacer = replacer
  2992  		a.cur.parent = parent
  2993  		a.cur.node = node
  2994  		if !a.post(&a.cur) {
  2995  			return false
  2996  		}
  2997  	}
  2998  	return true
  2999  }
  3000  func (a *application) rewriteRefOfGroupConcatExpr(parent SQLNode, node *GroupConcatExpr, replacer replacerFunc) bool {
  3001  	if node == nil {
  3002  		return true
  3003  	}
  3004  	if a.pre != nil {
  3005  		a.cur.replacer = replacer
  3006  		a.cur.parent = parent
  3007  		a.cur.node = node
  3008  		if !a.pre(&a.cur) {
  3009  			return true
  3010  		}
  3011  	}
  3012  	if !a.rewriteExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  3013  		parent.(*GroupConcatExpr).Exprs = newNode.(Exprs)
  3014  	}) {
  3015  		return false
  3016  	}
  3017  	if !a.rewriteOrderBy(node, node.OrderBy, func(newNode, parent SQLNode) {
  3018  		parent.(*GroupConcatExpr).OrderBy = newNode.(OrderBy)
  3019  	}) {
  3020  		return false
  3021  	}
  3022  	if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) {
  3023  		parent.(*GroupConcatExpr).Limit = newNode.(*Limit)
  3024  	}) {
  3025  		return false
  3026  	}
  3027  	if a.post != nil {
  3028  		a.cur.replacer = replacer
  3029  		a.cur.parent = parent
  3030  		a.cur.node = node
  3031  		if !a.post(&a.cur) {
  3032  			return false
  3033  		}
  3034  	}
  3035  	return true
  3036  }
  3037  func (a *application) rewriteIdentifierCI(parent SQLNode, node IdentifierCI, replacer replacerFunc) bool {
  3038  	if a.pre != nil {
  3039  		a.cur.replacer = replacer
  3040  		a.cur.parent = parent
  3041  		a.cur.node = node
  3042  		if !a.pre(&a.cur) {
  3043  			return true
  3044  		}
  3045  	}
  3046  	if a.post != nil {
  3047  		if a.pre == nil {
  3048  			a.cur.replacer = replacer
  3049  			a.cur.parent = parent
  3050  			a.cur.node = node
  3051  		}
  3052  		if !a.post(&a.cur) {
  3053  			return false
  3054  		}
  3055  	}
  3056  	return true
  3057  }
  3058  func (a *application) rewriteIdentifierCS(parent SQLNode, node IdentifierCS, replacer replacerFunc) bool {
  3059  	if a.pre != nil {
  3060  		a.cur.replacer = replacer
  3061  		a.cur.parent = parent
  3062  		a.cur.node = node
  3063  		if !a.pre(&a.cur) {
  3064  			return true
  3065  		}
  3066  	}
  3067  	if a.post != nil {
  3068  		if a.pre == nil {
  3069  			a.cur.replacer = replacer
  3070  			a.cur.parent = parent
  3071  			a.cur.node = node
  3072  		}
  3073  		if !a.post(&a.cur) {
  3074  			return false
  3075  		}
  3076  	}
  3077  	return true
  3078  }
  3079  func (a *application) rewriteRefOfIndexDefinition(parent SQLNode, node *IndexDefinition, replacer replacerFunc) bool {
  3080  	if node == nil {
  3081  		return true
  3082  	}
  3083  	if a.pre != nil {
  3084  		a.cur.replacer = replacer
  3085  		a.cur.parent = parent
  3086  		a.cur.node = node
  3087  		if !a.pre(&a.cur) {
  3088  			return true
  3089  		}
  3090  	}
  3091  	if !a.rewriteRefOfIndexInfo(node, node.Info, func(newNode, parent SQLNode) {
  3092  		parent.(*IndexDefinition).Info = newNode.(*IndexInfo)
  3093  	}) {
  3094  		return false
  3095  	}
  3096  	if a.post != nil {
  3097  		a.cur.replacer = replacer
  3098  		a.cur.parent = parent
  3099  		a.cur.node = node
  3100  		if !a.post(&a.cur) {
  3101  			return false
  3102  		}
  3103  	}
  3104  	return true
  3105  }
  3106  func (a *application) rewriteRefOfIndexHint(parent SQLNode, node *IndexHint, replacer replacerFunc) bool {
  3107  	if node == nil {
  3108  		return true
  3109  	}
  3110  	if a.pre != nil {
  3111  		a.cur.replacer = replacer
  3112  		a.cur.parent = parent
  3113  		a.cur.node = node
  3114  		if !a.pre(&a.cur) {
  3115  			return true
  3116  		}
  3117  	}
  3118  	for x, el := range node.Indexes {
  3119  		if !a.rewriteIdentifierCI(node, el, func(idx int) replacerFunc {
  3120  			return func(newNode, parent SQLNode) {
  3121  				parent.(*IndexHint).Indexes[idx] = newNode.(IdentifierCI)
  3122  			}
  3123  		}(x)) {
  3124  			return false
  3125  		}
  3126  	}
  3127  	if a.post != nil {
  3128  		a.cur.replacer = replacer
  3129  		a.cur.parent = parent
  3130  		a.cur.node = node
  3131  		if !a.post(&a.cur) {
  3132  			return false
  3133  		}
  3134  	}
  3135  	return true
  3136  }
  3137  func (a *application) rewriteIndexHints(parent SQLNode, node IndexHints, replacer replacerFunc) bool {
  3138  	if node == nil {
  3139  		return true
  3140  	}
  3141  	if a.pre != nil {
  3142  		a.cur.replacer = replacer
  3143  		a.cur.parent = parent
  3144  		a.cur.node = node
  3145  		kontinue := !a.pre(&a.cur)
  3146  		if a.cur.revisit {
  3147  			node = a.cur.node.(IndexHints)
  3148  			a.cur.revisit = false
  3149  			return a.rewriteIndexHints(parent, node, replacer)
  3150  		}
  3151  		if kontinue {
  3152  			return true
  3153  		}
  3154  	}
  3155  	for x, el := range node {
  3156  		if !a.rewriteRefOfIndexHint(node, el, func(idx int) replacerFunc {
  3157  			return func(newNode, parent SQLNode) {
  3158  				parent.(IndexHints)[idx] = newNode.(*IndexHint)
  3159  			}
  3160  		}(x)) {
  3161  			return false
  3162  		}
  3163  	}
  3164  	if a.post != nil {
  3165  		a.cur.replacer = replacer
  3166  		a.cur.parent = parent
  3167  		a.cur.node = node
  3168  		if !a.post(&a.cur) {
  3169  			return false
  3170  		}
  3171  	}
  3172  	return true
  3173  }
  3174  func (a *application) rewriteRefOfIndexInfo(parent SQLNode, node *IndexInfo, replacer replacerFunc) bool {
  3175  	if node == nil {
  3176  		return true
  3177  	}
  3178  	if a.pre != nil {
  3179  		a.cur.replacer = replacer
  3180  		a.cur.parent = parent
  3181  		a.cur.node = node
  3182  		if !a.pre(&a.cur) {
  3183  			return true
  3184  		}
  3185  	}
  3186  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  3187  		parent.(*IndexInfo).Name = newNode.(IdentifierCI)
  3188  	}) {
  3189  		return false
  3190  	}
  3191  	if !a.rewriteIdentifierCI(node, node.ConstraintName, func(newNode, parent SQLNode) {
  3192  		parent.(*IndexInfo).ConstraintName = newNode.(IdentifierCI)
  3193  	}) {
  3194  		return false
  3195  	}
  3196  	if a.post != nil {
  3197  		a.cur.replacer = replacer
  3198  		a.cur.parent = parent
  3199  		a.cur.node = node
  3200  		if !a.post(&a.cur) {
  3201  			return false
  3202  		}
  3203  	}
  3204  	return true
  3205  }
  3206  func (a *application) rewriteRefOfInsert(parent SQLNode, node *Insert, replacer replacerFunc) bool {
  3207  	if node == nil {
  3208  		return true
  3209  	}
  3210  	if a.pre != nil {
  3211  		a.cur.replacer = replacer
  3212  		a.cur.parent = parent
  3213  		a.cur.node = node
  3214  		if !a.pre(&a.cur) {
  3215  			return true
  3216  		}
  3217  	}
  3218  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  3219  		parent.(*Insert).Comments = newNode.(*ParsedComments)
  3220  	}) {
  3221  		return false
  3222  	}
  3223  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  3224  		parent.(*Insert).Table = newNode.(TableName)
  3225  	}) {
  3226  		return false
  3227  	}
  3228  	if !a.rewritePartitions(node, node.Partitions, func(newNode, parent SQLNode) {
  3229  		parent.(*Insert).Partitions = newNode.(Partitions)
  3230  	}) {
  3231  		return false
  3232  	}
  3233  	if !a.rewriteColumns(node, node.Columns, func(newNode, parent SQLNode) {
  3234  		parent.(*Insert).Columns = newNode.(Columns)
  3235  	}) {
  3236  		return false
  3237  	}
  3238  	if !a.rewriteInsertRows(node, node.Rows, func(newNode, parent SQLNode) {
  3239  		parent.(*Insert).Rows = newNode.(InsertRows)
  3240  	}) {
  3241  		return false
  3242  	}
  3243  	if !a.rewriteOnDup(node, node.OnDup, func(newNode, parent SQLNode) {
  3244  		parent.(*Insert).OnDup = newNode.(OnDup)
  3245  	}) {
  3246  		return false
  3247  	}
  3248  	if a.post != nil {
  3249  		a.cur.replacer = replacer
  3250  		a.cur.parent = parent
  3251  		a.cur.node = node
  3252  		if !a.post(&a.cur) {
  3253  			return false
  3254  		}
  3255  	}
  3256  	return true
  3257  }
  3258  func (a *application) rewriteRefOfInsertExpr(parent SQLNode, node *InsertExpr, replacer replacerFunc) bool {
  3259  	if node == nil {
  3260  		return true
  3261  	}
  3262  	if a.pre != nil {
  3263  		a.cur.replacer = replacer
  3264  		a.cur.parent = parent
  3265  		a.cur.node = node
  3266  		if !a.pre(&a.cur) {
  3267  			return true
  3268  		}
  3269  	}
  3270  	if !a.rewriteExpr(node, node.Str, func(newNode, parent SQLNode) {
  3271  		parent.(*InsertExpr).Str = newNode.(Expr)
  3272  	}) {
  3273  		return false
  3274  	}
  3275  	if !a.rewriteExpr(node, node.Pos, func(newNode, parent SQLNode) {
  3276  		parent.(*InsertExpr).Pos = newNode.(Expr)
  3277  	}) {
  3278  		return false
  3279  	}
  3280  	if !a.rewriteExpr(node, node.Len, func(newNode, parent SQLNode) {
  3281  		parent.(*InsertExpr).Len = newNode.(Expr)
  3282  	}) {
  3283  		return false
  3284  	}
  3285  	if !a.rewriteExpr(node, node.NewStr, func(newNode, parent SQLNode) {
  3286  		parent.(*InsertExpr).NewStr = newNode.(Expr)
  3287  	}) {
  3288  		return false
  3289  	}
  3290  	if a.post != nil {
  3291  		a.cur.replacer = replacer
  3292  		a.cur.parent = parent
  3293  		a.cur.node = node
  3294  		if !a.post(&a.cur) {
  3295  			return false
  3296  		}
  3297  	}
  3298  	return true
  3299  }
  3300  func (a *application) rewriteRefOfIntervalExpr(parent SQLNode, node *IntervalExpr, replacer replacerFunc) bool {
  3301  	if node == nil {
  3302  		return true
  3303  	}
  3304  	if a.pre != nil {
  3305  		a.cur.replacer = replacer
  3306  		a.cur.parent = parent
  3307  		a.cur.node = node
  3308  		if !a.pre(&a.cur) {
  3309  			return true
  3310  		}
  3311  	}
  3312  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  3313  		parent.(*IntervalExpr).Expr = newNode.(Expr)
  3314  	}) {
  3315  		return false
  3316  	}
  3317  	if a.post != nil {
  3318  		a.cur.replacer = replacer
  3319  		a.cur.parent = parent
  3320  		a.cur.node = node
  3321  		if !a.post(&a.cur) {
  3322  			return false
  3323  		}
  3324  	}
  3325  	return true
  3326  }
  3327  func (a *application) rewriteRefOfIntervalFuncExpr(parent SQLNode, node *IntervalFuncExpr, replacer replacerFunc) bool {
  3328  	if node == nil {
  3329  		return true
  3330  	}
  3331  	if a.pre != nil {
  3332  		a.cur.replacer = replacer
  3333  		a.cur.parent = parent
  3334  		a.cur.node = node
  3335  		if !a.pre(&a.cur) {
  3336  			return true
  3337  		}
  3338  	}
  3339  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  3340  		parent.(*IntervalFuncExpr).Expr = newNode.(Expr)
  3341  	}) {
  3342  		return false
  3343  	}
  3344  	if !a.rewriteExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  3345  		parent.(*IntervalFuncExpr).Exprs = newNode.(Exprs)
  3346  	}) {
  3347  		return false
  3348  	}
  3349  	if a.post != nil {
  3350  		a.cur.replacer = replacer
  3351  		a.cur.parent = parent
  3352  		a.cur.node = node
  3353  		if !a.post(&a.cur) {
  3354  			return false
  3355  		}
  3356  	}
  3357  	return true
  3358  }
  3359  func (a *application) rewriteRefOfIntroducerExpr(parent SQLNode, node *IntroducerExpr, replacer replacerFunc) bool {
  3360  	if node == nil {
  3361  		return true
  3362  	}
  3363  	if a.pre != nil {
  3364  		a.cur.replacer = replacer
  3365  		a.cur.parent = parent
  3366  		a.cur.node = node
  3367  		if !a.pre(&a.cur) {
  3368  			return true
  3369  		}
  3370  	}
  3371  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  3372  		parent.(*IntroducerExpr).Expr = newNode.(Expr)
  3373  	}) {
  3374  		return false
  3375  	}
  3376  	if a.post != nil {
  3377  		a.cur.replacer = replacer
  3378  		a.cur.parent = parent
  3379  		a.cur.node = node
  3380  		if !a.post(&a.cur) {
  3381  			return false
  3382  		}
  3383  	}
  3384  	return true
  3385  }
  3386  func (a *application) rewriteRefOfIsExpr(parent SQLNode, node *IsExpr, replacer replacerFunc) bool {
  3387  	if node == nil {
  3388  		return true
  3389  	}
  3390  	if a.pre != nil {
  3391  		a.cur.replacer = replacer
  3392  		a.cur.parent = parent
  3393  		a.cur.node = node
  3394  		if !a.pre(&a.cur) {
  3395  			return true
  3396  		}
  3397  	}
  3398  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  3399  		parent.(*IsExpr).Left = newNode.(Expr)
  3400  	}) {
  3401  		return false
  3402  	}
  3403  	if a.post != nil {
  3404  		a.cur.replacer = replacer
  3405  		a.cur.parent = parent
  3406  		a.cur.node = node
  3407  		if !a.post(&a.cur) {
  3408  			return false
  3409  		}
  3410  	}
  3411  	return true
  3412  }
  3413  func (a *application) rewriteRefOfJSONArrayExpr(parent SQLNode, node *JSONArrayExpr, replacer replacerFunc) bool {
  3414  	if node == nil {
  3415  		return true
  3416  	}
  3417  	if a.pre != nil {
  3418  		a.cur.replacer = replacer
  3419  		a.cur.parent = parent
  3420  		a.cur.node = node
  3421  		if !a.pre(&a.cur) {
  3422  			return true
  3423  		}
  3424  	}
  3425  	if !a.rewriteExprs(node, node.Params, func(newNode, parent SQLNode) {
  3426  		parent.(*JSONArrayExpr).Params = newNode.(Exprs)
  3427  	}) {
  3428  		return false
  3429  	}
  3430  	if a.post != nil {
  3431  		a.cur.replacer = replacer
  3432  		a.cur.parent = parent
  3433  		a.cur.node = node
  3434  		if !a.post(&a.cur) {
  3435  			return false
  3436  		}
  3437  	}
  3438  	return true
  3439  }
  3440  func (a *application) rewriteRefOfJSONAttributesExpr(parent SQLNode, node *JSONAttributesExpr, replacer replacerFunc) bool {
  3441  	if node == nil {
  3442  		return true
  3443  	}
  3444  	if a.pre != nil {
  3445  		a.cur.replacer = replacer
  3446  		a.cur.parent = parent
  3447  		a.cur.node = node
  3448  		if !a.pre(&a.cur) {
  3449  			return true
  3450  		}
  3451  	}
  3452  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  3453  		parent.(*JSONAttributesExpr).JSONDoc = newNode.(Expr)
  3454  	}) {
  3455  		return false
  3456  	}
  3457  	if !a.rewriteExpr(node, node.Path, func(newNode, parent SQLNode) {
  3458  		parent.(*JSONAttributesExpr).Path = newNode.(Expr)
  3459  	}) {
  3460  		return false
  3461  	}
  3462  	if a.post != nil {
  3463  		a.cur.replacer = replacer
  3464  		a.cur.parent = parent
  3465  		a.cur.node = node
  3466  		if !a.post(&a.cur) {
  3467  			return false
  3468  		}
  3469  	}
  3470  	return true
  3471  }
  3472  func (a *application) rewriteRefOfJSONContainsExpr(parent SQLNode, node *JSONContainsExpr, replacer replacerFunc) bool {
  3473  	if node == nil {
  3474  		return true
  3475  	}
  3476  	if a.pre != nil {
  3477  		a.cur.replacer = replacer
  3478  		a.cur.parent = parent
  3479  		a.cur.node = node
  3480  		if !a.pre(&a.cur) {
  3481  			return true
  3482  		}
  3483  	}
  3484  	if !a.rewriteExpr(node, node.Target, func(newNode, parent SQLNode) {
  3485  		parent.(*JSONContainsExpr).Target = newNode.(Expr)
  3486  	}) {
  3487  		return false
  3488  	}
  3489  	if !a.rewriteExpr(node, node.Candidate, func(newNode, parent SQLNode) {
  3490  		parent.(*JSONContainsExpr).Candidate = newNode.(Expr)
  3491  	}) {
  3492  		return false
  3493  	}
  3494  	for x, el := range node.PathList {
  3495  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  3496  			return func(newNode, parent SQLNode) {
  3497  				parent.(*JSONContainsExpr).PathList[idx] = newNode.(Expr)
  3498  			}
  3499  		}(x)) {
  3500  			return false
  3501  		}
  3502  	}
  3503  	if a.post != nil {
  3504  		a.cur.replacer = replacer
  3505  		a.cur.parent = parent
  3506  		a.cur.node = node
  3507  		if !a.post(&a.cur) {
  3508  			return false
  3509  		}
  3510  	}
  3511  	return true
  3512  }
  3513  func (a *application) rewriteRefOfJSONContainsPathExpr(parent SQLNode, node *JSONContainsPathExpr, replacer replacerFunc) bool {
  3514  	if node == nil {
  3515  		return true
  3516  	}
  3517  	if a.pre != nil {
  3518  		a.cur.replacer = replacer
  3519  		a.cur.parent = parent
  3520  		a.cur.node = node
  3521  		if !a.pre(&a.cur) {
  3522  			return true
  3523  		}
  3524  	}
  3525  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  3526  		parent.(*JSONContainsPathExpr).JSONDoc = newNode.(Expr)
  3527  	}) {
  3528  		return false
  3529  	}
  3530  	if !a.rewriteExpr(node, node.OneOrAll, func(newNode, parent SQLNode) {
  3531  		parent.(*JSONContainsPathExpr).OneOrAll = newNode.(Expr)
  3532  	}) {
  3533  		return false
  3534  	}
  3535  	for x, el := range node.PathList {
  3536  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  3537  			return func(newNode, parent SQLNode) {
  3538  				parent.(*JSONContainsPathExpr).PathList[idx] = newNode.(Expr)
  3539  			}
  3540  		}(x)) {
  3541  			return false
  3542  		}
  3543  	}
  3544  	if a.post != nil {
  3545  		a.cur.replacer = replacer
  3546  		a.cur.parent = parent
  3547  		a.cur.node = node
  3548  		if !a.post(&a.cur) {
  3549  			return false
  3550  		}
  3551  	}
  3552  	return true
  3553  }
  3554  func (a *application) rewriteRefOfJSONExtractExpr(parent SQLNode, node *JSONExtractExpr, replacer replacerFunc) bool {
  3555  	if node == nil {
  3556  		return true
  3557  	}
  3558  	if a.pre != nil {
  3559  		a.cur.replacer = replacer
  3560  		a.cur.parent = parent
  3561  		a.cur.node = node
  3562  		if !a.pre(&a.cur) {
  3563  			return true
  3564  		}
  3565  	}
  3566  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  3567  		parent.(*JSONExtractExpr).JSONDoc = newNode.(Expr)
  3568  	}) {
  3569  		return false
  3570  	}
  3571  	for x, el := range node.PathList {
  3572  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  3573  			return func(newNode, parent SQLNode) {
  3574  				parent.(*JSONExtractExpr).PathList[idx] = newNode.(Expr)
  3575  			}
  3576  		}(x)) {
  3577  			return false
  3578  		}
  3579  	}
  3580  	if a.post != nil {
  3581  		a.cur.replacer = replacer
  3582  		a.cur.parent = parent
  3583  		a.cur.node = node
  3584  		if !a.post(&a.cur) {
  3585  			return false
  3586  		}
  3587  	}
  3588  	return true
  3589  }
  3590  func (a *application) rewriteRefOfJSONKeysExpr(parent SQLNode, node *JSONKeysExpr, replacer replacerFunc) bool {
  3591  	if node == nil {
  3592  		return true
  3593  	}
  3594  	if a.pre != nil {
  3595  		a.cur.replacer = replacer
  3596  		a.cur.parent = parent
  3597  		a.cur.node = node
  3598  		if !a.pre(&a.cur) {
  3599  			return true
  3600  		}
  3601  	}
  3602  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  3603  		parent.(*JSONKeysExpr).JSONDoc = newNode.(Expr)
  3604  	}) {
  3605  		return false
  3606  	}
  3607  	if !a.rewriteExpr(node, node.Path, func(newNode, parent SQLNode) {
  3608  		parent.(*JSONKeysExpr).Path = newNode.(Expr)
  3609  	}) {
  3610  		return false
  3611  	}
  3612  	if a.post != nil {
  3613  		a.cur.replacer = replacer
  3614  		a.cur.parent = parent
  3615  		a.cur.node = node
  3616  		if !a.post(&a.cur) {
  3617  			return false
  3618  		}
  3619  	}
  3620  	return true
  3621  }
  3622  func (a *application) rewriteRefOfJSONObjectExpr(parent SQLNode, node *JSONObjectExpr, replacer replacerFunc) bool {
  3623  	if node == nil {
  3624  		return true
  3625  	}
  3626  	if a.pre != nil {
  3627  		a.cur.replacer = replacer
  3628  		a.cur.parent = parent
  3629  		a.cur.node = node
  3630  		if !a.pre(&a.cur) {
  3631  			return true
  3632  		}
  3633  	}
  3634  	for x, el := range node.Params {
  3635  		if !a.rewriteRefOfJSONObjectParam(node, el, func(idx int) replacerFunc {
  3636  			return func(newNode, parent SQLNode) {
  3637  				parent.(*JSONObjectExpr).Params[idx] = newNode.(*JSONObjectParam)
  3638  			}
  3639  		}(x)) {
  3640  			return false
  3641  		}
  3642  	}
  3643  	if a.post != nil {
  3644  		a.cur.replacer = replacer
  3645  		a.cur.parent = parent
  3646  		a.cur.node = node
  3647  		if !a.post(&a.cur) {
  3648  			return false
  3649  		}
  3650  	}
  3651  	return true
  3652  }
  3653  func (a *application) rewriteRefOfJSONObjectParam(parent SQLNode, node *JSONObjectParam, replacer replacerFunc) bool {
  3654  	if node == nil {
  3655  		return true
  3656  	}
  3657  	if a.pre != nil {
  3658  		a.cur.replacer = replacer
  3659  		a.cur.parent = parent
  3660  		a.cur.node = node
  3661  		if !a.pre(&a.cur) {
  3662  			return true
  3663  		}
  3664  	}
  3665  	if !a.rewriteExpr(node, node.Key, func(newNode, parent SQLNode) {
  3666  		parent.(*JSONObjectParam).Key = newNode.(Expr)
  3667  	}) {
  3668  		return false
  3669  	}
  3670  	if !a.rewriteExpr(node, node.Value, func(newNode, parent SQLNode) {
  3671  		parent.(*JSONObjectParam).Value = newNode.(Expr)
  3672  	}) {
  3673  		return false
  3674  	}
  3675  	if a.post != nil {
  3676  		a.cur.replacer = replacer
  3677  		a.cur.parent = parent
  3678  		a.cur.node = node
  3679  		if !a.post(&a.cur) {
  3680  			return false
  3681  		}
  3682  	}
  3683  	return true
  3684  }
  3685  func (a *application) rewriteRefOfJSONOverlapsExpr(parent SQLNode, node *JSONOverlapsExpr, replacer replacerFunc) bool {
  3686  	if node == nil {
  3687  		return true
  3688  	}
  3689  	if a.pre != nil {
  3690  		a.cur.replacer = replacer
  3691  		a.cur.parent = parent
  3692  		a.cur.node = node
  3693  		if !a.pre(&a.cur) {
  3694  			return true
  3695  		}
  3696  	}
  3697  	if !a.rewriteExpr(node, node.JSONDoc1, func(newNode, parent SQLNode) {
  3698  		parent.(*JSONOverlapsExpr).JSONDoc1 = newNode.(Expr)
  3699  	}) {
  3700  		return false
  3701  	}
  3702  	if !a.rewriteExpr(node, node.JSONDoc2, func(newNode, parent SQLNode) {
  3703  		parent.(*JSONOverlapsExpr).JSONDoc2 = newNode.(Expr)
  3704  	}) {
  3705  		return false
  3706  	}
  3707  	if a.post != nil {
  3708  		a.cur.replacer = replacer
  3709  		a.cur.parent = parent
  3710  		a.cur.node = node
  3711  		if !a.post(&a.cur) {
  3712  			return false
  3713  		}
  3714  	}
  3715  	return true
  3716  }
  3717  func (a *application) rewriteRefOfJSONPrettyExpr(parent SQLNode, node *JSONPrettyExpr, replacer replacerFunc) bool {
  3718  	if node == nil {
  3719  		return true
  3720  	}
  3721  	if a.pre != nil {
  3722  		a.cur.replacer = replacer
  3723  		a.cur.parent = parent
  3724  		a.cur.node = node
  3725  		if !a.pre(&a.cur) {
  3726  			return true
  3727  		}
  3728  	}
  3729  	if !a.rewriteExpr(node, node.JSONVal, func(newNode, parent SQLNode) {
  3730  		parent.(*JSONPrettyExpr).JSONVal = newNode.(Expr)
  3731  	}) {
  3732  		return false
  3733  	}
  3734  	if a.post != nil {
  3735  		a.cur.replacer = replacer
  3736  		a.cur.parent = parent
  3737  		a.cur.node = node
  3738  		if !a.post(&a.cur) {
  3739  			return false
  3740  		}
  3741  	}
  3742  	return true
  3743  }
  3744  func (a *application) rewriteRefOfJSONQuoteExpr(parent SQLNode, node *JSONQuoteExpr, replacer replacerFunc) bool {
  3745  	if node == nil {
  3746  		return true
  3747  	}
  3748  	if a.pre != nil {
  3749  		a.cur.replacer = replacer
  3750  		a.cur.parent = parent
  3751  		a.cur.node = node
  3752  		if !a.pre(&a.cur) {
  3753  			return true
  3754  		}
  3755  	}
  3756  	if !a.rewriteExpr(node, node.StringArg, func(newNode, parent SQLNode) {
  3757  		parent.(*JSONQuoteExpr).StringArg = newNode.(Expr)
  3758  	}) {
  3759  		return false
  3760  	}
  3761  	if a.post != nil {
  3762  		a.cur.replacer = replacer
  3763  		a.cur.parent = parent
  3764  		a.cur.node = node
  3765  		if !a.post(&a.cur) {
  3766  			return false
  3767  		}
  3768  	}
  3769  	return true
  3770  }
  3771  func (a *application) rewriteRefOfJSONRemoveExpr(parent SQLNode, node *JSONRemoveExpr, replacer replacerFunc) bool {
  3772  	if node == nil {
  3773  		return true
  3774  	}
  3775  	if a.pre != nil {
  3776  		a.cur.replacer = replacer
  3777  		a.cur.parent = parent
  3778  		a.cur.node = node
  3779  		if !a.pre(&a.cur) {
  3780  			return true
  3781  		}
  3782  	}
  3783  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  3784  		parent.(*JSONRemoveExpr).JSONDoc = newNode.(Expr)
  3785  	}) {
  3786  		return false
  3787  	}
  3788  	if !a.rewriteExprs(node, node.PathList, func(newNode, parent SQLNode) {
  3789  		parent.(*JSONRemoveExpr).PathList = newNode.(Exprs)
  3790  	}) {
  3791  		return false
  3792  	}
  3793  	if a.post != nil {
  3794  		a.cur.replacer = replacer
  3795  		a.cur.parent = parent
  3796  		a.cur.node = node
  3797  		if !a.post(&a.cur) {
  3798  			return false
  3799  		}
  3800  	}
  3801  	return true
  3802  }
  3803  func (a *application) rewriteRefOfJSONSchemaValidFuncExpr(parent SQLNode, node *JSONSchemaValidFuncExpr, replacer replacerFunc) bool {
  3804  	if node == nil {
  3805  		return true
  3806  	}
  3807  	if a.pre != nil {
  3808  		a.cur.replacer = replacer
  3809  		a.cur.parent = parent
  3810  		a.cur.node = node
  3811  		if !a.pre(&a.cur) {
  3812  			return true
  3813  		}
  3814  	}
  3815  	if !a.rewriteExpr(node, node.Schema, func(newNode, parent SQLNode) {
  3816  		parent.(*JSONSchemaValidFuncExpr).Schema = newNode.(Expr)
  3817  	}) {
  3818  		return false
  3819  	}
  3820  	if !a.rewriteExpr(node, node.Document, func(newNode, parent SQLNode) {
  3821  		parent.(*JSONSchemaValidFuncExpr).Document = newNode.(Expr)
  3822  	}) {
  3823  		return false
  3824  	}
  3825  	if a.post != nil {
  3826  		a.cur.replacer = replacer
  3827  		a.cur.parent = parent
  3828  		a.cur.node = node
  3829  		if !a.post(&a.cur) {
  3830  			return false
  3831  		}
  3832  	}
  3833  	return true
  3834  }
  3835  func (a *application) rewriteRefOfJSONSchemaValidationReportFuncExpr(parent SQLNode, node *JSONSchemaValidationReportFuncExpr, replacer replacerFunc) bool {
  3836  	if node == nil {
  3837  		return true
  3838  	}
  3839  	if a.pre != nil {
  3840  		a.cur.replacer = replacer
  3841  		a.cur.parent = parent
  3842  		a.cur.node = node
  3843  		if !a.pre(&a.cur) {
  3844  			return true
  3845  		}
  3846  	}
  3847  	if !a.rewriteExpr(node, node.Schema, func(newNode, parent SQLNode) {
  3848  		parent.(*JSONSchemaValidationReportFuncExpr).Schema = newNode.(Expr)
  3849  	}) {
  3850  		return false
  3851  	}
  3852  	if !a.rewriteExpr(node, node.Document, func(newNode, parent SQLNode) {
  3853  		parent.(*JSONSchemaValidationReportFuncExpr).Document = newNode.(Expr)
  3854  	}) {
  3855  		return false
  3856  	}
  3857  	if a.post != nil {
  3858  		a.cur.replacer = replacer
  3859  		a.cur.parent = parent
  3860  		a.cur.node = node
  3861  		if !a.post(&a.cur) {
  3862  			return false
  3863  		}
  3864  	}
  3865  	return true
  3866  }
  3867  func (a *application) rewriteRefOfJSONSearchExpr(parent SQLNode, node *JSONSearchExpr, replacer replacerFunc) bool {
  3868  	if node == nil {
  3869  		return true
  3870  	}
  3871  	if a.pre != nil {
  3872  		a.cur.replacer = replacer
  3873  		a.cur.parent = parent
  3874  		a.cur.node = node
  3875  		if !a.pre(&a.cur) {
  3876  			return true
  3877  		}
  3878  	}
  3879  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  3880  		parent.(*JSONSearchExpr).JSONDoc = newNode.(Expr)
  3881  	}) {
  3882  		return false
  3883  	}
  3884  	if !a.rewriteExpr(node, node.OneOrAll, func(newNode, parent SQLNode) {
  3885  		parent.(*JSONSearchExpr).OneOrAll = newNode.(Expr)
  3886  	}) {
  3887  		return false
  3888  	}
  3889  	if !a.rewriteExpr(node, node.SearchStr, func(newNode, parent SQLNode) {
  3890  		parent.(*JSONSearchExpr).SearchStr = newNode.(Expr)
  3891  	}) {
  3892  		return false
  3893  	}
  3894  	if !a.rewriteExpr(node, node.EscapeChar, func(newNode, parent SQLNode) {
  3895  		parent.(*JSONSearchExpr).EscapeChar = newNode.(Expr)
  3896  	}) {
  3897  		return false
  3898  	}
  3899  	for x, el := range node.PathList {
  3900  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  3901  			return func(newNode, parent SQLNode) {
  3902  				parent.(*JSONSearchExpr).PathList[idx] = newNode.(Expr)
  3903  			}
  3904  		}(x)) {
  3905  			return false
  3906  		}
  3907  	}
  3908  	if a.post != nil {
  3909  		a.cur.replacer = replacer
  3910  		a.cur.parent = parent
  3911  		a.cur.node = node
  3912  		if !a.post(&a.cur) {
  3913  			return false
  3914  		}
  3915  	}
  3916  	return true
  3917  }
  3918  func (a *application) rewriteRefOfJSONStorageFreeExpr(parent SQLNode, node *JSONStorageFreeExpr, replacer replacerFunc) bool {
  3919  	if node == nil {
  3920  		return true
  3921  	}
  3922  	if a.pre != nil {
  3923  		a.cur.replacer = replacer
  3924  		a.cur.parent = parent
  3925  		a.cur.node = node
  3926  		if !a.pre(&a.cur) {
  3927  			return true
  3928  		}
  3929  	}
  3930  	if !a.rewriteExpr(node, node.JSONVal, func(newNode, parent SQLNode) {
  3931  		parent.(*JSONStorageFreeExpr).JSONVal = newNode.(Expr)
  3932  	}) {
  3933  		return false
  3934  	}
  3935  	if a.post != nil {
  3936  		a.cur.replacer = replacer
  3937  		a.cur.parent = parent
  3938  		a.cur.node = node
  3939  		if !a.post(&a.cur) {
  3940  			return false
  3941  		}
  3942  	}
  3943  	return true
  3944  }
  3945  func (a *application) rewriteRefOfJSONStorageSizeExpr(parent SQLNode, node *JSONStorageSizeExpr, replacer replacerFunc) bool {
  3946  	if node == nil {
  3947  		return true
  3948  	}
  3949  	if a.pre != nil {
  3950  		a.cur.replacer = replacer
  3951  		a.cur.parent = parent
  3952  		a.cur.node = node
  3953  		if !a.pre(&a.cur) {
  3954  			return true
  3955  		}
  3956  	}
  3957  	if !a.rewriteExpr(node, node.JSONVal, func(newNode, parent SQLNode) {
  3958  		parent.(*JSONStorageSizeExpr).JSONVal = newNode.(Expr)
  3959  	}) {
  3960  		return false
  3961  	}
  3962  	if a.post != nil {
  3963  		a.cur.replacer = replacer
  3964  		a.cur.parent = parent
  3965  		a.cur.node = node
  3966  		if !a.post(&a.cur) {
  3967  			return false
  3968  		}
  3969  	}
  3970  	return true
  3971  }
  3972  func (a *application) rewriteRefOfJSONTableExpr(parent SQLNode, node *JSONTableExpr, replacer replacerFunc) bool {
  3973  	if node == nil {
  3974  		return true
  3975  	}
  3976  	if a.pre != nil {
  3977  		a.cur.replacer = replacer
  3978  		a.cur.parent = parent
  3979  		a.cur.node = node
  3980  		if !a.pre(&a.cur) {
  3981  			return true
  3982  		}
  3983  	}
  3984  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  3985  		parent.(*JSONTableExpr).Expr = newNode.(Expr)
  3986  	}) {
  3987  		return false
  3988  	}
  3989  	if !a.rewriteIdentifierCS(node, node.Alias, func(newNode, parent SQLNode) {
  3990  		parent.(*JSONTableExpr).Alias = newNode.(IdentifierCS)
  3991  	}) {
  3992  		return false
  3993  	}
  3994  	if !a.rewriteExpr(node, node.Filter, func(newNode, parent SQLNode) {
  3995  		parent.(*JSONTableExpr).Filter = newNode.(Expr)
  3996  	}) {
  3997  		return false
  3998  	}
  3999  	for x, el := range node.Columns {
  4000  		if !a.rewriteRefOfJtColumnDefinition(node, el, func(idx int) replacerFunc {
  4001  			return func(newNode, parent SQLNode) {
  4002  				parent.(*JSONTableExpr).Columns[idx] = newNode.(*JtColumnDefinition)
  4003  			}
  4004  		}(x)) {
  4005  			return false
  4006  		}
  4007  	}
  4008  	if a.post != nil {
  4009  		a.cur.replacer = replacer
  4010  		a.cur.parent = parent
  4011  		a.cur.node = node
  4012  		if !a.post(&a.cur) {
  4013  			return false
  4014  		}
  4015  	}
  4016  	return true
  4017  }
  4018  func (a *application) rewriteRefOfJSONUnquoteExpr(parent SQLNode, node *JSONUnquoteExpr, replacer replacerFunc) bool {
  4019  	if node == nil {
  4020  		return true
  4021  	}
  4022  	if a.pre != nil {
  4023  		a.cur.replacer = replacer
  4024  		a.cur.parent = parent
  4025  		a.cur.node = node
  4026  		if !a.pre(&a.cur) {
  4027  			return true
  4028  		}
  4029  	}
  4030  	if !a.rewriteExpr(node, node.JSONValue, func(newNode, parent SQLNode) {
  4031  		parent.(*JSONUnquoteExpr).JSONValue = newNode.(Expr)
  4032  	}) {
  4033  		return false
  4034  	}
  4035  	if a.post != nil {
  4036  		a.cur.replacer = replacer
  4037  		a.cur.parent = parent
  4038  		a.cur.node = node
  4039  		if !a.post(&a.cur) {
  4040  			return false
  4041  		}
  4042  	}
  4043  	return true
  4044  }
  4045  func (a *application) rewriteRefOfJSONValueExpr(parent SQLNode, node *JSONValueExpr, replacer replacerFunc) bool {
  4046  	if node == nil {
  4047  		return true
  4048  	}
  4049  	if a.pre != nil {
  4050  		a.cur.replacer = replacer
  4051  		a.cur.parent = parent
  4052  		a.cur.node = node
  4053  		if !a.pre(&a.cur) {
  4054  			return true
  4055  		}
  4056  	}
  4057  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  4058  		parent.(*JSONValueExpr).JSONDoc = newNode.(Expr)
  4059  	}) {
  4060  		return false
  4061  	}
  4062  	if !a.rewriteExpr(node, node.Path, func(newNode, parent SQLNode) {
  4063  		parent.(*JSONValueExpr).Path = newNode.(Expr)
  4064  	}) {
  4065  		return false
  4066  	}
  4067  	if !a.rewriteRefOfConvertType(node, node.ReturningType, func(newNode, parent SQLNode) {
  4068  		parent.(*JSONValueExpr).ReturningType = newNode.(*ConvertType)
  4069  	}) {
  4070  		return false
  4071  	}
  4072  	if !a.rewriteRefOfJtOnResponse(node, node.EmptyOnResponse, func(newNode, parent SQLNode) {
  4073  		parent.(*JSONValueExpr).EmptyOnResponse = newNode.(*JtOnResponse)
  4074  	}) {
  4075  		return false
  4076  	}
  4077  	if !a.rewriteRefOfJtOnResponse(node, node.ErrorOnResponse, func(newNode, parent SQLNode) {
  4078  		parent.(*JSONValueExpr).ErrorOnResponse = newNode.(*JtOnResponse)
  4079  	}) {
  4080  		return false
  4081  	}
  4082  	if a.post != nil {
  4083  		a.cur.replacer = replacer
  4084  		a.cur.parent = parent
  4085  		a.cur.node = node
  4086  		if !a.post(&a.cur) {
  4087  			return false
  4088  		}
  4089  	}
  4090  	return true
  4091  }
  4092  func (a *application) rewriteRefOfJSONValueMergeExpr(parent SQLNode, node *JSONValueMergeExpr, replacer replacerFunc) bool {
  4093  	if node == nil {
  4094  		return true
  4095  	}
  4096  	if a.pre != nil {
  4097  		a.cur.replacer = replacer
  4098  		a.cur.parent = parent
  4099  		a.cur.node = node
  4100  		if !a.pre(&a.cur) {
  4101  			return true
  4102  		}
  4103  	}
  4104  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  4105  		parent.(*JSONValueMergeExpr).JSONDoc = newNode.(Expr)
  4106  	}) {
  4107  		return false
  4108  	}
  4109  	if !a.rewriteExprs(node, node.JSONDocList, func(newNode, parent SQLNode) {
  4110  		parent.(*JSONValueMergeExpr).JSONDocList = newNode.(Exprs)
  4111  	}) {
  4112  		return false
  4113  	}
  4114  	if a.post != nil {
  4115  		a.cur.replacer = replacer
  4116  		a.cur.parent = parent
  4117  		a.cur.node = node
  4118  		if !a.post(&a.cur) {
  4119  			return false
  4120  		}
  4121  	}
  4122  	return true
  4123  }
  4124  func (a *application) rewriteRefOfJSONValueModifierExpr(parent SQLNode, node *JSONValueModifierExpr, replacer replacerFunc) bool {
  4125  	if node == nil {
  4126  		return true
  4127  	}
  4128  	if a.pre != nil {
  4129  		a.cur.replacer = replacer
  4130  		a.cur.parent = parent
  4131  		a.cur.node = node
  4132  		if !a.pre(&a.cur) {
  4133  			return true
  4134  		}
  4135  	}
  4136  	if !a.rewriteExpr(node, node.JSONDoc, func(newNode, parent SQLNode) {
  4137  		parent.(*JSONValueModifierExpr).JSONDoc = newNode.(Expr)
  4138  	}) {
  4139  		return false
  4140  	}
  4141  	for x, el := range node.Params {
  4142  		if !a.rewriteRefOfJSONObjectParam(node, el, func(idx int) replacerFunc {
  4143  			return func(newNode, parent SQLNode) {
  4144  				parent.(*JSONValueModifierExpr).Params[idx] = newNode.(*JSONObjectParam)
  4145  			}
  4146  		}(x)) {
  4147  			return false
  4148  		}
  4149  	}
  4150  	if a.post != nil {
  4151  		a.cur.replacer = replacer
  4152  		a.cur.parent = parent
  4153  		a.cur.node = node
  4154  		if !a.post(&a.cur) {
  4155  			return false
  4156  		}
  4157  	}
  4158  	return true
  4159  }
  4160  func (a *application) rewriteRefOfJoinCondition(parent SQLNode, node *JoinCondition, replacer replacerFunc) bool {
  4161  	if node == nil {
  4162  		return true
  4163  	}
  4164  	if a.pre != nil {
  4165  		a.cur.replacer = replacer
  4166  		a.cur.parent = parent
  4167  		a.cur.node = node
  4168  		if !a.pre(&a.cur) {
  4169  			return true
  4170  		}
  4171  	}
  4172  	if !a.rewriteExpr(node, node.On, func(newNode, parent SQLNode) {
  4173  		parent.(*JoinCondition).On = newNode.(Expr)
  4174  	}) {
  4175  		return false
  4176  	}
  4177  	if !a.rewriteColumns(node, node.Using, func(newNode, parent SQLNode) {
  4178  		parent.(*JoinCondition).Using = newNode.(Columns)
  4179  	}) {
  4180  		return false
  4181  	}
  4182  	if a.post != nil {
  4183  		a.cur.replacer = replacer
  4184  		a.cur.parent = parent
  4185  		a.cur.node = node
  4186  		if !a.post(&a.cur) {
  4187  			return false
  4188  		}
  4189  	}
  4190  	return true
  4191  }
  4192  func (a *application) rewriteRefOfJoinTableExpr(parent SQLNode, node *JoinTableExpr, replacer replacerFunc) bool {
  4193  	if node == nil {
  4194  		return true
  4195  	}
  4196  	if a.pre != nil {
  4197  		a.cur.replacer = replacer
  4198  		a.cur.parent = parent
  4199  		a.cur.node = node
  4200  		if !a.pre(&a.cur) {
  4201  			return true
  4202  		}
  4203  	}
  4204  	if !a.rewriteTableExpr(node, node.LeftExpr, func(newNode, parent SQLNode) {
  4205  		parent.(*JoinTableExpr).LeftExpr = newNode.(TableExpr)
  4206  	}) {
  4207  		return false
  4208  	}
  4209  	if !a.rewriteTableExpr(node, node.RightExpr, func(newNode, parent SQLNode) {
  4210  		parent.(*JoinTableExpr).RightExpr = newNode.(TableExpr)
  4211  	}) {
  4212  		return false
  4213  	}
  4214  	if !a.rewriteRefOfJoinCondition(node, node.Condition, func(newNode, parent SQLNode) {
  4215  		parent.(*JoinTableExpr).Condition = newNode.(*JoinCondition)
  4216  	}) {
  4217  		return false
  4218  	}
  4219  	if a.post != nil {
  4220  		a.cur.replacer = replacer
  4221  		a.cur.parent = parent
  4222  		a.cur.node = node
  4223  		if !a.post(&a.cur) {
  4224  			return false
  4225  		}
  4226  	}
  4227  	return true
  4228  }
  4229  func (a *application) rewriteRefOfJtColumnDefinition(parent SQLNode, node *JtColumnDefinition, replacer replacerFunc) bool {
  4230  	if node == nil {
  4231  		return true
  4232  	}
  4233  	if a.pre != nil {
  4234  		a.cur.replacer = replacer
  4235  		a.cur.parent = parent
  4236  		a.cur.node = node
  4237  		if !a.pre(&a.cur) {
  4238  			return true
  4239  		}
  4240  	}
  4241  	if a.post != nil {
  4242  		if a.pre == nil {
  4243  			a.cur.replacer = replacer
  4244  			a.cur.parent = parent
  4245  			a.cur.node = node
  4246  		}
  4247  		if !a.post(&a.cur) {
  4248  			return false
  4249  		}
  4250  	}
  4251  	return true
  4252  }
  4253  func (a *application) rewriteRefOfJtOnResponse(parent SQLNode, node *JtOnResponse, replacer replacerFunc) bool {
  4254  	if node == nil {
  4255  		return true
  4256  	}
  4257  	if a.pre != nil {
  4258  		a.cur.replacer = replacer
  4259  		a.cur.parent = parent
  4260  		a.cur.node = node
  4261  		if !a.pre(&a.cur) {
  4262  			return true
  4263  		}
  4264  	}
  4265  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  4266  		parent.(*JtOnResponse).Expr = newNode.(Expr)
  4267  	}) {
  4268  		return false
  4269  	}
  4270  	if a.post != nil {
  4271  		a.cur.replacer = replacer
  4272  		a.cur.parent = parent
  4273  		a.cur.node = node
  4274  		if !a.post(&a.cur) {
  4275  			return false
  4276  		}
  4277  	}
  4278  	return true
  4279  }
  4280  func (a *application) rewriteRefOfKeyState(parent SQLNode, node *KeyState, replacer replacerFunc) bool {
  4281  	if node == nil {
  4282  		return true
  4283  	}
  4284  	if a.pre != nil {
  4285  		a.cur.replacer = replacer
  4286  		a.cur.parent = parent
  4287  		a.cur.node = node
  4288  		if !a.pre(&a.cur) {
  4289  			return true
  4290  		}
  4291  	}
  4292  	if a.post != nil {
  4293  		if a.pre == nil {
  4294  			a.cur.replacer = replacer
  4295  			a.cur.parent = parent
  4296  			a.cur.node = node
  4297  		}
  4298  		if !a.post(&a.cur) {
  4299  			return false
  4300  		}
  4301  	}
  4302  	return true
  4303  }
  4304  func (a *application) rewriteRefOfLagLeadExpr(parent SQLNode, node *LagLeadExpr, replacer replacerFunc) bool {
  4305  	if node == nil {
  4306  		return true
  4307  	}
  4308  	if a.pre != nil {
  4309  		a.cur.replacer = replacer
  4310  		a.cur.parent = parent
  4311  		a.cur.node = node
  4312  		if !a.pre(&a.cur) {
  4313  			return true
  4314  		}
  4315  	}
  4316  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  4317  		parent.(*LagLeadExpr).Expr = newNode.(Expr)
  4318  	}) {
  4319  		return false
  4320  	}
  4321  	if !a.rewriteExpr(node, node.N, func(newNode, parent SQLNode) {
  4322  		parent.(*LagLeadExpr).N = newNode.(Expr)
  4323  	}) {
  4324  		return false
  4325  	}
  4326  	if !a.rewriteExpr(node, node.Default, func(newNode, parent SQLNode) {
  4327  		parent.(*LagLeadExpr).Default = newNode.(Expr)
  4328  	}) {
  4329  		return false
  4330  	}
  4331  	if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
  4332  		parent.(*LagLeadExpr).OverClause = newNode.(*OverClause)
  4333  	}) {
  4334  		return false
  4335  	}
  4336  	if !a.rewriteRefOfNullTreatmentClause(node, node.NullTreatmentClause, func(newNode, parent SQLNode) {
  4337  		parent.(*LagLeadExpr).NullTreatmentClause = newNode.(*NullTreatmentClause)
  4338  	}) {
  4339  		return false
  4340  	}
  4341  	if a.post != nil {
  4342  		a.cur.replacer = replacer
  4343  		a.cur.parent = parent
  4344  		a.cur.node = node
  4345  		if !a.post(&a.cur) {
  4346  			return false
  4347  		}
  4348  	}
  4349  	return true
  4350  }
  4351  func (a *application) rewriteRefOfLimit(parent SQLNode, node *Limit, replacer replacerFunc) bool {
  4352  	if node == nil {
  4353  		return true
  4354  	}
  4355  	if a.pre != nil {
  4356  		a.cur.replacer = replacer
  4357  		a.cur.parent = parent
  4358  		a.cur.node = node
  4359  		if !a.pre(&a.cur) {
  4360  			return true
  4361  		}
  4362  	}
  4363  	if !a.rewriteExpr(node, node.Offset, func(newNode, parent SQLNode) {
  4364  		parent.(*Limit).Offset = newNode.(Expr)
  4365  	}) {
  4366  		return false
  4367  	}
  4368  	if !a.rewriteExpr(node, node.Rowcount, func(newNode, parent SQLNode) {
  4369  		parent.(*Limit).Rowcount = newNode.(Expr)
  4370  	}) {
  4371  		return false
  4372  	}
  4373  	if a.post != nil {
  4374  		a.cur.replacer = replacer
  4375  		a.cur.parent = parent
  4376  		a.cur.node = node
  4377  		if !a.post(&a.cur) {
  4378  			return false
  4379  		}
  4380  	}
  4381  	return true
  4382  }
  4383  func (a *application) rewriteRefOfLiteral(parent SQLNode, node *Literal, replacer replacerFunc) bool {
  4384  	if node == nil {
  4385  		return true
  4386  	}
  4387  	if a.pre != nil {
  4388  		a.cur.replacer = replacer
  4389  		a.cur.parent = parent
  4390  		a.cur.node = node
  4391  		if !a.pre(&a.cur) {
  4392  			return true
  4393  		}
  4394  	}
  4395  	if a.post != nil {
  4396  		if a.pre == nil {
  4397  			a.cur.replacer = replacer
  4398  			a.cur.parent = parent
  4399  			a.cur.node = node
  4400  		}
  4401  		if !a.post(&a.cur) {
  4402  			return false
  4403  		}
  4404  	}
  4405  	return true
  4406  }
  4407  func (a *application) rewriteRefOfLoad(parent SQLNode, node *Load, replacer replacerFunc) bool {
  4408  	if node == nil {
  4409  		return true
  4410  	}
  4411  	if a.pre != nil {
  4412  		a.cur.replacer = replacer
  4413  		a.cur.parent = parent
  4414  		a.cur.node = node
  4415  		if !a.pre(&a.cur) {
  4416  			return true
  4417  		}
  4418  	}
  4419  	if a.post != nil {
  4420  		if a.pre == nil {
  4421  			a.cur.replacer = replacer
  4422  			a.cur.parent = parent
  4423  			a.cur.node = node
  4424  		}
  4425  		if !a.post(&a.cur) {
  4426  			return false
  4427  		}
  4428  	}
  4429  	return true
  4430  }
  4431  func (a *application) rewriteRefOfLocateExpr(parent SQLNode, node *LocateExpr, replacer replacerFunc) bool {
  4432  	if node == nil {
  4433  		return true
  4434  	}
  4435  	if a.pre != nil {
  4436  		a.cur.replacer = replacer
  4437  		a.cur.parent = parent
  4438  		a.cur.node = node
  4439  		if !a.pre(&a.cur) {
  4440  			return true
  4441  		}
  4442  	}
  4443  	if !a.rewriteExpr(node, node.SubStr, func(newNode, parent SQLNode) {
  4444  		parent.(*LocateExpr).SubStr = newNode.(Expr)
  4445  	}) {
  4446  		return false
  4447  	}
  4448  	if !a.rewriteExpr(node, node.Str, func(newNode, parent SQLNode) {
  4449  		parent.(*LocateExpr).Str = newNode.(Expr)
  4450  	}) {
  4451  		return false
  4452  	}
  4453  	if !a.rewriteExpr(node, node.Pos, func(newNode, parent SQLNode) {
  4454  		parent.(*LocateExpr).Pos = newNode.(Expr)
  4455  	}) {
  4456  		return false
  4457  	}
  4458  	if a.post != nil {
  4459  		a.cur.replacer = replacer
  4460  		a.cur.parent = parent
  4461  		a.cur.node = node
  4462  		if !a.post(&a.cur) {
  4463  			return false
  4464  		}
  4465  	}
  4466  	return true
  4467  }
  4468  func (a *application) rewriteRefOfLockOption(parent SQLNode, node *LockOption, replacer replacerFunc) bool {
  4469  	if node == nil {
  4470  		return true
  4471  	}
  4472  	if a.pre != nil {
  4473  		a.cur.replacer = replacer
  4474  		a.cur.parent = parent
  4475  		a.cur.node = node
  4476  		if !a.pre(&a.cur) {
  4477  			return true
  4478  		}
  4479  	}
  4480  	if a.post != nil {
  4481  		if a.pre == nil {
  4482  			a.cur.replacer = replacer
  4483  			a.cur.parent = parent
  4484  			a.cur.node = node
  4485  		}
  4486  		if !a.post(&a.cur) {
  4487  			return false
  4488  		}
  4489  	}
  4490  	return true
  4491  }
  4492  func (a *application) rewriteRefOfLockTables(parent SQLNode, node *LockTables, replacer replacerFunc) bool {
  4493  	if node == nil {
  4494  		return true
  4495  	}
  4496  	if a.pre != nil {
  4497  		a.cur.replacer = replacer
  4498  		a.cur.parent = parent
  4499  		a.cur.node = node
  4500  		if !a.pre(&a.cur) {
  4501  			return true
  4502  		}
  4503  	}
  4504  	if a.post != nil {
  4505  		if a.pre == nil {
  4506  			a.cur.replacer = replacer
  4507  			a.cur.parent = parent
  4508  			a.cur.node = node
  4509  		}
  4510  		if !a.post(&a.cur) {
  4511  			return false
  4512  		}
  4513  	}
  4514  	return true
  4515  }
  4516  func (a *application) rewriteRefOfLockingFunc(parent SQLNode, node *LockingFunc, replacer replacerFunc) bool {
  4517  	if node == nil {
  4518  		return true
  4519  	}
  4520  	if a.pre != nil {
  4521  		a.cur.replacer = replacer
  4522  		a.cur.parent = parent
  4523  		a.cur.node = node
  4524  		if !a.pre(&a.cur) {
  4525  			return true
  4526  		}
  4527  	}
  4528  	if !a.rewriteExpr(node, node.Name, func(newNode, parent SQLNode) {
  4529  		parent.(*LockingFunc).Name = newNode.(Expr)
  4530  	}) {
  4531  		return false
  4532  	}
  4533  	if !a.rewriteExpr(node, node.Timeout, func(newNode, parent SQLNode) {
  4534  		parent.(*LockingFunc).Timeout = newNode.(Expr)
  4535  	}) {
  4536  		return false
  4537  	}
  4538  	if a.post != nil {
  4539  		a.cur.replacer = replacer
  4540  		a.cur.parent = parent
  4541  		a.cur.node = node
  4542  		if !a.post(&a.cur) {
  4543  			return false
  4544  		}
  4545  	}
  4546  	return true
  4547  }
  4548  func (a *application) rewriteRefOfMatchExpr(parent SQLNode, node *MatchExpr, replacer replacerFunc) bool {
  4549  	if node == nil {
  4550  		return true
  4551  	}
  4552  	if a.pre != nil {
  4553  		a.cur.replacer = replacer
  4554  		a.cur.parent = parent
  4555  		a.cur.node = node
  4556  		if !a.pre(&a.cur) {
  4557  			return true
  4558  		}
  4559  	}
  4560  	for x, el := range node.Columns {
  4561  		if !a.rewriteRefOfColName(node, el, func(idx int) replacerFunc {
  4562  			return func(newNode, parent SQLNode) {
  4563  				parent.(*MatchExpr).Columns[idx] = newNode.(*ColName)
  4564  			}
  4565  		}(x)) {
  4566  			return false
  4567  		}
  4568  	}
  4569  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  4570  		parent.(*MatchExpr).Expr = newNode.(Expr)
  4571  	}) {
  4572  		return false
  4573  	}
  4574  	if a.post != nil {
  4575  		a.cur.replacer = replacer
  4576  		a.cur.parent = parent
  4577  		a.cur.node = node
  4578  		if !a.post(&a.cur) {
  4579  			return false
  4580  		}
  4581  	}
  4582  	return true
  4583  }
  4584  func (a *application) rewriteRefOfMax(parent SQLNode, node *Max, replacer replacerFunc) bool {
  4585  	if node == nil {
  4586  		return true
  4587  	}
  4588  	if a.pre != nil {
  4589  		a.cur.replacer = replacer
  4590  		a.cur.parent = parent
  4591  		a.cur.node = node
  4592  		if !a.pre(&a.cur) {
  4593  			return true
  4594  		}
  4595  	}
  4596  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  4597  		parent.(*Max).Arg = newNode.(Expr)
  4598  	}) {
  4599  		return false
  4600  	}
  4601  	if a.post != nil {
  4602  		a.cur.replacer = replacer
  4603  		a.cur.parent = parent
  4604  		a.cur.node = node
  4605  		if !a.post(&a.cur) {
  4606  			return false
  4607  		}
  4608  	}
  4609  	return true
  4610  }
  4611  func (a *application) rewriteRefOfMemberOfExpr(parent SQLNode, node *MemberOfExpr, replacer replacerFunc) bool {
  4612  	if node == nil {
  4613  		return true
  4614  	}
  4615  	if a.pre != nil {
  4616  		a.cur.replacer = replacer
  4617  		a.cur.parent = parent
  4618  		a.cur.node = node
  4619  		if !a.pre(&a.cur) {
  4620  			return true
  4621  		}
  4622  	}
  4623  	if !a.rewriteExpr(node, node.Value, func(newNode, parent SQLNode) {
  4624  		parent.(*MemberOfExpr).Value = newNode.(Expr)
  4625  	}) {
  4626  		return false
  4627  	}
  4628  	if !a.rewriteExpr(node, node.JSONArr, func(newNode, parent SQLNode) {
  4629  		parent.(*MemberOfExpr).JSONArr = newNode.(Expr)
  4630  	}) {
  4631  		return false
  4632  	}
  4633  	if a.post != nil {
  4634  		a.cur.replacer = replacer
  4635  		a.cur.parent = parent
  4636  		a.cur.node = node
  4637  		if !a.post(&a.cur) {
  4638  			return false
  4639  		}
  4640  	}
  4641  	return true
  4642  }
  4643  func (a *application) rewriteRefOfMin(parent SQLNode, node *Min, replacer replacerFunc) bool {
  4644  	if node == nil {
  4645  		return true
  4646  	}
  4647  	if a.pre != nil {
  4648  		a.cur.replacer = replacer
  4649  		a.cur.parent = parent
  4650  		a.cur.node = node
  4651  		if !a.pre(&a.cur) {
  4652  			return true
  4653  		}
  4654  	}
  4655  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  4656  		parent.(*Min).Arg = newNode.(Expr)
  4657  	}) {
  4658  		return false
  4659  	}
  4660  	if a.post != nil {
  4661  		a.cur.replacer = replacer
  4662  		a.cur.parent = parent
  4663  		a.cur.node = node
  4664  		if !a.post(&a.cur) {
  4665  			return false
  4666  		}
  4667  	}
  4668  	return true
  4669  }
  4670  func (a *application) rewriteRefOfModifyColumn(parent SQLNode, node *ModifyColumn, replacer replacerFunc) bool {
  4671  	if node == nil {
  4672  		return true
  4673  	}
  4674  	if a.pre != nil {
  4675  		a.cur.replacer = replacer
  4676  		a.cur.parent = parent
  4677  		a.cur.node = node
  4678  		if !a.pre(&a.cur) {
  4679  			return true
  4680  		}
  4681  	}
  4682  	if !a.rewriteRefOfColumnDefinition(node, node.NewColDefinition, func(newNode, parent SQLNode) {
  4683  		parent.(*ModifyColumn).NewColDefinition = newNode.(*ColumnDefinition)
  4684  	}) {
  4685  		return false
  4686  	}
  4687  	if !a.rewriteRefOfColName(node, node.After, func(newNode, parent SQLNode) {
  4688  		parent.(*ModifyColumn).After = newNode.(*ColName)
  4689  	}) {
  4690  		return false
  4691  	}
  4692  	if a.post != nil {
  4693  		a.cur.replacer = replacer
  4694  		a.cur.parent = parent
  4695  		a.cur.node = node
  4696  		if !a.post(&a.cur) {
  4697  			return false
  4698  		}
  4699  	}
  4700  	return true
  4701  }
  4702  func (a *application) rewriteRefOfNTHValueExpr(parent SQLNode, node *NTHValueExpr, replacer replacerFunc) bool {
  4703  	if node == nil {
  4704  		return true
  4705  	}
  4706  	if a.pre != nil {
  4707  		a.cur.replacer = replacer
  4708  		a.cur.parent = parent
  4709  		a.cur.node = node
  4710  		if !a.pre(&a.cur) {
  4711  			return true
  4712  		}
  4713  	}
  4714  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  4715  		parent.(*NTHValueExpr).Expr = newNode.(Expr)
  4716  	}) {
  4717  		return false
  4718  	}
  4719  	if !a.rewriteExpr(node, node.N, func(newNode, parent SQLNode) {
  4720  		parent.(*NTHValueExpr).N = newNode.(Expr)
  4721  	}) {
  4722  		return false
  4723  	}
  4724  	if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
  4725  		parent.(*NTHValueExpr).OverClause = newNode.(*OverClause)
  4726  	}) {
  4727  		return false
  4728  	}
  4729  	if !a.rewriteRefOfFromFirstLastClause(node, node.FromFirstLastClause, func(newNode, parent SQLNode) {
  4730  		parent.(*NTHValueExpr).FromFirstLastClause = newNode.(*FromFirstLastClause)
  4731  	}) {
  4732  		return false
  4733  	}
  4734  	if !a.rewriteRefOfNullTreatmentClause(node, node.NullTreatmentClause, func(newNode, parent SQLNode) {
  4735  		parent.(*NTHValueExpr).NullTreatmentClause = newNode.(*NullTreatmentClause)
  4736  	}) {
  4737  		return false
  4738  	}
  4739  	if a.post != nil {
  4740  		a.cur.replacer = replacer
  4741  		a.cur.parent = parent
  4742  		a.cur.node = node
  4743  		if !a.post(&a.cur) {
  4744  			return false
  4745  		}
  4746  	}
  4747  	return true
  4748  }
  4749  func (a *application) rewriteRefOfNamedWindow(parent SQLNode, node *NamedWindow, replacer replacerFunc) bool {
  4750  	if node == nil {
  4751  		return true
  4752  	}
  4753  	if a.pre != nil {
  4754  		a.cur.replacer = replacer
  4755  		a.cur.parent = parent
  4756  		a.cur.node = node
  4757  		if !a.pre(&a.cur) {
  4758  			return true
  4759  		}
  4760  	}
  4761  	if !a.rewriteWindowDefinitions(node, node.Windows, func(newNode, parent SQLNode) {
  4762  		parent.(*NamedWindow).Windows = newNode.(WindowDefinitions)
  4763  	}) {
  4764  		return false
  4765  	}
  4766  	if a.post != nil {
  4767  		a.cur.replacer = replacer
  4768  		a.cur.parent = parent
  4769  		a.cur.node = node
  4770  		if !a.post(&a.cur) {
  4771  			return false
  4772  		}
  4773  	}
  4774  	return true
  4775  }
  4776  func (a *application) rewriteNamedWindows(parent SQLNode, node NamedWindows, replacer replacerFunc) bool {
  4777  	if node == nil {
  4778  		return true
  4779  	}
  4780  	if a.pre != nil {
  4781  		a.cur.replacer = replacer
  4782  		a.cur.parent = parent
  4783  		a.cur.node = node
  4784  		kontinue := !a.pre(&a.cur)
  4785  		if a.cur.revisit {
  4786  			node = a.cur.node.(NamedWindows)
  4787  			a.cur.revisit = false
  4788  			return a.rewriteNamedWindows(parent, node, replacer)
  4789  		}
  4790  		if kontinue {
  4791  			return true
  4792  		}
  4793  	}
  4794  	for x, el := range node {
  4795  		if !a.rewriteRefOfNamedWindow(node, el, func(idx int) replacerFunc {
  4796  			return func(newNode, parent SQLNode) {
  4797  				parent.(NamedWindows)[idx] = newNode.(*NamedWindow)
  4798  			}
  4799  		}(x)) {
  4800  			return false
  4801  		}
  4802  	}
  4803  	if a.post != nil {
  4804  		a.cur.replacer = replacer
  4805  		a.cur.parent = parent
  4806  		a.cur.node = node
  4807  		if !a.post(&a.cur) {
  4808  			return false
  4809  		}
  4810  	}
  4811  	return true
  4812  }
  4813  func (a *application) rewriteRefOfNextval(parent SQLNode, node *Nextval, replacer replacerFunc) bool {
  4814  	if node == nil {
  4815  		return true
  4816  	}
  4817  	if a.pre != nil {
  4818  		a.cur.replacer = replacer
  4819  		a.cur.parent = parent
  4820  		a.cur.node = node
  4821  		if !a.pre(&a.cur) {
  4822  			return true
  4823  		}
  4824  	}
  4825  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  4826  		parent.(*Nextval).Expr = newNode.(Expr)
  4827  	}) {
  4828  		return false
  4829  	}
  4830  	if a.post != nil {
  4831  		a.cur.replacer = replacer
  4832  		a.cur.parent = parent
  4833  		a.cur.node = node
  4834  		if !a.post(&a.cur) {
  4835  			return false
  4836  		}
  4837  	}
  4838  	return true
  4839  }
  4840  func (a *application) rewriteRefOfNotExpr(parent SQLNode, node *NotExpr, replacer replacerFunc) bool {
  4841  	if node == nil {
  4842  		return true
  4843  	}
  4844  	if a.pre != nil {
  4845  		a.cur.replacer = replacer
  4846  		a.cur.parent = parent
  4847  		a.cur.node = node
  4848  		if !a.pre(&a.cur) {
  4849  			return true
  4850  		}
  4851  	}
  4852  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  4853  		parent.(*NotExpr).Expr = newNode.(Expr)
  4854  	}) {
  4855  		return false
  4856  	}
  4857  	if a.post != nil {
  4858  		a.cur.replacer = replacer
  4859  		a.cur.parent = parent
  4860  		a.cur.node = node
  4861  		if !a.post(&a.cur) {
  4862  			return false
  4863  		}
  4864  	}
  4865  	return true
  4866  }
  4867  func (a *application) rewriteRefOfNtileExpr(parent SQLNode, node *NtileExpr, replacer replacerFunc) bool {
  4868  	if node == nil {
  4869  		return true
  4870  	}
  4871  	if a.pre != nil {
  4872  		a.cur.replacer = replacer
  4873  		a.cur.parent = parent
  4874  		a.cur.node = node
  4875  		if !a.pre(&a.cur) {
  4876  			return true
  4877  		}
  4878  	}
  4879  	if !a.rewriteExpr(node, node.N, func(newNode, parent SQLNode) {
  4880  		parent.(*NtileExpr).N = newNode.(Expr)
  4881  	}) {
  4882  		return false
  4883  	}
  4884  	if !a.rewriteRefOfOverClause(node, node.OverClause, func(newNode, parent SQLNode) {
  4885  		parent.(*NtileExpr).OverClause = newNode.(*OverClause)
  4886  	}) {
  4887  		return false
  4888  	}
  4889  	if a.post != nil {
  4890  		a.cur.replacer = replacer
  4891  		a.cur.parent = parent
  4892  		a.cur.node = node
  4893  		if !a.post(&a.cur) {
  4894  			return false
  4895  		}
  4896  	}
  4897  	return true
  4898  }
  4899  func (a *application) rewriteRefOfNullTreatmentClause(parent SQLNode, node *NullTreatmentClause, replacer replacerFunc) bool {
  4900  	if node == nil {
  4901  		return true
  4902  	}
  4903  	if a.pre != nil {
  4904  		a.cur.replacer = replacer
  4905  		a.cur.parent = parent
  4906  		a.cur.node = node
  4907  		if !a.pre(&a.cur) {
  4908  			return true
  4909  		}
  4910  	}
  4911  	if a.post != nil {
  4912  		if a.pre == nil {
  4913  			a.cur.replacer = replacer
  4914  			a.cur.parent = parent
  4915  			a.cur.node = node
  4916  		}
  4917  		if !a.post(&a.cur) {
  4918  			return false
  4919  		}
  4920  	}
  4921  	return true
  4922  }
  4923  func (a *application) rewriteRefOfNullVal(parent SQLNode, node *NullVal, replacer replacerFunc) bool {
  4924  	if node == nil {
  4925  		return true
  4926  	}
  4927  	if a.pre != nil {
  4928  		a.cur.replacer = replacer
  4929  		a.cur.parent = parent
  4930  		a.cur.node = node
  4931  		if !a.pre(&a.cur) {
  4932  			return true
  4933  		}
  4934  	}
  4935  	if a.post != nil {
  4936  		if a.pre == nil {
  4937  			a.cur.replacer = replacer
  4938  			a.cur.parent = parent
  4939  			a.cur.node = node
  4940  		}
  4941  		if !a.post(&a.cur) {
  4942  			return false
  4943  		}
  4944  	}
  4945  	return true
  4946  }
  4947  func (a *application) rewriteRefOfOffset(parent SQLNode, node *Offset, replacer replacerFunc) bool {
  4948  	if node == nil {
  4949  		return true
  4950  	}
  4951  	if a.pre != nil {
  4952  		a.cur.replacer = replacer
  4953  		a.cur.parent = parent
  4954  		a.cur.node = node
  4955  		if !a.pre(&a.cur) {
  4956  			return true
  4957  		}
  4958  	}
  4959  	if a.post != nil {
  4960  		if a.pre == nil {
  4961  			a.cur.replacer = replacer
  4962  			a.cur.parent = parent
  4963  			a.cur.node = node
  4964  		}
  4965  		if !a.post(&a.cur) {
  4966  			return false
  4967  		}
  4968  	}
  4969  	return true
  4970  }
  4971  func (a *application) rewriteOnDup(parent SQLNode, node OnDup, replacer replacerFunc) bool {
  4972  	if node == nil {
  4973  		return true
  4974  	}
  4975  	if a.pre != nil {
  4976  		a.cur.replacer = replacer
  4977  		a.cur.parent = parent
  4978  		a.cur.node = node
  4979  		kontinue := !a.pre(&a.cur)
  4980  		if a.cur.revisit {
  4981  			node = a.cur.node.(OnDup)
  4982  			a.cur.revisit = false
  4983  			return a.rewriteOnDup(parent, node, replacer)
  4984  		}
  4985  		if kontinue {
  4986  			return true
  4987  		}
  4988  	}
  4989  	for x, el := range node {
  4990  		if !a.rewriteRefOfUpdateExpr(node, el, func(idx int) replacerFunc {
  4991  			return func(newNode, parent SQLNode) {
  4992  				parent.(OnDup)[idx] = newNode.(*UpdateExpr)
  4993  			}
  4994  		}(x)) {
  4995  			return false
  4996  		}
  4997  	}
  4998  	if a.post != nil {
  4999  		a.cur.replacer = replacer
  5000  		a.cur.parent = parent
  5001  		a.cur.node = node
  5002  		if !a.post(&a.cur) {
  5003  			return false
  5004  		}
  5005  	}
  5006  	return true
  5007  }
  5008  func (a *application) rewriteRefOfOptLike(parent SQLNode, node *OptLike, replacer replacerFunc) bool {
  5009  	if node == nil {
  5010  		return true
  5011  	}
  5012  	if a.pre != nil {
  5013  		a.cur.replacer = replacer
  5014  		a.cur.parent = parent
  5015  		a.cur.node = node
  5016  		if !a.pre(&a.cur) {
  5017  			return true
  5018  		}
  5019  	}
  5020  	if !a.rewriteTableName(node, node.LikeTable, func(newNode, parent SQLNode) {
  5021  		parent.(*OptLike).LikeTable = newNode.(TableName)
  5022  	}) {
  5023  		return false
  5024  	}
  5025  	if a.post != nil {
  5026  		a.cur.replacer = replacer
  5027  		a.cur.parent = parent
  5028  		a.cur.node = node
  5029  		if !a.post(&a.cur) {
  5030  			return false
  5031  		}
  5032  	}
  5033  	return true
  5034  }
  5035  func (a *application) rewriteRefOfOrExpr(parent SQLNode, node *OrExpr, replacer replacerFunc) bool {
  5036  	if node == nil {
  5037  		return true
  5038  	}
  5039  	if a.pre != nil {
  5040  		a.cur.replacer = replacer
  5041  		a.cur.parent = parent
  5042  		a.cur.node = node
  5043  		if !a.pre(&a.cur) {
  5044  			return true
  5045  		}
  5046  	}
  5047  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  5048  		parent.(*OrExpr).Left = newNode.(Expr)
  5049  	}) {
  5050  		return false
  5051  	}
  5052  	if !a.rewriteExpr(node, node.Right, func(newNode, parent SQLNode) {
  5053  		parent.(*OrExpr).Right = newNode.(Expr)
  5054  	}) {
  5055  		return false
  5056  	}
  5057  	if a.post != nil {
  5058  		a.cur.replacer = replacer
  5059  		a.cur.parent = parent
  5060  		a.cur.node = node
  5061  		if !a.post(&a.cur) {
  5062  			return false
  5063  		}
  5064  	}
  5065  	return true
  5066  }
  5067  func (a *application) rewriteRefOfOrder(parent SQLNode, node *Order, replacer replacerFunc) bool {
  5068  	if node == nil {
  5069  		return true
  5070  	}
  5071  	if a.pre != nil {
  5072  		a.cur.replacer = replacer
  5073  		a.cur.parent = parent
  5074  		a.cur.node = node
  5075  		if !a.pre(&a.cur) {
  5076  			return true
  5077  		}
  5078  	}
  5079  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  5080  		parent.(*Order).Expr = newNode.(Expr)
  5081  	}) {
  5082  		return false
  5083  	}
  5084  	if a.post != nil {
  5085  		a.cur.replacer = replacer
  5086  		a.cur.parent = parent
  5087  		a.cur.node = node
  5088  		if !a.post(&a.cur) {
  5089  			return false
  5090  		}
  5091  	}
  5092  	return true
  5093  }
  5094  func (a *application) rewriteOrderBy(parent SQLNode, node OrderBy, replacer replacerFunc) bool {
  5095  	if node == nil {
  5096  		return true
  5097  	}
  5098  	if a.pre != nil {
  5099  		a.cur.replacer = replacer
  5100  		a.cur.parent = parent
  5101  		a.cur.node = node
  5102  		kontinue := !a.pre(&a.cur)
  5103  		if a.cur.revisit {
  5104  			node = a.cur.node.(OrderBy)
  5105  			a.cur.revisit = false
  5106  			return a.rewriteOrderBy(parent, node, replacer)
  5107  		}
  5108  		if kontinue {
  5109  			return true
  5110  		}
  5111  	}
  5112  	for x, el := range node {
  5113  		if !a.rewriteRefOfOrder(node, el, func(idx int) replacerFunc {
  5114  			return func(newNode, parent SQLNode) {
  5115  				parent.(OrderBy)[idx] = newNode.(*Order)
  5116  			}
  5117  		}(x)) {
  5118  			return false
  5119  		}
  5120  	}
  5121  	if a.post != nil {
  5122  		a.cur.replacer = replacer
  5123  		a.cur.parent = parent
  5124  		a.cur.node = node
  5125  		if !a.post(&a.cur) {
  5126  			return false
  5127  		}
  5128  	}
  5129  	return true
  5130  }
  5131  func (a *application) rewriteRefOfOrderByOption(parent SQLNode, node *OrderByOption, replacer replacerFunc) bool {
  5132  	if node == nil {
  5133  		return true
  5134  	}
  5135  	if a.pre != nil {
  5136  		a.cur.replacer = replacer
  5137  		a.cur.parent = parent
  5138  		a.cur.node = node
  5139  		if !a.pre(&a.cur) {
  5140  			return true
  5141  		}
  5142  	}
  5143  	if !a.rewriteColumns(node, node.Cols, func(newNode, parent SQLNode) {
  5144  		parent.(*OrderByOption).Cols = newNode.(Columns)
  5145  	}) {
  5146  		return false
  5147  	}
  5148  	if a.post != nil {
  5149  		a.cur.replacer = replacer
  5150  		a.cur.parent = parent
  5151  		a.cur.node = node
  5152  		if !a.post(&a.cur) {
  5153  			return false
  5154  		}
  5155  	}
  5156  	return true
  5157  }
  5158  func (a *application) rewriteRefOfOtherAdmin(parent SQLNode, node *OtherAdmin, replacer replacerFunc) bool {
  5159  	if node == nil {
  5160  		return true
  5161  	}
  5162  	if a.pre != nil {
  5163  		a.cur.replacer = replacer
  5164  		a.cur.parent = parent
  5165  		a.cur.node = node
  5166  		if !a.pre(&a.cur) {
  5167  			return true
  5168  		}
  5169  	}
  5170  	if a.post != nil {
  5171  		if a.pre == nil {
  5172  			a.cur.replacer = replacer
  5173  			a.cur.parent = parent
  5174  			a.cur.node = node
  5175  		}
  5176  		if !a.post(&a.cur) {
  5177  			return false
  5178  		}
  5179  	}
  5180  	return true
  5181  }
  5182  func (a *application) rewriteRefOfOtherRead(parent SQLNode, node *OtherRead, replacer replacerFunc) bool {
  5183  	if node == nil {
  5184  		return true
  5185  	}
  5186  	if a.pre != nil {
  5187  		a.cur.replacer = replacer
  5188  		a.cur.parent = parent
  5189  		a.cur.node = node
  5190  		if !a.pre(&a.cur) {
  5191  			return true
  5192  		}
  5193  	}
  5194  	if a.post != nil {
  5195  		if a.pre == nil {
  5196  			a.cur.replacer = replacer
  5197  			a.cur.parent = parent
  5198  			a.cur.node = node
  5199  		}
  5200  		if !a.post(&a.cur) {
  5201  			return false
  5202  		}
  5203  	}
  5204  	return true
  5205  }
  5206  func (a *application) rewriteRefOfOverClause(parent SQLNode, node *OverClause, replacer replacerFunc) bool {
  5207  	if node == nil {
  5208  		return true
  5209  	}
  5210  	if a.pre != nil {
  5211  		a.cur.replacer = replacer
  5212  		a.cur.parent = parent
  5213  		a.cur.node = node
  5214  		if !a.pre(&a.cur) {
  5215  			return true
  5216  		}
  5217  	}
  5218  	if !a.rewriteIdentifierCI(node, node.WindowName, func(newNode, parent SQLNode) {
  5219  		parent.(*OverClause).WindowName = newNode.(IdentifierCI)
  5220  	}) {
  5221  		return false
  5222  	}
  5223  	if !a.rewriteRefOfWindowSpecification(node, node.WindowSpec, func(newNode, parent SQLNode) {
  5224  		parent.(*OverClause).WindowSpec = newNode.(*WindowSpecification)
  5225  	}) {
  5226  		return false
  5227  	}
  5228  	if a.post != nil {
  5229  		a.cur.replacer = replacer
  5230  		a.cur.parent = parent
  5231  		a.cur.node = node
  5232  		if !a.post(&a.cur) {
  5233  			return false
  5234  		}
  5235  	}
  5236  	return true
  5237  }
  5238  func (a *application) rewriteRefOfParenTableExpr(parent SQLNode, node *ParenTableExpr, replacer replacerFunc) bool {
  5239  	if node == nil {
  5240  		return true
  5241  	}
  5242  	if a.pre != nil {
  5243  		a.cur.replacer = replacer
  5244  		a.cur.parent = parent
  5245  		a.cur.node = node
  5246  		if !a.pre(&a.cur) {
  5247  			return true
  5248  		}
  5249  	}
  5250  	if !a.rewriteTableExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  5251  		parent.(*ParenTableExpr).Exprs = newNode.(TableExprs)
  5252  	}) {
  5253  		return false
  5254  	}
  5255  	if a.post != nil {
  5256  		a.cur.replacer = replacer
  5257  		a.cur.parent = parent
  5258  		a.cur.node = node
  5259  		if !a.post(&a.cur) {
  5260  			return false
  5261  		}
  5262  	}
  5263  	return true
  5264  }
  5265  func (a *application) rewriteRefOfParsedComments(parent SQLNode, node *ParsedComments, replacer replacerFunc) bool {
  5266  	if node == nil {
  5267  		return true
  5268  	}
  5269  	if a.pre != nil {
  5270  		a.cur.replacer = replacer
  5271  		a.cur.parent = parent
  5272  		a.cur.node = node
  5273  		if !a.pre(&a.cur) {
  5274  			return true
  5275  		}
  5276  	}
  5277  	if a.post != nil {
  5278  		if a.pre == nil {
  5279  			a.cur.replacer = replacer
  5280  			a.cur.parent = parent
  5281  			a.cur.node = node
  5282  		}
  5283  		if !a.post(&a.cur) {
  5284  			return false
  5285  		}
  5286  	}
  5287  	return true
  5288  }
  5289  func (a *application) rewriteRefOfPartitionDefinition(parent SQLNode, node *PartitionDefinition, replacer replacerFunc) bool {
  5290  	if node == nil {
  5291  		return true
  5292  	}
  5293  	if a.pre != nil {
  5294  		a.cur.replacer = replacer
  5295  		a.cur.parent = parent
  5296  		a.cur.node = node
  5297  		if !a.pre(&a.cur) {
  5298  			return true
  5299  		}
  5300  	}
  5301  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  5302  		parent.(*PartitionDefinition).Name = newNode.(IdentifierCI)
  5303  	}) {
  5304  		return false
  5305  	}
  5306  	if !a.rewriteRefOfPartitionDefinitionOptions(node, node.Options, func(newNode, parent SQLNode) {
  5307  		parent.(*PartitionDefinition).Options = newNode.(*PartitionDefinitionOptions)
  5308  	}) {
  5309  		return false
  5310  	}
  5311  	if a.post != nil {
  5312  		a.cur.replacer = replacer
  5313  		a.cur.parent = parent
  5314  		a.cur.node = node
  5315  		if !a.post(&a.cur) {
  5316  			return false
  5317  		}
  5318  	}
  5319  	return true
  5320  }
  5321  func (a *application) rewriteRefOfPartitionDefinitionOptions(parent SQLNode, node *PartitionDefinitionOptions, replacer replacerFunc) bool {
  5322  	if node == nil {
  5323  		return true
  5324  	}
  5325  	if a.pre != nil {
  5326  		a.cur.replacer = replacer
  5327  		a.cur.parent = parent
  5328  		a.cur.node = node
  5329  		if !a.pre(&a.cur) {
  5330  			return true
  5331  		}
  5332  	}
  5333  	if !a.rewriteRefOfPartitionValueRange(node, node.ValueRange, func(newNode, parent SQLNode) {
  5334  		parent.(*PartitionDefinitionOptions).ValueRange = newNode.(*PartitionValueRange)
  5335  	}) {
  5336  		return false
  5337  	}
  5338  	if !a.rewriteRefOfLiteral(node, node.Comment, func(newNode, parent SQLNode) {
  5339  		parent.(*PartitionDefinitionOptions).Comment = newNode.(*Literal)
  5340  	}) {
  5341  		return false
  5342  	}
  5343  	if !a.rewriteRefOfPartitionEngine(node, node.Engine, func(newNode, parent SQLNode) {
  5344  		parent.(*PartitionDefinitionOptions).Engine = newNode.(*PartitionEngine)
  5345  	}) {
  5346  		return false
  5347  	}
  5348  	if !a.rewriteRefOfLiteral(node, node.DataDirectory, func(newNode, parent SQLNode) {
  5349  		parent.(*PartitionDefinitionOptions).DataDirectory = newNode.(*Literal)
  5350  	}) {
  5351  		return false
  5352  	}
  5353  	if !a.rewriteRefOfLiteral(node, node.IndexDirectory, func(newNode, parent SQLNode) {
  5354  		parent.(*PartitionDefinitionOptions).IndexDirectory = newNode.(*Literal)
  5355  	}) {
  5356  		return false
  5357  	}
  5358  	if !a.rewriteSubPartitionDefinitions(node, node.SubPartitionDefinitions, func(newNode, parent SQLNode) {
  5359  		parent.(*PartitionDefinitionOptions).SubPartitionDefinitions = newNode.(SubPartitionDefinitions)
  5360  	}) {
  5361  		return false
  5362  	}
  5363  	if a.post != nil {
  5364  		a.cur.replacer = replacer
  5365  		a.cur.parent = parent
  5366  		a.cur.node = node
  5367  		if !a.post(&a.cur) {
  5368  			return false
  5369  		}
  5370  	}
  5371  	return true
  5372  }
  5373  func (a *application) rewriteRefOfPartitionEngine(parent SQLNode, node *PartitionEngine, replacer replacerFunc) bool {
  5374  	if node == nil {
  5375  		return true
  5376  	}
  5377  	if a.pre != nil {
  5378  		a.cur.replacer = replacer
  5379  		a.cur.parent = parent
  5380  		a.cur.node = node
  5381  		if !a.pre(&a.cur) {
  5382  			return true
  5383  		}
  5384  	}
  5385  	if a.post != nil {
  5386  		if a.pre == nil {
  5387  			a.cur.replacer = replacer
  5388  			a.cur.parent = parent
  5389  			a.cur.node = node
  5390  		}
  5391  		if !a.post(&a.cur) {
  5392  			return false
  5393  		}
  5394  	}
  5395  	return true
  5396  }
  5397  func (a *application) rewriteRefOfPartitionOption(parent SQLNode, node *PartitionOption, replacer replacerFunc) bool {
  5398  	if node == nil {
  5399  		return true
  5400  	}
  5401  	if a.pre != nil {
  5402  		a.cur.replacer = replacer
  5403  		a.cur.parent = parent
  5404  		a.cur.node = node
  5405  		if !a.pre(&a.cur) {
  5406  			return true
  5407  		}
  5408  	}
  5409  	if !a.rewriteColumns(node, node.ColList, func(newNode, parent SQLNode) {
  5410  		parent.(*PartitionOption).ColList = newNode.(Columns)
  5411  	}) {
  5412  		return false
  5413  	}
  5414  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  5415  		parent.(*PartitionOption).Expr = newNode.(Expr)
  5416  	}) {
  5417  		return false
  5418  	}
  5419  	if !a.rewriteRefOfSubPartition(node, node.SubPartition, func(newNode, parent SQLNode) {
  5420  		parent.(*PartitionOption).SubPartition = newNode.(*SubPartition)
  5421  	}) {
  5422  		return false
  5423  	}
  5424  	for x, el := range node.Definitions {
  5425  		if !a.rewriteRefOfPartitionDefinition(node, el, func(idx int) replacerFunc {
  5426  			return func(newNode, parent SQLNode) {
  5427  				parent.(*PartitionOption).Definitions[idx] = newNode.(*PartitionDefinition)
  5428  			}
  5429  		}(x)) {
  5430  			return false
  5431  		}
  5432  	}
  5433  	if a.post != nil {
  5434  		a.cur.replacer = replacer
  5435  		a.cur.parent = parent
  5436  		a.cur.node = node
  5437  		if !a.post(&a.cur) {
  5438  			return false
  5439  		}
  5440  	}
  5441  	return true
  5442  }
  5443  func (a *application) rewriteRefOfPartitionSpec(parent SQLNode, node *PartitionSpec, replacer replacerFunc) bool {
  5444  	if node == nil {
  5445  		return true
  5446  	}
  5447  	if a.pre != nil {
  5448  		a.cur.replacer = replacer
  5449  		a.cur.parent = parent
  5450  		a.cur.node = node
  5451  		if !a.pre(&a.cur) {
  5452  			return true
  5453  		}
  5454  	}
  5455  	if !a.rewritePartitions(node, node.Names, func(newNode, parent SQLNode) {
  5456  		parent.(*PartitionSpec).Names = newNode.(Partitions)
  5457  	}) {
  5458  		return false
  5459  	}
  5460  	if !a.rewriteRefOfLiteral(node, node.Number, func(newNode, parent SQLNode) {
  5461  		parent.(*PartitionSpec).Number = newNode.(*Literal)
  5462  	}) {
  5463  		return false
  5464  	}
  5465  	if !a.rewriteTableName(node, node.TableName, func(newNode, parent SQLNode) {
  5466  		parent.(*PartitionSpec).TableName = newNode.(TableName)
  5467  	}) {
  5468  		return false
  5469  	}
  5470  	for x, el := range node.Definitions {
  5471  		if !a.rewriteRefOfPartitionDefinition(node, el, func(idx int) replacerFunc {
  5472  			return func(newNode, parent SQLNode) {
  5473  				parent.(*PartitionSpec).Definitions[idx] = newNode.(*PartitionDefinition)
  5474  			}
  5475  		}(x)) {
  5476  			return false
  5477  		}
  5478  	}
  5479  	if a.post != nil {
  5480  		a.cur.replacer = replacer
  5481  		a.cur.parent = parent
  5482  		a.cur.node = node
  5483  		if !a.post(&a.cur) {
  5484  			return false
  5485  		}
  5486  	}
  5487  	return true
  5488  }
  5489  func (a *application) rewriteRefOfPartitionValueRange(parent SQLNode, node *PartitionValueRange, replacer replacerFunc) bool {
  5490  	if node == nil {
  5491  		return true
  5492  	}
  5493  	if a.pre != nil {
  5494  		a.cur.replacer = replacer
  5495  		a.cur.parent = parent
  5496  		a.cur.node = node
  5497  		if !a.pre(&a.cur) {
  5498  			return true
  5499  		}
  5500  	}
  5501  	if !a.rewriteValTuple(node, node.Range, func(newNode, parent SQLNode) {
  5502  		parent.(*PartitionValueRange).Range = newNode.(ValTuple)
  5503  	}) {
  5504  		return false
  5505  	}
  5506  	if a.post != nil {
  5507  		a.cur.replacer = replacer
  5508  		a.cur.parent = parent
  5509  		a.cur.node = node
  5510  		if !a.post(&a.cur) {
  5511  			return false
  5512  		}
  5513  	}
  5514  	return true
  5515  }
  5516  func (a *application) rewritePartitions(parent SQLNode, node Partitions, replacer replacerFunc) bool {
  5517  	if node == nil {
  5518  		return true
  5519  	}
  5520  	if a.pre != nil {
  5521  		a.cur.replacer = replacer
  5522  		a.cur.parent = parent
  5523  		a.cur.node = node
  5524  		kontinue := !a.pre(&a.cur)
  5525  		if a.cur.revisit {
  5526  			node = a.cur.node.(Partitions)
  5527  			a.cur.revisit = false
  5528  			return a.rewritePartitions(parent, node, replacer)
  5529  		}
  5530  		if kontinue {
  5531  			return true
  5532  		}
  5533  	}
  5534  	for x, el := range node {
  5535  		if !a.rewriteIdentifierCI(node, el, func(idx int) replacerFunc {
  5536  			return func(newNode, parent SQLNode) {
  5537  				parent.(Partitions)[idx] = newNode.(IdentifierCI)
  5538  			}
  5539  		}(x)) {
  5540  			return false
  5541  		}
  5542  	}
  5543  	if a.post != nil {
  5544  		a.cur.replacer = replacer
  5545  		a.cur.parent = parent
  5546  		a.cur.node = node
  5547  		if !a.post(&a.cur) {
  5548  			return false
  5549  		}
  5550  	}
  5551  	return true
  5552  }
  5553  func (a *application) rewriteRefOfPerformanceSchemaFuncExpr(parent SQLNode, node *PerformanceSchemaFuncExpr, replacer replacerFunc) bool {
  5554  	if node == nil {
  5555  		return true
  5556  	}
  5557  	if a.pre != nil {
  5558  		a.cur.replacer = replacer
  5559  		a.cur.parent = parent
  5560  		a.cur.node = node
  5561  		if !a.pre(&a.cur) {
  5562  			return true
  5563  		}
  5564  	}
  5565  	if !a.rewriteExpr(node, node.Argument, func(newNode, parent SQLNode) {
  5566  		parent.(*PerformanceSchemaFuncExpr).Argument = newNode.(Expr)
  5567  	}) {
  5568  		return false
  5569  	}
  5570  	if a.post != nil {
  5571  		a.cur.replacer = replacer
  5572  		a.cur.parent = parent
  5573  		a.cur.node = node
  5574  		if !a.post(&a.cur) {
  5575  			return false
  5576  		}
  5577  	}
  5578  	return true
  5579  }
  5580  func (a *application) rewriteRefOfPrepareStmt(parent SQLNode, node *PrepareStmt, replacer replacerFunc) bool {
  5581  	if node == nil {
  5582  		return true
  5583  	}
  5584  	if a.pre != nil {
  5585  		a.cur.replacer = replacer
  5586  		a.cur.parent = parent
  5587  		a.cur.node = node
  5588  		if !a.pre(&a.cur) {
  5589  			return true
  5590  		}
  5591  	}
  5592  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  5593  		parent.(*PrepareStmt).Name = newNode.(IdentifierCI)
  5594  	}) {
  5595  		return false
  5596  	}
  5597  	if !a.rewriteExpr(node, node.Statement, func(newNode, parent SQLNode) {
  5598  		parent.(*PrepareStmt).Statement = newNode.(Expr)
  5599  	}) {
  5600  		return false
  5601  	}
  5602  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  5603  		parent.(*PrepareStmt).Comments = newNode.(*ParsedComments)
  5604  	}) {
  5605  		return false
  5606  	}
  5607  	if a.post != nil {
  5608  		a.cur.replacer = replacer
  5609  		a.cur.parent = parent
  5610  		a.cur.node = node
  5611  		if !a.post(&a.cur) {
  5612  			return false
  5613  		}
  5614  	}
  5615  	return true
  5616  }
  5617  func (a *application) rewriteRefOfReferenceDefinition(parent SQLNode, node *ReferenceDefinition, replacer replacerFunc) bool {
  5618  	if node == nil {
  5619  		return true
  5620  	}
  5621  	if a.pre != nil {
  5622  		a.cur.replacer = replacer
  5623  		a.cur.parent = parent
  5624  		a.cur.node = node
  5625  		if !a.pre(&a.cur) {
  5626  			return true
  5627  		}
  5628  	}
  5629  	if !a.rewriteTableName(node, node.ReferencedTable, func(newNode, parent SQLNode) {
  5630  		parent.(*ReferenceDefinition).ReferencedTable = newNode.(TableName)
  5631  	}) {
  5632  		return false
  5633  	}
  5634  	if !a.rewriteColumns(node, node.ReferencedColumns, func(newNode, parent SQLNode) {
  5635  		parent.(*ReferenceDefinition).ReferencedColumns = newNode.(Columns)
  5636  	}) {
  5637  		return false
  5638  	}
  5639  	if !a.rewriteMatchAction(node, node.Match, func(newNode, parent SQLNode) {
  5640  		parent.(*ReferenceDefinition).Match = newNode.(MatchAction)
  5641  	}) {
  5642  		return false
  5643  	}
  5644  	if !a.rewriteReferenceAction(node, node.OnDelete, func(newNode, parent SQLNode) {
  5645  		parent.(*ReferenceDefinition).OnDelete = newNode.(ReferenceAction)
  5646  	}) {
  5647  		return false
  5648  	}
  5649  	if !a.rewriteReferenceAction(node, node.OnUpdate, func(newNode, parent SQLNode) {
  5650  		parent.(*ReferenceDefinition).OnUpdate = newNode.(ReferenceAction)
  5651  	}) {
  5652  		return false
  5653  	}
  5654  	if a.post != nil {
  5655  		a.cur.replacer = replacer
  5656  		a.cur.parent = parent
  5657  		a.cur.node = node
  5658  		if !a.post(&a.cur) {
  5659  			return false
  5660  		}
  5661  	}
  5662  	return true
  5663  }
  5664  func (a *application) rewriteRefOfRegexpInstrExpr(parent SQLNode, node *RegexpInstrExpr, replacer replacerFunc) bool {
  5665  	if node == nil {
  5666  		return true
  5667  	}
  5668  	if a.pre != nil {
  5669  		a.cur.replacer = replacer
  5670  		a.cur.parent = parent
  5671  		a.cur.node = node
  5672  		if !a.pre(&a.cur) {
  5673  			return true
  5674  		}
  5675  	}
  5676  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  5677  		parent.(*RegexpInstrExpr).Expr = newNode.(Expr)
  5678  	}) {
  5679  		return false
  5680  	}
  5681  	if !a.rewriteExpr(node, node.Pattern, func(newNode, parent SQLNode) {
  5682  		parent.(*RegexpInstrExpr).Pattern = newNode.(Expr)
  5683  	}) {
  5684  		return false
  5685  	}
  5686  	if !a.rewriteExpr(node, node.Position, func(newNode, parent SQLNode) {
  5687  		parent.(*RegexpInstrExpr).Position = newNode.(Expr)
  5688  	}) {
  5689  		return false
  5690  	}
  5691  	if !a.rewriteExpr(node, node.Occurrence, func(newNode, parent SQLNode) {
  5692  		parent.(*RegexpInstrExpr).Occurrence = newNode.(Expr)
  5693  	}) {
  5694  		return false
  5695  	}
  5696  	if !a.rewriteExpr(node, node.ReturnOption, func(newNode, parent SQLNode) {
  5697  		parent.(*RegexpInstrExpr).ReturnOption = newNode.(Expr)
  5698  	}) {
  5699  		return false
  5700  	}
  5701  	if !a.rewriteExpr(node, node.MatchType, func(newNode, parent SQLNode) {
  5702  		parent.(*RegexpInstrExpr).MatchType = newNode.(Expr)
  5703  	}) {
  5704  		return false
  5705  	}
  5706  	if a.post != nil {
  5707  		a.cur.replacer = replacer
  5708  		a.cur.parent = parent
  5709  		a.cur.node = node
  5710  		if !a.post(&a.cur) {
  5711  			return false
  5712  		}
  5713  	}
  5714  	return true
  5715  }
  5716  func (a *application) rewriteRefOfRegexpLikeExpr(parent SQLNode, node *RegexpLikeExpr, replacer replacerFunc) bool {
  5717  	if node == nil {
  5718  		return true
  5719  	}
  5720  	if a.pre != nil {
  5721  		a.cur.replacer = replacer
  5722  		a.cur.parent = parent
  5723  		a.cur.node = node
  5724  		if !a.pre(&a.cur) {
  5725  			return true
  5726  		}
  5727  	}
  5728  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  5729  		parent.(*RegexpLikeExpr).Expr = newNode.(Expr)
  5730  	}) {
  5731  		return false
  5732  	}
  5733  	if !a.rewriteExpr(node, node.Pattern, func(newNode, parent SQLNode) {
  5734  		parent.(*RegexpLikeExpr).Pattern = newNode.(Expr)
  5735  	}) {
  5736  		return false
  5737  	}
  5738  	if !a.rewriteExpr(node, node.MatchType, func(newNode, parent SQLNode) {
  5739  		parent.(*RegexpLikeExpr).MatchType = newNode.(Expr)
  5740  	}) {
  5741  		return false
  5742  	}
  5743  	if a.post != nil {
  5744  		a.cur.replacer = replacer
  5745  		a.cur.parent = parent
  5746  		a.cur.node = node
  5747  		if !a.post(&a.cur) {
  5748  			return false
  5749  		}
  5750  	}
  5751  	return true
  5752  }
  5753  func (a *application) rewriteRefOfRegexpReplaceExpr(parent SQLNode, node *RegexpReplaceExpr, replacer replacerFunc) bool {
  5754  	if node == nil {
  5755  		return true
  5756  	}
  5757  	if a.pre != nil {
  5758  		a.cur.replacer = replacer
  5759  		a.cur.parent = parent
  5760  		a.cur.node = node
  5761  		if !a.pre(&a.cur) {
  5762  			return true
  5763  		}
  5764  	}
  5765  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  5766  		parent.(*RegexpReplaceExpr).Expr = newNode.(Expr)
  5767  	}) {
  5768  		return false
  5769  	}
  5770  	if !a.rewriteExpr(node, node.Pattern, func(newNode, parent SQLNode) {
  5771  		parent.(*RegexpReplaceExpr).Pattern = newNode.(Expr)
  5772  	}) {
  5773  		return false
  5774  	}
  5775  	if !a.rewriteExpr(node, node.Repl, func(newNode, parent SQLNode) {
  5776  		parent.(*RegexpReplaceExpr).Repl = newNode.(Expr)
  5777  	}) {
  5778  		return false
  5779  	}
  5780  	if !a.rewriteExpr(node, node.Occurrence, func(newNode, parent SQLNode) {
  5781  		parent.(*RegexpReplaceExpr).Occurrence = newNode.(Expr)
  5782  	}) {
  5783  		return false
  5784  	}
  5785  	if !a.rewriteExpr(node, node.Position, func(newNode, parent SQLNode) {
  5786  		parent.(*RegexpReplaceExpr).Position = newNode.(Expr)
  5787  	}) {
  5788  		return false
  5789  	}
  5790  	if !a.rewriteExpr(node, node.MatchType, func(newNode, parent SQLNode) {
  5791  		parent.(*RegexpReplaceExpr).MatchType = newNode.(Expr)
  5792  	}) {
  5793  		return false
  5794  	}
  5795  	if a.post != nil {
  5796  		a.cur.replacer = replacer
  5797  		a.cur.parent = parent
  5798  		a.cur.node = node
  5799  		if !a.post(&a.cur) {
  5800  			return false
  5801  		}
  5802  	}
  5803  	return true
  5804  }
  5805  func (a *application) rewriteRefOfRegexpSubstrExpr(parent SQLNode, node *RegexpSubstrExpr, replacer replacerFunc) bool {
  5806  	if node == nil {
  5807  		return true
  5808  	}
  5809  	if a.pre != nil {
  5810  		a.cur.replacer = replacer
  5811  		a.cur.parent = parent
  5812  		a.cur.node = node
  5813  		if !a.pre(&a.cur) {
  5814  			return true
  5815  		}
  5816  	}
  5817  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  5818  		parent.(*RegexpSubstrExpr).Expr = newNode.(Expr)
  5819  	}) {
  5820  		return false
  5821  	}
  5822  	if !a.rewriteExpr(node, node.Pattern, func(newNode, parent SQLNode) {
  5823  		parent.(*RegexpSubstrExpr).Pattern = newNode.(Expr)
  5824  	}) {
  5825  		return false
  5826  	}
  5827  	if !a.rewriteExpr(node, node.Occurrence, func(newNode, parent SQLNode) {
  5828  		parent.(*RegexpSubstrExpr).Occurrence = newNode.(Expr)
  5829  	}) {
  5830  		return false
  5831  	}
  5832  	if !a.rewriteExpr(node, node.Position, func(newNode, parent SQLNode) {
  5833  		parent.(*RegexpSubstrExpr).Position = newNode.(Expr)
  5834  	}) {
  5835  		return false
  5836  	}
  5837  	if !a.rewriteExpr(node, node.MatchType, func(newNode, parent SQLNode) {
  5838  		parent.(*RegexpSubstrExpr).MatchType = newNode.(Expr)
  5839  	}) {
  5840  		return false
  5841  	}
  5842  	if a.post != nil {
  5843  		a.cur.replacer = replacer
  5844  		a.cur.parent = parent
  5845  		a.cur.node = node
  5846  		if !a.post(&a.cur) {
  5847  			return false
  5848  		}
  5849  	}
  5850  	return true
  5851  }
  5852  func (a *application) rewriteRefOfRelease(parent SQLNode, node *Release, replacer replacerFunc) bool {
  5853  	if node == nil {
  5854  		return true
  5855  	}
  5856  	if a.pre != nil {
  5857  		a.cur.replacer = replacer
  5858  		a.cur.parent = parent
  5859  		a.cur.node = node
  5860  		if !a.pre(&a.cur) {
  5861  			return true
  5862  		}
  5863  	}
  5864  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  5865  		parent.(*Release).Name = newNode.(IdentifierCI)
  5866  	}) {
  5867  		return false
  5868  	}
  5869  	if a.post != nil {
  5870  		a.cur.replacer = replacer
  5871  		a.cur.parent = parent
  5872  		a.cur.node = node
  5873  		if !a.post(&a.cur) {
  5874  			return false
  5875  		}
  5876  	}
  5877  	return true
  5878  }
  5879  func (a *application) rewriteRefOfRenameColumn(parent SQLNode, node *RenameColumn, replacer replacerFunc) bool {
  5880  	if node == nil {
  5881  		return true
  5882  	}
  5883  	if a.pre != nil {
  5884  		a.cur.replacer = replacer
  5885  		a.cur.parent = parent
  5886  		a.cur.node = node
  5887  		if !a.pre(&a.cur) {
  5888  			return true
  5889  		}
  5890  	}
  5891  	if !a.rewriteRefOfColName(node, node.OldName, func(newNode, parent SQLNode) {
  5892  		parent.(*RenameColumn).OldName = newNode.(*ColName)
  5893  	}) {
  5894  		return false
  5895  	}
  5896  	if !a.rewriteRefOfColName(node, node.NewName, func(newNode, parent SQLNode) {
  5897  		parent.(*RenameColumn).NewName = newNode.(*ColName)
  5898  	}) {
  5899  		return false
  5900  	}
  5901  	if a.post != nil {
  5902  		a.cur.replacer = replacer
  5903  		a.cur.parent = parent
  5904  		a.cur.node = node
  5905  		if !a.post(&a.cur) {
  5906  			return false
  5907  		}
  5908  	}
  5909  	return true
  5910  }
  5911  func (a *application) rewriteRefOfRenameIndex(parent SQLNode, node *RenameIndex, replacer replacerFunc) bool {
  5912  	if node == nil {
  5913  		return true
  5914  	}
  5915  	if a.pre != nil {
  5916  		a.cur.replacer = replacer
  5917  		a.cur.parent = parent
  5918  		a.cur.node = node
  5919  		if !a.pre(&a.cur) {
  5920  			return true
  5921  		}
  5922  	}
  5923  	if !a.rewriteIdentifierCI(node, node.OldName, func(newNode, parent SQLNode) {
  5924  		parent.(*RenameIndex).OldName = newNode.(IdentifierCI)
  5925  	}) {
  5926  		return false
  5927  	}
  5928  	if !a.rewriteIdentifierCI(node, node.NewName, func(newNode, parent SQLNode) {
  5929  		parent.(*RenameIndex).NewName = newNode.(IdentifierCI)
  5930  	}) {
  5931  		return false
  5932  	}
  5933  	if a.post != nil {
  5934  		a.cur.replacer = replacer
  5935  		a.cur.parent = parent
  5936  		a.cur.node = node
  5937  		if !a.post(&a.cur) {
  5938  			return false
  5939  		}
  5940  	}
  5941  	return true
  5942  }
  5943  func (a *application) rewriteRefOfRenameTable(parent SQLNode, node *RenameTable, replacer replacerFunc) bool {
  5944  	if node == nil {
  5945  		return true
  5946  	}
  5947  	if a.pre != nil {
  5948  		a.cur.replacer = replacer
  5949  		a.cur.parent = parent
  5950  		a.cur.node = node
  5951  		if !a.pre(&a.cur) {
  5952  			return true
  5953  		}
  5954  	}
  5955  	if a.post != nil {
  5956  		if a.pre == nil {
  5957  			a.cur.replacer = replacer
  5958  			a.cur.parent = parent
  5959  			a.cur.node = node
  5960  		}
  5961  		if !a.post(&a.cur) {
  5962  			return false
  5963  		}
  5964  	}
  5965  	return true
  5966  }
  5967  func (a *application) rewriteRefOfRenameTableName(parent SQLNode, node *RenameTableName, replacer replacerFunc) bool {
  5968  	if node == nil {
  5969  		return true
  5970  	}
  5971  	if a.pre != nil {
  5972  		a.cur.replacer = replacer
  5973  		a.cur.parent = parent
  5974  		a.cur.node = node
  5975  		if !a.pre(&a.cur) {
  5976  			return true
  5977  		}
  5978  	}
  5979  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  5980  		parent.(*RenameTableName).Table = newNode.(TableName)
  5981  	}) {
  5982  		return false
  5983  	}
  5984  	if a.post != nil {
  5985  		a.cur.replacer = replacer
  5986  		a.cur.parent = parent
  5987  		a.cur.node = node
  5988  		if !a.post(&a.cur) {
  5989  			return false
  5990  		}
  5991  	}
  5992  	return true
  5993  }
  5994  func (a *application) rewriteRefOfRevertMigration(parent SQLNode, node *RevertMigration, replacer replacerFunc) bool {
  5995  	if node == nil {
  5996  		return true
  5997  	}
  5998  	if a.pre != nil {
  5999  		a.cur.replacer = replacer
  6000  		a.cur.parent = parent
  6001  		a.cur.node = node
  6002  		if !a.pre(&a.cur) {
  6003  			return true
  6004  		}
  6005  	}
  6006  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  6007  		parent.(*RevertMigration).Comments = newNode.(*ParsedComments)
  6008  	}) {
  6009  		return false
  6010  	}
  6011  	if a.post != nil {
  6012  		a.cur.replacer = replacer
  6013  		a.cur.parent = parent
  6014  		a.cur.node = node
  6015  		if !a.post(&a.cur) {
  6016  			return false
  6017  		}
  6018  	}
  6019  	return true
  6020  }
  6021  func (a *application) rewriteRefOfRollback(parent SQLNode, node *Rollback, replacer replacerFunc) bool {
  6022  	if node == nil {
  6023  		return true
  6024  	}
  6025  	if a.pre != nil {
  6026  		a.cur.replacer = replacer
  6027  		a.cur.parent = parent
  6028  		a.cur.node = node
  6029  		if !a.pre(&a.cur) {
  6030  			return true
  6031  		}
  6032  	}
  6033  	if a.post != nil {
  6034  		if a.pre == nil {
  6035  			a.cur.replacer = replacer
  6036  			a.cur.parent = parent
  6037  			a.cur.node = node
  6038  		}
  6039  		if !a.post(&a.cur) {
  6040  			return false
  6041  		}
  6042  	}
  6043  	return true
  6044  }
  6045  func (a *application) rewriteRootNode(parent SQLNode, node RootNode, replacer replacerFunc) bool {
  6046  	if a.pre != nil {
  6047  		a.cur.replacer = replacer
  6048  		a.cur.parent = parent
  6049  		a.cur.node = node
  6050  		if !a.pre(&a.cur) {
  6051  			return true
  6052  		}
  6053  	}
  6054  	if !a.rewriteSQLNode(node, node.SQLNode, func(newNode, parent SQLNode) {
  6055  		panic("[BUG] tried to replace 'SQLNode' on 'RootNode'")
  6056  	}) {
  6057  		return false
  6058  	}
  6059  	if a.post != nil {
  6060  		a.cur.replacer = replacer
  6061  		a.cur.parent = parent
  6062  		a.cur.node = node
  6063  		if !a.post(&a.cur) {
  6064  			return false
  6065  		}
  6066  	}
  6067  	return true
  6068  }
  6069  func (a *application) rewriteRefOfSRollback(parent SQLNode, node *SRollback, replacer replacerFunc) bool {
  6070  	if node == nil {
  6071  		return true
  6072  	}
  6073  	if a.pre != nil {
  6074  		a.cur.replacer = replacer
  6075  		a.cur.parent = parent
  6076  		a.cur.node = node
  6077  		if !a.pre(&a.cur) {
  6078  			return true
  6079  		}
  6080  	}
  6081  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  6082  		parent.(*SRollback).Name = newNode.(IdentifierCI)
  6083  	}) {
  6084  		return false
  6085  	}
  6086  	if a.post != nil {
  6087  		a.cur.replacer = replacer
  6088  		a.cur.parent = parent
  6089  		a.cur.node = node
  6090  		if !a.post(&a.cur) {
  6091  			return false
  6092  		}
  6093  	}
  6094  	return true
  6095  }
  6096  func (a *application) rewriteRefOfSavepoint(parent SQLNode, node *Savepoint, replacer replacerFunc) bool {
  6097  	if node == nil {
  6098  		return true
  6099  	}
  6100  	if a.pre != nil {
  6101  		a.cur.replacer = replacer
  6102  		a.cur.parent = parent
  6103  		a.cur.node = node
  6104  		if !a.pre(&a.cur) {
  6105  			return true
  6106  		}
  6107  	}
  6108  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  6109  		parent.(*Savepoint).Name = newNode.(IdentifierCI)
  6110  	}) {
  6111  		return false
  6112  	}
  6113  	if a.post != nil {
  6114  		a.cur.replacer = replacer
  6115  		a.cur.parent = parent
  6116  		a.cur.node = node
  6117  		if !a.post(&a.cur) {
  6118  			return false
  6119  		}
  6120  	}
  6121  	return true
  6122  }
  6123  func (a *application) rewriteRefOfSelect(parent SQLNode, node *Select, replacer replacerFunc) bool {
  6124  	if node == nil {
  6125  		return true
  6126  	}
  6127  	if a.pre != nil {
  6128  		a.cur.replacer = replacer
  6129  		a.cur.parent = parent
  6130  		a.cur.node = node
  6131  		if !a.pre(&a.cur) {
  6132  			return true
  6133  		}
  6134  	}
  6135  	for x, el := range node.From {
  6136  		if !a.rewriteTableExpr(node, el, func(idx int) replacerFunc {
  6137  			return func(newNode, parent SQLNode) {
  6138  				parent.(*Select).From[idx] = newNode.(TableExpr)
  6139  			}
  6140  		}(x)) {
  6141  			return false
  6142  		}
  6143  	}
  6144  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  6145  		parent.(*Select).Comments = newNode.(*ParsedComments)
  6146  	}) {
  6147  		return false
  6148  	}
  6149  	if !a.rewriteSelectExprs(node, node.SelectExprs, func(newNode, parent SQLNode) {
  6150  		parent.(*Select).SelectExprs = newNode.(SelectExprs)
  6151  	}) {
  6152  		return false
  6153  	}
  6154  	if !a.rewriteRefOfWhere(node, node.Where, func(newNode, parent SQLNode) {
  6155  		parent.(*Select).Where = newNode.(*Where)
  6156  	}) {
  6157  		return false
  6158  	}
  6159  	if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) {
  6160  		parent.(*Select).With = newNode.(*With)
  6161  	}) {
  6162  		return false
  6163  	}
  6164  	if !a.rewriteGroupBy(node, node.GroupBy, func(newNode, parent SQLNode) {
  6165  		parent.(*Select).GroupBy = newNode.(GroupBy)
  6166  	}) {
  6167  		return false
  6168  	}
  6169  	if !a.rewriteRefOfWhere(node, node.Having, func(newNode, parent SQLNode) {
  6170  		parent.(*Select).Having = newNode.(*Where)
  6171  	}) {
  6172  		return false
  6173  	}
  6174  	if !a.rewriteNamedWindows(node, node.Windows, func(newNode, parent SQLNode) {
  6175  		parent.(*Select).Windows = newNode.(NamedWindows)
  6176  	}) {
  6177  		return false
  6178  	}
  6179  	if !a.rewriteOrderBy(node, node.OrderBy, func(newNode, parent SQLNode) {
  6180  		parent.(*Select).OrderBy = newNode.(OrderBy)
  6181  	}) {
  6182  		return false
  6183  	}
  6184  	if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) {
  6185  		parent.(*Select).Limit = newNode.(*Limit)
  6186  	}) {
  6187  		return false
  6188  	}
  6189  	if !a.rewriteRefOfSelectInto(node, node.Into, func(newNode, parent SQLNode) {
  6190  		parent.(*Select).Into = newNode.(*SelectInto)
  6191  	}) {
  6192  		return false
  6193  	}
  6194  	if a.post != nil {
  6195  		a.cur.replacer = replacer
  6196  		a.cur.parent = parent
  6197  		a.cur.node = node
  6198  		if !a.post(&a.cur) {
  6199  			return false
  6200  		}
  6201  	}
  6202  	return true
  6203  }
  6204  func (a *application) rewriteSelectExprs(parent SQLNode, node SelectExprs, replacer replacerFunc) bool {
  6205  	if node == nil {
  6206  		return true
  6207  	}
  6208  	if a.pre != nil {
  6209  		a.cur.replacer = replacer
  6210  		a.cur.parent = parent
  6211  		a.cur.node = node
  6212  		kontinue := !a.pre(&a.cur)
  6213  		if a.cur.revisit {
  6214  			node = a.cur.node.(SelectExprs)
  6215  			a.cur.revisit = false
  6216  			return a.rewriteSelectExprs(parent, node, replacer)
  6217  		}
  6218  		if kontinue {
  6219  			return true
  6220  		}
  6221  	}
  6222  	for x, el := range node {
  6223  		if !a.rewriteSelectExpr(node, el, func(idx int) replacerFunc {
  6224  			return func(newNode, parent SQLNode) {
  6225  				parent.(SelectExprs)[idx] = newNode.(SelectExpr)
  6226  			}
  6227  		}(x)) {
  6228  			return false
  6229  		}
  6230  	}
  6231  	if a.post != nil {
  6232  		a.cur.replacer = replacer
  6233  		a.cur.parent = parent
  6234  		a.cur.node = node
  6235  		if !a.post(&a.cur) {
  6236  			return false
  6237  		}
  6238  	}
  6239  	return true
  6240  }
  6241  func (a *application) rewriteRefOfSelectInto(parent SQLNode, node *SelectInto, replacer replacerFunc) bool {
  6242  	if node == nil {
  6243  		return true
  6244  	}
  6245  	if a.pre != nil {
  6246  		a.cur.replacer = replacer
  6247  		a.cur.parent = parent
  6248  		a.cur.node = node
  6249  		if !a.pre(&a.cur) {
  6250  			return true
  6251  		}
  6252  	}
  6253  	if a.post != nil {
  6254  		if a.pre == nil {
  6255  			a.cur.replacer = replacer
  6256  			a.cur.parent = parent
  6257  			a.cur.node = node
  6258  		}
  6259  		if !a.post(&a.cur) {
  6260  			return false
  6261  		}
  6262  	}
  6263  	return true
  6264  }
  6265  func (a *application) rewriteRefOfSet(parent SQLNode, node *Set, replacer replacerFunc) bool {
  6266  	if node == nil {
  6267  		return true
  6268  	}
  6269  	if a.pre != nil {
  6270  		a.cur.replacer = replacer
  6271  		a.cur.parent = parent
  6272  		a.cur.node = node
  6273  		if !a.pre(&a.cur) {
  6274  			return true
  6275  		}
  6276  	}
  6277  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  6278  		parent.(*Set).Comments = newNode.(*ParsedComments)
  6279  	}) {
  6280  		return false
  6281  	}
  6282  	if !a.rewriteSetExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  6283  		parent.(*Set).Exprs = newNode.(SetExprs)
  6284  	}) {
  6285  		return false
  6286  	}
  6287  	if a.post != nil {
  6288  		a.cur.replacer = replacer
  6289  		a.cur.parent = parent
  6290  		a.cur.node = node
  6291  		if !a.post(&a.cur) {
  6292  			return false
  6293  		}
  6294  	}
  6295  	return true
  6296  }
  6297  func (a *application) rewriteRefOfSetExpr(parent SQLNode, node *SetExpr, replacer replacerFunc) bool {
  6298  	if node == nil {
  6299  		return true
  6300  	}
  6301  	if a.pre != nil {
  6302  		a.cur.replacer = replacer
  6303  		a.cur.parent = parent
  6304  		a.cur.node = node
  6305  		if !a.pre(&a.cur) {
  6306  			return true
  6307  		}
  6308  	}
  6309  	if !a.rewriteRefOfVariable(node, node.Var, func(newNode, parent SQLNode) {
  6310  		parent.(*SetExpr).Var = newNode.(*Variable)
  6311  	}) {
  6312  		return false
  6313  	}
  6314  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  6315  		parent.(*SetExpr).Expr = newNode.(Expr)
  6316  	}) {
  6317  		return false
  6318  	}
  6319  	if a.post != nil {
  6320  		a.cur.replacer = replacer
  6321  		a.cur.parent = parent
  6322  		a.cur.node = node
  6323  		if !a.post(&a.cur) {
  6324  			return false
  6325  		}
  6326  	}
  6327  	return true
  6328  }
  6329  func (a *application) rewriteSetExprs(parent SQLNode, node SetExprs, replacer replacerFunc) bool {
  6330  	if node == nil {
  6331  		return true
  6332  	}
  6333  	if a.pre != nil {
  6334  		a.cur.replacer = replacer
  6335  		a.cur.parent = parent
  6336  		a.cur.node = node
  6337  		kontinue := !a.pre(&a.cur)
  6338  		if a.cur.revisit {
  6339  			node = a.cur.node.(SetExprs)
  6340  			a.cur.revisit = false
  6341  			return a.rewriteSetExprs(parent, node, replacer)
  6342  		}
  6343  		if kontinue {
  6344  			return true
  6345  		}
  6346  	}
  6347  	for x, el := range node {
  6348  		if !a.rewriteRefOfSetExpr(node, el, func(idx int) replacerFunc {
  6349  			return func(newNode, parent SQLNode) {
  6350  				parent.(SetExprs)[idx] = newNode.(*SetExpr)
  6351  			}
  6352  		}(x)) {
  6353  			return false
  6354  		}
  6355  	}
  6356  	if a.post != nil {
  6357  		a.cur.replacer = replacer
  6358  		a.cur.parent = parent
  6359  		a.cur.node = node
  6360  		if !a.post(&a.cur) {
  6361  			return false
  6362  		}
  6363  	}
  6364  	return true
  6365  }
  6366  func (a *application) rewriteRefOfShow(parent SQLNode, node *Show, replacer replacerFunc) bool {
  6367  	if node == nil {
  6368  		return true
  6369  	}
  6370  	if a.pre != nil {
  6371  		a.cur.replacer = replacer
  6372  		a.cur.parent = parent
  6373  		a.cur.node = node
  6374  		if !a.pre(&a.cur) {
  6375  			return true
  6376  		}
  6377  	}
  6378  	if !a.rewriteShowInternal(node, node.Internal, func(newNode, parent SQLNode) {
  6379  		parent.(*Show).Internal = newNode.(ShowInternal)
  6380  	}) {
  6381  		return false
  6382  	}
  6383  	if a.post != nil {
  6384  		a.cur.replacer = replacer
  6385  		a.cur.parent = parent
  6386  		a.cur.node = node
  6387  		if !a.post(&a.cur) {
  6388  			return false
  6389  		}
  6390  	}
  6391  	return true
  6392  }
  6393  func (a *application) rewriteRefOfShowBasic(parent SQLNode, node *ShowBasic, replacer replacerFunc) bool {
  6394  	if node == nil {
  6395  		return true
  6396  	}
  6397  	if a.pre != nil {
  6398  		a.cur.replacer = replacer
  6399  		a.cur.parent = parent
  6400  		a.cur.node = node
  6401  		if !a.pre(&a.cur) {
  6402  			return true
  6403  		}
  6404  	}
  6405  	if !a.rewriteTableName(node, node.Tbl, func(newNode, parent SQLNode) {
  6406  		parent.(*ShowBasic).Tbl = newNode.(TableName)
  6407  	}) {
  6408  		return false
  6409  	}
  6410  	if !a.rewriteIdentifierCS(node, node.DbName, func(newNode, parent SQLNode) {
  6411  		parent.(*ShowBasic).DbName = newNode.(IdentifierCS)
  6412  	}) {
  6413  		return false
  6414  	}
  6415  	if !a.rewriteRefOfShowFilter(node, node.Filter, func(newNode, parent SQLNode) {
  6416  		parent.(*ShowBasic).Filter = newNode.(*ShowFilter)
  6417  	}) {
  6418  		return false
  6419  	}
  6420  	if a.post != nil {
  6421  		a.cur.replacer = replacer
  6422  		a.cur.parent = parent
  6423  		a.cur.node = node
  6424  		if !a.post(&a.cur) {
  6425  			return false
  6426  		}
  6427  	}
  6428  	return true
  6429  }
  6430  func (a *application) rewriteRefOfShowCreate(parent SQLNode, node *ShowCreate, replacer replacerFunc) bool {
  6431  	if node == nil {
  6432  		return true
  6433  	}
  6434  	if a.pre != nil {
  6435  		a.cur.replacer = replacer
  6436  		a.cur.parent = parent
  6437  		a.cur.node = node
  6438  		if !a.pre(&a.cur) {
  6439  			return true
  6440  		}
  6441  	}
  6442  	if !a.rewriteTableName(node, node.Op, func(newNode, parent SQLNode) {
  6443  		parent.(*ShowCreate).Op = newNode.(TableName)
  6444  	}) {
  6445  		return false
  6446  	}
  6447  	if a.post != nil {
  6448  		a.cur.replacer = replacer
  6449  		a.cur.parent = parent
  6450  		a.cur.node = node
  6451  		if !a.post(&a.cur) {
  6452  			return false
  6453  		}
  6454  	}
  6455  	return true
  6456  }
  6457  func (a *application) rewriteRefOfShowFilter(parent SQLNode, node *ShowFilter, replacer replacerFunc) bool {
  6458  	if node == nil {
  6459  		return true
  6460  	}
  6461  	if a.pre != nil {
  6462  		a.cur.replacer = replacer
  6463  		a.cur.parent = parent
  6464  		a.cur.node = node
  6465  		if !a.pre(&a.cur) {
  6466  			return true
  6467  		}
  6468  	}
  6469  	if !a.rewriteExpr(node, node.Filter, func(newNode, parent SQLNode) {
  6470  		parent.(*ShowFilter).Filter = newNode.(Expr)
  6471  	}) {
  6472  		return false
  6473  	}
  6474  	if a.post != nil {
  6475  		a.cur.replacer = replacer
  6476  		a.cur.parent = parent
  6477  		a.cur.node = node
  6478  		if !a.post(&a.cur) {
  6479  			return false
  6480  		}
  6481  	}
  6482  	return true
  6483  }
  6484  func (a *application) rewriteRefOfShowMigrationLogs(parent SQLNode, node *ShowMigrationLogs, replacer replacerFunc) bool {
  6485  	if node == nil {
  6486  		return true
  6487  	}
  6488  	if a.pre != nil {
  6489  		a.cur.replacer = replacer
  6490  		a.cur.parent = parent
  6491  		a.cur.node = node
  6492  		if !a.pre(&a.cur) {
  6493  			return true
  6494  		}
  6495  	}
  6496  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  6497  		parent.(*ShowMigrationLogs).Comments = newNode.(*ParsedComments)
  6498  	}) {
  6499  		return false
  6500  	}
  6501  	if a.post != nil {
  6502  		a.cur.replacer = replacer
  6503  		a.cur.parent = parent
  6504  		a.cur.node = node
  6505  		if !a.post(&a.cur) {
  6506  			return false
  6507  		}
  6508  	}
  6509  	return true
  6510  }
  6511  func (a *application) rewriteRefOfShowOther(parent SQLNode, node *ShowOther, replacer replacerFunc) bool {
  6512  	if node == nil {
  6513  		return true
  6514  	}
  6515  	if a.pre != nil {
  6516  		a.cur.replacer = replacer
  6517  		a.cur.parent = parent
  6518  		a.cur.node = node
  6519  		if !a.pre(&a.cur) {
  6520  			return true
  6521  		}
  6522  	}
  6523  	if a.post != nil {
  6524  		if a.pre == nil {
  6525  			a.cur.replacer = replacer
  6526  			a.cur.parent = parent
  6527  			a.cur.node = node
  6528  		}
  6529  		if !a.post(&a.cur) {
  6530  			return false
  6531  		}
  6532  	}
  6533  	return true
  6534  }
  6535  func (a *application) rewriteRefOfShowThrottledApps(parent SQLNode, node *ShowThrottledApps, replacer replacerFunc) bool {
  6536  	if node == nil {
  6537  		return true
  6538  	}
  6539  	if a.pre != nil {
  6540  		a.cur.replacer = replacer
  6541  		a.cur.parent = parent
  6542  		a.cur.node = node
  6543  		if !a.pre(&a.cur) {
  6544  			return true
  6545  		}
  6546  	}
  6547  	if a.post != nil {
  6548  		if a.pre == nil {
  6549  			a.cur.replacer = replacer
  6550  			a.cur.parent = parent
  6551  			a.cur.node = node
  6552  		}
  6553  		if !a.post(&a.cur) {
  6554  			return false
  6555  		}
  6556  	}
  6557  	return true
  6558  }
  6559  func (a *application) rewriteRefOfShowThrottlerStatus(parent SQLNode, node *ShowThrottlerStatus, replacer replacerFunc) bool {
  6560  	if node == nil {
  6561  		return true
  6562  	}
  6563  	if a.pre != nil {
  6564  		a.cur.replacer = replacer
  6565  		a.cur.parent = parent
  6566  		a.cur.node = node
  6567  		if !a.pre(&a.cur) {
  6568  			return true
  6569  		}
  6570  	}
  6571  	if a.post != nil {
  6572  		if a.pre == nil {
  6573  			a.cur.replacer = replacer
  6574  			a.cur.parent = parent
  6575  			a.cur.node = node
  6576  		}
  6577  		if !a.post(&a.cur) {
  6578  			return false
  6579  		}
  6580  	}
  6581  	return true
  6582  }
  6583  func (a *application) rewriteRefOfStarExpr(parent SQLNode, node *StarExpr, replacer replacerFunc) bool {
  6584  	if node == nil {
  6585  		return true
  6586  	}
  6587  	if a.pre != nil {
  6588  		a.cur.replacer = replacer
  6589  		a.cur.parent = parent
  6590  		a.cur.node = node
  6591  		if !a.pre(&a.cur) {
  6592  			return true
  6593  		}
  6594  	}
  6595  	if !a.rewriteTableName(node, node.TableName, func(newNode, parent SQLNode) {
  6596  		parent.(*StarExpr).TableName = newNode.(TableName)
  6597  	}) {
  6598  		return false
  6599  	}
  6600  	if a.post != nil {
  6601  		a.cur.replacer = replacer
  6602  		a.cur.parent = parent
  6603  		a.cur.node = node
  6604  		if !a.post(&a.cur) {
  6605  			return false
  6606  		}
  6607  	}
  6608  	return true
  6609  }
  6610  func (a *application) rewriteRefOfStd(parent SQLNode, node *Std, replacer replacerFunc) bool {
  6611  	if node == nil {
  6612  		return true
  6613  	}
  6614  	if a.pre != nil {
  6615  		a.cur.replacer = replacer
  6616  		a.cur.parent = parent
  6617  		a.cur.node = node
  6618  		if !a.pre(&a.cur) {
  6619  			return true
  6620  		}
  6621  	}
  6622  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  6623  		parent.(*Std).Arg = newNode.(Expr)
  6624  	}) {
  6625  		return false
  6626  	}
  6627  	if a.post != nil {
  6628  		a.cur.replacer = replacer
  6629  		a.cur.parent = parent
  6630  		a.cur.node = node
  6631  		if !a.post(&a.cur) {
  6632  			return false
  6633  		}
  6634  	}
  6635  	return true
  6636  }
  6637  func (a *application) rewriteRefOfStdDev(parent SQLNode, node *StdDev, replacer replacerFunc) bool {
  6638  	if node == nil {
  6639  		return true
  6640  	}
  6641  	if a.pre != nil {
  6642  		a.cur.replacer = replacer
  6643  		a.cur.parent = parent
  6644  		a.cur.node = node
  6645  		if !a.pre(&a.cur) {
  6646  			return true
  6647  		}
  6648  	}
  6649  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  6650  		parent.(*StdDev).Arg = newNode.(Expr)
  6651  	}) {
  6652  		return false
  6653  	}
  6654  	if a.post != nil {
  6655  		a.cur.replacer = replacer
  6656  		a.cur.parent = parent
  6657  		a.cur.node = node
  6658  		if !a.post(&a.cur) {
  6659  			return false
  6660  		}
  6661  	}
  6662  	return true
  6663  }
  6664  func (a *application) rewriteRefOfStdPop(parent SQLNode, node *StdPop, replacer replacerFunc) bool {
  6665  	if node == nil {
  6666  		return true
  6667  	}
  6668  	if a.pre != nil {
  6669  		a.cur.replacer = replacer
  6670  		a.cur.parent = parent
  6671  		a.cur.node = node
  6672  		if !a.pre(&a.cur) {
  6673  			return true
  6674  		}
  6675  	}
  6676  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  6677  		parent.(*StdPop).Arg = newNode.(Expr)
  6678  	}) {
  6679  		return false
  6680  	}
  6681  	if a.post != nil {
  6682  		a.cur.replacer = replacer
  6683  		a.cur.parent = parent
  6684  		a.cur.node = node
  6685  		if !a.post(&a.cur) {
  6686  			return false
  6687  		}
  6688  	}
  6689  	return true
  6690  }
  6691  func (a *application) rewriteRefOfStdSamp(parent SQLNode, node *StdSamp, replacer replacerFunc) bool {
  6692  	if node == nil {
  6693  		return true
  6694  	}
  6695  	if a.pre != nil {
  6696  		a.cur.replacer = replacer
  6697  		a.cur.parent = parent
  6698  		a.cur.node = node
  6699  		if !a.pre(&a.cur) {
  6700  			return true
  6701  		}
  6702  	}
  6703  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  6704  		parent.(*StdSamp).Arg = newNode.(Expr)
  6705  	}) {
  6706  		return false
  6707  	}
  6708  	if a.post != nil {
  6709  		a.cur.replacer = replacer
  6710  		a.cur.parent = parent
  6711  		a.cur.node = node
  6712  		if !a.post(&a.cur) {
  6713  			return false
  6714  		}
  6715  	}
  6716  	return true
  6717  }
  6718  func (a *application) rewriteRefOfStream(parent SQLNode, node *Stream, replacer replacerFunc) bool {
  6719  	if node == nil {
  6720  		return true
  6721  	}
  6722  	if a.pre != nil {
  6723  		a.cur.replacer = replacer
  6724  		a.cur.parent = parent
  6725  		a.cur.node = node
  6726  		if !a.pre(&a.cur) {
  6727  			return true
  6728  		}
  6729  	}
  6730  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  6731  		parent.(*Stream).Comments = newNode.(*ParsedComments)
  6732  	}) {
  6733  		return false
  6734  	}
  6735  	if !a.rewriteSelectExpr(node, node.SelectExpr, func(newNode, parent SQLNode) {
  6736  		parent.(*Stream).SelectExpr = newNode.(SelectExpr)
  6737  	}) {
  6738  		return false
  6739  	}
  6740  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  6741  		parent.(*Stream).Table = newNode.(TableName)
  6742  	}) {
  6743  		return false
  6744  	}
  6745  	if a.post != nil {
  6746  		a.cur.replacer = replacer
  6747  		a.cur.parent = parent
  6748  		a.cur.node = node
  6749  		if !a.post(&a.cur) {
  6750  			return false
  6751  		}
  6752  	}
  6753  	return true
  6754  }
  6755  func (a *application) rewriteRefOfSubPartition(parent SQLNode, node *SubPartition, replacer replacerFunc) bool {
  6756  	if node == nil {
  6757  		return true
  6758  	}
  6759  	if a.pre != nil {
  6760  		a.cur.replacer = replacer
  6761  		a.cur.parent = parent
  6762  		a.cur.node = node
  6763  		if !a.pre(&a.cur) {
  6764  			return true
  6765  		}
  6766  	}
  6767  	if !a.rewriteColumns(node, node.ColList, func(newNode, parent SQLNode) {
  6768  		parent.(*SubPartition).ColList = newNode.(Columns)
  6769  	}) {
  6770  		return false
  6771  	}
  6772  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  6773  		parent.(*SubPartition).Expr = newNode.(Expr)
  6774  	}) {
  6775  		return false
  6776  	}
  6777  	if a.post != nil {
  6778  		a.cur.replacer = replacer
  6779  		a.cur.parent = parent
  6780  		a.cur.node = node
  6781  		if !a.post(&a.cur) {
  6782  			return false
  6783  		}
  6784  	}
  6785  	return true
  6786  }
  6787  func (a *application) rewriteRefOfSubPartitionDefinition(parent SQLNode, node *SubPartitionDefinition, replacer replacerFunc) bool {
  6788  	if node == nil {
  6789  		return true
  6790  	}
  6791  	if a.pre != nil {
  6792  		a.cur.replacer = replacer
  6793  		a.cur.parent = parent
  6794  		a.cur.node = node
  6795  		if !a.pre(&a.cur) {
  6796  			return true
  6797  		}
  6798  	}
  6799  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  6800  		parent.(*SubPartitionDefinition).Name = newNode.(IdentifierCI)
  6801  	}) {
  6802  		return false
  6803  	}
  6804  	if !a.rewriteRefOfSubPartitionDefinitionOptions(node, node.Options, func(newNode, parent SQLNode) {
  6805  		parent.(*SubPartitionDefinition).Options = newNode.(*SubPartitionDefinitionOptions)
  6806  	}) {
  6807  		return false
  6808  	}
  6809  	if a.post != nil {
  6810  		a.cur.replacer = replacer
  6811  		a.cur.parent = parent
  6812  		a.cur.node = node
  6813  		if !a.post(&a.cur) {
  6814  			return false
  6815  		}
  6816  	}
  6817  	return true
  6818  }
  6819  func (a *application) rewriteRefOfSubPartitionDefinitionOptions(parent SQLNode, node *SubPartitionDefinitionOptions, replacer replacerFunc) bool {
  6820  	if node == nil {
  6821  		return true
  6822  	}
  6823  	if a.pre != nil {
  6824  		a.cur.replacer = replacer
  6825  		a.cur.parent = parent
  6826  		a.cur.node = node
  6827  		if !a.pre(&a.cur) {
  6828  			return true
  6829  		}
  6830  	}
  6831  	if !a.rewriteRefOfLiteral(node, node.Comment, func(newNode, parent SQLNode) {
  6832  		parent.(*SubPartitionDefinitionOptions).Comment = newNode.(*Literal)
  6833  	}) {
  6834  		return false
  6835  	}
  6836  	if !a.rewriteRefOfPartitionEngine(node, node.Engine, func(newNode, parent SQLNode) {
  6837  		parent.(*SubPartitionDefinitionOptions).Engine = newNode.(*PartitionEngine)
  6838  	}) {
  6839  		return false
  6840  	}
  6841  	if !a.rewriteRefOfLiteral(node, node.DataDirectory, func(newNode, parent SQLNode) {
  6842  		parent.(*SubPartitionDefinitionOptions).DataDirectory = newNode.(*Literal)
  6843  	}) {
  6844  		return false
  6845  	}
  6846  	if !a.rewriteRefOfLiteral(node, node.IndexDirectory, func(newNode, parent SQLNode) {
  6847  		parent.(*SubPartitionDefinitionOptions).IndexDirectory = newNode.(*Literal)
  6848  	}) {
  6849  		return false
  6850  	}
  6851  	if a.post != nil {
  6852  		a.cur.replacer = replacer
  6853  		a.cur.parent = parent
  6854  		a.cur.node = node
  6855  		if !a.post(&a.cur) {
  6856  			return false
  6857  		}
  6858  	}
  6859  	return true
  6860  }
  6861  func (a *application) rewriteSubPartitionDefinitions(parent SQLNode, node SubPartitionDefinitions, replacer replacerFunc) bool {
  6862  	if node == nil {
  6863  		return true
  6864  	}
  6865  	if a.pre != nil {
  6866  		a.cur.replacer = replacer
  6867  		a.cur.parent = parent
  6868  		a.cur.node = node
  6869  		kontinue := !a.pre(&a.cur)
  6870  		if a.cur.revisit {
  6871  			node = a.cur.node.(SubPartitionDefinitions)
  6872  			a.cur.revisit = false
  6873  			return a.rewriteSubPartitionDefinitions(parent, node, replacer)
  6874  		}
  6875  		if kontinue {
  6876  			return true
  6877  		}
  6878  	}
  6879  	for x, el := range node {
  6880  		if !a.rewriteRefOfSubPartitionDefinition(node, el, func(idx int) replacerFunc {
  6881  			return func(newNode, parent SQLNode) {
  6882  				parent.(SubPartitionDefinitions)[idx] = newNode.(*SubPartitionDefinition)
  6883  			}
  6884  		}(x)) {
  6885  			return false
  6886  		}
  6887  	}
  6888  	if a.post != nil {
  6889  		a.cur.replacer = replacer
  6890  		a.cur.parent = parent
  6891  		a.cur.node = node
  6892  		if !a.post(&a.cur) {
  6893  			return false
  6894  		}
  6895  	}
  6896  	return true
  6897  }
  6898  func (a *application) rewriteRefOfSubquery(parent SQLNode, node *Subquery, replacer replacerFunc) bool {
  6899  	if node == nil {
  6900  		return true
  6901  	}
  6902  	if a.pre != nil {
  6903  		a.cur.replacer = replacer
  6904  		a.cur.parent = parent
  6905  		a.cur.node = node
  6906  		if !a.pre(&a.cur) {
  6907  			return true
  6908  		}
  6909  	}
  6910  	if !a.rewriteSelectStatement(node, node.Select, func(newNode, parent SQLNode) {
  6911  		parent.(*Subquery).Select = newNode.(SelectStatement)
  6912  	}) {
  6913  		return false
  6914  	}
  6915  	if a.post != nil {
  6916  		a.cur.replacer = replacer
  6917  		a.cur.parent = parent
  6918  		a.cur.node = node
  6919  		if !a.post(&a.cur) {
  6920  			return false
  6921  		}
  6922  	}
  6923  	return true
  6924  }
  6925  func (a *application) rewriteRefOfSubstrExpr(parent SQLNode, node *SubstrExpr, replacer replacerFunc) bool {
  6926  	if node == nil {
  6927  		return true
  6928  	}
  6929  	if a.pre != nil {
  6930  		a.cur.replacer = replacer
  6931  		a.cur.parent = parent
  6932  		a.cur.node = node
  6933  		if !a.pre(&a.cur) {
  6934  			return true
  6935  		}
  6936  	}
  6937  	if !a.rewriteExpr(node, node.Name, func(newNode, parent SQLNode) {
  6938  		parent.(*SubstrExpr).Name = newNode.(Expr)
  6939  	}) {
  6940  		return false
  6941  	}
  6942  	if !a.rewriteExpr(node, node.From, func(newNode, parent SQLNode) {
  6943  		parent.(*SubstrExpr).From = newNode.(Expr)
  6944  	}) {
  6945  		return false
  6946  	}
  6947  	if !a.rewriteExpr(node, node.To, func(newNode, parent SQLNode) {
  6948  		parent.(*SubstrExpr).To = newNode.(Expr)
  6949  	}) {
  6950  		return false
  6951  	}
  6952  	if a.post != nil {
  6953  		a.cur.replacer = replacer
  6954  		a.cur.parent = parent
  6955  		a.cur.node = node
  6956  		if !a.post(&a.cur) {
  6957  			return false
  6958  		}
  6959  	}
  6960  	return true
  6961  }
  6962  func (a *application) rewriteRefOfSum(parent SQLNode, node *Sum, replacer replacerFunc) bool {
  6963  	if node == nil {
  6964  		return true
  6965  	}
  6966  	if a.pre != nil {
  6967  		a.cur.replacer = replacer
  6968  		a.cur.parent = parent
  6969  		a.cur.node = node
  6970  		if !a.pre(&a.cur) {
  6971  			return true
  6972  		}
  6973  	}
  6974  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  6975  		parent.(*Sum).Arg = newNode.(Expr)
  6976  	}) {
  6977  		return false
  6978  	}
  6979  	if a.post != nil {
  6980  		a.cur.replacer = replacer
  6981  		a.cur.parent = parent
  6982  		a.cur.node = node
  6983  		if !a.post(&a.cur) {
  6984  			return false
  6985  		}
  6986  	}
  6987  	return true
  6988  }
  6989  func (a *application) rewriteTableExprs(parent SQLNode, node TableExprs, replacer replacerFunc) bool {
  6990  	if node == nil {
  6991  		return true
  6992  	}
  6993  	if a.pre != nil {
  6994  		a.cur.replacer = replacer
  6995  		a.cur.parent = parent
  6996  		a.cur.node = node
  6997  		kontinue := !a.pre(&a.cur)
  6998  		if a.cur.revisit {
  6999  			node = a.cur.node.(TableExprs)
  7000  			a.cur.revisit = false
  7001  			return a.rewriteTableExprs(parent, node, replacer)
  7002  		}
  7003  		if kontinue {
  7004  			return true
  7005  		}
  7006  	}
  7007  	for x, el := range node {
  7008  		if !a.rewriteTableExpr(node, el, func(idx int) replacerFunc {
  7009  			return func(newNode, parent SQLNode) {
  7010  				parent.(TableExprs)[idx] = newNode.(TableExpr)
  7011  			}
  7012  		}(x)) {
  7013  			return false
  7014  		}
  7015  	}
  7016  	if a.post != nil {
  7017  		a.cur.replacer = replacer
  7018  		a.cur.parent = parent
  7019  		a.cur.node = node
  7020  		if !a.post(&a.cur) {
  7021  			return false
  7022  		}
  7023  	}
  7024  	return true
  7025  }
  7026  func (a *application) rewriteTableName(parent SQLNode, node TableName, replacer replacerFunc) bool {
  7027  	if a.pre != nil {
  7028  		a.cur.replacer = replacer
  7029  		a.cur.parent = parent
  7030  		a.cur.node = node
  7031  		if !a.pre(&a.cur) {
  7032  			return true
  7033  		}
  7034  	}
  7035  	if !a.rewriteIdentifierCS(node, node.Name, func(newNode, parent SQLNode) {
  7036  		panic("[BUG] tried to replace 'Name' on 'TableName'")
  7037  	}) {
  7038  		return false
  7039  	}
  7040  	if !a.rewriteIdentifierCS(node, node.Qualifier, func(newNode, parent SQLNode) {
  7041  		panic("[BUG] tried to replace 'Qualifier' on 'TableName'")
  7042  	}) {
  7043  		return false
  7044  	}
  7045  	if a.post != nil {
  7046  		a.cur.replacer = replacer
  7047  		a.cur.parent = parent
  7048  		a.cur.node = node
  7049  		if !a.post(&a.cur) {
  7050  			return false
  7051  		}
  7052  	}
  7053  	return true
  7054  }
  7055  func (a *application) rewriteTableNames(parent SQLNode, node TableNames, replacer replacerFunc) bool {
  7056  	if node == nil {
  7057  		return true
  7058  	}
  7059  	if a.pre != nil {
  7060  		a.cur.replacer = replacer
  7061  		a.cur.parent = parent
  7062  		a.cur.node = node
  7063  		kontinue := !a.pre(&a.cur)
  7064  		if a.cur.revisit {
  7065  			node = a.cur.node.(TableNames)
  7066  			a.cur.revisit = false
  7067  			return a.rewriteTableNames(parent, node, replacer)
  7068  		}
  7069  		if kontinue {
  7070  			return true
  7071  		}
  7072  	}
  7073  	for x, el := range node {
  7074  		if !a.rewriteTableName(node, el, func(idx int) replacerFunc {
  7075  			return func(newNode, parent SQLNode) {
  7076  				parent.(TableNames)[idx] = newNode.(TableName)
  7077  			}
  7078  		}(x)) {
  7079  			return false
  7080  		}
  7081  	}
  7082  	if a.post != nil {
  7083  		a.cur.replacer = replacer
  7084  		a.cur.parent = parent
  7085  		a.cur.node = node
  7086  		if !a.post(&a.cur) {
  7087  			return false
  7088  		}
  7089  	}
  7090  	return true
  7091  }
  7092  func (a *application) rewriteTableOptions(parent SQLNode, node TableOptions, replacer replacerFunc) bool {
  7093  	if node == nil {
  7094  		return true
  7095  	}
  7096  	if a.pre != nil {
  7097  		a.cur.replacer = replacer
  7098  		a.cur.parent = parent
  7099  		a.cur.node = node
  7100  		kontinue := !a.pre(&a.cur)
  7101  		if a.cur.revisit {
  7102  			node = a.cur.node.(TableOptions)
  7103  			a.cur.revisit = false
  7104  			return a.rewriteTableOptions(parent, node, replacer)
  7105  		}
  7106  		if kontinue {
  7107  			return true
  7108  		}
  7109  	}
  7110  	if a.post != nil {
  7111  		if a.pre == nil {
  7112  			a.cur.replacer = replacer
  7113  			a.cur.parent = parent
  7114  			a.cur.node = node
  7115  		}
  7116  		if !a.post(&a.cur) {
  7117  			return false
  7118  		}
  7119  	}
  7120  	return true
  7121  }
  7122  func (a *application) rewriteRefOfTableSpec(parent SQLNode, node *TableSpec, replacer replacerFunc) bool {
  7123  	if node == nil {
  7124  		return true
  7125  	}
  7126  	if a.pre != nil {
  7127  		a.cur.replacer = replacer
  7128  		a.cur.parent = parent
  7129  		a.cur.node = node
  7130  		if !a.pre(&a.cur) {
  7131  			return true
  7132  		}
  7133  	}
  7134  	for x, el := range node.Columns {
  7135  		if !a.rewriteRefOfColumnDefinition(node, el, func(idx int) replacerFunc {
  7136  			return func(newNode, parent SQLNode) {
  7137  				parent.(*TableSpec).Columns[idx] = newNode.(*ColumnDefinition)
  7138  			}
  7139  		}(x)) {
  7140  			return false
  7141  		}
  7142  	}
  7143  	for x, el := range node.Indexes {
  7144  		if !a.rewriteRefOfIndexDefinition(node, el, func(idx int) replacerFunc {
  7145  			return func(newNode, parent SQLNode) {
  7146  				parent.(*TableSpec).Indexes[idx] = newNode.(*IndexDefinition)
  7147  			}
  7148  		}(x)) {
  7149  			return false
  7150  		}
  7151  	}
  7152  	for x, el := range node.Constraints {
  7153  		if !a.rewriteRefOfConstraintDefinition(node, el, func(idx int) replacerFunc {
  7154  			return func(newNode, parent SQLNode) {
  7155  				parent.(*TableSpec).Constraints[idx] = newNode.(*ConstraintDefinition)
  7156  			}
  7157  		}(x)) {
  7158  			return false
  7159  		}
  7160  	}
  7161  	if !a.rewriteTableOptions(node, node.Options, func(newNode, parent SQLNode) {
  7162  		parent.(*TableSpec).Options = newNode.(TableOptions)
  7163  	}) {
  7164  		return false
  7165  	}
  7166  	if !a.rewriteRefOfPartitionOption(node, node.PartitionOption, func(newNode, parent SQLNode) {
  7167  		parent.(*TableSpec).PartitionOption = newNode.(*PartitionOption)
  7168  	}) {
  7169  		return false
  7170  	}
  7171  	if a.post != nil {
  7172  		a.cur.replacer = replacer
  7173  		a.cur.parent = parent
  7174  		a.cur.node = node
  7175  		if !a.post(&a.cur) {
  7176  			return false
  7177  		}
  7178  	}
  7179  	return true
  7180  }
  7181  func (a *application) rewriteRefOfTablespaceOperation(parent SQLNode, node *TablespaceOperation, replacer replacerFunc) bool {
  7182  	if node == nil {
  7183  		return true
  7184  	}
  7185  	if a.pre != nil {
  7186  		a.cur.replacer = replacer
  7187  		a.cur.parent = parent
  7188  		a.cur.node = node
  7189  		if !a.pre(&a.cur) {
  7190  			return true
  7191  		}
  7192  	}
  7193  	if a.post != nil {
  7194  		if a.pre == nil {
  7195  			a.cur.replacer = replacer
  7196  			a.cur.parent = parent
  7197  			a.cur.node = node
  7198  		}
  7199  		if !a.post(&a.cur) {
  7200  			return false
  7201  		}
  7202  	}
  7203  	return true
  7204  }
  7205  func (a *application) rewriteRefOfTimestampFuncExpr(parent SQLNode, node *TimestampFuncExpr, replacer replacerFunc) bool {
  7206  	if node == nil {
  7207  		return true
  7208  	}
  7209  	if a.pre != nil {
  7210  		a.cur.replacer = replacer
  7211  		a.cur.parent = parent
  7212  		a.cur.node = node
  7213  		if !a.pre(&a.cur) {
  7214  			return true
  7215  		}
  7216  	}
  7217  	if !a.rewriteExpr(node, node.Expr1, func(newNode, parent SQLNode) {
  7218  		parent.(*TimestampFuncExpr).Expr1 = newNode.(Expr)
  7219  	}) {
  7220  		return false
  7221  	}
  7222  	if !a.rewriteExpr(node, node.Expr2, func(newNode, parent SQLNode) {
  7223  		parent.(*TimestampFuncExpr).Expr2 = newNode.(Expr)
  7224  	}) {
  7225  		return false
  7226  	}
  7227  	if a.post != nil {
  7228  		a.cur.replacer = replacer
  7229  		a.cur.parent = parent
  7230  		a.cur.node = node
  7231  		if !a.post(&a.cur) {
  7232  			return false
  7233  		}
  7234  	}
  7235  	return true
  7236  }
  7237  func (a *application) rewriteRefOfTrimFuncExpr(parent SQLNode, node *TrimFuncExpr, replacer replacerFunc) bool {
  7238  	if node == nil {
  7239  		return true
  7240  	}
  7241  	if a.pre != nil {
  7242  		a.cur.replacer = replacer
  7243  		a.cur.parent = parent
  7244  		a.cur.node = node
  7245  		if !a.pre(&a.cur) {
  7246  			return true
  7247  		}
  7248  	}
  7249  	if !a.rewriteExpr(node, node.TrimArg, func(newNode, parent SQLNode) {
  7250  		parent.(*TrimFuncExpr).TrimArg = newNode.(Expr)
  7251  	}) {
  7252  		return false
  7253  	}
  7254  	if !a.rewriteExpr(node, node.StringArg, func(newNode, parent SQLNode) {
  7255  		parent.(*TrimFuncExpr).StringArg = newNode.(Expr)
  7256  	}) {
  7257  		return false
  7258  	}
  7259  	if a.post != nil {
  7260  		a.cur.replacer = replacer
  7261  		a.cur.parent = parent
  7262  		a.cur.node = node
  7263  		if !a.post(&a.cur) {
  7264  			return false
  7265  		}
  7266  	}
  7267  	return true
  7268  }
  7269  func (a *application) rewriteRefOfTruncateTable(parent SQLNode, node *TruncateTable, replacer replacerFunc) bool {
  7270  	if node == nil {
  7271  		return true
  7272  	}
  7273  	if a.pre != nil {
  7274  		a.cur.replacer = replacer
  7275  		a.cur.parent = parent
  7276  		a.cur.node = node
  7277  		if !a.pre(&a.cur) {
  7278  			return true
  7279  		}
  7280  	}
  7281  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  7282  		parent.(*TruncateTable).Table = newNode.(TableName)
  7283  	}) {
  7284  		return false
  7285  	}
  7286  	if a.post != nil {
  7287  		a.cur.replacer = replacer
  7288  		a.cur.parent = parent
  7289  		a.cur.node = node
  7290  		if !a.post(&a.cur) {
  7291  			return false
  7292  		}
  7293  	}
  7294  	return true
  7295  }
  7296  func (a *application) rewriteRefOfUnaryExpr(parent SQLNode, node *UnaryExpr, replacer replacerFunc) bool {
  7297  	if node == nil {
  7298  		return true
  7299  	}
  7300  	if a.pre != nil {
  7301  		a.cur.replacer = replacer
  7302  		a.cur.parent = parent
  7303  		a.cur.node = node
  7304  		if !a.pre(&a.cur) {
  7305  			return true
  7306  		}
  7307  	}
  7308  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  7309  		parent.(*UnaryExpr).Expr = newNode.(Expr)
  7310  	}) {
  7311  		return false
  7312  	}
  7313  	if a.post != nil {
  7314  		a.cur.replacer = replacer
  7315  		a.cur.parent = parent
  7316  		a.cur.node = node
  7317  		if !a.post(&a.cur) {
  7318  			return false
  7319  		}
  7320  	}
  7321  	return true
  7322  }
  7323  func (a *application) rewriteRefOfUnion(parent SQLNode, node *Union, replacer replacerFunc) bool {
  7324  	if node == nil {
  7325  		return true
  7326  	}
  7327  	if a.pre != nil {
  7328  		a.cur.replacer = replacer
  7329  		a.cur.parent = parent
  7330  		a.cur.node = node
  7331  		if !a.pre(&a.cur) {
  7332  			return true
  7333  		}
  7334  	}
  7335  	if !a.rewriteSelectStatement(node, node.Left, func(newNode, parent SQLNode) {
  7336  		parent.(*Union).Left = newNode.(SelectStatement)
  7337  	}) {
  7338  		return false
  7339  	}
  7340  	if !a.rewriteSelectStatement(node, node.Right, func(newNode, parent SQLNode) {
  7341  		parent.(*Union).Right = newNode.(SelectStatement)
  7342  	}) {
  7343  		return false
  7344  	}
  7345  	if !a.rewriteOrderBy(node, node.OrderBy, func(newNode, parent SQLNode) {
  7346  		parent.(*Union).OrderBy = newNode.(OrderBy)
  7347  	}) {
  7348  		return false
  7349  	}
  7350  	if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) {
  7351  		parent.(*Union).With = newNode.(*With)
  7352  	}) {
  7353  		return false
  7354  	}
  7355  	if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) {
  7356  		parent.(*Union).Limit = newNode.(*Limit)
  7357  	}) {
  7358  		return false
  7359  	}
  7360  	if !a.rewriteRefOfSelectInto(node, node.Into, func(newNode, parent SQLNode) {
  7361  		parent.(*Union).Into = newNode.(*SelectInto)
  7362  	}) {
  7363  		return false
  7364  	}
  7365  	if a.post != nil {
  7366  		a.cur.replacer = replacer
  7367  		a.cur.parent = parent
  7368  		a.cur.node = node
  7369  		if !a.post(&a.cur) {
  7370  			return false
  7371  		}
  7372  	}
  7373  	return true
  7374  }
  7375  func (a *application) rewriteRefOfUnlockTables(parent SQLNode, node *UnlockTables, replacer replacerFunc) bool {
  7376  	if node == nil {
  7377  		return true
  7378  	}
  7379  	if a.pre != nil {
  7380  		a.cur.replacer = replacer
  7381  		a.cur.parent = parent
  7382  		a.cur.node = node
  7383  		if !a.pre(&a.cur) {
  7384  			return true
  7385  		}
  7386  	}
  7387  	if a.post != nil {
  7388  		if a.pre == nil {
  7389  			a.cur.replacer = replacer
  7390  			a.cur.parent = parent
  7391  			a.cur.node = node
  7392  		}
  7393  		if !a.post(&a.cur) {
  7394  			return false
  7395  		}
  7396  	}
  7397  	return true
  7398  }
  7399  func (a *application) rewriteRefOfUpdate(parent SQLNode, node *Update, replacer replacerFunc) bool {
  7400  	if node == nil {
  7401  		return true
  7402  	}
  7403  	if a.pre != nil {
  7404  		a.cur.replacer = replacer
  7405  		a.cur.parent = parent
  7406  		a.cur.node = node
  7407  		if !a.pre(&a.cur) {
  7408  			return true
  7409  		}
  7410  	}
  7411  	if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) {
  7412  		parent.(*Update).With = newNode.(*With)
  7413  	}) {
  7414  		return false
  7415  	}
  7416  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  7417  		parent.(*Update).Comments = newNode.(*ParsedComments)
  7418  	}) {
  7419  		return false
  7420  	}
  7421  	if !a.rewriteTableExprs(node, node.TableExprs, func(newNode, parent SQLNode) {
  7422  		parent.(*Update).TableExprs = newNode.(TableExprs)
  7423  	}) {
  7424  		return false
  7425  	}
  7426  	if !a.rewriteUpdateExprs(node, node.Exprs, func(newNode, parent SQLNode) {
  7427  		parent.(*Update).Exprs = newNode.(UpdateExprs)
  7428  	}) {
  7429  		return false
  7430  	}
  7431  	if !a.rewriteRefOfWhere(node, node.Where, func(newNode, parent SQLNode) {
  7432  		parent.(*Update).Where = newNode.(*Where)
  7433  	}) {
  7434  		return false
  7435  	}
  7436  	if !a.rewriteOrderBy(node, node.OrderBy, func(newNode, parent SQLNode) {
  7437  		parent.(*Update).OrderBy = newNode.(OrderBy)
  7438  	}) {
  7439  		return false
  7440  	}
  7441  	if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) {
  7442  		parent.(*Update).Limit = newNode.(*Limit)
  7443  	}) {
  7444  		return false
  7445  	}
  7446  	if a.post != nil {
  7447  		a.cur.replacer = replacer
  7448  		a.cur.parent = parent
  7449  		a.cur.node = node
  7450  		if !a.post(&a.cur) {
  7451  			return false
  7452  		}
  7453  	}
  7454  	return true
  7455  }
  7456  func (a *application) rewriteRefOfUpdateExpr(parent SQLNode, node *UpdateExpr, replacer replacerFunc) bool {
  7457  	if node == nil {
  7458  		return true
  7459  	}
  7460  	if a.pre != nil {
  7461  		a.cur.replacer = replacer
  7462  		a.cur.parent = parent
  7463  		a.cur.node = node
  7464  		if !a.pre(&a.cur) {
  7465  			return true
  7466  		}
  7467  	}
  7468  	if !a.rewriteRefOfColName(node, node.Name, func(newNode, parent SQLNode) {
  7469  		parent.(*UpdateExpr).Name = newNode.(*ColName)
  7470  	}) {
  7471  		return false
  7472  	}
  7473  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  7474  		parent.(*UpdateExpr).Expr = newNode.(Expr)
  7475  	}) {
  7476  		return false
  7477  	}
  7478  	if a.post != nil {
  7479  		a.cur.replacer = replacer
  7480  		a.cur.parent = parent
  7481  		a.cur.node = node
  7482  		if !a.post(&a.cur) {
  7483  			return false
  7484  		}
  7485  	}
  7486  	return true
  7487  }
  7488  func (a *application) rewriteUpdateExprs(parent SQLNode, node UpdateExprs, replacer replacerFunc) bool {
  7489  	if node == nil {
  7490  		return true
  7491  	}
  7492  	if a.pre != nil {
  7493  		a.cur.replacer = replacer
  7494  		a.cur.parent = parent
  7495  		a.cur.node = node
  7496  		kontinue := !a.pre(&a.cur)
  7497  		if a.cur.revisit {
  7498  			node = a.cur.node.(UpdateExprs)
  7499  			a.cur.revisit = false
  7500  			return a.rewriteUpdateExprs(parent, node, replacer)
  7501  		}
  7502  		if kontinue {
  7503  			return true
  7504  		}
  7505  	}
  7506  	for x, el := range node {
  7507  		if !a.rewriteRefOfUpdateExpr(node, el, func(idx int) replacerFunc {
  7508  			return func(newNode, parent SQLNode) {
  7509  				parent.(UpdateExprs)[idx] = newNode.(*UpdateExpr)
  7510  			}
  7511  		}(x)) {
  7512  			return false
  7513  		}
  7514  	}
  7515  	if a.post != nil {
  7516  		a.cur.replacer = replacer
  7517  		a.cur.parent = parent
  7518  		a.cur.node = node
  7519  		if !a.post(&a.cur) {
  7520  			return false
  7521  		}
  7522  	}
  7523  	return true
  7524  }
  7525  func (a *application) rewriteRefOfUpdateXMLExpr(parent SQLNode, node *UpdateXMLExpr, replacer replacerFunc) bool {
  7526  	if node == nil {
  7527  		return true
  7528  	}
  7529  	if a.pre != nil {
  7530  		a.cur.replacer = replacer
  7531  		a.cur.parent = parent
  7532  		a.cur.node = node
  7533  		if !a.pre(&a.cur) {
  7534  			return true
  7535  		}
  7536  	}
  7537  	if !a.rewriteExpr(node, node.Target, func(newNode, parent SQLNode) {
  7538  		parent.(*UpdateXMLExpr).Target = newNode.(Expr)
  7539  	}) {
  7540  		return false
  7541  	}
  7542  	if !a.rewriteExpr(node, node.XPathExpr, func(newNode, parent SQLNode) {
  7543  		parent.(*UpdateXMLExpr).XPathExpr = newNode.(Expr)
  7544  	}) {
  7545  		return false
  7546  	}
  7547  	if !a.rewriteExpr(node, node.NewXML, func(newNode, parent SQLNode) {
  7548  		parent.(*UpdateXMLExpr).NewXML = newNode.(Expr)
  7549  	}) {
  7550  		return false
  7551  	}
  7552  	if a.post != nil {
  7553  		a.cur.replacer = replacer
  7554  		a.cur.parent = parent
  7555  		a.cur.node = node
  7556  		if !a.post(&a.cur) {
  7557  			return false
  7558  		}
  7559  	}
  7560  	return true
  7561  }
  7562  func (a *application) rewriteRefOfUse(parent SQLNode, node *Use, replacer replacerFunc) bool {
  7563  	if node == nil {
  7564  		return true
  7565  	}
  7566  	if a.pre != nil {
  7567  		a.cur.replacer = replacer
  7568  		a.cur.parent = parent
  7569  		a.cur.node = node
  7570  		if !a.pre(&a.cur) {
  7571  			return true
  7572  		}
  7573  	}
  7574  	if !a.rewriteIdentifierCS(node, node.DBName, func(newNode, parent SQLNode) {
  7575  		parent.(*Use).DBName = newNode.(IdentifierCS)
  7576  	}) {
  7577  		return false
  7578  	}
  7579  	if a.post != nil {
  7580  		a.cur.replacer = replacer
  7581  		a.cur.parent = parent
  7582  		a.cur.node = node
  7583  		if !a.post(&a.cur) {
  7584  			return false
  7585  		}
  7586  	}
  7587  	return true
  7588  }
  7589  func (a *application) rewriteRefOfVExplainStmt(parent SQLNode, node *VExplainStmt, replacer replacerFunc) bool {
  7590  	if node == nil {
  7591  		return true
  7592  	}
  7593  	if a.pre != nil {
  7594  		a.cur.replacer = replacer
  7595  		a.cur.parent = parent
  7596  		a.cur.node = node
  7597  		if !a.pre(&a.cur) {
  7598  			return true
  7599  		}
  7600  	}
  7601  	if !a.rewriteStatement(node, node.Statement, func(newNode, parent SQLNode) {
  7602  		parent.(*VExplainStmt).Statement = newNode.(Statement)
  7603  	}) {
  7604  		return false
  7605  	}
  7606  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  7607  		parent.(*VExplainStmt).Comments = newNode.(*ParsedComments)
  7608  	}) {
  7609  		return false
  7610  	}
  7611  	if a.post != nil {
  7612  		a.cur.replacer = replacer
  7613  		a.cur.parent = parent
  7614  		a.cur.node = node
  7615  		if !a.post(&a.cur) {
  7616  			return false
  7617  		}
  7618  	}
  7619  	return true
  7620  }
  7621  func (a *application) rewriteRefOfVStream(parent SQLNode, node *VStream, replacer replacerFunc) bool {
  7622  	if node == nil {
  7623  		return true
  7624  	}
  7625  	if a.pre != nil {
  7626  		a.cur.replacer = replacer
  7627  		a.cur.parent = parent
  7628  		a.cur.node = node
  7629  		if !a.pre(&a.cur) {
  7630  			return true
  7631  		}
  7632  	}
  7633  	if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) {
  7634  		parent.(*VStream).Comments = newNode.(*ParsedComments)
  7635  	}) {
  7636  		return false
  7637  	}
  7638  	if !a.rewriteSelectExpr(node, node.SelectExpr, func(newNode, parent SQLNode) {
  7639  		parent.(*VStream).SelectExpr = newNode.(SelectExpr)
  7640  	}) {
  7641  		return false
  7642  	}
  7643  	if !a.rewriteTableName(node, node.Table, func(newNode, parent SQLNode) {
  7644  		parent.(*VStream).Table = newNode.(TableName)
  7645  	}) {
  7646  		return false
  7647  	}
  7648  	if !a.rewriteRefOfWhere(node, node.Where, func(newNode, parent SQLNode) {
  7649  		parent.(*VStream).Where = newNode.(*Where)
  7650  	}) {
  7651  		return false
  7652  	}
  7653  	if !a.rewriteRefOfLimit(node, node.Limit, func(newNode, parent SQLNode) {
  7654  		parent.(*VStream).Limit = newNode.(*Limit)
  7655  	}) {
  7656  		return false
  7657  	}
  7658  	if a.post != nil {
  7659  		a.cur.replacer = replacer
  7660  		a.cur.parent = parent
  7661  		a.cur.node = node
  7662  		if !a.post(&a.cur) {
  7663  			return false
  7664  		}
  7665  	}
  7666  	return true
  7667  }
  7668  func (a *application) rewriteValTuple(parent SQLNode, node ValTuple, replacer replacerFunc) bool {
  7669  	if node == nil {
  7670  		return true
  7671  	}
  7672  	if a.pre != nil {
  7673  		a.cur.replacer = replacer
  7674  		a.cur.parent = parent
  7675  		a.cur.node = node
  7676  		kontinue := !a.pre(&a.cur)
  7677  		if a.cur.revisit {
  7678  			node = a.cur.node.(ValTuple)
  7679  			a.cur.revisit = false
  7680  			return a.rewriteValTuple(parent, node, replacer)
  7681  		}
  7682  		if kontinue {
  7683  			return true
  7684  		}
  7685  	}
  7686  	for x, el := range node {
  7687  		if !a.rewriteExpr(node, el, func(idx int) replacerFunc {
  7688  			return func(newNode, parent SQLNode) {
  7689  				parent.(ValTuple)[idx] = newNode.(Expr)
  7690  			}
  7691  		}(x)) {
  7692  			return false
  7693  		}
  7694  	}
  7695  	if a.post != nil {
  7696  		a.cur.replacer = replacer
  7697  		a.cur.parent = parent
  7698  		a.cur.node = node
  7699  		if !a.post(&a.cur) {
  7700  			return false
  7701  		}
  7702  	}
  7703  	return true
  7704  }
  7705  func (a *application) rewriteRefOfValidation(parent SQLNode, node *Validation, replacer replacerFunc) bool {
  7706  	if node == nil {
  7707  		return true
  7708  	}
  7709  	if a.pre != nil {
  7710  		a.cur.replacer = replacer
  7711  		a.cur.parent = parent
  7712  		a.cur.node = node
  7713  		if !a.pre(&a.cur) {
  7714  			return true
  7715  		}
  7716  	}
  7717  	if a.post != nil {
  7718  		if a.pre == nil {
  7719  			a.cur.replacer = replacer
  7720  			a.cur.parent = parent
  7721  			a.cur.node = node
  7722  		}
  7723  		if !a.post(&a.cur) {
  7724  			return false
  7725  		}
  7726  	}
  7727  	return true
  7728  }
  7729  func (a *application) rewriteValues(parent SQLNode, node Values, replacer replacerFunc) bool {
  7730  	if node == nil {
  7731  		return true
  7732  	}
  7733  	if a.pre != nil {
  7734  		a.cur.replacer = replacer
  7735  		a.cur.parent = parent
  7736  		a.cur.node = node
  7737  		kontinue := !a.pre(&a.cur)
  7738  		if a.cur.revisit {
  7739  			node = a.cur.node.(Values)
  7740  			a.cur.revisit = false
  7741  			return a.rewriteValues(parent, node, replacer)
  7742  		}
  7743  		if kontinue {
  7744  			return true
  7745  		}
  7746  	}
  7747  	for x, el := range node {
  7748  		if !a.rewriteValTuple(node, el, func(idx int) replacerFunc {
  7749  			return func(newNode, parent SQLNode) {
  7750  				parent.(Values)[idx] = newNode.(ValTuple)
  7751  			}
  7752  		}(x)) {
  7753  			return false
  7754  		}
  7755  	}
  7756  	if a.post != nil {
  7757  		a.cur.replacer = replacer
  7758  		a.cur.parent = parent
  7759  		a.cur.node = node
  7760  		if !a.post(&a.cur) {
  7761  			return false
  7762  		}
  7763  	}
  7764  	return true
  7765  }
  7766  func (a *application) rewriteRefOfValuesFuncExpr(parent SQLNode, node *ValuesFuncExpr, replacer replacerFunc) bool {
  7767  	if node == nil {
  7768  		return true
  7769  	}
  7770  	if a.pre != nil {
  7771  		a.cur.replacer = replacer
  7772  		a.cur.parent = parent
  7773  		a.cur.node = node
  7774  		if !a.pre(&a.cur) {
  7775  			return true
  7776  		}
  7777  	}
  7778  	if !a.rewriteRefOfColName(node, node.Name, func(newNode, parent SQLNode) {
  7779  		parent.(*ValuesFuncExpr).Name = newNode.(*ColName)
  7780  	}) {
  7781  		return false
  7782  	}
  7783  	if a.post != nil {
  7784  		a.cur.replacer = replacer
  7785  		a.cur.parent = parent
  7786  		a.cur.node = node
  7787  		if !a.post(&a.cur) {
  7788  			return false
  7789  		}
  7790  	}
  7791  	return true
  7792  }
  7793  func (a *application) rewriteRefOfVarPop(parent SQLNode, node *VarPop, replacer replacerFunc) bool {
  7794  	if node == nil {
  7795  		return true
  7796  	}
  7797  	if a.pre != nil {
  7798  		a.cur.replacer = replacer
  7799  		a.cur.parent = parent
  7800  		a.cur.node = node
  7801  		if !a.pre(&a.cur) {
  7802  			return true
  7803  		}
  7804  	}
  7805  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  7806  		parent.(*VarPop).Arg = newNode.(Expr)
  7807  	}) {
  7808  		return false
  7809  	}
  7810  	if a.post != nil {
  7811  		a.cur.replacer = replacer
  7812  		a.cur.parent = parent
  7813  		a.cur.node = node
  7814  		if !a.post(&a.cur) {
  7815  			return false
  7816  		}
  7817  	}
  7818  	return true
  7819  }
  7820  func (a *application) rewriteRefOfVarSamp(parent SQLNode, node *VarSamp, replacer replacerFunc) bool {
  7821  	if node == nil {
  7822  		return true
  7823  	}
  7824  	if a.pre != nil {
  7825  		a.cur.replacer = replacer
  7826  		a.cur.parent = parent
  7827  		a.cur.node = node
  7828  		if !a.pre(&a.cur) {
  7829  			return true
  7830  		}
  7831  	}
  7832  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  7833  		parent.(*VarSamp).Arg = newNode.(Expr)
  7834  	}) {
  7835  		return false
  7836  	}
  7837  	if a.post != nil {
  7838  		a.cur.replacer = replacer
  7839  		a.cur.parent = parent
  7840  		a.cur.node = node
  7841  		if !a.post(&a.cur) {
  7842  			return false
  7843  		}
  7844  	}
  7845  	return true
  7846  }
  7847  func (a *application) rewriteRefOfVariable(parent SQLNode, node *Variable, replacer replacerFunc) bool {
  7848  	if node == nil {
  7849  		return true
  7850  	}
  7851  	if a.pre != nil {
  7852  		a.cur.replacer = replacer
  7853  		a.cur.parent = parent
  7854  		a.cur.node = node
  7855  		if !a.pre(&a.cur) {
  7856  			return true
  7857  		}
  7858  	}
  7859  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  7860  		parent.(*Variable).Name = newNode.(IdentifierCI)
  7861  	}) {
  7862  		return false
  7863  	}
  7864  	if a.post != nil {
  7865  		a.cur.replacer = replacer
  7866  		a.cur.parent = parent
  7867  		a.cur.node = node
  7868  		if !a.post(&a.cur) {
  7869  			return false
  7870  		}
  7871  	}
  7872  	return true
  7873  }
  7874  func (a *application) rewriteRefOfVariance(parent SQLNode, node *Variance, replacer replacerFunc) bool {
  7875  	if node == nil {
  7876  		return true
  7877  	}
  7878  	if a.pre != nil {
  7879  		a.cur.replacer = replacer
  7880  		a.cur.parent = parent
  7881  		a.cur.node = node
  7882  		if !a.pre(&a.cur) {
  7883  			return true
  7884  		}
  7885  	}
  7886  	if !a.rewriteExpr(node, node.Arg, func(newNode, parent SQLNode) {
  7887  		parent.(*Variance).Arg = newNode.(Expr)
  7888  	}) {
  7889  		return false
  7890  	}
  7891  	if a.post != nil {
  7892  		a.cur.replacer = replacer
  7893  		a.cur.parent = parent
  7894  		a.cur.node = node
  7895  		if !a.post(&a.cur) {
  7896  			return false
  7897  		}
  7898  	}
  7899  	return true
  7900  }
  7901  func (a *application) rewriteVindexParam(parent SQLNode, node VindexParam, replacer replacerFunc) bool {
  7902  	if a.pre != nil {
  7903  		a.cur.replacer = replacer
  7904  		a.cur.parent = parent
  7905  		a.cur.node = node
  7906  		if !a.pre(&a.cur) {
  7907  			return true
  7908  		}
  7909  	}
  7910  	if !a.rewriteIdentifierCI(node, node.Key, func(newNode, parent SQLNode) {
  7911  		panic("[BUG] tried to replace 'Key' on 'VindexParam'")
  7912  	}) {
  7913  		return false
  7914  	}
  7915  	if a.post != nil {
  7916  		a.cur.replacer = replacer
  7917  		a.cur.parent = parent
  7918  		a.cur.node = node
  7919  		if !a.post(&a.cur) {
  7920  			return false
  7921  		}
  7922  	}
  7923  	return true
  7924  }
  7925  func (a *application) rewriteRefOfVindexSpec(parent SQLNode, node *VindexSpec, replacer replacerFunc) bool {
  7926  	if node == nil {
  7927  		return true
  7928  	}
  7929  	if a.pre != nil {
  7930  		a.cur.replacer = replacer
  7931  		a.cur.parent = parent
  7932  		a.cur.node = node
  7933  		if !a.pre(&a.cur) {
  7934  			return true
  7935  		}
  7936  	}
  7937  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  7938  		parent.(*VindexSpec).Name = newNode.(IdentifierCI)
  7939  	}) {
  7940  		return false
  7941  	}
  7942  	if !a.rewriteIdentifierCI(node, node.Type, func(newNode, parent SQLNode) {
  7943  		parent.(*VindexSpec).Type = newNode.(IdentifierCI)
  7944  	}) {
  7945  		return false
  7946  	}
  7947  	for x, el := range node.Params {
  7948  		if !a.rewriteVindexParam(node, el, func(idx int) replacerFunc {
  7949  			return func(newNode, parent SQLNode) {
  7950  				parent.(*VindexSpec).Params[idx] = newNode.(VindexParam)
  7951  			}
  7952  		}(x)) {
  7953  			return false
  7954  		}
  7955  	}
  7956  	if a.post != nil {
  7957  		a.cur.replacer = replacer
  7958  		a.cur.parent = parent
  7959  		a.cur.node = node
  7960  		if !a.post(&a.cur) {
  7961  			return false
  7962  		}
  7963  	}
  7964  	return true
  7965  }
  7966  func (a *application) rewriteRefOfWeightStringFuncExpr(parent SQLNode, node *WeightStringFuncExpr, replacer replacerFunc) bool {
  7967  	if node == nil {
  7968  		return true
  7969  	}
  7970  	if a.pre != nil {
  7971  		a.cur.replacer = replacer
  7972  		a.cur.parent = parent
  7973  		a.cur.node = node
  7974  		if !a.pre(&a.cur) {
  7975  			return true
  7976  		}
  7977  	}
  7978  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  7979  		parent.(*WeightStringFuncExpr).Expr = newNode.(Expr)
  7980  	}) {
  7981  		return false
  7982  	}
  7983  	if !a.rewriteRefOfConvertType(node, node.As, func(newNode, parent SQLNode) {
  7984  		parent.(*WeightStringFuncExpr).As = newNode.(*ConvertType)
  7985  	}) {
  7986  		return false
  7987  	}
  7988  	if a.post != nil {
  7989  		a.cur.replacer = replacer
  7990  		a.cur.parent = parent
  7991  		a.cur.node = node
  7992  		if !a.post(&a.cur) {
  7993  			return false
  7994  		}
  7995  	}
  7996  	return true
  7997  }
  7998  func (a *application) rewriteRefOfWhen(parent SQLNode, node *When, replacer replacerFunc) bool {
  7999  	if node == nil {
  8000  		return true
  8001  	}
  8002  	if a.pre != nil {
  8003  		a.cur.replacer = replacer
  8004  		a.cur.parent = parent
  8005  		a.cur.node = node
  8006  		if !a.pre(&a.cur) {
  8007  			return true
  8008  		}
  8009  	}
  8010  	if !a.rewriteExpr(node, node.Cond, func(newNode, parent SQLNode) {
  8011  		parent.(*When).Cond = newNode.(Expr)
  8012  	}) {
  8013  		return false
  8014  	}
  8015  	if !a.rewriteExpr(node, node.Val, func(newNode, parent SQLNode) {
  8016  		parent.(*When).Val = newNode.(Expr)
  8017  	}) {
  8018  		return false
  8019  	}
  8020  	if a.post != nil {
  8021  		a.cur.replacer = replacer
  8022  		a.cur.parent = parent
  8023  		a.cur.node = node
  8024  		if !a.post(&a.cur) {
  8025  			return false
  8026  		}
  8027  	}
  8028  	return true
  8029  }
  8030  func (a *application) rewriteRefOfWhere(parent SQLNode, node *Where, replacer replacerFunc) bool {
  8031  	if node == nil {
  8032  		return true
  8033  	}
  8034  	if a.pre != nil {
  8035  		a.cur.replacer = replacer
  8036  		a.cur.parent = parent
  8037  		a.cur.node = node
  8038  		if !a.pre(&a.cur) {
  8039  			return true
  8040  		}
  8041  	}
  8042  	if !a.rewriteExpr(node, node.Expr, func(newNode, parent SQLNode) {
  8043  		parent.(*Where).Expr = newNode.(Expr)
  8044  	}) {
  8045  		return false
  8046  	}
  8047  	if a.post != nil {
  8048  		a.cur.replacer = replacer
  8049  		a.cur.parent = parent
  8050  		a.cur.node = node
  8051  		if !a.post(&a.cur) {
  8052  			return false
  8053  		}
  8054  	}
  8055  	return true
  8056  }
  8057  func (a *application) rewriteRefOfWindowDefinition(parent SQLNode, node *WindowDefinition, replacer replacerFunc) bool {
  8058  	if node == nil {
  8059  		return true
  8060  	}
  8061  	if a.pre != nil {
  8062  		a.cur.replacer = replacer
  8063  		a.cur.parent = parent
  8064  		a.cur.node = node
  8065  		if !a.pre(&a.cur) {
  8066  			return true
  8067  		}
  8068  	}
  8069  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  8070  		parent.(*WindowDefinition).Name = newNode.(IdentifierCI)
  8071  	}) {
  8072  		return false
  8073  	}
  8074  	if !a.rewriteRefOfWindowSpecification(node, node.WindowSpec, func(newNode, parent SQLNode) {
  8075  		parent.(*WindowDefinition).WindowSpec = newNode.(*WindowSpecification)
  8076  	}) {
  8077  		return false
  8078  	}
  8079  	if a.post != nil {
  8080  		a.cur.replacer = replacer
  8081  		a.cur.parent = parent
  8082  		a.cur.node = node
  8083  		if !a.post(&a.cur) {
  8084  			return false
  8085  		}
  8086  	}
  8087  	return true
  8088  }
  8089  func (a *application) rewriteWindowDefinitions(parent SQLNode, node WindowDefinitions, replacer replacerFunc) bool {
  8090  	if node == nil {
  8091  		return true
  8092  	}
  8093  	if a.pre != nil {
  8094  		a.cur.replacer = replacer
  8095  		a.cur.parent = parent
  8096  		a.cur.node = node
  8097  		kontinue := !a.pre(&a.cur)
  8098  		if a.cur.revisit {
  8099  			node = a.cur.node.(WindowDefinitions)
  8100  			a.cur.revisit = false
  8101  			return a.rewriteWindowDefinitions(parent, node, replacer)
  8102  		}
  8103  		if kontinue {
  8104  			return true
  8105  		}
  8106  	}
  8107  	for x, el := range node {
  8108  		if !a.rewriteRefOfWindowDefinition(node, el, func(idx int) replacerFunc {
  8109  			return func(newNode, parent SQLNode) {
  8110  				parent.(WindowDefinitions)[idx] = newNode.(*WindowDefinition)
  8111  			}
  8112  		}(x)) {
  8113  			return false
  8114  		}
  8115  	}
  8116  	if a.post != nil {
  8117  		a.cur.replacer = replacer
  8118  		a.cur.parent = parent
  8119  		a.cur.node = node
  8120  		if !a.post(&a.cur) {
  8121  			return false
  8122  		}
  8123  	}
  8124  	return true
  8125  }
  8126  func (a *application) rewriteRefOfWindowSpecification(parent SQLNode, node *WindowSpecification, replacer replacerFunc) bool {
  8127  	if node == nil {
  8128  		return true
  8129  	}
  8130  	if a.pre != nil {
  8131  		a.cur.replacer = replacer
  8132  		a.cur.parent = parent
  8133  		a.cur.node = node
  8134  		if !a.pre(&a.cur) {
  8135  			return true
  8136  		}
  8137  	}
  8138  	if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) {
  8139  		parent.(*WindowSpecification).Name = newNode.(IdentifierCI)
  8140  	}) {
  8141  		return false
  8142  	}
  8143  	if !a.rewriteExprs(node, node.PartitionClause, func(newNode, parent SQLNode) {
  8144  		parent.(*WindowSpecification).PartitionClause = newNode.(Exprs)
  8145  	}) {
  8146  		return false
  8147  	}
  8148  	if !a.rewriteOrderBy(node, node.OrderClause, func(newNode, parent SQLNode) {
  8149  		parent.(*WindowSpecification).OrderClause = newNode.(OrderBy)
  8150  	}) {
  8151  		return false
  8152  	}
  8153  	if !a.rewriteRefOfFrameClause(node, node.FrameClause, func(newNode, parent SQLNode) {
  8154  		parent.(*WindowSpecification).FrameClause = newNode.(*FrameClause)
  8155  	}) {
  8156  		return false
  8157  	}
  8158  	if a.post != nil {
  8159  		a.cur.replacer = replacer
  8160  		a.cur.parent = parent
  8161  		a.cur.node = node
  8162  		if !a.post(&a.cur) {
  8163  			return false
  8164  		}
  8165  	}
  8166  	return true
  8167  }
  8168  func (a *application) rewriteRefOfWith(parent SQLNode, node *With, replacer replacerFunc) bool {
  8169  	if node == nil {
  8170  		return true
  8171  	}
  8172  	if a.pre != nil {
  8173  		a.cur.replacer = replacer
  8174  		a.cur.parent = parent
  8175  		a.cur.node = node
  8176  		if !a.pre(&a.cur) {
  8177  			return true
  8178  		}
  8179  	}
  8180  	for x, el := range node.ctes {
  8181  		if !a.rewriteRefOfCommonTableExpr(node, el, func(idx int) replacerFunc {
  8182  			return func(newNode, parent SQLNode) {
  8183  				parent.(*With).ctes[idx] = newNode.(*CommonTableExpr)
  8184  			}
  8185  		}(x)) {
  8186  			return false
  8187  		}
  8188  	}
  8189  	if a.post != nil {
  8190  		a.cur.replacer = replacer
  8191  		a.cur.parent = parent
  8192  		a.cur.node = node
  8193  		if !a.post(&a.cur) {
  8194  			return false
  8195  		}
  8196  	}
  8197  	return true
  8198  }
  8199  func (a *application) rewriteRefOfXorExpr(parent SQLNode, node *XorExpr, replacer replacerFunc) bool {
  8200  	if node == nil {
  8201  		return true
  8202  	}
  8203  	if a.pre != nil {
  8204  		a.cur.replacer = replacer
  8205  		a.cur.parent = parent
  8206  		a.cur.node = node
  8207  		if !a.pre(&a.cur) {
  8208  			return true
  8209  		}
  8210  	}
  8211  	if !a.rewriteExpr(node, node.Left, func(newNode, parent SQLNode) {
  8212  		parent.(*XorExpr).Left = newNode.(Expr)
  8213  	}) {
  8214  		return false
  8215  	}
  8216  	if !a.rewriteExpr(node, node.Right, func(newNode, parent SQLNode) {
  8217  		parent.(*XorExpr).Right = newNode.(Expr)
  8218  	}) {
  8219  		return false
  8220  	}
  8221  	if a.post != nil {
  8222  		a.cur.replacer = replacer
  8223  		a.cur.parent = parent
  8224  		a.cur.node = node
  8225  		if !a.post(&a.cur) {
  8226  			return false
  8227  		}
  8228  	}
  8229  	return true
  8230  }
  8231  func (a *application) rewriteAggrFunc(parent SQLNode, node AggrFunc, replacer replacerFunc) bool {
  8232  	if node == nil {
  8233  		return true
  8234  	}
  8235  	switch node := node.(type) {
  8236  	case *Avg:
  8237  		return a.rewriteRefOfAvg(parent, node, replacer)
  8238  	case *BitAnd:
  8239  		return a.rewriteRefOfBitAnd(parent, node, replacer)
  8240  	case *BitOr:
  8241  		return a.rewriteRefOfBitOr(parent, node, replacer)
  8242  	case *BitXor:
  8243  		return a.rewriteRefOfBitXor(parent, node, replacer)
  8244  	case *Count:
  8245  		return a.rewriteRefOfCount(parent, node, replacer)
  8246  	case *CountStar:
  8247  		return a.rewriteRefOfCountStar(parent, node, replacer)
  8248  	case *GroupConcatExpr:
  8249  		return a.rewriteRefOfGroupConcatExpr(parent, node, replacer)
  8250  	case *Max:
  8251  		return a.rewriteRefOfMax(parent, node, replacer)
  8252  	case *Min:
  8253  		return a.rewriteRefOfMin(parent, node, replacer)
  8254  	case *Std:
  8255  		return a.rewriteRefOfStd(parent, node, replacer)
  8256  	case *StdDev:
  8257  		return a.rewriteRefOfStdDev(parent, node, replacer)
  8258  	case *StdPop:
  8259  		return a.rewriteRefOfStdPop(parent, node, replacer)
  8260  	case *StdSamp:
  8261  		return a.rewriteRefOfStdSamp(parent, node, replacer)
  8262  	case *Sum:
  8263  		return a.rewriteRefOfSum(parent, node, replacer)
  8264  	case *VarPop:
  8265  		return a.rewriteRefOfVarPop(parent, node, replacer)
  8266  	case *VarSamp:
  8267  		return a.rewriteRefOfVarSamp(parent, node, replacer)
  8268  	case *Variance:
  8269  		return a.rewriteRefOfVariance(parent, node, replacer)
  8270  	default:
  8271  		// this should never happen
  8272  		return true
  8273  	}
  8274  }
  8275  func (a *application) rewriteAlterOption(parent SQLNode, node AlterOption, replacer replacerFunc) bool {
  8276  	if node == nil {
  8277  		return true
  8278  	}
  8279  	switch node := node.(type) {
  8280  	case *AddColumns:
  8281  		return a.rewriteRefOfAddColumns(parent, node, replacer)
  8282  	case *AddConstraintDefinition:
  8283  		return a.rewriteRefOfAddConstraintDefinition(parent, node, replacer)
  8284  	case *AddIndexDefinition:
  8285  		return a.rewriteRefOfAddIndexDefinition(parent, node, replacer)
  8286  	case AlgorithmValue:
  8287  		return a.rewriteAlgorithmValue(parent, node, replacer)
  8288  	case *AlterCharset:
  8289  		return a.rewriteRefOfAlterCharset(parent, node, replacer)
  8290  	case *AlterCheck:
  8291  		return a.rewriteRefOfAlterCheck(parent, node, replacer)
  8292  	case *AlterColumn:
  8293  		return a.rewriteRefOfAlterColumn(parent, node, replacer)
  8294  	case *AlterIndex:
  8295  		return a.rewriteRefOfAlterIndex(parent, node, replacer)
  8296  	case *ChangeColumn:
  8297  		return a.rewriteRefOfChangeColumn(parent, node, replacer)
  8298  	case *DropColumn:
  8299  		return a.rewriteRefOfDropColumn(parent, node, replacer)
  8300  	case *DropKey:
  8301  		return a.rewriteRefOfDropKey(parent, node, replacer)
  8302  	case *Force:
  8303  		return a.rewriteRefOfForce(parent, node, replacer)
  8304  	case *KeyState:
  8305  		return a.rewriteRefOfKeyState(parent, node, replacer)
  8306  	case *LockOption:
  8307  		return a.rewriteRefOfLockOption(parent, node, replacer)
  8308  	case *ModifyColumn:
  8309  		return a.rewriteRefOfModifyColumn(parent, node, replacer)
  8310  	case *OrderByOption:
  8311  		return a.rewriteRefOfOrderByOption(parent, node, replacer)
  8312  	case *RenameColumn:
  8313  		return a.rewriteRefOfRenameColumn(parent, node, replacer)
  8314  	case *RenameIndex:
  8315  		return a.rewriteRefOfRenameIndex(parent, node, replacer)
  8316  	case *RenameTableName:
  8317  		return a.rewriteRefOfRenameTableName(parent, node, replacer)
  8318  	case TableOptions:
  8319  		return a.rewriteTableOptions(parent, node, replacer)
  8320  	case *TablespaceOperation:
  8321  		return a.rewriteRefOfTablespaceOperation(parent, node, replacer)
  8322  	case *Validation:
  8323  		return a.rewriteRefOfValidation(parent, node, replacer)
  8324  	default:
  8325  		// this should never happen
  8326  		return true
  8327  	}
  8328  }
  8329  func (a *application) rewriteCallable(parent SQLNode, node Callable, replacer replacerFunc) bool {
  8330  	if node == nil {
  8331  		return true
  8332  	}
  8333  	switch node := node.(type) {
  8334  	case *ArgumentLessWindowExpr:
  8335  		return a.rewriteRefOfArgumentLessWindowExpr(parent, node, replacer)
  8336  	case *Avg:
  8337  		return a.rewriteRefOfAvg(parent, node, replacer)
  8338  	case *CharExpr:
  8339  		return a.rewriteRefOfCharExpr(parent, node, replacer)
  8340  	case *ConvertExpr:
  8341  		return a.rewriteRefOfConvertExpr(parent, node, replacer)
  8342  	case *ConvertUsingExpr:
  8343  		return a.rewriteRefOfConvertUsingExpr(parent, node, replacer)
  8344  	case *Count:
  8345  		return a.rewriteRefOfCount(parent, node, replacer)
  8346  	case *CountStar:
  8347  		return a.rewriteRefOfCountStar(parent, node, replacer)
  8348  	case *CurTimeFuncExpr:
  8349  		return a.rewriteRefOfCurTimeFuncExpr(parent, node, replacer)
  8350  	case *ExtractFuncExpr:
  8351  		return a.rewriteRefOfExtractFuncExpr(parent, node, replacer)
  8352  	case *ExtractValueExpr:
  8353  		return a.rewriteRefOfExtractValueExpr(parent, node, replacer)
  8354  	case *FirstOrLastValueExpr:
  8355  		return a.rewriteRefOfFirstOrLastValueExpr(parent, node, replacer)
  8356  	case *FuncExpr:
  8357  		return a.rewriteRefOfFuncExpr(parent, node, replacer)
  8358  	case *GTIDFuncExpr:
  8359  		return a.rewriteRefOfGTIDFuncExpr(parent, node, replacer)
  8360  	case *GroupConcatExpr:
  8361  		return a.rewriteRefOfGroupConcatExpr(parent, node, replacer)
  8362  	case *InsertExpr:
  8363  		return a.rewriteRefOfInsertExpr(parent, node, replacer)
  8364  	case *IntervalFuncExpr:
  8365  		return a.rewriteRefOfIntervalFuncExpr(parent, node, replacer)
  8366  	case *JSONArrayExpr:
  8367  		return a.rewriteRefOfJSONArrayExpr(parent, node, replacer)
  8368  	case *JSONAttributesExpr:
  8369  		return a.rewriteRefOfJSONAttributesExpr(parent, node, replacer)
  8370  	case *JSONContainsExpr:
  8371  		return a.rewriteRefOfJSONContainsExpr(parent, node, replacer)
  8372  	case *JSONContainsPathExpr:
  8373  		return a.rewriteRefOfJSONContainsPathExpr(parent, node, replacer)
  8374  	case *JSONExtractExpr:
  8375  		return a.rewriteRefOfJSONExtractExpr(parent, node, replacer)
  8376  	case *JSONKeysExpr:
  8377  		return a.rewriteRefOfJSONKeysExpr(parent, node, replacer)
  8378  	case *JSONObjectExpr:
  8379  		return a.rewriteRefOfJSONObjectExpr(parent, node, replacer)
  8380  	case *JSONOverlapsExpr:
  8381  		return a.rewriteRefOfJSONOverlapsExpr(parent, node, replacer)
  8382  	case *JSONPrettyExpr:
  8383  		return a.rewriteRefOfJSONPrettyExpr(parent, node, replacer)
  8384  	case *JSONQuoteExpr:
  8385  		return a.rewriteRefOfJSONQuoteExpr(parent, node, replacer)
  8386  	case *JSONRemoveExpr:
  8387  		return a.rewriteRefOfJSONRemoveExpr(parent, node, replacer)
  8388  	case *JSONSchemaValidFuncExpr:
  8389  		return a.rewriteRefOfJSONSchemaValidFuncExpr(parent, node, replacer)
  8390  	case *JSONSchemaValidationReportFuncExpr:
  8391  		return a.rewriteRefOfJSONSchemaValidationReportFuncExpr(parent, node, replacer)
  8392  	case *JSONSearchExpr:
  8393  		return a.rewriteRefOfJSONSearchExpr(parent, node, replacer)
  8394  	case *JSONStorageFreeExpr:
  8395  		return a.rewriteRefOfJSONStorageFreeExpr(parent, node, replacer)
  8396  	case *JSONStorageSizeExpr:
  8397  		return a.rewriteRefOfJSONStorageSizeExpr(parent, node, replacer)
  8398  	case *JSONUnquoteExpr:
  8399  		return a.rewriteRefOfJSONUnquoteExpr(parent, node, replacer)
  8400  	case *JSONValueExpr:
  8401  		return a.rewriteRefOfJSONValueExpr(parent, node, replacer)
  8402  	case *JSONValueMergeExpr:
  8403  		return a.rewriteRefOfJSONValueMergeExpr(parent, node, replacer)
  8404  	case *JSONValueModifierExpr:
  8405  		return a.rewriteRefOfJSONValueModifierExpr(parent, node, replacer)
  8406  	case *LagLeadExpr:
  8407  		return a.rewriteRefOfLagLeadExpr(parent, node, replacer)
  8408  	case *LocateExpr:
  8409  		return a.rewriteRefOfLocateExpr(parent, node, replacer)
  8410  	case *MatchExpr:
  8411  		return a.rewriteRefOfMatchExpr(parent, node, replacer)
  8412  	case *Max:
  8413  		return a.rewriteRefOfMax(parent, node, replacer)
  8414  	case *MemberOfExpr:
  8415  		return a.rewriteRefOfMemberOfExpr(parent, node, replacer)
  8416  	case *Min:
  8417  		return a.rewriteRefOfMin(parent, node, replacer)
  8418  	case *NTHValueExpr:
  8419  		return a.rewriteRefOfNTHValueExpr(parent, node, replacer)
  8420  	case *NamedWindow:
  8421  		return a.rewriteRefOfNamedWindow(parent, node, replacer)
  8422  	case *NtileExpr:
  8423  		return a.rewriteRefOfNtileExpr(parent, node, replacer)
  8424  	case *PerformanceSchemaFuncExpr:
  8425  		return a.rewriteRefOfPerformanceSchemaFuncExpr(parent, node, replacer)
  8426  	case *RegexpInstrExpr:
  8427  		return a.rewriteRefOfRegexpInstrExpr(parent, node, replacer)
  8428  	case *RegexpLikeExpr:
  8429  		return a.rewriteRefOfRegexpLikeExpr(parent, node, replacer)
  8430  	case *RegexpReplaceExpr:
  8431  		return a.rewriteRefOfRegexpReplaceExpr(parent, node, replacer)
  8432  	case *RegexpSubstrExpr:
  8433  		return a.rewriteRefOfRegexpSubstrExpr(parent, node, replacer)
  8434  	case *SubstrExpr:
  8435  		return a.rewriteRefOfSubstrExpr(parent, node, replacer)
  8436  	case *Sum:
  8437  		return a.rewriteRefOfSum(parent, node, replacer)
  8438  	case *TimestampFuncExpr:
  8439  		return a.rewriteRefOfTimestampFuncExpr(parent, node, replacer)
  8440  	case *TrimFuncExpr:
  8441  		return a.rewriteRefOfTrimFuncExpr(parent, node, replacer)
  8442  	case *UpdateXMLExpr:
  8443  		return a.rewriteRefOfUpdateXMLExpr(parent, node, replacer)
  8444  	case *ValuesFuncExpr:
  8445  		return a.rewriteRefOfValuesFuncExpr(parent, node, replacer)
  8446  	case *WeightStringFuncExpr:
  8447  		return a.rewriteRefOfWeightStringFuncExpr(parent, node, replacer)
  8448  	default:
  8449  		// this should never happen
  8450  		return true
  8451  	}
  8452  }
  8453  func (a *application) rewriteColTuple(parent SQLNode, node ColTuple, replacer replacerFunc) bool {
  8454  	if node == nil {
  8455  		return true
  8456  	}
  8457  	switch node := node.(type) {
  8458  	case ListArg:
  8459  		return a.rewriteListArg(parent, node, replacer)
  8460  	case *Subquery:
  8461  		return a.rewriteRefOfSubquery(parent, node, replacer)
  8462  	case ValTuple:
  8463  		return a.rewriteValTuple(parent, node, replacer)
  8464  	default:
  8465  		// this should never happen
  8466  		return true
  8467  	}
  8468  }
  8469  func (a *application) rewriteConstraintInfo(parent SQLNode, node ConstraintInfo, replacer replacerFunc) bool {
  8470  	if node == nil {
  8471  		return true
  8472  	}
  8473  	switch node := node.(type) {
  8474  	case *CheckConstraintDefinition:
  8475  		return a.rewriteRefOfCheckConstraintDefinition(parent, node, replacer)
  8476  	case *ForeignKeyDefinition:
  8477  		return a.rewriteRefOfForeignKeyDefinition(parent, node, replacer)
  8478  	default:
  8479  		// this should never happen
  8480  		return true
  8481  	}
  8482  }
  8483  func (a *application) rewriteDBDDLStatement(parent SQLNode, node DBDDLStatement, replacer replacerFunc) bool {
  8484  	if node == nil {
  8485  		return true
  8486  	}
  8487  	switch node := node.(type) {
  8488  	case *AlterDatabase:
  8489  		return a.rewriteRefOfAlterDatabase(parent, node, replacer)
  8490  	case *CreateDatabase:
  8491  		return a.rewriteRefOfCreateDatabase(parent, node, replacer)
  8492  	case *DropDatabase:
  8493  		return a.rewriteRefOfDropDatabase(parent, node, replacer)
  8494  	default:
  8495  		// this should never happen
  8496  		return true
  8497  	}
  8498  }
  8499  func (a *application) rewriteDDLStatement(parent SQLNode, node DDLStatement, replacer replacerFunc) bool {
  8500  	if node == nil {
  8501  		return true
  8502  	}
  8503  	switch node := node.(type) {
  8504  	case *AlterTable:
  8505  		return a.rewriteRefOfAlterTable(parent, node, replacer)
  8506  	case *AlterView:
  8507  		return a.rewriteRefOfAlterView(parent, node, replacer)
  8508  	case *CreateTable:
  8509  		return a.rewriteRefOfCreateTable(parent, node, replacer)
  8510  	case *CreateView:
  8511  		return a.rewriteRefOfCreateView(parent, node, replacer)
  8512  	case *DropTable:
  8513  		return a.rewriteRefOfDropTable(parent, node, replacer)
  8514  	case *DropView:
  8515  		return a.rewriteRefOfDropView(parent, node, replacer)
  8516  	case *RenameTable:
  8517  		return a.rewriteRefOfRenameTable(parent, node, replacer)
  8518  	case *TruncateTable:
  8519  		return a.rewriteRefOfTruncateTable(parent, node, replacer)
  8520  	default:
  8521  		// this should never happen
  8522  		return true
  8523  	}
  8524  }
  8525  func (a *application) rewriteExplain(parent SQLNode, node Explain, replacer replacerFunc) bool {
  8526  	if node == nil {
  8527  		return true
  8528  	}
  8529  	switch node := node.(type) {
  8530  	case *ExplainStmt:
  8531  		return a.rewriteRefOfExplainStmt(parent, node, replacer)
  8532  	case *ExplainTab:
  8533  		return a.rewriteRefOfExplainTab(parent, node, replacer)
  8534  	default:
  8535  		// this should never happen
  8536  		return true
  8537  	}
  8538  }
  8539  func (a *application) rewriteExpr(parent SQLNode, node Expr, replacer replacerFunc) bool {
  8540  	if node == nil {
  8541  		return true
  8542  	}
  8543  	switch node := node.(type) {
  8544  	case *AndExpr:
  8545  		return a.rewriteRefOfAndExpr(parent, node, replacer)
  8546  	case Argument:
  8547  		return a.rewriteArgument(parent, node, replacer)
  8548  	case *ArgumentLessWindowExpr:
  8549  		return a.rewriteRefOfArgumentLessWindowExpr(parent, node, replacer)
  8550  	case *Avg:
  8551  		return a.rewriteRefOfAvg(parent, node, replacer)
  8552  	case *BetweenExpr:
  8553  		return a.rewriteRefOfBetweenExpr(parent, node, replacer)
  8554  	case *BinaryExpr:
  8555  		return a.rewriteRefOfBinaryExpr(parent, node, replacer)
  8556  	case *BitAnd:
  8557  		return a.rewriteRefOfBitAnd(parent, node, replacer)
  8558  	case *BitOr:
  8559  		return a.rewriteRefOfBitOr(parent, node, replacer)
  8560  	case *BitXor:
  8561  		return a.rewriteRefOfBitXor(parent, node, replacer)
  8562  	case BoolVal:
  8563  		return a.rewriteBoolVal(parent, node, replacer)
  8564  	case *CaseExpr:
  8565  		return a.rewriteRefOfCaseExpr(parent, node, replacer)
  8566  	case *CastExpr:
  8567  		return a.rewriteRefOfCastExpr(parent, node, replacer)
  8568  	case *CharExpr:
  8569  		return a.rewriteRefOfCharExpr(parent, node, replacer)
  8570  	case *ColName:
  8571  		return a.rewriteRefOfColName(parent, node, replacer)
  8572  	case *CollateExpr:
  8573  		return a.rewriteRefOfCollateExpr(parent, node, replacer)
  8574  	case *ComparisonExpr:
  8575  		return a.rewriteRefOfComparisonExpr(parent, node, replacer)
  8576  	case *ConvertExpr:
  8577  		return a.rewriteRefOfConvertExpr(parent, node, replacer)
  8578  	case *ConvertUsingExpr:
  8579  		return a.rewriteRefOfConvertUsingExpr(parent, node, replacer)
  8580  	case *Count:
  8581  		return a.rewriteRefOfCount(parent, node, replacer)
  8582  	case *CountStar:
  8583  		return a.rewriteRefOfCountStar(parent, node, replacer)
  8584  	case *CurTimeFuncExpr:
  8585  		return a.rewriteRefOfCurTimeFuncExpr(parent, node, replacer)
  8586  	case *Default:
  8587  		return a.rewriteRefOfDefault(parent, node, replacer)
  8588  	case *ExistsExpr:
  8589  		return a.rewriteRefOfExistsExpr(parent, node, replacer)
  8590  	case *ExtractFuncExpr:
  8591  		return a.rewriteRefOfExtractFuncExpr(parent, node, replacer)
  8592  	case *ExtractValueExpr:
  8593  		return a.rewriteRefOfExtractValueExpr(parent, node, replacer)
  8594  	case *ExtractedSubquery:
  8595  		return a.rewriteRefOfExtractedSubquery(parent, node, replacer)
  8596  	case *FirstOrLastValueExpr:
  8597  		return a.rewriteRefOfFirstOrLastValueExpr(parent, node, replacer)
  8598  	case *FuncExpr:
  8599  		return a.rewriteRefOfFuncExpr(parent, node, replacer)
  8600  	case *GTIDFuncExpr:
  8601  		return a.rewriteRefOfGTIDFuncExpr(parent, node, replacer)
  8602  	case *GroupConcatExpr:
  8603  		return a.rewriteRefOfGroupConcatExpr(parent, node, replacer)
  8604  	case *InsertExpr:
  8605  		return a.rewriteRefOfInsertExpr(parent, node, replacer)
  8606  	case *IntervalExpr:
  8607  		return a.rewriteRefOfIntervalExpr(parent, node, replacer)
  8608  	case *IntervalFuncExpr:
  8609  		return a.rewriteRefOfIntervalFuncExpr(parent, node, replacer)
  8610  	case *IntroducerExpr:
  8611  		return a.rewriteRefOfIntroducerExpr(parent, node, replacer)
  8612  	case *IsExpr:
  8613  		return a.rewriteRefOfIsExpr(parent, node, replacer)
  8614  	case *JSONArrayExpr:
  8615  		return a.rewriteRefOfJSONArrayExpr(parent, node, replacer)
  8616  	case *JSONAttributesExpr:
  8617  		return a.rewriteRefOfJSONAttributesExpr(parent, node, replacer)
  8618  	case *JSONContainsExpr:
  8619  		return a.rewriteRefOfJSONContainsExpr(parent, node, replacer)
  8620  	case *JSONContainsPathExpr:
  8621  		return a.rewriteRefOfJSONContainsPathExpr(parent, node, replacer)
  8622  	case *JSONExtractExpr:
  8623  		return a.rewriteRefOfJSONExtractExpr(parent, node, replacer)
  8624  	case *JSONKeysExpr:
  8625  		return a.rewriteRefOfJSONKeysExpr(parent, node, replacer)
  8626  	case *JSONObjectExpr:
  8627  		return a.rewriteRefOfJSONObjectExpr(parent, node, replacer)
  8628  	case *JSONOverlapsExpr:
  8629  		return a.rewriteRefOfJSONOverlapsExpr(parent, node, replacer)
  8630  	case *JSONPrettyExpr:
  8631  		return a.rewriteRefOfJSONPrettyExpr(parent, node, replacer)
  8632  	case *JSONQuoteExpr:
  8633  		return a.rewriteRefOfJSONQuoteExpr(parent, node, replacer)
  8634  	case *JSONRemoveExpr:
  8635  		return a.rewriteRefOfJSONRemoveExpr(parent, node, replacer)
  8636  	case *JSONSchemaValidFuncExpr:
  8637  		return a.rewriteRefOfJSONSchemaValidFuncExpr(parent, node, replacer)
  8638  	case *JSONSchemaValidationReportFuncExpr:
  8639  		return a.rewriteRefOfJSONSchemaValidationReportFuncExpr(parent, node, replacer)
  8640  	case *JSONSearchExpr:
  8641  		return a.rewriteRefOfJSONSearchExpr(parent, node, replacer)
  8642  	case *JSONStorageFreeExpr:
  8643  		return a.rewriteRefOfJSONStorageFreeExpr(parent, node, replacer)
  8644  	case *JSONStorageSizeExpr:
  8645  		return a.rewriteRefOfJSONStorageSizeExpr(parent, node, replacer)
  8646  	case *JSONUnquoteExpr:
  8647  		return a.rewriteRefOfJSONUnquoteExpr(parent, node, replacer)
  8648  	case *JSONValueExpr:
  8649  		return a.rewriteRefOfJSONValueExpr(parent, node, replacer)
  8650  	case *JSONValueMergeExpr:
  8651  		return a.rewriteRefOfJSONValueMergeExpr(parent, node, replacer)
  8652  	case *JSONValueModifierExpr:
  8653  		return a.rewriteRefOfJSONValueModifierExpr(parent, node, replacer)
  8654  	case *LagLeadExpr:
  8655  		return a.rewriteRefOfLagLeadExpr(parent, node, replacer)
  8656  	case ListArg:
  8657  		return a.rewriteListArg(parent, node, replacer)
  8658  	case *Literal:
  8659  		return a.rewriteRefOfLiteral(parent, node, replacer)
  8660  	case *LocateExpr:
  8661  		return a.rewriteRefOfLocateExpr(parent, node, replacer)
  8662  	case *LockingFunc:
  8663  		return a.rewriteRefOfLockingFunc(parent, node, replacer)
  8664  	case *MatchExpr:
  8665  		return a.rewriteRefOfMatchExpr(parent, node, replacer)
  8666  	case *Max:
  8667  		return a.rewriteRefOfMax(parent, node, replacer)
  8668  	case *MemberOfExpr:
  8669  		return a.rewriteRefOfMemberOfExpr(parent, node, replacer)
  8670  	case *Min:
  8671  		return a.rewriteRefOfMin(parent, node, replacer)
  8672  	case *NTHValueExpr:
  8673  		return a.rewriteRefOfNTHValueExpr(parent, node, replacer)
  8674  	case *NamedWindow:
  8675  		return a.rewriteRefOfNamedWindow(parent, node, replacer)
  8676  	case *NotExpr:
  8677  		return a.rewriteRefOfNotExpr(parent, node, replacer)
  8678  	case *NtileExpr:
  8679  		return a.rewriteRefOfNtileExpr(parent, node, replacer)
  8680  	case *NullVal:
  8681  		return a.rewriteRefOfNullVal(parent, node, replacer)
  8682  	case *Offset:
  8683  		return a.rewriteRefOfOffset(parent, node, replacer)
  8684  	case *OrExpr:
  8685  		return a.rewriteRefOfOrExpr(parent, node, replacer)
  8686  	case *PerformanceSchemaFuncExpr:
  8687  		return a.rewriteRefOfPerformanceSchemaFuncExpr(parent, node, replacer)
  8688  	case *RegexpInstrExpr:
  8689  		return a.rewriteRefOfRegexpInstrExpr(parent, node, replacer)
  8690  	case *RegexpLikeExpr:
  8691  		return a.rewriteRefOfRegexpLikeExpr(parent, node, replacer)
  8692  	case *RegexpReplaceExpr:
  8693  		return a.rewriteRefOfRegexpReplaceExpr(parent, node, replacer)
  8694  	case *RegexpSubstrExpr:
  8695  		return a.rewriteRefOfRegexpSubstrExpr(parent, node, replacer)
  8696  	case *Std:
  8697  		return a.rewriteRefOfStd(parent, node, replacer)
  8698  	case *StdDev:
  8699  		return a.rewriteRefOfStdDev(parent, node, replacer)
  8700  	case *StdPop:
  8701  		return a.rewriteRefOfStdPop(parent, node, replacer)
  8702  	case *StdSamp:
  8703  		return a.rewriteRefOfStdSamp(parent, node, replacer)
  8704  	case *Subquery:
  8705  		return a.rewriteRefOfSubquery(parent, node, replacer)
  8706  	case *SubstrExpr:
  8707  		return a.rewriteRefOfSubstrExpr(parent, node, replacer)
  8708  	case *Sum:
  8709  		return a.rewriteRefOfSum(parent, node, replacer)
  8710  	case *TimestampFuncExpr:
  8711  		return a.rewriteRefOfTimestampFuncExpr(parent, node, replacer)
  8712  	case *TrimFuncExpr:
  8713  		return a.rewriteRefOfTrimFuncExpr(parent, node, replacer)
  8714  	case *UnaryExpr:
  8715  		return a.rewriteRefOfUnaryExpr(parent, node, replacer)
  8716  	case *UpdateXMLExpr:
  8717  		return a.rewriteRefOfUpdateXMLExpr(parent, node, replacer)
  8718  	case ValTuple:
  8719  		return a.rewriteValTuple(parent, node, replacer)
  8720  	case *ValuesFuncExpr:
  8721  		return a.rewriteRefOfValuesFuncExpr(parent, node, replacer)
  8722  	case *VarPop:
  8723  		return a.rewriteRefOfVarPop(parent, node, replacer)
  8724  	case *VarSamp:
  8725  		return a.rewriteRefOfVarSamp(parent, node, replacer)
  8726  	case *Variable:
  8727  		return a.rewriteRefOfVariable(parent, node, replacer)
  8728  	case *Variance:
  8729  		return a.rewriteRefOfVariance(parent, node, replacer)
  8730  	case *WeightStringFuncExpr:
  8731  		return a.rewriteRefOfWeightStringFuncExpr(parent, node, replacer)
  8732  	case *XorExpr:
  8733  		return a.rewriteRefOfXorExpr(parent, node, replacer)
  8734  	default:
  8735  		// this should never happen
  8736  		return true
  8737  	}
  8738  }
  8739  func (a *application) rewriteInsertRows(parent SQLNode, node InsertRows, replacer replacerFunc) bool {
  8740  	if node == nil {
  8741  		return true
  8742  	}
  8743  	switch node := node.(type) {
  8744  	case *Select:
  8745  		return a.rewriteRefOfSelect(parent, node, replacer)
  8746  	case *Union:
  8747  		return a.rewriteRefOfUnion(parent, node, replacer)
  8748  	case Values:
  8749  		return a.rewriteValues(parent, node, replacer)
  8750  	default:
  8751  		// this should never happen
  8752  		return true
  8753  	}
  8754  }
  8755  func (a *application) rewriteSelectExpr(parent SQLNode, node SelectExpr, replacer replacerFunc) bool {
  8756  	if node == nil {
  8757  		return true
  8758  	}
  8759  	switch node := node.(type) {
  8760  	case *AliasedExpr:
  8761  		return a.rewriteRefOfAliasedExpr(parent, node, replacer)
  8762  	case *Nextval:
  8763  		return a.rewriteRefOfNextval(parent, node, replacer)
  8764  	case *StarExpr:
  8765  		return a.rewriteRefOfStarExpr(parent, node, replacer)
  8766  	default:
  8767  		// this should never happen
  8768  		return true
  8769  	}
  8770  }
  8771  func (a *application) rewriteSelectStatement(parent SQLNode, node SelectStatement, replacer replacerFunc) bool {
  8772  	if node == nil {
  8773  		return true
  8774  	}
  8775  	switch node := node.(type) {
  8776  	case *Select:
  8777  		return a.rewriteRefOfSelect(parent, node, replacer)
  8778  	case *Union:
  8779  		return a.rewriteRefOfUnion(parent, node, replacer)
  8780  	default:
  8781  		// this should never happen
  8782  		return true
  8783  	}
  8784  }
  8785  func (a *application) rewriteShowInternal(parent SQLNode, node ShowInternal, replacer replacerFunc) bool {
  8786  	if node == nil {
  8787  		return true
  8788  	}
  8789  	switch node := node.(type) {
  8790  	case *ShowBasic:
  8791  		return a.rewriteRefOfShowBasic(parent, node, replacer)
  8792  	case *ShowCreate:
  8793  		return a.rewriteRefOfShowCreate(parent, node, replacer)
  8794  	case *ShowOther:
  8795  		return a.rewriteRefOfShowOther(parent, node, replacer)
  8796  	default:
  8797  		// this should never happen
  8798  		return true
  8799  	}
  8800  }
  8801  func (a *application) rewriteSimpleTableExpr(parent SQLNode, node SimpleTableExpr, replacer replacerFunc) bool {
  8802  	if node == nil {
  8803  		return true
  8804  	}
  8805  	switch node := node.(type) {
  8806  	case *DerivedTable:
  8807  		return a.rewriteRefOfDerivedTable(parent, node, replacer)
  8808  	case TableName:
  8809  		return a.rewriteTableName(parent, node, replacer)
  8810  	default:
  8811  		// this should never happen
  8812  		return true
  8813  	}
  8814  }
  8815  func (a *application) rewriteStatement(parent SQLNode, node Statement, replacer replacerFunc) bool {
  8816  	if node == nil {
  8817  		return true
  8818  	}
  8819  	switch node := node.(type) {
  8820  	case *AlterDatabase:
  8821  		return a.rewriteRefOfAlterDatabase(parent, node, replacer)
  8822  	case *AlterMigration:
  8823  		return a.rewriteRefOfAlterMigration(parent, node, replacer)
  8824  	case *AlterTable:
  8825  		return a.rewriteRefOfAlterTable(parent, node, replacer)
  8826  	case *AlterView:
  8827  		return a.rewriteRefOfAlterView(parent, node, replacer)
  8828  	case *AlterVschema:
  8829  		return a.rewriteRefOfAlterVschema(parent, node, replacer)
  8830  	case *Begin:
  8831  		return a.rewriteRefOfBegin(parent, node, replacer)
  8832  	case *CallProc:
  8833  		return a.rewriteRefOfCallProc(parent, node, replacer)
  8834  	case *CommentOnly:
  8835  		return a.rewriteRefOfCommentOnly(parent, node, replacer)
  8836  	case *Commit:
  8837  		return a.rewriteRefOfCommit(parent, node, replacer)
  8838  	case *CreateDatabase:
  8839  		return a.rewriteRefOfCreateDatabase(parent, node, replacer)
  8840  	case *CreateTable:
  8841  		return a.rewriteRefOfCreateTable(parent, node, replacer)
  8842  	case *CreateView:
  8843  		return a.rewriteRefOfCreateView(parent, node, replacer)
  8844  	case *DeallocateStmt:
  8845  		return a.rewriteRefOfDeallocateStmt(parent, node, replacer)
  8846  	case *Delete:
  8847  		return a.rewriteRefOfDelete(parent, node, replacer)
  8848  	case *DropDatabase:
  8849  		return a.rewriteRefOfDropDatabase(parent, node, replacer)
  8850  	case *DropTable:
  8851  		return a.rewriteRefOfDropTable(parent, node, replacer)
  8852  	case *DropView:
  8853  		return a.rewriteRefOfDropView(parent, node, replacer)
  8854  	case *ExecuteStmt:
  8855  		return a.rewriteRefOfExecuteStmt(parent, node, replacer)
  8856  	case *ExplainStmt:
  8857  		return a.rewriteRefOfExplainStmt(parent, node, replacer)
  8858  	case *ExplainTab:
  8859  		return a.rewriteRefOfExplainTab(parent, node, replacer)
  8860  	case *Flush:
  8861  		return a.rewriteRefOfFlush(parent, node, replacer)
  8862  	case *Insert:
  8863  		return a.rewriteRefOfInsert(parent, node, replacer)
  8864  	case *Load:
  8865  		return a.rewriteRefOfLoad(parent, node, replacer)
  8866  	case *LockTables:
  8867  		return a.rewriteRefOfLockTables(parent, node, replacer)
  8868  	case *OtherAdmin:
  8869  		return a.rewriteRefOfOtherAdmin(parent, node, replacer)
  8870  	case *OtherRead:
  8871  		return a.rewriteRefOfOtherRead(parent, node, replacer)
  8872  	case *PrepareStmt:
  8873  		return a.rewriteRefOfPrepareStmt(parent, node, replacer)
  8874  	case *Release:
  8875  		return a.rewriteRefOfRelease(parent, node, replacer)
  8876  	case *RenameTable:
  8877  		return a.rewriteRefOfRenameTable(parent, node, replacer)
  8878  	case *RevertMigration:
  8879  		return a.rewriteRefOfRevertMigration(parent, node, replacer)
  8880  	case *Rollback:
  8881  		return a.rewriteRefOfRollback(parent, node, replacer)
  8882  	case *SRollback:
  8883  		return a.rewriteRefOfSRollback(parent, node, replacer)
  8884  	case *Savepoint:
  8885  		return a.rewriteRefOfSavepoint(parent, node, replacer)
  8886  	case *Select:
  8887  		return a.rewriteRefOfSelect(parent, node, replacer)
  8888  	case *Set:
  8889  		return a.rewriteRefOfSet(parent, node, replacer)
  8890  	case *Show:
  8891  		return a.rewriteRefOfShow(parent, node, replacer)
  8892  	case *ShowMigrationLogs:
  8893  		return a.rewriteRefOfShowMigrationLogs(parent, node, replacer)
  8894  	case *ShowThrottledApps:
  8895  		return a.rewriteRefOfShowThrottledApps(parent, node, replacer)
  8896  	case *ShowThrottlerStatus:
  8897  		return a.rewriteRefOfShowThrottlerStatus(parent, node, replacer)
  8898  	case *Stream:
  8899  		return a.rewriteRefOfStream(parent, node, replacer)
  8900  	case *TruncateTable:
  8901  		return a.rewriteRefOfTruncateTable(parent, node, replacer)
  8902  	case *Union:
  8903  		return a.rewriteRefOfUnion(parent, node, replacer)
  8904  	case *UnlockTables:
  8905  		return a.rewriteRefOfUnlockTables(parent, node, replacer)
  8906  	case *Update:
  8907  		return a.rewriteRefOfUpdate(parent, node, replacer)
  8908  	case *Use:
  8909  		return a.rewriteRefOfUse(parent, node, replacer)
  8910  	case *VExplainStmt:
  8911  		return a.rewriteRefOfVExplainStmt(parent, node, replacer)
  8912  	case *VStream:
  8913  		return a.rewriteRefOfVStream(parent, node, replacer)
  8914  	default:
  8915  		// this should never happen
  8916  		return true
  8917  	}
  8918  }
  8919  func (a *application) rewriteTableExpr(parent SQLNode, node TableExpr, replacer replacerFunc) bool {
  8920  	if node == nil {
  8921  		return true
  8922  	}
  8923  	switch node := node.(type) {
  8924  	case *AliasedTableExpr:
  8925  		return a.rewriteRefOfAliasedTableExpr(parent, node, replacer)
  8926  	case *JSONTableExpr:
  8927  		return a.rewriteRefOfJSONTableExpr(parent, node, replacer)
  8928  	case *JoinTableExpr:
  8929  		return a.rewriteRefOfJoinTableExpr(parent, node, replacer)
  8930  	case *ParenTableExpr:
  8931  		return a.rewriteRefOfParenTableExpr(parent, node, replacer)
  8932  	default:
  8933  		// this should never happen
  8934  		return true
  8935  	}
  8936  }
  8937  func (a *application) rewriteAlgorithmValue(parent SQLNode, node AlgorithmValue, replacer replacerFunc) bool {
  8938  	if a.pre != nil {
  8939  		a.cur.replacer = replacer
  8940  		a.cur.parent = parent
  8941  		a.cur.node = node
  8942  		if !a.pre(&a.cur) {
  8943  			return true
  8944  		}
  8945  	}
  8946  	if a.post != nil {
  8947  		if a.pre == nil {
  8948  			a.cur.replacer = replacer
  8949  			a.cur.parent = parent
  8950  			a.cur.node = node
  8951  		}
  8952  		if !a.post(&a.cur) {
  8953  			return false
  8954  		}
  8955  	}
  8956  	return true
  8957  }
  8958  func (a *application) rewriteArgument(parent SQLNode, node Argument, replacer replacerFunc) bool {
  8959  	if a.pre != nil {
  8960  		a.cur.replacer = replacer
  8961  		a.cur.parent = parent
  8962  		a.cur.node = node
  8963  		if !a.pre(&a.cur) {
  8964  			return true
  8965  		}
  8966  	}
  8967  	if a.post != nil {
  8968  		if a.pre == nil {
  8969  			a.cur.replacer = replacer
  8970  			a.cur.parent = parent
  8971  			a.cur.node = node
  8972  		}
  8973  		if !a.post(&a.cur) {
  8974  			return false
  8975  		}
  8976  	}
  8977  	return true
  8978  }
  8979  func (a *application) rewriteBoolVal(parent SQLNode, node BoolVal, replacer replacerFunc) bool {
  8980  	if a.pre != nil {
  8981  		a.cur.replacer = replacer
  8982  		a.cur.parent = parent
  8983  		a.cur.node = node
  8984  		if !a.pre(&a.cur) {
  8985  			return true
  8986  		}
  8987  	}
  8988  	if a.post != nil {
  8989  		if a.pre == nil {
  8990  			a.cur.replacer = replacer
  8991  			a.cur.parent = parent
  8992  			a.cur.node = node
  8993  		}
  8994  		if !a.post(&a.cur) {
  8995  			return false
  8996  		}
  8997  	}
  8998  	return true
  8999  }
  9000  func (a *application) rewriteListArg(parent SQLNode, node ListArg, replacer replacerFunc) bool {
  9001  	if a.pre != nil {
  9002  		a.cur.replacer = replacer
  9003  		a.cur.parent = parent
  9004  		a.cur.node = node
  9005  		if !a.pre(&a.cur) {
  9006  			return true
  9007  		}
  9008  	}
  9009  	if a.post != nil {
  9010  		if a.pre == nil {
  9011  			a.cur.replacer = replacer
  9012  			a.cur.parent = parent
  9013  			a.cur.node = node
  9014  		}
  9015  		if !a.post(&a.cur) {
  9016  			return false
  9017  		}
  9018  	}
  9019  	return true
  9020  }
  9021  func (a *application) rewriteMatchAction(parent SQLNode, node MatchAction, replacer replacerFunc) bool {
  9022  	if a.pre != nil {
  9023  		a.cur.replacer = replacer
  9024  		a.cur.parent = parent
  9025  		a.cur.node = node
  9026  		if !a.pre(&a.cur) {
  9027  			return true
  9028  		}
  9029  	}
  9030  	if a.post != nil {
  9031  		if a.pre == nil {
  9032  			a.cur.replacer = replacer
  9033  			a.cur.parent = parent
  9034  			a.cur.node = node
  9035  		}
  9036  		if !a.post(&a.cur) {
  9037  			return false
  9038  		}
  9039  	}
  9040  	return true
  9041  }
  9042  func (a *application) rewriteReferenceAction(parent SQLNode, node ReferenceAction, replacer replacerFunc) bool {
  9043  	if a.pre != nil {
  9044  		a.cur.replacer = replacer
  9045  		a.cur.parent = parent
  9046  		a.cur.node = node
  9047  		if !a.pre(&a.cur) {
  9048  			return true
  9049  		}
  9050  	}
  9051  	if a.post != nil {
  9052  		if a.pre == nil {
  9053  			a.cur.replacer = replacer
  9054  			a.cur.parent = parent
  9055  			a.cur.node = node
  9056  		}
  9057  		if !a.post(&a.cur) {
  9058  			return false
  9059  		}
  9060  	}
  9061  	return true
  9062  }
  9063  func (a *application) rewriteRefOfIdentifierCI(parent SQLNode, node *IdentifierCI, replacer replacerFunc) bool {
  9064  	if node == nil {
  9065  		return true
  9066  	}
  9067  	if a.pre != nil {
  9068  		a.cur.replacer = replacer
  9069  		a.cur.parent = parent
  9070  		a.cur.node = node
  9071  		if !a.pre(&a.cur) {
  9072  			return true
  9073  		}
  9074  	}
  9075  	if a.post != nil {
  9076  		if a.pre == nil {
  9077  			a.cur.replacer = replacer
  9078  			a.cur.parent = parent
  9079  			a.cur.node = node
  9080  		}
  9081  		if !a.post(&a.cur) {
  9082  			return false
  9083  		}
  9084  	}
  9085  	return true
  9086  }
  9087  func (a *application) rewriteRefOfIdentifierCS(parent SQLNode, node *IdentifierCS, replacer replacerFunc) bool {
  9088  	if node == nil {
  9089  		return true
  9090  	}
  9091  	if a.pre != nil {
  9092  		a.cur.replacer = replacer
  9093  		a.cur.parent = parent
  9094  		a.cur.node = node
  9095  		if !a.pre(&a.cur) {
  9096  			return true
  9097  		}
  9098  	}
  9099  	if a.post != nil {
  9100  		if a.pre == nil {
  9101  			a.cur.replacer = replacer
  9102  			a.cur.parent = parent
  9103  			a.cur.node = node
  9104  		}
  9105  		if !a.post(&a.cur) {
  9106  			return false
  9107  		}
  9108  	}
  9109  	return true
  9110  }
  9111  func (a *application) rewriteRefOfRootNode(parent SQLNode, node *RootNode, replacer replacerFunc) bool {
  9112  	if node == nil {
  9113  		return true
  9114  	}
  9115  	if a.pre != nil {
  9116  		a.cur.replacer = replacer
  9117  		a.cur.parent = parent
  9118  		a.cur.node = node
  9119  		if !a.pre(&a.cur) {
  9120  			return true
  9121  		}
  9122  	}
  9123  	if !a.rewriteSQLNode(node, node.SQLNode, func(newNode, parent SQLNode) {
  9124  		parent.(*RootNode).SQLNode = newNode.(SQLNode)
  9125  	}) {
  9126  		return false
  9127  	}
  9128  	if a.post != nil {
  9129  		a.cur.replacer = replacer
  9130  		a.cur.parent = parent
  9131  		a.cur.node = node
  9132  		if !a.post(&a.cur) {
  9133  			return false
  9134  		}
  9135  	}
  9136  	return true
  9137  }
  9138  func (a *application) rewriteRefOfTableName(parent SQLNode, node *TableName, replacer replacerFunc) bool {
  9139  	if node == nil {
  9140  		return true
  9141  	}
  9142  	if a.pre != nil {
  9143  		a.cur.replacer = replacer
  9144  		a.cur.parent = parent
  9145  		a.cur.node = node
  9146  		if !a.pre(&a.cur) {
  9147  			return true
  9148  		}
  9149  	}
  9150  	if !a.rewriteIdentifierCS(node, node.Name, func(newNode, parent SQLNode) {
  9151  		parent.(*TableName).Name = newNode.(IdentifierCS)
  9152  	}) {
  9153  		return false
  9154  	}
  9155  	if !a.rewriteIdentifierCS(node, node.Qualifier, func(newNode, parent SQLNode) {
  9156  		parent.(*TableName).Qualifier = newNode.(IdentifierCS)
  9157  	}) {
  9158  		return false
  9159  	}
  9160  	if a.post != nil {
  9161  		a.cur.replacer = replacer
  9162  		a.cur.parent = parent
  9163  		a.cur.node = node
  9164  		if !a.post(&a.cur) {
  9165  			return false
  9166  		}
  9167  	}
  9168  	return true
  9169  }
  9170  func (a *application) rewriteRefOfVindexParam(parent SQLNode, node *VindexParam, replacer replacerFunc) bool {
  9171  	if node == nil {
  9172  		return true
  9173  	}
  9174  	if a.pre != nil {
  9175  		a.cur.replacer = replacer
  9176  		a.cur.parent = parent
  9177  		a.cur.node = node
  9178  		if !a.pre(&a.cur) {
  9179  			return true
  9180  		}
  9181  	}
  9182  	if !a.rewriteIdentifierCI(node, node.Key, func(newNode, parent SQLNode) {
  9183  		parent.(*VindexParam).Key = newNode.(IdentifierCI)
  9184  	}) {
  9185  		return false
  9186  	}
  9187  	if a.post != nil {
  9188  		a.cur.replacer = replacer
  9189  		a.cur.parent = parent
  9190  		a.cur.node = node
  9191  		if !a.post(&a.cur) {
  9192  			return false
  9193  		}
  9194  	}
  9195  	return true
  9196  }