vitess.io/vitess@v0.16.2/go/vt/sqlparser/ast_copy_on_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 (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, changed bool) {
    21  	if n == nil || c.cursor.stop {
    22  		return n, false
    23  	}
    24  	switch n := n.(type) {
    25  	case *AddColumns:
    26  		return c.copyOnRewriteRefOfAddColumns(n, parent)
    27  	case *AddConstraintDefinition:
    28  		return c.copyOnRewriteRefOfAddConstraintDefinition(n, parent)
    29  	case *AddIndexDefinition:
    30  		return c.copyOnRewriteRefOfAddIndexDefinition(n, parent)
    31  	case AlgorithmValue:
    32  		return c.copyOnRewriteAlgorithmValue(n, parent)
    33  	case *AliasedExpr:
    34  		return c.copyOnRewriteRefOfAliasedExpr(n, parent)
    35  	case *AliasedTableExpr:
    36  		return c.copyOnRewriteRefOfAliasedTableExpr(n, parent)
    37  	case *AlterCharset:
    38  		return c.copyOnRewriteRefOfAlterCharset(n, parent)
    39  	case *AlterCheck:
    40  		return c.copyOnRewriteRefOfAlterCheck(n, parent)
    41  	case *AlterColumn:
    42  		return c.copyOnRewriteRefOfAlterColumn(n, parent)
    43  	case *AlterDatabase:
    44  		return c.copyOnRewriteRefOfAlterDatabase(n, parent)
    45  	case *AlterIndex:
    46  		return c.copyOnRewriteRefOfAlterIndex(n, parent)
    47  	case *AlterMigration:
    48  		return c.copyOnRewriteRefOfAlterMigration(n, parent)
    49  	case *AlterTable:
    50  		return c.copyOnRewriteRefOfAlterTable(n, parent)
    51  	case *AlterView:
    52  		return c.copyOnRewriteRefOfAlterView(n, parent)
    53  	case *AlterVschema:
    54  		return c.copyOnRewriteRefOfAlterVschema(n, parent)
    55  	case *AndExpr:
    56  		return c.copyOnRewriteRefOfAndExpr(n, parent)
    57  	case Argument:
    58  		return c.copyOnRewriteArgument(n, parent)
    59  	case *ArgumentLessWindowExpr:
    60  		return c.copyOnRewriteRefOfArgumentLessWindowExpr(n, parent)
    61  	case *AutoIncSpec:
    62  		return c.copyOnRewriteRefOfAutoIncSpec(n, parent)
    63  	case *Avg:
    64  		return c.copyOnRewriteRefOfAvg(n, parent)
    65  	case *Begin:
    66  		return c.copyOnRewriteRefOfBegin(n, parent)
    67  	case *BetweenExpr:
    68  		return c.copyOnRewriteRefOfBetweenExpr(n, parent)
    69  	case *BinaryExpr:
    70  		return c.copyOnRewriteRefOfBinaryExpr(n, parent)
    71  	case *BitAnd:
    72  		return c.copyOnRewriteRefOfBitAnd(n, parent)
    73  	case *BitOr:
    74  		return c.copyOnRewriteRefOfBitOr(n, parent)
    75  	case *BitXor:
    76  		return c.copyOnRewriteRefOfBitXor(n, parent)
    77  	case BoolVal:
    78  		return c.copyOnRewriteBoolVal(n, parent)
    79  	case *CallProc:
    80  		return c.copyOnRewriteRefOfCallProc(n, parent)
    81  	case *CaseExpr:
    82  		return c.copyOnRewriteRefOfCaseExpr(n, parent)
    83  	case *CastExpr:
    84  		return c.copyOnRewriteRefOfCastExpr(n, parent)
    85  	case *ChangeColumn:
    86  		return c.copyOnRewriteRefOfChangeColumn(n, parent)
    87  	case *CharExpr:
    88  		return c.copyOnRewriteRefOfCharExpr(n, parent)
    89  	case *CheckConstraintDefinition:
    90  		return c.copyOnRewriteRefOfCheckConstraintDefinition(n, parent)
    91  	case *ColName:
    92  		return c.copyOnRewriteRefOfColName(n, parent)
    93  	case *CollateExpr:
    94  		return c.copyOnRewriteRefOfCollateExpr(n, parent)
    95  	case *ColumnDefinition:
    96  		return c.copyOnRewriteRefOfColumnDefinition(n, parent)
    97  	case *ColumnType:
    98  		return c.copyOnRewriteRefOfColumnType(n, parent)
    99  	case Columns:
   100  		return c.copyOnRewriteColumns(n, parent)
   101  	case *CommentOnly:
   102  		return c.copyOnRewriteRefOfCommentOnly(n, parent)
   103  	case *Commit:
   104  		return c.copyOnRewriteRefOfCommit(n, parent)
   105  	case *CommonTableExpr:
   106  		return c.copyOnRewriteRefOfCommonTableExpr(n, parent)
   107  	case *ComparisonExpr:
   108  		return c.copyOnRewriteRefOfComparisonExpr(n, parent)
   109  	case *ConstraintDefinition:
   110  		return c.copyOnRewriteRefOfConstraintDefinition(n, parent)
   111  	case *ConvertExpr:
   112  		return c.copyOnRewriteRefOfConvertExpr(n, parent)
   113  	case *ConvertType:
   114  		return c.copyOnRewriteRefOfConvertType(n, parent)
   115  	case *ConvertUsingExpr:
   116  		return c.copyOnRewriteRefOfConvertUsingExpr(n, parent)
   117  	case *Count:
   118  		return c.copyOnRewriteRefOfCount(n, parent)
   119  	case *CountStar:
   120  		return c.copyOnRewriteRefOfCountStar(n, parent)
   121  	case *CreateDatabase:
   122  		return c.copyOnRewriteRefOfCreateDatabase(n, parent)
   123  	case *CreateTable:
   124  		return c.copyOnRewriteRefOfCreateTable(n, parent)
   125  	case *CreateView:
   126  		return c.copyOnRewriteRefOfCreateView(n, parent)
   127  	case *CurTimeFuncExpr:
   128  		return c.copyOnRewriteRefOfCurTimeFuncExpr(n, parent)
   129  	case *DeallocateStmt:
   130  		return c.copyOnRewriteRefOfDeallocateStmt(n, parent)
   131  	case *Default:
   132  		return c.copyOnRewriteRefOfDefault(n, parent)
   133  	case *Definer:
   134  		return c.copyOnRewriteRefOfDefiner(n, parent)
   135  	case *Delete:
   136  		return c.copyOnRewriteRefOfDelete(n, parent)
   137  	case *DerivedTable:
   138  		return c.copyOnRewriteRefOfDerivedTable(n, parent)
   139  	case *DropColumn:
   140  		return c.copyOnRewriteRefOfDropColumn(n, parent)
   141  	case *DropDatabase:
   142  		return c.copyOnRewriteRefOfDropDatabase(n, parent)
   143  	case *DropKey:
   144  		return c.copyOnRewriteRefOfDropKey(n, parent)
   145  	case *DropTable:
   146  		return c.copyOnRewriteRefOfDropTable(n, parent)
   147  	case *DropView:
   148  		return c.copyOnRewriteRefOfDropView(n, parent)
   149  	case *ExecuteStmt:
   150  		return c.copyOnRewriteRefOfExecuteStmt(n, parent)
   151  	case *ExistsExpr:
   152  		return c.copyOnRewriteRefOfExistsExpr(n, parent)
   153  	case *ExplainStmt:
   154  		return c.copyOnRewriteRefOfExplainStmt(n, parent)
   155  	case *ExplainTab:
   156  		return c.copyOnRewriteRefOfExplainTab(n, parent)
   157  	case Exprs:
   158  		return c.copyOnRewriteExprs(n, parent)
   159  	case *ExtractFuncExpr:
   160  		return c.copyOnRewriteRefOfExtractFuncExpr(n, parent)
   161  	case *ExtractValueExpr:
   162  		return c.copyOnRewriteRefOfExtractValueExpr(n, parent)
   163  	case *ExtractedSubquery:
   164  		return c.copyOnRewriteRefOfExtractedSubquery(n, parent)
   165  	case *FirstOrLastValueExpr:
   166  		return c.copyOnRewriteRefOfFirstOrLastValueExpr(n, parent)
   167  	case *Flush:
   168  		return c.copyOnRewriteRefOfFlush(n, parent)
   169  	case *Force:
   170  		return c.copyOnRewriteRefOfForce(n, parent)
   171  	case *ForeignKeyDefinition:
   172  		return c.copyOnRewriteRefOfForeignKeyDefinition(n, parent)
   173  	case *FrameClause:
   174  		return c.copyOnRewriteRefOfFrameClause(n, parent)
   175  	case *FramePoint:
   176  		return c.copyOnRewriteRefOfFramePoint(n, parent)
   177  	case *FromFirstLastClause:
   178  		return c.copyOnRewriteRefOfFromFirstLastClause(n, parent)
   179  	case *FuncExpr:
   180  		return c.copyOnRewriteRefOfFuncExpr(n, parent)
   181  	case *GTIDFuncExpr:
   182  		return c.copyOnRewriteRefOfGTIDFuncExpr(n, parent)
   183  	case GroupBy:
   184  		return c.copyOnRewriteGroupBy(n, parent)
   185  	case *GroupConcatExpr:
   186  		return c.copyOnRewriteRefOfGroupConcatExpr(n, parent)
   187  	case IdentifierCI:
   188  		return c.copyOnRewriteIdentifierCI(n, parent)
   189  	case IdentifierCS:
   190  		return c.copyOnRewriteIdentifierCS(n, parent)
   191  	case *IndexDefinition:
   192  		return c.copyOnRewriteRefOfIndexDefinition(n, parent)
   193  	case *IndexHint:
   194  		return c.copyOnRewriteRefOfIndexHint(n, parent)
   195  	case IndexHints:
   196  		return c.copyOnRewriteIndexHints(n, parent)
   197  	case *IndexInfo:
   198  		return c.copyOnRewriteRefOfIndexInfo(n, parent)
   199  	case *Insert:
   200  		return c.copyOnRewriteRefOfInsert(n, parent)
   201  	case *InsertExpr:
   202  		return c.copyOnRewriteRefOfInsertExpr(n, parent)
   203  	case *IntervalExpr:
   204  		return c.copyOnRewriteRefOfIntervalExpr(n, parent)
   205  	case *IntervalFuncExpr:
   206  		return c.copyOnRewriteRefOfIntervalFuncExpr(n, parent)
   207  	case *IntroducerExpr:
   208  		return c.copyOnRewriteRefOfIntroducerExpr(n, parent)
   209  	case *IsExpr:
   210  		return c.copyOnRewriteRefOfIsExpr(n, parent)
   211  	case *JSONArrayExpr:
   212  		return c.copyOnRewriteRefOfJSONArrayExpr(n, parent)
   213  	case *JSONAttributesExpr:
   214  		return c.copyOnRewriteRefOfJSONAttributesExpr(n, parent)
   215  	case *JSONContainsExpr:
   216  		return c.copyOnRewriteRefOfJSONContainsExpr(n, parent)
   217  	case *JSONContainsPathExpr:
   218  		return c.copyOnRewriteRefOfJSONContainsPathExpr(n, parent)
   219  	case *JSONExtractExpr:
   220  		return c.copyOnRewriteRefOfJSONExtractExpr(n, parent)
   221  	case *JSONKeysExpr:
   222  		return c.copyOnRewriteRefOfJSONKeysExpr(n, parent)
   223  	case *JSONObjectExpr:
   224  		return c.copyOnRewriteRefOfJSONObjectExpr(n, parent)
   225  	case *JSONObjectParam:
   226  		return c.copyOnRewriteRefOfJSONObjectParam(n, parent)
   227  	case *JSONOverlapsExpr:
   228  		return c.copyOnRewriteRefOfJSONOverlapsExpr(n, parent)
   229  	case *JSONPrettyExpr:
   230  		return c.copyOnRewriteRefOfJSONPrettyExpr(n, parent)
   231  	case *JSONQuoteExpr:
   232  		return c.copyOnRewriteRefOfJSONQuoteExpr(n, parent)
   233  	case *JSONRemoveExpr:
   234  		return c.copyOnRewriteRefOfJSONRemoveExpr(n, parent)
   235  	case *JSONSchemaValidFuncExpr:
   236  		return c.copyOnRewriteRefOfJSONSchemaValidFuncExpr(n, parent)
   237  	case *JSONSchemaValidationReportFuncExpr:
   238  		return c.copyOnRewriteRefOfJSONSchemaValidationReportFuncExpr(n, parent)
   239  	case *JSONSearchExpr:
   240  		return c.copyOnRewriteRefOfJSONSearchExpr(n, parent)
   241  	case *JSONStorageFreeExpr:
   242  		return c.copyOnRewriteRefOfJSONStorageFreeExpr(n, parent)
   243  	case *JSONStorageSizeExpr:
   244  		return c.copyOnRewriteRefOfJSONStorageSizeExpr(n, parent)
   245  	case *JSONTableExpr:
   246  		return c.copyOnRewriteRefOfJSONTableExpr(n, parent)
   247  	case *JSONUnquoteExpr:
   248  		return c.copyOnRewriteRefOfJSONUnquoteExpr(n, parent)
   249  	case *JSONValueExpr:
   250  		return c.copyOnRewriteRefOfJSONValueExpr(n, parent)
   251  	case *JSONValueMergeExpr:
   252  		return c.copyOnRewriteRefOfJSONValueMergeExpr(n, parent)
   253  	case *JSONValueModifierExpr:
   254  		return c.copyOnRewriteRefOfJSONValueModifierExpr(n, parent)
   255  	case *JoinCondition:
   256  		return c.copyOnRewriteRefOfJoinCondition(n, parent)
   257  	case *JoinTableExpr:
   258  		return c.copyOnRewriteRefOfJoinTableExpr(n, parent)
   259  	case *JtColumnDefinition:
   260  		return c.copyOnRewriteRefOfJtColumnDefinition(n, parent)
   261  	case *JtOnResponse:
   262  		return c.copyOnRewriteRefOfJtOnResponse(n, parent)
   263  	case *KeyState:
   264  		return c.copyOnRewriteRefOfKeyState(n, parent)
   265  	case *LagLeadExpr:
   266  		return c.copyOnRewriteRefOfLagLeadExpr(n, parent)
   267  	case *Limit:
   268  		return c.copyOnRewriteRefOfLimit(n, parent)
   269  	case ListArg:
   270  		return c.copyOnRewriteListArg(n, parent)
   271  	case *Literal:
   272  		return c.copyOnRewriteRefOfLiteral(n, parent)
   273  	case *Load:
   274  		return c.copyOnRewriteRefOfLoad(n, parent)
   275  	case *LocateExpr:
   276  		return c.copyOnRewriteRefOfLocateExpr(n, parent)
   277  	case *LockOption:
   278  		return c.copyOnRewriteRefOfLockOption(n, parent)
   279  	case *LockTables:
   280  		return c.copyOnRewriteRefOfLockTables(n, parent)
   281  	case *LockingFunc:
   282  		return c.copyOnRewriteRefOfLockingFunc(n, parent)
   283  	case MatchAction:
   284  		return c.copyOnRewriteMatchAction(n, parent)
   285  	case *MatchExpr:
   286  		return c.copyOnRewriteRefOfMatchExpr(n, parent)
   287  	case *Max:
   288  		return c.copyOnRewriteRefOfMax(n, parent)
   289  	case *MemberOfExpr:
   290  		return c.copyOnRewriteRefOfMemberOfExpr(n, parent)
   291  	case *Min:
   292  		return c.copyOnRewriteRefOfMin(n, parent)
   293  	case *ModifyColumn:
   294  		return c.copyOnRewriteRefOfModifyColumn(n, parent)
   295  	case *NTHValueExpr:
   296  		return c.copyOnRewriteRefOfNTHValueExpr(n, parent)
   297  	case *NamedWindow:
   298  		return c.copyOnRewriteRefOfNamedWindow(n, parent)
   299  	case NamedWindows:
   300  		return c.copyOnRewriteNamedWindows(n, parent)
   301  	case *Nextval:
   302  		return c.copyOnRewriteRefOfNextval(n, parent)
   303  	case *NotExpr:
   304  		return c.copyOnRewriteRefOfNotExpr(n, parent)
   305  	case *NtileExpr:
   306  		return c.copyOnRewriteRefOfNtileExpr(n, parent)
   307  	case *NullTreatmentClause:
   308  		return c.copyOnRewriteRefOfNullTreatmentClause(n, parent)
   309  	case *NullVal:
   310  		return c.copyOnRewriteRefOfNullVal(n, parent)
   311  	case *Offset:
   312  		return c.copyOnRewriteRefOfOffset(n, parent)
   313  	case OnDup:
   314  		return c.copyOnRewriteOnDup(n, parent)
   315  	case *OptLike:
   316  		return c.copyOnRewriteRefOfOptLike(n, parent)
   317  	case *OrExpr:
   318  		return c.copyOnRewriteRefOfOrExpr(n, parent)
   319  	case *Order:
   320  		return c.copyOnRewriteRefOfOrder(n, parent)
   321  	case OrderBy:
   322  		return c.copyOnRewriteOrderBy(n, parent)
   323  	case *OrderByOption:
   324  		return c.copyOnRewriteRefOfOrderByOption(n, parent)
   325  	case *OtherAdmin:
   326  		return c.copyOnRewriteRefOfOtherAdmin(n, parent)
   327  	case *OtherRead:
   328  		return c.copyOnRewriteRefOfOtherRead(n, parent)
   329  	case *OverClause:
   330  		return c.copyOnRewriteRefOfOverClause(n, parent)
   331  	case *ParenTableExpr:
   332  		return c.copyOnRewriteRefOfParenTableExpr(n, parent)
   333  	case *ParsedComments:
   334  		return c.copyOnRewriteRefOfParsedComments(n, parent)
   335  	case *PartitionDefinition:
   336  		return c.copyOnRewriteRefOfPartitionDefinition(n, parent)
   337  	case *PartitionDefinitionOptions:
   338  		return c.copyOnRewriteRefOfPartitionDefinitionOptions(n, parent)
   339  	case *PartitionEngine:
   340  		return c.copyOnRewriteRefOfPartitionEngine(n, parent)
   341  	case *PartitionOption:
   342  		return c.copyOnRewriteRefOfPartitionOption(n, parent)
   343  	case *PartitionSpec:
   344  		return c.copyOnRewriteRefOfPartitionSpec(n, parent)
   345  	case *PartitionValueRange:
   346  		return c.copyOnRewriteRefOfPartitionValueRange(n, parent)
   347  	case Partitions:
   348  		return c.copyOnRewritePartitions(n, parent)
   349  	case *PerformanceSchemaFuncExpr:
   350  		return c.copyOnRewriteRefOfPerformanceSchemaFuncExpr(n, parent)
   351  	case *PrepareStmt:
   352  		return c.copyOnRewriteRefOfPrepareStmt(n, parent)
   353  	case ReferenceAction:
   354  		return c.copyOnRewriteReferenceAction(n, parent)
   355  	case *ReferenceDefinition:
   356  		return c.copyOnRewriteRefOfReferenceDefinition(n, parent)
   357  	case *RegexpInstrExpr:
   358  		return c.copyOnRewriteRefOfRegexpInstrExpr(n, parent)
   359  	case *RegexpLikeExpr:
   360  		return c.copyOnRewriteRefOfRegexpLikeExpr(n, parent)
   361  	case *RegexpReplaceExpr:
   362  		return c.copyOnRewriteRefOfRegexpReplaceExpr(n, parent)
   363  	case *RegexpSubstrExpr:
   364  		return c.copyOnRewriteRefOfRegexpSubstrExpr(n, parent)
   365  	case *Release:
   366  		return c.copyOnRewriteRefOfRelease(n, parent)
   367  	case *RenameColumn:
   368  		return c.copyOnRewriteRefOfRenameColumn(n, parent)
   369  	case *RenameIndex:
   370  		return c.copyOnRewriteRefOfRenameIndex(n, parent)
   371  	case *RenameTable:
   372  		return c.copyOnRewriteRefOfRenameTable(n, parent)
   373  	case *RenameTableName:
   374  		return c.copyOnRewriteRefOfRenameTableName(n, parent)
   375  	case *RevertMigration:
   376  		return c.copyOnRewriteRefOfRevertMigration(n, parent)
   377  	case *Rollback:
   378  		return c.copyOnRewriteRefOfRollback(n, parent)
   379  	case RootNode:
   380  		return c.copyOnRewriteRootNode(n, parent)
   381  	case *SRollback:
   382  		return c.copyOnRewriteRefOfSRollback(n, parent)
   383  	case *Savepoint:
   384  		return c.copyOnRewriteRefOfSavepoint(n, parent)
   385  	case *Select:
   386  		return c.copyOnRewriteRefOfSelect(n, parent)
   387  	case SelectExprs:
   388  		return c.copyOnRewriteSelectExprs(n, parent)
   389  	case *SelectInto:
   390  		return c.copyOnRewriteRefOfSelectInto(n, parent)
   391  	case *Set:
   392  		return c.copyOnRewriteRefOfSet(n, parent)
   393  	case *SetExpr:
   394  		return c.copyOnRewriteRefOfSetExpr(n, parent)
   395  	case SetExprs:
   396  		return c.copyOnRewriteSetExprs(n, parent)
   397  	case *Show:
   398  		return c.copyOnRewriteRefOfShow(n, parent)
   399  	case *ShowBasic:
   400  		return c.copyOnRewriteRefOfShowBasic(n, parent)
   401  	case *ShowCreate:
   402  		return c.copyOnRewriteRefOfShowCreate(n, parent)
   403  	case *ShowFilter:
   404  		return c.copyOnRewriteRefOfShowFilter(n, parent)
   405  	case *ShowMigrationLogs:
   406  		return c.copyOnRewriteRefOfShowMigrationLogs(n, parent)
   407  	case *ShowOther:
   408  		return c.copyOnRewriteRefOfShowOther(n, parent)
   409  	case *ShowThrottledApps:
   410  		return c.copyOnRewriteRefOfShowThrottledApps(n, parent)
   411  	case *ShowThrottlerStatus:
   412  		return c.copyOnRewriteRefOfShowThrottlerStatus(n, parent)
   413  	case *StarExpr:
   414  		return c.copyOnRewriteRefOfStarExpr(n, parent)
   415  	case *Std:
   416  		return c.copyOnRewriteRefOfStd(n, parent)
   417  	case *StdDev:
   418  		return c.copyOnRewriteRefOfStdDev(n, parent)
   419  	case *StdPop:
   420  		return c.copyOnRewriteRefOfStdPop(n, parent)
   421  	case *StdSamp:
   422  		return c.copyOnRewriteRefOfStdSamp(n, parent)
   423  	case *Stream:
   424  		return c.copyOnRewriteRefOfStream(n, parent)
   425  	case *SubPartition:
   426  		return c.copyOnRewriteRefOfSubPartition(n, parent)
   427  	case *SubPartitionDefinition:
   428  		return c.copyOnRewriteRefOfSubPartitionDefinition(n, parent)
   429  	case *SubPartitionDefinitionOptions:
   430  		return c.copyOnRewriteRefOfSubPartitionDefinitionOptions(n, parent)
   431  	case SubPartitionDefinitions:
   432  		return c.copyOnRewriteSubPartitionDefinitions(n, parent)
   433  	case *Subquery:
   434  		return c.copyOnRewriteRefOfSubquery(n, parent)
   435  	case *SubstrExpr:
   436  		return c.copyOnRewriteRefOfSubstrExpr(n, parent)
   437  	case *Sum:
   438  		return c.copyOnRewriteRefOfSum(n, parent)
   439  	case TableExprs:
   440  		return c.copyOnRewriteTableExprs(n, parent)
   441  	case TableName:
   442  		return c.copyOnRewriteTableName(n, parent)
   443  	case TableNames:
   444  		return c.copyOnRewriteTableNames(n, parent)
   445  	case TableOptions:
   446  		return c.copyOnRewriteTableOptions(n, parent)
   447  	case *TableSpec:
   448  		return c.copyOnRewriteRefOfTableSpec(n, parent)
   449  	case *TablespaceOperation:
   450  		return c.copyOnRewriteRefOfTablespaceOperation(n, parent)
   451  	case *TimestampFuncExpr:
   452  		return c.copyOnRewriteRefOfTimestampFuncExpr(n, parent)
   453  	case *TrimFuncExpr:
   454  		return c.copyOnRewriteRefOfTrimFuncExpr(n, parent)
   455  	case *TruncateTable:
   456  		return c.copyOnRewriteRefOfTruncateTable(n, parent)
   457  	case *UnaryExpr:
   458  		return c.copyOnRewriteRefOfUnaryExpr(n, parent)
   459  	case *Union:
   460  		return c.copyOnRewriteRefOfUnion(n, parent)
   461  	case *UnlockTables:
   462  		return c.copyOnRewriteRefOfUnlockTables(n, parent)
   463  	case *Update:
   464  		return c.copyOnRewriteRefOfUpdate(n, parent)
   465  	case *UpdateExpr:
   466  		return c.copyOnRewriteRefOfUpdateExpr(n, parent)
   467  	case UpdateExprs:
   468  		return c.copyOnRewriteUpdateExprs(n, parent)
   469  	case *UpdateXMLExpr:
   470  		return c.copyOnRewriteRefOfUpdateXMLExpr(n, parent)
   471  	case *Use:
   472  		return c.copyOnRewriteRefOfUse(n, parent)
   473  	case *VExplainStmt:
   474  		return c.copyOnRewriteRefOfVExplainStmt(n, parent)
   475  	case *VStream:
   476  		return c.copyOnRewriteRefOfVStream(n, parent)
   477  	case ValTuple:
   478  		return c.copyOnRewriteValTuple(n, parent)
   479  	case *Validation:
   480  		return c.copyOnRewriteRefOfValidation(n, parent)
   481  	case Values:
   482  		return c.copyOnRewriteValues(n, parent)
   483  	case *ValuesFuncExpr:
   484  		return c.copyOnRewriteRefOfValuesFuncExpr(n, parent)
   485  	case *VarPop:
   486  		return c.copyOnRewriteRefOfVarPop(n, parent)
   487  	case *VarSamp:
   488  		return c.copyOnRewriteRefOfVarSamp(n, parent)
   489  	case *Variable:
   490  		return c.copyOnRewriteRefOfVariable(n, parent)
   491  	case *Variance:
   492  		return c.copyOnRewriteRefOfVariance(n, parent)
   493  	case VindexParam:
   494  		return c.copyOnRewriteVindexParam(n, parent)
   495  	case *VindexSpec:
   496  		return c.copyOnRewriteRefOfVindexSpec(n, parent)
   497  	case *WeightStringFuncExpr:
   498  		return c.copyOnRewriteRefOfWeightStringFuncExpr(n, parent)
   499  	case *When:
   500  		return c.copyOnRewriteRefOfWhen(n, parent)
   501  	case *Where:
   502  		return c.copyOnRewriteRefOfWhere(n, parent)
   503  	case *WindowDefinition:
   504  		return c.copyOnRewriteRefOfWindowDefinition(n, parent)
   505  	case WindowDefinitions:
   506  		return c.copyOnRewriteWindowDefinitions(n, parent)
   507  	case *WindowSpecification:
   508  		return c.copyOnRewriteRefOfWindowSpecification(n, parent)
   509  	case *With:
   510  		return c.copyOnRewriteRefOfWith(n, parent)
   511  	case *XorExpr:
   512  		return c.copyOnRewriteRefOfXorExpr(n, parent)
   513  	default:
   514  		// this should never happen
   515  		return nil, false
   516  	}
   517  }
   518  func (c *cow) copyOnRewriteRefOfAddColumns(n *AddColumns, parent SQLNode) (out SQLNode, changed bool) {
   519  	if n == nil || c.cursor.stop {
   520  		return n, false
   521  	}
   522  	out = n
   523  	if c.pre == nil || c.pre(n, parent) {
   524  		var changedColumns bool
   525  		_Columns := make([]*ColumnDefinition, len(n.Columns))
   526  		for x, el := range n.Columns {
   527  			this, changed := c.copyOnRewriteRefOfColumnDefinition(el, n)
   528  			_Columns[x] = this.(*ColumnDefinition)
   529  			if changed {
   530  				changedColumns = true
   531  			}
   532  		}
   533  		_After, changedAfter := c.copyOnRewriteRefOfColName(n.After, n)
   534  		if changedColumns || changedAfter {
   535  			res := *n
   536  			res.Columns = _Columns
   537  			res.After, _ = _After.(*ColName)
   538  			out = &res
   539  			if c.cloned != nil {
   540  				c.cloned(n, out)
   541  			}
   542  			changed = true
   543  		}
   544  	}
   545  	if c.post != nil {
   546  		out, changed = c.postVisit(out, parent, changed)
   547  	}
   548  	return
   549  }
   550  func (c *cow) copyOnRewriteRefOfAddConstraintDefinition(n *AddConstraintDefinition, parent SQLNode) (out SQLNode, changed bool) {
   551  	if n == nil || c.cursor.stop {
   552  		return n, false
   553  	}
   554  	out = n
   555  	if c.pre == nil || c.pre(n, parent) {
   556  		_ConstraintDefinition, changedConstraintDefinition := c.copyOnRewriteRefOfConstraintDefinition(n.ConstraintDefinition, n)
   557  		if changedConstraintDefinition {
   558  			res := *n
   559  			res.ConstraintDefinition, _ = _ConstraintDefinition.(*ConstraintDefinition)
   560  			out = &res
   561  			if c.cloned != nil {
   562  				c.cloned(n, out)
   563  			}
   564  			changed = true
   565  		}
   566  	}
   567  	if c.post != nil {
   568  		out, changed = c.postVisit(out, parent, changed)
   569  	}
   570  	return
   571  }
   572  func (c *cow) copyOnRewriteRefOfAddIndexDefinition(n *AddIndexDefinition, parent SQLNode) (out SQLNode, changed bool) {
   573  	if n == nil || c.cursor.stop {
   574  		return n, false
   575  	}
   576  	out = n
   577  	if c.pre == nil || c.pre(n, parent) {
   578  		_IndexDefinition, changedIndexDefinition := c.copyOnRewriteRefOfIndexDefinition(n.IndexDefinition, n)
   579  		if changedIndexDefinition {
   580  			res := *n
   581  			res.IndexDefinition, _ = _IndexDefinition.(*IndexDefinition)
   582  			out = &res
   583  			if c.cloned != nil {
   584  				c.cloned(n, out)
   585  			}
   586  			changed = true
   587  		}
   588  	}
   589  	if c.post != nil {
   590  		out, changed = c.postVisit(out, parent, changed)
   591  	}
   592  	return
   593  }
   594  func (c *cow) copyOnRewriteRefOfAliasedExpr(n *AliasedExpr, parent SQLNode) (out SQLNode, changed bool) {
   595  	if n == nil || c.cursor.stop {
   596  		return n, false
   597  	}
   598  	out = n
   599  	if c.pre == nil || c.pre(n, parent) {
   600  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
   601  		_As, changedAs := c.copyOnRewriteIdentifierCI(n.As, n)
   602  		if changedExpr || changedAs {
   603  			res := *n
   604  			res.Expr, _ = _Expr.(Expr)
   605  			res.As, _ = _As.(IdentifierCI)
   606  			out = &res
   607  			if c.cloned != nil {
   608  				c.cloned(n, out)
   609  			}
   610  			changed = true
   611  		}
   612  	}
   613  	if c.post != nil {
   614  		out, changed = c.postVisit(out, parent, changed)
   615  	}
   616  	return
   617  }
   618  func (c *cow) copyOnRewriteRefOfAliasedTableExpr(n *AliasedTableExpr, parent SQLNode) (out SQLNode, changed bool) {
   619  	if n == nil || c.cursor.stop {
   620  		return n, false
   621  	}
   622  	out = n
   623  	if c.pre == nil || c.pre(n, parent) {
   624  		_Expr, changedExpr := c.copyOnRewriteSimpleTableExpr(n.Expr, n)
   625  		_Partitions, changedPartitions := c.copyOnRewritePartitions(n.Partitions, n)
   626  		_As, changedAs := c.copyOnRewriteIdentifierCS(n.As, n)
   627  		_Hints, changedHints := c.copyOnRewriteIndexHints(n.Hints, n)
   628  		_Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n)
   629  		if changedExpr || changedPartitions || changedAs || changedHints || changedColumns {
   630  			res := *n
   631  			res.Expr, _ = _Expr.(SimpleTableExpr)
   632  			res.Partitions, _ = _Partitions.(Partitions)
   633  			res.As, _ = _As.(IdentifierCS)
   634  			res.Hints, _ = _Hints.(IndexHints)
   635  			res.Columns, _ = _Columns.(Columns)
   636  			out = &res
   637  			if c.cloned != nil {
   638  				c.cloned(n, out)
   639  			}
   640  			changed = true
   641  		}
   642  	}
   643  	if c.post != nil {
   644  		out, changed = c.postVisit(out, parent, changed)
   645  	}
   646  	return
   647  }
   648  func (c *cow) copyOnRewriteRefOfAlterCharset(n *AlterCharset, parent SQLNode) (out SQLNode, changed bool) {
   649  	if n == nil || c.cursor.stop {
   650  		return n, false
   651  	}
   652  	out = n
   653  	if c.pre == nil || c.pre(n, parent) {
   654  	}
   655  	if c.post != nil {
   656  		out, changed = c.postVisit(out, parent, changed)
   657  	}
   658  	return
   659  }
   660  func (c *cow) copyOnRewriteRefOfAlterCheck(n *AlterCheck, parent SQLNode) (out SQLNode, changed bool) {
   661  	if n == nil || c.cursor.stop {
   662  		return n, false
   663  	}
   664  	out = n
   665  	if c.pre == nil || c.pre(n, parent) {
   666  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
   667  		if changedName {
   668  			res := *n
   669  			res.Name, _ = _Name.(IdentifierCI)
   670  			out = &res
   671  			if c.cloned != nil {
   672  				c.cloned(n, out)
   673  			}
   674  			changed = true
   675  		}
   676  	}
   677  	if c.post != nil {
   678  		out, changed = c.postVisit(out, parent, changed)
   679  	}
   680  	return
   681  }
   682  func (c *cow) copyOnRewriteRefOfAlterColumn(n *AlterColumn, parent SQLNode) (out SQLNode, changed bool) {
   683  	if n == nil || c.cursor.stop {
   684  		return n, false
   685  	}
   686  	out = n
   687  	if c.pre == nil || c.pre(n, parent) {
   688  		_Column, changedColumn := c.copyOnRewriteRefOfColName(n.Column, n)
   689  		_DefaultVal, changedDefaultVal := c.copyOnRewriteExpr(n.DefaultVal, n)
   690  		if changedColumn || changedDefaultVal {
   691  			res := *n
   692  			res.Column, _ = _Column.(*ColName)
   693  			res.DefaultVal, _ = _DefaultVal.(Expr)
   694  			out = &res
   695  			if c.cloned != nil {
   696  				c.cloned(n, out)
   697  			}
   698  			changed = true
   699  		}
   700  	}
   701  	if c.post != nil {
   702  		out, changed = c.postVisit(out, parent, changed)
   703  	}
   704  	return
   705  }
   706  func (c *cow) copyOnRewriteRefOfAlterDatabase(n *AlterDatabase, parent SQLNode) (out SQLNode, changed bool) {
   707  	if n == nil || c.cursor.stop {
   708  		return n, false
   709  	}
   710  	out = n
   711  	if c.pre == nil || c.pre(n, parent) {
   712  		_DBName, changedDBName := c.copyOnRewriteIdentifierCS(n.DBName, n)
   713  		if changedDBName {
   714  			res := *n
   715  			res.DBName, _ = _DBName.(IdentifierCS)
   716  			out = &res
   717  			if c.cloned != nil {
   718  				c.cloned(n, out)
   719  			}
   720  			changed = true
   721  		}
   722  	}
   723  	if c.post != nil {
   724  		out, changed = c.postVisit(out, parent, changed)
   725  	}
   726  	return
   727  }
   728  func (c *cow) copyOnRewriteRefOfAlterIndex(n *AlterIndex, parent SQLNode) (out SQLNode, changed bool) {
   729  	if n == nil || c.cursor.stop {
   730  		return n, false
   731  	}
   732  	out = n
   733  	if c.pre == nil || c.pre(n, parent) {
   734  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
   735  		if changedName {
   736  			res := *n
   737  			res.Name, _ = _Name.(IdentifierCI)
   738  			out = &res
   739  			if c.cloned != nil {
   740  				c.cloned(n, out)
   741  			}
   742  			changed = true
   743  		}
   744  	}
   745  	if c.post != nil {
   746  		out, changed = c.postVisit(out, parent, changed)
   747  	}
   748  	return
   749  }
   750  func (c *cow) copyOnRewriteRefOfAlterMigration(n *AlterMigration, parent SQLNode) (out SQLNode, changed bool) {
   751  	if n == nil || c.cursor.stop {
   752  		return n, false
   753  	}
   754  	out = n
   755  	if c.pre == nil || c.pre(n, parent) {
   756  		_Ratio, changedRatio := c.copyOnRewriteRefOfLiteral(n.Ratio, n)
   757  		if changedRatio {
   758  			res := *n
   759  			res.Ratio, _ = _Ratio.(*Literal)
   760  			out = &res
   761  			if c.cloned != nil {
   762  				c.cloned(n, out)
   763  			}
   764  			changed = true
   765  		}
   766  	}
   767  	if c.post != nil {
   768  		out, changed = c.postVisit(out, parent, changed)
   769  	}
   770  	return
   771  }
   772  func (c *cow) copyOnRewriteRefOfAlterTable(n *AlterTable, parent SQLNode) (out SQLNode, changed bool) {
   773  	if n == nil || c.cursor.stop {
   774  		return n, false
   775  	}
   776  	out = n
   777  	if c.pre == nil || c.pre(n, parent) {
   778  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
   779  		var changedAlterOptions bool
   780  		_AlterOptions := make([]AlterOption, len(n.AlterOptions))
   781  		for x, el := range n.AlterOptions {
   782  			this, changed := c.copyOnRewriteAlterOption(el, n)
   783  			_AlterOptions[x] = this.(AlterOption)
   784  			if changed {
   785  				changedAlterOptions = true
   786  			}
   787  		}
   788  		_PartitionSpec, changedPartitionSpec := c.copyOnRewriteRefOfPartitionSpec(n.PartitionSpec, n)
   789  		_PartitionOption, changedPartitionOption := c.copyOnRewriteRefOfPartitionOption(n.PartitionOption, n)
   790  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
   791  		if changedTable || changedAlterOptions || changedPartitionSpec || changedPartitionOption || changedComments {
   792  			res := *n
   793  			res.Table, _ = _Table.(TableName)
   794  			res.AlterOptions = _AlterOptions
   795  			res.PartitionSpec, _ = _PartitionSpec.(*PartitionSpec)
   796  			res.PartitionOption, _ = _PartitionOption.(*PartitionOption)
   797  			res.Comments, _ = _Comments.(*ParsedComments)
   798  			out = &res
   799  			if c.cloned != nil {
   800  				c.cloned(n, out)
   801  			}
   802  			changed = true
   803  		}
   804  	}
   805  	if c.post != nil {
   806  		out, changed = c.postVisit(out, parent, changed)
   807  	}
   808  	return
   809  }
   810  func (c *cow) copyOnRewriteRefOfAlterView(n *AlterView, parent SQLNode) (out SQLNode, changed bool) {
   811  	if n == nil || c.cursor.stop {
   812  		return n, false
   813  	}
   814  	out = n
   815  	if c.pre == nil || c.pre(n, parent) {
   816  		_ViewName, changedViewName := c.copyOnRewriteTableName(n.ViewName, n)
   817  		_Definer, changedDefiner := c.copyOnRewriteRefOfDefiner(n.Definer, n)
   818  		_Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n)
   819  		_Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n)
   820  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
   821  		if changedViewName || changedDefiner || changedColumns || changedSelect || changedComments {
   822  			res := *n
   823  			res.ViewName, _ = _ViewName.(TableName)
   824  			res.Definer, _ = _Definer.(*Definer)
   825  			res.Columns, _ = _Columns.(Columns)
   826  			res.Select, _ = _Select.(SelectStatement)
   827  			res.Comments, _ = _Comments.(*ParsedComments)
   828  			out = &res
   829  			if c.cloned != nil {
   830  				c.cloned(n, out)
   831  			}
   832  			changed = true
   833  		}
   834  	}
   835  	if c.post != nil {
   836  		out, changed = c.postVisit(out, parent, changed)
   837  	}
   838  	return
   839  }
   840  func (c *cow) copyOnRewriteRefOfAlterVschema(n *AlterVschema, parent SQLNode) (out SQLNode, changed bool) {
   841  	if n == nil || c.cursor.stop {
   842  		return n, false
   843  	}
   844  	out = n
   845  	if c.pre == nil || c.pre(n, parent) {
   846  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
   847  		_VindexSpec, changedVindexSpec := c.copyOnRewriteRefOfVindexSpec(n.VindexSpec, n)
   848  		var changedVindexCols bool
   849  		_VindexCols := make([]IdentifierCI, len(n.VindexCols))
   850  		for x, el := range n.VindexCols {
   851  			this, changed := c.copyOnRewriteIdentifierCI(el, n)
   852  			_VindexCols[x] = this.(IdentifierCI)
   853  			if changed {
   854  				changedVindexCols = true
   855  			}
   856  		}
   857  		_AutoIncSpec, changedAutoIncSpec := c.copyOnRewriteRefOfAutoIncSpec(n.AutoIncSpec, n)
   858  		if changedTable || changedVindexSpec || changedVindexCols || changedAutoIncSpec {
   859  			res := *n
   860  			res.Table, _ = _Table.(TableName)
   861  			res.VindexSpec, _ = _VindexSpec.(*VindexSpec)
   862  			res.VindexCols = _VindexCols
   863  			res.AutoIncSpec, _ = _AutoIncSpec.(*AutoIncSpec)
   864  			out = &res
   865  			if c.cloned != nil {
   866  				c.cloned(n, out)
   867  			}
   868  			changed = true
   869  		}
   870  	}
   871  	if c.post != nil {
   872  		out, changed = c.postVisit(out, parent, changed)
   873  	}
   874  	return
   875  }
   876  func (c *cow) copyOnRewriteRefOfAndExpr(n *AndExpr, parent SQLNode) (out SQLNode, changed bool) {
   877  	if n == nil || c.cursor.stop {
   878  		return n, false
   879  	}
   880  	out = n
   881  	if c.pre == nil || c.pre(n, parent) {
   882  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
   883  		_Right, changedRight := c.copyOnRewriteExpr(n.Right, n)
   884  		if changedLeft || changedRight {
   885  			res := *n
   886  			res.Left, _ = _Left.(Expr)
   887  			res.Right, _ = _Right.(Expr)
   888  			out = &res
   889  			if c.cloned != nil {
   890  				c.cloned(n, out)
   891  			}
   892  			changed = true
   893  		}
   894  	}
   895  	if c.post != nil {
   896  		out, changed = c.postVisit(out, parent, changed)
   897  	}
   898  	return
   899  }
   900  func (c *cow) copyOnRewriteRefOfArgumentLessWindowExpr(n *ArgumentLessWindowExpr, parent SQLNode) (out SQLNode, changed bool) {
   901  	if n == nil || c.cursor.stop {
   902  		return n, false
   903  	}
   904  	out = n
   905  	if c.pre == nil || c.pre(n, parent) {
   906  		_OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
   907  		if changedOverClause {
   908  			res := *n
   909  			res.OverClause, _ = _OverClause.(*OverClause)
   910  			out = &res
   911  			if c.cloned != nil {
   912  				c.cloned(n, out)
   913  			}
   914  			changed = true
   915  		}
   916  	}
   917  	if c.post != nil {
   918  		out, changed = c.postVisit(out, parent, changed)
   919  	}
   920  	return
   921  }
   922  func (c *cow) copyOnRewriteRefOfAutoIncSpec(n *AutoIncSpec, parent SQLNode) (out SQLNode, changed bool) {
   923  	if n == nil || c.cursor.stop {
   924  		return n, false
   925  	}
   926  	out = n
   927  	if c.pre == nil || c.pre(n, parent) {
   928  		_Column, changedColumn := c.copyOnRewriteIdentifierCI(n.Column, n)
   929  		_Sequence, changedSequence := c.copyOnRewriteTableName(n.Sequence, n)
   930  		if changedColumn || changedSequence {
   931  			res := *n
   932  			res.Column, _ = _Column.(IdentifierCI)
   933  			res.Sequence, _ = _Sequence.(TableName)
   934  			out = &res
   935  			if c.cloned != nil {
   936  				c.cloned(n, out)
   937  			}
   938  			changed = true
   939  		}
   940  	}
   941  	if c.post != nil {
   942  		out, changed = c.postVisit(out, parent, changed)
   943  	}
   944  	return
   945  }
   946  func (c *cow) copyOnRewriteRefOfAvg(n *Avg, parent SQLNode) (out SQLNode, changed bool) {
   947  	if n == nil || c.cursor.stop {
   948  		return n, false
   949  	}
   950  	out = n
   951  	if c.pre == nil || c.pre(n, parent) {
   952  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
   953  		if changedArg {
   954  			res := *n
   955  			res.Arg, _ = _Arg.(Expr)
   956  			out = &res
   957  			if c.cloned != nil {
   958  				c.cloned(n, out)
   959  			}
   960  			changed = true
   961  		}
   962  	}
   963  	if c.post != nil {
   964  		out, changed = c.postVisit(out, parent, changed)
   965  	}
   966  	return
   967  }
   968  func (c *cow) copyOnRewriteRefOfBegin(n *Begin, parent SQLNode) (out SQLNode, changed bool) {
   969  	if n == nil || c.cursor.stop {
   970  		return n, false
   971  	}
   972  	out = n
   973  	if c.pre == nil || c.pre(n, parent) {
   974  	}
   975  	if c.post != nil {
   976  		out, changed = c.postVisit(out, parent, changed)
   977  	}
   978  	return
   979  }
   980  func (c *cow) copyOnRewriteRefOfBetweenExpr(n *BetweenExpr, parent SQLNode) (out SQLNode, changed bool) {
   981  	if n == nil || c.cursor.stop {
   982  		return n, false
   983  	}
   984  	out = n
   985  	if c.pre == nil || c.pre(n, parent) {
   986  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
   987  		_From, changedFrom := c.copyOnRewriteExpr(n.From, n)
   988  		_To, changedTo := c.copyOnRewriteExpr(n.To, n)
   989  		if changedLeft || changedFrom || changedTo {
   990  			res := *n
   991  			res.Left, _ = _Left.(Expr)
   992  			res.From, _ = _From.(Expr)
   993  			res.To, _ = _To.(Expr)
   994  			out = &res
   995  			if c.cloned != nil {
   996  				c.cloned(n, out)
   997  			}
   998  			changed = true
   999  		}
  1000  	}
  1001  	if c.post != nil {
  1002  		out, changed = c.postVisit(out, parent, changed)
  1003  	}
  1004  	return
  1005  }
  1006  func (c *cow) copyOnRewriteRefOfBinaryExpr(n *BinaryExpr, parent SQLNode) (out SQLNode, changed bool) {
  1007  	if n == nil || c.cursor.stop {
  1008  		return n, false
  1009  	}
  1010  	out = n
  1011  	if c.pre == nil || c.pre(n, parent) {
  1012  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
  1013  		_Right, changedRight := c.copyOnRewriteExpr(n.Right, n)
  1014  		if changedLeft || changedRight {
  1015  			res := *n
  1016  			res.Left, _ = _Left.(Expr)
  1017  			res.Right, _ = _Right.(Expr)
  1018  			out = &res
  1019  			if c.cloned != nil {
  1020  				c.cloned(n, out)
  1021  			}
  1022  			changed = true
  1023  		}
  1024  	}
  1025  	if c.post != nil {
  1026  		out, changed = c.postVisit(out, parent, changed)
  1027  	}
  1028  	return
  1029  }
  1030  func (c *cow) copyOnRewriteRefOfBitAnd(n *BitAnd, parent SQLNode) (out SQLNode, changed bool) {
  1031  	if n == nil || c.cursor.stop {
  1032  		return n, false
  1033  	}
  1034  	out = n
  1035  	if c.pre == nil || c.pre(n, parent) {
  1036  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  1037  		if changedArg {
  1038  			res := *n
  1039  			res.Arg, _ = _Arg.(Expr)
  1040  			out = &res
  1041  			if c.cloned != nil {
  1042  				c.cloned(n, out)
  1043  			}
  1044  			changed = true
  1045  		}
  1046  	}
  1047  	if c.post != nil {
  1048  		out, changed = c.postVisit(out, parent, changed)
  1049  	}
  1050  	return
  1051  }
  1052  func (c *cow) copyOnRewriteRefOfBitOr(n *BitOr, parent SQLNode) (out SQLNode, changed bool) {
  1053  	if n == nil || c.cursor.stop {
  1054  		return n, false
  1055  	}
  1056  	out = n
  1057  	if c.pre == nil || c.pre(n, parent) {
  1058  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  1059  		if changedArg {
  1060  			res := *n
  1061  			res.Arg, _ = _Arg.(Expr)
  1062  			out = &res
  1063  			if c.cloned != nil {
  1064  				c.cloned(n, out)
  1065  			}
  1066  			changed = true
  1067  		}
  1068  	}
  1069  	if c.post != nil {
  1070  		out, changed = c.postVisit(out, parent, changed)
  1071  	}
  1072  	return
  1073  }
  1074  func (c *cow) copyOnRewriteRefOfBitXor(n *BitXor, parent SQLNode) (out SQLNode, changed bool) {
  1075  	if n == nil || c.cursor.stop {
  1076  		return n, false
  1077  	}
  1078  	out = n
  1079  	if c.pre == nil || c.pre(n, parent) {
  1080  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  1081  		if changedArg {
  1082  			res := *n
  1083  			res.Arg, _ = _Arg.(Expr)
  1084  			out = &res
  1085  			if c.cloned != nil {
  1086  				c.cloned(n, out)
  1087  			}
  1088  			changed = true
  1089  		}
  1090  	}
  1091  	if c.post != nil {
  1092  		out, changed = c.postVisit(out, parent, changed)
  1093  	}
  1094  	return
  1095  }
  1096  func (c *cow) copyOnRewriteRefOfCallProc(n *CallProc, parent SQLNode) (out SQLNode, changed bool) {
  1097  	if n == nil || c.cursor.stop {
  1098  		return n, false
  1099  	}
  1100  	out = n
  1101  	if c.pre == nil || c.pre(n, parent) {
  1102  		_Name, changedName := c.copyOnRewriteTableName(n.Name, n)
  1103  		_Params, changedParams := c.copyOnRewriteExprs(n.Params, n)
  1104  		if changedName || changedParams {
  1105  			res := *n
  1106  			res.Name, _ = _Name.(TableName)
  1107  			res.Params, _ = _Params.(Exprs)
  1108  			out = &res
  1109  			if c.cloned != nil {
  1110  				c.cloned(n, out)
  1111  			}
  1112  			changed = true
  1113  		}
  1114  	}
  1115  	if c.post != nil {
  1116  		out, changed = c.postVisit(out, parent, changed)
  1117  	}
  1118  	return
  1119  }
  1120  func (c *cow) copyOnRewriteRefOfCaseExpr(n *CaseExpr, parent SQLNode) (out SQLNode, changed bool) {
  1121  	if n == nil || c.cursor.stop {
  1122  		return n, false
  1123  	}
  1124  	out = n
  1125  	if c.pre == nil || c.pre(n, parent) {
  1126  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  1127  		var changedWhens bool
  1128  		_Whens := make([]*When, len(n.Whens))
  1129  		for x, el := range n.Whens {
  1130  			this, changed := c.copyOnRewriteRefOfWhen(el, n)
  1131  			_Whens[x] = this.(*When)
  1132  			if changed {
  1133  				changedWhens = true
  1134  			}
  1135  		}
  1136  		_Else, changedElse := c.copyOnRewriteExpr(n.Else, n)
  1137  		if changedExpr || changedWhens || changedElse {
  1138  			res := *n
  1139  			res.Expr, _ = _Expr.(Expr)
  1140  			res.Whens = _Whens
  1141  			res.Else, _ = _Else.(Expr)
  1142  			out = &res
  1143  			if c.cloned != nil {
  1144  				c.cloned(n, out)
  1145  			}
  1146  			changed = true
  1147  		}
  1148  	}
  1149  	if c.post != nil {
  1150  		out, changed = c.postVisit(out, parent, changed)
  1151  	}
  1152  	return
  1153  }
  1154  func (c *cow) copyOnRewriteRefOfCastExpr(n *CastExpr, parent SQLNode) (out SQLNode, changed bool) {
  1155  	if n == nil || c.cursor.stop {
  1156  		return n, false
  1157  	}
  1158  	out = n
  1159  	if c.pre == nil || c.pre(n, parent) {
  1160  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  1161  		_Type, changedType := c.copyOnRewriteRefOfConvertType(n.Type, n)
  1162  		if changedExpr || changedType {
  1163  			res := *n
  1164  			res.Expr, _ = _Expr.(Expr)
  1165  			res.Type, _ = _Type.(*ConvertType)
  1166  			out = &res
  1167  			if c.cloned != nil {
  1168  				c.cloned(n, out)
  1169  			}
  1170  			changed = true
  1171  		}
  1172  	}
  1173  	if c.post != nil {
  1174  		out, changed = c.postVisit(out, parent, changed)
  1175  	}
  1176  	return
  1177  }
  1178  func (c *cow) copyOnRewriteRefOfChangeColumn(n *ChangeColumn, parent SQLNode) (out SQLNode, changed bool) {
  1179  	if n == nil || c.cursor.stop {
  1180  		return n, false
  1181  	}
  1182  	out = n
  1183  	if c.pre == nil || c.pre(n, parent) {
  1184  		_OldColumn, changedOldColumn := c.copyOnRewriteRefOfColName(n.OldColumn, n)
  1185  		_NewColDefinition, changedNewColDefinition := c.copyOnRewriteRefOfColumnDefinition(n.NewColDefinition, n)
  1186  		_After, changedAfter := c.copyOnRewriteRefOfColName(n.After, n)
  1187  		if changedOldColumn || changedNewColDefinition || changedAfter {
  1188  			res := *n
  1189  			res.OldColumn, _ = _OldColumn.(*ColName)
  1190  			res.NewColDefinition, _ = _NewColDefinition.(*ColumnDefinition)
  1191  			res.After, _ = _After.(*ColName)
  1192  			out = &res
  1193  			if c.cloned != nil {
  1194  				c.cloned(n, out)
  1195  			}
  1196  			changed = true
  1197  		}
  1198  	}
  1199  	if c.post != nil {
  1200  		out, changed = c.postVisit(out, parent, changed)
  1201  	}
  1202  	return
  1203  }
  1204  func (c *cow) copyOnRewriteRefOfCharExpr(n *CharExpr, parent SQLNode) (out SQLNode, changed bool) {
  1205  	if n == nil || c.cursor.stop {
  1206  		return n, false
  1207  	}
  1208  	out = n
  1209  	if c.pre == nil || c.pre(n, parent) {
  1210  		_Exprs, changedExprs := c.copyOnRewriteExprs(n.Exprs, n)
  1211  		if changedExprs {
  1212  			res := *n
  1213  			res.Exprs, _ = _Exprs.(Exprs)
  1214  			out = &res
  1215  			if c.cloned != nil {
  1216  				c.cloned(n, out)
  1217  			}
  1218  			changed = true
  1219  		}
  1220  	}
  1221  	if c.post != nil {
  1222  		out, changed = c.postVisit(out, parent, changed)
  1223  	}
  1224  	return
  1225  }
  1226  func (c *cow) copyOnRewriteRefOfCheckConstraintDefinition(n *CheckConstraintDefinition, parent SQLNode) (out SQLNode, changed bool) {
  1227  	if n == nil || c.cursor.stop {
  1228  		return n, false
  1229  	}
  1230  	out = n
  1231  	if c.pre == nil || c.pre(n, parent) {
  1232  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  1233  		if changedExpr {
  1234  			res := *n
  1235  			res.Expr, _ = _Expr.(Expr)
  1236  			out = &res
  1237  			if c.cloned != nil {
  1238  				c.cloned(n, out)
  1239  			}
  1240  			changed = true
  1241  		}
  1242  	}
  1243  	if c.post != nil {
  1244  		out, changed = c.postVisit(out, parent, changed)
  1245  	}
  1246  	return
  1247  }
  1248  func (c *cow) copyOnRewriteRefOfColName(n *ColName, parent SQLNode) (out SQLNode, changed bool) {
  1249  	if n == nil || c.cursor.stop {
  1250  		return n, false
  1251  	}
  1252  	out = n
  1253  	if c.pre == nil || c.pre(n, parent) {
  1254  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1255  		_Qualifier, changedQualifier := c.copyOnRewriteTableName(n.Qualifier, n)
  1256  		if changedName || changedQualifier {
  1257  			res := *n
  1258  			res.Name, _ = _Name.(IdentifierCI)
  1259  			res.Qualifier, _ = _Qualifier.(TableName)
  1260  			out = &res
  1261  			if c.cloned != nil {
  1262  				c.cloned(n, out)
  1263  			}
  1264  			changed = true
  1265  		}
  1266  	}
  1267  	if c.post != nil {
  1268  		out, changed = c.postVisit(out, parent, changed)
  1269  	}
  1270  	return
  1271  }
  1272  func (c *cow) copyOnRewriteRefOfCollateExpr(n *CollateExpr, parent SQLNode) (out SQLNode, changed bool) {
  1273  	if n == nil || c.cursor.stop {
  1274  		return n, false
  1275  	}
  1276  	out = n
  1277  	if c.pre == nil || c.pre(n, parent) {
  1278  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  1279  		if changedExpr {
  1280  			res := *n
  1281  			res.Expr, _ = _Expr.(Expr)
  1282  			out = &res
  1283  			if c.cloned != nil {
  1284  				c.cloned(n, out)
  1285  			}
  1286  			changed = true
  1287  		}
  1288  	}
  1289  	if c.post != nil {
  1290  		out, changed = c.postVisit(out, parent, changed)
  1291  	}
  1292  	return
  1293  }
  1294  func (c *cow) copyOnRewriteRefOfColumnDefinition(n *ColumnDefinition, parent SQLNode) (out SQLNode, changed bool) {
  1295  	if n == nil || c.cursor.stop {
  1296  		return n, false
  1297  	}
  1298  	out = n
  1299  	if c.pre == nil || c.pre(n, parent) {
  1300  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1301  		_Type, changedType := c.copyOnRewriteRefOfColumnType(n.Type, n)
  1302  		if changedName || changedType {
  1303  			res := *n
  1304  			res.Name, _ = _Name.(IdentifierCI)
  1305  			res.Type, _ = _Type.(*ColumnType)
  1306  			out = &res
  1307  			if c.cloned != nil {
  1308  				c.cloned(n, out)
  1309  			}
  1310  			changed = true
  1311  		}
  1312  	}
  1313  	if c.post != nil {
  1314  		out, changed = c.postVisit(out, parent, changed)
  1315  	}
  1316  	return
  1317  }
  1318  func (c *cow) copyOnRewriteRefOfColumnType(n *ColumnType, parent SQLNode) (out SQLNode, changed bool) {
  1319  	if n == nil || c.cursor.stop {
  1320  		return n, false
  1321  	}
  1322  	out = n
  1323  	if c.pre == nil || c.pre(n, parent) {
  1324  		_Length, changedLength := c.copyOnRewriteRefOfLiteral(n.Length, n)
  1325  		_Scale, changedScale := c.copyOnRewriteRefOfLiteral(n.Scale, n)
  1326  		if changedLength || changedScale {
  1327  			res := *n
  1328  			res.Length, _ = _Length.(*Literal)
  1329  			res.Scale, _ = _Scale.(*Literal)
  1330  			out = &res
  1331  			if c.cloned != nil {
  1332  				c.cloned(n, out)
  1333  			}
  1334  			changed = true
  1335  		}
  1336  	}
  1337  	if c.post != nil {
  1338  		out, changed = c.postVisit(out, parent, changed)
  1339  	}
  1340  	return
  1341  }
  1342  func (c *cow) copyOnRewriteColumns(n Columns, parent SQLNode) (out SQLNode, changed bool) {
  1343  	if n == nil || c.cursor.stop {
  1344  		return n, false
  1345  	}
  1346  	out = n
  1347  	if c.pre == nil || c.pre(n, parent) {
  1348  		res := make(Columns, len(n))
  1349  		for x, el := range n {
  1350  			this, change := c.copyOnRewriteIdentifierCI(el, n)
  1351  			res[x] = this.(IdentifierCI)
  1352  			if change {
  1353  				changed = true
  1354  			}
  1355  		}
  1356  		if changed {
  1357  			out = res
  1358  		}
  1359  	}
  1360  	if c.post != nil {
  1361  		out, changed = c.postVisit(out, parent, changed)
  1362  	}
  1363  	return
  1364  }
  1365  func (c *cow) copyOnRewriteRefOfCommentOnly(n *CommentOnly, parent SQLNode) (out SQLNode, changed bool) {
  1366  	if n == nil || c.cursor.stop {
  1367  		return n, false
  1368  	}
  1369  	out = n
  1370  	if c.pre == nil || c.pre(n, parent) {
  1371  	}
  1372  	if c.post != nil {
  1373  		out, changed = c.postVisit(out, parent, changed)
  1374  	}
  1375  	return
  1376  }
  1377  func (c *cow) copyOnRewriteRefOfCommit(n *Commit, parent SQLNode) (out SQLNode, changed bool) {
  1378  	if n == nil || c.cursor.stop {
  1379  		return n, false
  1380  	}
  1381  	out = n
  1382  	if c.pre == nil || c.pre(n, parent) {
  1383  	}
  1384  	if c.post != nil {
  1385  		out, changed = c.postVisit(out, parent, changed)
  1386  	}
  1387  	return
  1388  }
  1389  func (c *cow) copyOnRewriteRefOfCommonTableExpr(n *CommonTableExpr, parent SQLNode) (out SQLNode, changed bool) {
  1390  	if n == nil || c.cursor.stop {
  1391  		return n, false
  1392  	}
  1393  	out = n
  1394  	if c.pre == nil || c.pre(n, parent) {
  1395  		_ID, changedID := c.copyOnRewriteIdentifierCS(n.ID, n)
  1396  		_Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n)
  1397  		_Subquery, changedSubquery := c.copyOnRewriteRefOfSubquery(n.Subquery, n)
  1398  		if changedID || changedColumns || changedSubquery {
  1399  			res := *n
  1400  			res.ID, _ = _ID.(IdentifierCS)
  1401  			res.Columns, _ = _Columns.(Columns)
  1402  			res.Subquery, _ = _Subquery.(*Subquery)
  1403  			out = &res
  1404  			if c.cloned != nil {
  1405  				c.cloned(n, out)
  1406  			}
  1407  			changed = true
  1408  		}
  1409  	}
  1410  	if c.post != nil {
  1411  		out, changed = c.postVisit(out, parent, changed)
  1412  	}
  1413  	return
  1414  }
  1415  func (c *cow) copyOnRewriteRefOfComparisonExpr(n *ComparisonExpr, parent SQLNode) (out SQLNode, changed bool) {
  1416  	if n == nil || c.cursor.stop {
  1417  		return n, false
  1418  	}
  1419  	out = n
  1420  	if c.pre == nil || c.pre(n, parent) {
  1421  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
  1422  		_Right, changedRight := c.copyOnRewriteExpr(n.Right, n)
  1423  		_Escape, changedEscape := c.copyOnRewriteExpr(n.Escape, n)
  1424  		if changedLeft || changedRight || changedEscape {
  1425  			res := *n
  1426  			res.Left, _ = _Left.(Expr)
  1427  			res.Right, _ = _Right.(Expr)
  1428  			res.Escape, _ = _Escape.(Expr)
  1429  			out = &res
  1430  			if c.cloned != nil {
  1431  				c.cloned(n, out)
  1432  			}
  1433  			changed = true
  1434  		}
  1435  	}
  1436  	if c.post != nil {
  1437  		out, changed = c.postVisit(out, parent, changed)
  1438  	}
  1439  	return
  1440  }
  1441  func (c *cow) copyOnRewriteRefOfConstraintDefinition(n *ConstraintDefinition, parent SQLNode) (out SQLNode, changed bool) {
  1442  	if n == nil || c.cursor.stop {
  1443  		return n, false
  1444  	}
  1445  	out = n
  1446  	if c.pre == nil || c.pre(n, parent) {
  1447  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1448  		_Details, changedDetails := c.copyOnRewriteConstraintInfo(n.Details, n)
  1449  		if changedName || changedDetails {
  1450  			res := *n
  1451  			res.Name, _ = _Name.(IdentifierCI)
  1452  			res.Details, _ = _Details.(ConstraintInfo)
  1453  			out = &res
  1454  			if c.cloned != nil {
  1455  				c.cloned(n, out)
  1456  			}
  1457  			changed = true
  1458  		}
  1459  	}
  1460  	if c.post != nil {
  1461  		out, changed = c.postVisit(out, parent, changed)
  1462  	}
  1463  	return
  1464  }
  1465  func (c *cow) copyOnRewriteRefOfConvertExpr(n *ConvertExpr, parent SQLNode) (out SQLNode, changed bool) {
  1466  	if n == nil || c.cursor.stop {
  1467  		return n, false
  1468  	}
  1469  	out = n
  1470  	if c.pre == nil || c.pre(n, parent) {
  1471  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  1472  		_Type, changedType := c.copyOnRewriteRefOfConvertType(n.Type, n)
  1473  		if changedExpr || changedType {
  1474  			res := *n
  1475  			res.Expr, _ = _Expr.(Expr)
  1476  			res.Type, _ = _Type.(*ConvertType)
  1477  			out = &res
  1478  			if c.cloned != nil {
  1479  				c.cloned(n, out)
  1480  			}
  1481  			changed = true
  1482  		}
  1483  	}
  1484  	if c.post != nil {
  1485  		out, changed = c.postVisit(out, parent, changed)
  1486  	}
  1487  	return
  1488  }
  1489  func (c *cow) copyOnRewriteRefOfConvertType(n *ConvertType, parent SQLNode) (out SQLNode, changed bool) {
  1490  	if n == nil || c.cursor.stop {
  1491  		return n, false
  1492  	}
  1493  	out = n
  1494  	if c.pre == nil || c.pre(n, parent) {
  1495  		_Length, changedLength := c.copyOnRewriteRefOfLiteral(n.Length, n)
  1496  		_Scale, changedScale := c.copyOnRewriteRefOfLiteral(n.Scale, n)
  1497  		if changedLength || changedScale {
  1498  			res := *n
  1499  			res.Length, _ = _Length.(*Literal)
  1500  			res.Scale, _ = _Scale.(*Literal)
  1501  			out = &res
  1502  			if c.cloned != nil {
  1503  				c.cloned(n, out)
  1504  			}
  1505  			changed = true
  1506  		}
  1507  	}
  1508  	if c.post != nil {
  1509  		out, changed = c.postVisit(out, parent, changed)
  1510  	}
  1511  	return
  1512  }
  1513  func (c *cow) copyOnRewriteRefOfConvertUsingExpr(n *ConvertUsingExpr, parent SQLNode) (out SQLNode, changed bool) {
  1514  	if n == nil || c.cursor.stop {
  1515  		return n, false
  1516  	}
  1517  	out = n
  1518  	if c.pre == nil || c.pre(n, parent) {
  1519  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  1520  		if changedExpr {
  1521  			res := *n
  1522  			res.Expr, _ = _Expr.(Expr)
  1523  			out = &res
  1524  			if c.cloned != nil {
  1525  				c.cloned(n, out)
  1526  			}
  1527  			changed = true
  1528  		}
  1529  	}
  1530  	if c.post != nil {
  1531  		out, changed = c.postVisit(out, parent, changed)
  1532  	}
  1533  	return
  1534  }
  1535  func (c *cow) copyOnRewriteRefOfCount(n *Count, parent SQLNode) (out SQLNode, changed bool) {
  1536  	if n == nil || c.cursor.stop {
  1537  		return n, false
  1538  	}
  1539  	out = n
  1540  	if c.pre == nil || c.pre(n, parent) {
  1541  		_Args, changedArgs := c.copyOnRewriteExprs(n.Args, n)
  1542  		if changedArgs {
  1543  			res := *n
  1544  			res.Args, _ = _Args.(Exprs)
  1545  			out = &res
  1546  			if c.cloned != nil {
  1547  				c.cloned(n, out)
  1548  			}
  1549  			changed = true
  1550  		}
  1551  	}
  1552  	if c.post != nil {
  1553  		out, changed = c.postVisit(out, parent, changed)
  1554  	}
  1555  	return
  1556  }
  1557  func (c *cow) copyOnRewriteRefOfCountStar(n *CountStar, parent SQLNode) (out SQLNode, changed bool) {
  1558  	if n == nil || c.cursor.stop {
  1559  		return n, false
  1560  	}
  1561  	out = n
  1562  	if c.pre == nil || c.pre(n, parent) {
  1563  	}
  1564  	if c.post != nil {
  1565  		out, changed = c.postVisit(out, parent, changed)
  1566  	}
  1567  	return
  1568  }
  1569  func (c *cow) copyOnRewriteRefOfCreateDatabase(n *CreateDatabase, parent SQLNode) (out SQLNode, changed bool) {
  1570  	if n == nil || c.cursor.stop {
  1571  		return n, false
  1572  	}
  1573  	out = n
  1574  	if c.pre == nil || c.pre(n, parent) {
  1575  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1576  		_DBName, changedDBName := c.copyOnRewriteIdentifierCS(n.DBName, n)
  1577  		if changedComments || changedDBName {
  1578  			res := *n
  1579  			res.Comments, _ = _Comments.(*ParsedComments)
  1580  			res.DBName, _ = _DBName.(IdentifierCS)
  1581  			out = &res
  1582  			if c.cloned != nil {
  1583  				c.cloned(n, out)
  1584  			}
  1585  			changed = true
  1586  		}
  1587  	}
  1588  	if c.post != nil {
  1589  		out, changed = c.postVisit(out, parent, changed)
  1590  	}
  1591  	return
  1592  }
  1593  func (c *cow) copyOnRewriteRefOfCreateTable(n *CreateTable, parent SQLNode) (out SQLNode, changed bool) {
  1594  	if n == nil || c.cursor.stop {
  1595  		return n, false
  1596  	}
  1597  	out = n
  1598  	if c.pre == nil || c.pre(n, parent) {
  1599  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  1600  		_TableSpec, changedTableSpec := c.copyOnRewriteRefOfTableSpec(n.TableSpec, n)
  1601  		_OptLike, changedOptLike := c.copyOnRewriteRefOfOptLike(n.OptLike, n)
  1602  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1603  		if changedTable || changedTableSpec || changedOptLike || changedComments {
  1604  			res := *n
  1605  			res.Table, _ = _Table.(TableName)
  1606  			res.TableSpec, _ = _TableSpec.(*TableSpec)
  1607  			res.OptLike, _ = _OptLike.(*OptLike)
  1608  			res.Comments, _ = _Comments.(*ParsedComments)
  1609  			out = &res
  1610  			if c.cloned != nil {
  1611  				c.cloned(n, out)
  1612  			}
  1613  			changed = true
  1614  		}
  1615  	}
  1616  	if c.post != nil {
  1617  		out, changed = c.postVisit(out, parent, changed)
  1618  	}
  1619  	return
  1620  }
  1621  func (c *cow) copyOnRewriteRefOfCreateView(n *CreateView, parent SQLNode) (out SQLNode, changed bool) {
  1622  	if n == nil || c.cursor.stop {
  1623  		return n, false
  1624  	}
  1625  	out = n
  1626  	if c.pre == nil || c.pre(n, parent) {
  1627  		_ViewName, changedViewName := c.copyOnRewriteTableName(n.ViewName, n)
  1628  		_Definer, changedDefiner := c.copyOnRewriteRefOfDefiner(n.Definer, n)
  1629  		_Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n)
  1630  		_Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n)
  1631  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1632  		if changedViewName || changedDefiner || changedColumns || changedSelect || changedComments {
  1633  			res := *n
  1634  			res.ViewName, _ = _ViewName.(TableName)
  1635  			res.Definer, _ = _Definer.(*Definer)
  1636  			res.Columns, _ = _Columns.(Columns)
  1637  			res.Select, _ = _Select.(SelectStatement)
  1638  			res.Comments, _ = _Comments.(*ParsedComments)
  1639  			out = &res
  1640  			if c.cloned != nil {
  1641  				c.cloned(n, out)
  1642  			}
  1643  			changed = true
  1644  		}
  1645  	}
  1646  	if c.post != nil {
  1647  		out, changed = c.postVisit(out, parent, changed)
  1648  	}
  1649  	return
  1650  }
  1651  func (c *cow) copyOnRewriteRefOfCurTimeFuncExpr(n *CurTimeFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  1652  	if n == nil || c.cursor.stop {
  1653  		return n, false
  1654  	}
  1655  	out = n
  1656  	if c.pre == nil || c.pre(n, parent) {
  1657  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1658  		_Fsp, changedFsp := c.copyOnRewriteExpr(n.Fsp, n)
  1659  		if changedName || changedFsp {
  1660  			res := *n
  1661  			res.Name, _ = _Name.(IdentifierCI)
  1662  			res.Fsp, _ = _Fsp.(Expr)
  1663  			out = &res
  1664  			if c.cloned != nil {
  1665  				c.cloned(n, out)
  1666  			}
  1667  			changed = true
  1668  		}
  1669  	}
  1670  	if c.post != nil {
  1671  		out, changed = c.postVisit(out, parent, changed)
  1672  	}
  1673  	return
  1674  }
  1675  func (c *cow) copyOnRewriteRefOfDeallocateStmt(n *DeallocateStmt, parent SQLNode) (out SQLNode, changed bool) {
  1676  	if n == nil || c.cursor.stop {
  1677  		return n, false
  1678  	}
  1679  	out = n
  1680  	if c.pre == nil || c.pre(n, parent) {
  1681  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1682  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1683  		if changedComments || changedName {
  1684  			res := *n
  1685  			res.Comments, _ = _Comments.(*ParsedComments)
  1686  			res.Name, _ = _Name.(IdentifierCI)
  1687  			out = &res
  1688  			if c.cloned != nil {
  1689  				c.cloned(n, out)
  1690  			}
  1691  			changed = true
  1692  		}
  1693  	}
  1694  	if c.post != nil {
  1695  		out, changed = c.postVisit(out, parent, changed)
  1696  	}
  1697  	return
  1698  }
  1699  func (c *cow) copyOnRewriteRefOfDefault(n *Default, parent SQLNode) (out SQLNode, changed bool) {
  1700  	if n == nil || c.cursor.stop {
  1701  		return n, false
  1702  	}
  1703  	out = n
  1704  	if c.pre == nil || c.pre(n, parent) {
  1705  	}
  1706  	if c.post != nil {
  1707  		out, changed = c.postVisit(out, parent, changed)
  1708  	}
  1709  	return
  1710  }
  1711  func (c *cow) copyOnRewriteRefOfDefiner(n *Definer, parent SQLNode) (out SQLNode, changed bool) {
  1712  	if n == nil || c.cursor.stop {
  1713  		return n, false
  1714  	}
  1715  	out = n
  1716  	if c.pre == nil || c.pre(n, parent) {
  1717  	}
  1718  	if c.post != nil {
  1719  		out, changed = c.postVisit(out, parent, changed)
  1720  	}
  1721  	return
  1722  }
  1723  func (c *cow) copyOnRewriteRefOfDelete(n *Delete, parent SQLNode) (out SQLNode, changed bool) {
  1724  	if n == nil || c.cursor.stop {
  1725  		return n, false
  1726  	}
  1727  	out = n
  1728  	if c.pre == nil || c.pre(n, parent) {
  1729  		_With, changedWith := c.copyOnRewriteRefOfWith(n.With, n)
  1730  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1731  		_Targets, changedTargets := c.copyOnRewriteTableNames(n.Targets, n)
  1732  		_TableExprs, changedTableExprs := c.copyOnRewriteTableExprs(n.TableExprs, n)
  1733  		_Partitions, changedPartitions := c.copyOnRewritePartitions(n.Partitions, n)
  1734  		_Where, changedWhere := c.copyOnRewriteRefOfWhere(n.Where, n)
  1735  		_OrderBy, changedOrderBy := c.copyOnRewriteOrderBy(n.OrderBy, n)
  1736  		_Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n)
  1737  		if changedWith || changedComments || changedTargets || changedTableExprs || changedPartitions || changedWhere || changedOrderBy || changedLimit {
  1738  			res := *n
  1739  			res.With, _ = _With.(*With)
  1740  			res.Comments, _ = _Comments.(*ParsedComments)
  1741  			res.Targets, _ = _Targets.(TableNames)
  1742  			res.TableExprs, _ = _TableExprs.(TableExprs)
  1743  			res.Partitions, _ = _Partitions.(Partitions)
  1744  			res.Where, _ = _Where.(*Where)
  1745  			res.OrderBy, _ = _OrderBy.(OrderBy)
  1746  			res.Limit, _ = _Limit.(*Limit)
  1747  			out = &res
  1748  			if c.cloned != nil {
  1749  				c.cloned(n, out)
  1750  			}
  1751  			changed = true
  1752  		}
  1753  	}
  1754  	if c.post != nil {
  1755  		out, changed = c.postVisit(out, parent, changed)
  1756  	}
  1757  	return
  1758  }
  1759  func (c *cow) copyOnRewriteRefOfDerivedTable(n *DerivedTable, parent SQLNode) (out SQLNode, changed bool) {
  1760  	if n == nil || c.cursor.stop {
  1761  		return n, false
  1762  	}
  1763  	out = n
  1764  	if c.pre == nil || c.pre(n, parent) {
  1765  		_Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n)
  1766  		if changedSelect {
  1767  			res := *n
  1768  			res.Select, _ = _Select.(SelectStatement)
  1769  			out = &res
  1770  			if c.cloned != nil {
  1771  				c.cloned(n, out)
  1772  			}
  1773  			changed = true
  1774  		}
  1775  	}
  1776  	if c.post != nil {
  1777  		out, changed = c.postVisit(out, parent, changed)
  1778  	}
  1779  	return
  1780  }
  1781  func (c *cow) copyOnRewriteRefOfDropColumn(n *DropColumn, parent SQLNode) (out SQLNode, changed bool) {
  1782  	if n == nil || c.cursor.stop {
  1783  		return n, false
  1784  	}
  1785  	out = n
  1786  	if c.pre == nil || c.pre(n, parent) {
  1787  		_Name, changedName := c.copyOnRewriteRefOfColName(n.Name, n)
  1788  		if changedName {
  1789  			res := *n
  1790  			res.Name, _ = _Name.(*ColName)
  1791  			out = &res
  1792  			if c.cloned != nil {
  1793  				c.cloned(n, out)
  1794  			}
  1795  			changed = true
  1796  		}
  1797  	}
  1798  	if c.post != nil {
  1799  		out, changed = c.postVisit(out, parent, changed)
  1800  	}
  1801  	return
  1802  }
  1803  func (c *cow) copyOnRewriteRefOfDropDatabase(n *DropDatabase, parent SQLNode) (out SQLNode, changed bool) {
  1804  	if n == nil || c.cursor.stop {
  1805  		return n, false
  1806  	}
  1807  	out = n
  1808  	if c.pre == nil || c.pre(n, parent) {
  1809  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1810  		_DBName, changedDBName := c.copyOnRewriteIdentifierCS(n.DBName, n)
  1811  		if changedComments || changedDBName {
  1812  			res := *n
  1813  			res.Comments, _ = _Comments.(*ParsedComments)
  1814  			res.DBName, _ = _DBName.(IdentifierCS)
  1815  			out = &res
  1816  			if c.cloned != nil {
  1817  				c.cloned(n, out)
  1818  			}
  1819  			changed = true
  1820  		}
  1821  	}
  1822  	if c.post != nil {
  1823  		out, changed = c.postVisit(out, parent, changed)
  1824  	}
  1825  	return
  1826  }
  1827  func (c *cow) copyOnRewriteRefOfDropKey(n *DropKey, parent SQLNode) (out SQLNode, changed bool) {
  1828  	if n == nil || c.cursor.stop {
  1829  		return n, false
  1830  	}
  1831  	out = n
  1832  	if c.pre == nil || c.pre(n, parent) {
  1833  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1834  		if changedName {
  1835  			res := *n
  1836  			res.Name, _ = _Name.(IdentifierCI)
  1837  			out = &res
  1838  			if c.cloned != nil {
  1839  				c.cloned(n, out)
  1840  			}
  1841  			changed = true
  1842  		}
  1843  	}
  1844  	if c.post != nil {
  1845  		out, changed = c.postVisit(out, parent, changed)
  1846  	}
  1847  	return
  1848  }
  1849  func (c *cow) copyOnRewriteRefOfDropTable(n *DropTable, parent SQLNode) (out SQLNode, changed bool) {
  1850  	if n == nil || c.cursor.stop {
  1851  		return n, false
  1852  	}
  1853  	out = n
  1854  	if c.pre == nil || c.pre(n, parent) {
  1855  		_FromTables, changedFromTables := c.copyOnRewriteTableNames(n.FromTables, n)
  1856  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1857  		if changedFromTables || changedComments {
  1858  			res := *n
  1859  			res.FromTables, _ = _FromTables.(TableNames)
  1860  			res.Comments, _ = _Comments.(*ParsedComments)
  1861  			out = &res
  1862  			if c.cloned != nil {
  1863  				c.cloned(n, out)
  1864  			}
  1865  			changed = true
  1866  		}
  1867  	}
  1868  	if c.post != nil {
  1869  		out, changed = c.postVisit(out, parent, changed)
  1870  	}
  1871  	return
  1872  }
  1873  func (c *cow) copyOnRewriteRefOfDropView(n *DropView, parent SQLNode) (out SQLNode, changed bool) {
  1874  	if n == nil || c.cursor.stop {
  1875  		return n, false
  1876  	}
  1877  	out = n
  1878  	if c.pre == nil || c.pre(n, parent) {
  1879  		_FromTables, changedFromTables := c.copyOnRewriteTableNames(n.FromTables, n)
  1880  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1881  		if changedFromTables || changedComments {
  1882  			res := *n
  1883  			res.FromTables, _ = _FromTables.(TableNames)
  1884  			res.Comments, _ = _Comments.(*ParsedComments)
  1885  			out = &res
  1886  			if c.cloned != nil {
  1887  				c.cloned(n, out)
  1888  			}
  1889  			changed = true
  1890  		}
  1891  	}
  1892  	if c.post != nil {
  1893  		out, changed = c.postVisit(out, parent, changed)
  1894  	}
  1895  	return
  1896  }
  1897  func (c *cow) copyOnRewriteRefOfExecuteStmt(n *ExecuteStmt, parent SQLNode) (out SQLNode, changed bool) {
  1898  	if n == nil || c.cursor.stop {
  1899  		return n, false
  1900  	}
  1901  	out = n
  1902  	if c.pre == nil || c.pre(n, parent) {
  1903  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  1904  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1905  		var changedArguments bool
  1906  		_Arguments := make([]*Variable, len(n.Arguments))
  1907  		for x, el := range n.Arguments {
  1908  			this, changed := c.copyOnRewriteRefOfVariable(el, n)
  1909  			_Arguments[x] = this.(*Variable)
  1910  			if changed {
  1911  				changedArguments = true
  1912  			}
  1913  		}
  1914  		if changedName || changedComments || changedArguments {
  1915  			res := *n
  1916  			res.Name, _ = _Name.(IdentifierCI)
  1917  			res.Comments, _ = _Comments.(*ParsedComments)
  1918  			res.Arguments = _Arguments
  1919  			out = &res
  1920  			if c.cloned != nil {
  1921  				c.cloned(n, out)
  1922  			}
  1923  			changed = true
  1924  		}
  1925  	}
  1926  	if c.post != nil {
  1927  		out, changed = c.postVisit(out, parent, changed)
  1928  	}
  1929  	return
  1930  }
  1931  func (c *cow) copyOnRewriteRefOfExistsExpr(n *ExistsExpr, parent SQLNode) (out SQLNode, changed bool) {
  1932  	if n == nil || c.cursor.stop {
  1933  		return n, false
  1934  	}
  1935  	out = n
  1936  	if c.pre == nil || c.pre(n, parent) {
  1937  		_Subquery, changedSubquery := c.copyOnRewriteRefOfSubquery(n.Subquery, n)
  1938  		if changedSubquery {
  1939  			res := *n
  1940  			res.Subquery, _ = _Subquery.(*Subquery)
  1941  			out = &res
  1942  			if c.cloned != nil {
  1943  				c.cloned(n, out)
  1944  			}
  1945  			changed = true
  1946  		}
  1947  	}
  1948  	if c.post != nil {
  1949  		out, changed = c.postVisit(out, parent, changed)
  1950  	}
  1951  	return
  1952  }
  1953  func (c *cow) copyOnRewriteRefOfExplainStmt(n *ExplainStmt, parent SQLNode) (out SQLNode, changed bool) {
  1954  	if n == nil || c.cursor.stop {
  1955  		return n, false
  1956  	}
  1957  	out = n
  1958  	if c.pre == nil || c.pre(n, parent) {
  1959  		_Statement, changedStatement := c.copyOnRewriteStatement(n.Statement, n)
  1960  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  1961  		if changedStatement || changedComments {
  1962  			res := *n
  1963  			res.Statement, _ = _Statement.(Statement)
  1964  			res.Comments, _ = _Comments.(*ParsedComments)
  1965  			out = &res
  1966  			if c.cloned != nil {
  1967  				c.cloned(n, out)
  1968  			}
  1969  			changed = true
  1970  		}
  1971  	}
  1972  	if c.post != nil {
  1973  		out, changed = c.postVisit(out, parent, changed)
  1974  	}
  1975  	return
  1976  }
  1977  func (c *cow) copyOnRewriteRefOfExplainTab(n *ExplainTab, parent SQLNode) (out SQLNode, changed bool) {
  1978  	if n == nil || c.cursor.stop {
  1979  		return n, false
  1980  	}
  1981  	out = n
  1982  	if c.pre == nil || c.pre(n, parent) {
  1983  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  1984  		if changedTable {
  1985  			res := *n
  1986  			res.Table, _ = _Table.(TableName)
  1987  			out = &res
  1988  			if c.cloned != nil {
  1989  				c.cloned(n, out)
  1990  			}
  1991  			changed = true
  1992  		}
  1993  	}
  1994  	if c.post != nil {
  1995  		out, changed = c.postVisit(out, parent, changed)
  1996  	}
  1997  	return
  1998  }
  1999  func (c *cow) copyOnRewriteExprs(n Exprs, parent SQLNode) (out SQLNode, changed bool) {
  2000  	if n == nil || c.cursor.stop {
  2001  		return n, false
  2002  	}
  2003  	out = n
  2004  	if c.pre == nil || c.pre(n, parent) {
  2005  		res := make(Exprs, len(n))
  2006  		for x, el := range n {
  2007  			this, change := c.copyOnRewriteExpr(el, n)
  2008  			res[x] = this.(Expr)
  2009  			if change {
  2010  				changed = true
  2011  			}
  2012  		}
  2013  		if changed {
  2014  			out = res
  2015  		}
  2016  	}
  2017  	if c.post != nil {
  2018  		out, changed = c.postVisit(out, parent, changed)
  2019  	}
  2020  	return
  2021  }
  2022  func (c *cow) copyOnRewriteRefOfExtractFuncExpr(n *ExtractFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  2023  	if n == nil || c.cursor.stop {
  2024  		return n, false
  2025  	}
  2026  	out = n
  2027  	if c.pre == nil || c.pre(n, parent) {
  2028  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  2029  		if changedExpr {
  2030  			res := *n
  2031  			res.Expr, _ = _Expr.(Expr)
  2032  			out = &res
  2033  			if c.cloned != nil {
  2034  				c.cloned(n, out)
  2035  			}
  2036  			changed = true
  2037  		}
  2038  	}
  2039  	if c.post != nil {
  2040  		out, changed = c.postVisit(out, parent, changed)
  2041  	}
  2042  	return
  2043  }
  2044  func (c *cow) copyOnRewriteRefOfExtractValueExpr(n *ExtractValueExpr, parent SQLNode) (out SQLNode, changed bool) {
  2045  	if n == nil || c.cursor.stop {
  2046  		return n, false
  2047  	}
  2048  	out = n
  2049  	if c.pre == nil || c.pre(n, parent) {
  2050  		_Fragment, changedFragment := c.copyOnRewriteExpr(n.Fragment, n)
  2051  		_XPathExpr, changedXPathExpr := c.copyOnRewriteExpr(n.XPathExpr, n)
  2052  		if changedFragment || changedXPathExpr {
  2053  			res := *n
  2054  			res.Fragment, _ = _Fragment.(Expr)
  2055  			res.XPathExpr, _ = _XPathExpr.(Expr)
  2056  			out = &res
  2057  			if c.cloned != nil {
  2058  				c.cloned(n, out)
  2059  			}
  2060  			changed = true
  2061  		}
  2062  	}
  2063  	if c.post != nil {
  2064  		out, changed = c.postVisit(out, parent, changed)
  2065  	}
  2066  	return
  2067  }
  2068  func (c *cow) copyOnRewriteRefOfExtractedSubquery(n *ExtractedSubquery, parent SQLNode) (out SQLNode, changed bool) {
  2069  	if n == nil || c.cursor.stop {
  2070  		return n, false
  2071  	}
  2072  	out = n
  2073  	if c.pre == nil || c.pre(n, parent) {
  2074  		_Original, changedOriginal := c.copyOnRewriteExpr(n.Original, n)
  2075  		_Subquery, changedSubquery := c.copyOnRewriteRefOfSubquery(n.Subquery, n)
  2076  		_OtherSide, changedOtherSide := c.copyOnRewriteExpr(n.OtherSide, n)
  2077  		_alternative, changedalternative := c.copyOnRewriteExpr(n.alternative, n)
  2078  		if changedOriginal || changedSubquery || changedOtherSide || changedalternative {
  2079  			res := *n
  2080  			res.Original, _ = _Original.(Expr)
  2081  			res.Subquery, _ = _Subquery.(*Subquery)
  2082  			res.OtherSide, _ = _OtherSide.(Expr)
  2083  			res.alternative, _ = _alternative.(Expr)
  2084  			out = &res
  2085  			if c.cloned != nil {
  2086  				c.cloned(n, out)
  2087  			}
  2088  			changed = true
  2089  		}
  2090  	}
  2091  	if c.post != nil {
  2092  		out, changed = c.postVisit(out, parent, changed)
  2093  	}
  2094  	return
  2095  }
  2096  func (c *cow) copyOnRewriteRefOfFirstOrLastValueExpr(n *FirstOrLastValueExpr, parent SQLNode) (out SQLNode, changed bool) {
  2097  	if n == nil || c.cursor.stop {
  2098  		return n, false
  2099  	}
  2100  	out = n
  2101  	if c.pre == nil || c.pre(n, parent) {
  2102  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  2103  		_NullTreatmentClause, changedNullTreatmentClause := c.copyOnRewriteRefOfNullTreatmentClause(n.NullTreatmentClause, n)
  2104  		_OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
  2105  		if changedExpr || changedNullTreatmentClause || changedOverClause {
  2106  			res := *n
  2107  			res.Expr, _ = _Expr.(Expr)
  2108  			res.NullTreatmentClause, _ = _NullTreatmentClause.(*NullTreatmentClause)
  2109  			res.OverClause, _ = _OverClause.(*OverClause)
  2110  			out = &res
  2111  			if c.cloned != nil {
  2112  				c.cloned(n, out)
  2113  			}
  2114  			changed = true
  2115  		}
  2116  	}
  2117  	if c.post != nil {
  2118  		out, changed = c.postVisit(out, parent, changed)
  2119  	}
  2120  	return
  2121  }
  2122  func (c *cow) copyOnRewriteRefOfFlush(n *Flush, parent SQLNode) (out SQLNode, changed bool) {
  2123  	if n == nil || c.cursor.stop {
  2124  		return n, false
  2125  	}
  2126  	out = n
  2127  	if c.pre == nil || c.pre(n, parent) {
  2128  		_TableNames, changedTableNames := c.copyOnRewriteTableNames(n.TableNames, n)
  2129  		if changedTableNames {
  2130  			res := *n
  2131  			res.TableNames, _ = _TableNames.(TableNames)
  2132  			out = &res
  2133  			if c.cloned != nil {
  2134  				c.cloned(n, out)
  2135  			}
  2136  			changed = true
  2137  		}
  2138  	}
  2139  	if c.post != nil {
  2140  		out, changed = c.postVisit(out, parent, changed)
  2141  	}
  2142  	return
  2143  }
  2144  func (c *cow) copyOnRewriteRefOfForce(n *Force, parent SQLNode) (out SQLNode, changed bool) {
  2145  	if n == nil || c.cursor.stop {
  2146  		return n, false
  2147  	}
  2148  	out = n
  2149  	if c.pre == nil || c.pre(n, parent) {
  2150  	}
  2151  	if c.post != nil {
  2152  		out, changed = c.postVisit(out, parent, changed)
  2153  	}
  2154  	return
  2155  }
  2156  func (c *cow) copyOnRewriteRefOfForeignKeyDefinition(n *ForeignKeyDefinition, parent SQLNode) (out SQLNode, changed bool) {
  2157  	if n == nil || c.cursor.stop {
  2158  		return n, false
  2159  	}
  2160  	out = n
  2161  	if c.pre == nil || c.pre(n, parent) {
  2162  		_Source, changedSource := c.copyOnRewriteColumns(n.Source, n)
  2163  		_IndexName, changedIndexName := c.copyOnRewriteIdentifierCI(n.IndexName, n)
  2164  		_ReferenceDefinition, changedReferenceDefinition := c.copyOnRewriteRefOfReferenceDefinition(n.ReferenceDefinition, n)
  2165  		if changedSource || changedIndexName || changedReferenceDefinition {
  2166  			res := *n
  2167  			res.Source, _ = _Source.(Columns)
  2168  			res.IndexName, _ = _IndexName.(IdentifierCI)
  2169  			res.ReferenceDefinition, _ = _ReferenceDefinition.(*ReferenceDefinition)
  2170  			out = &res
  2171  			if c.cloned != nil {
  2172  				c.cloned(n, out)
  2173  			}
  2174  			changed = true
  2175  		}
  2176  	}
  2177  	if c.post != nil {
  2178  		out, changed = c.postVisit(out, parent, changed)
  2179  	}
  2180  	return
  2181  }
  2182  func (c *cow) copyOnRewriteRefOfFrameClause(n *FrameClause, parent SQLNode) (out SQLNode, changed bool) {
  2183  	if n == nil || c.cursor.stop {
  2184  		return n, false
  2185  	}
  2186  	out = n
  2187  	if c.pre == nil || c.pre(n, parent) {
  2188  		_Start, changedStart := c.copyOnRewriteRefOfFramePoint(n.Start, n)
  2189  		_End, changedEnd := c.copyOnRewriteRefOfFramePoint(n.End, n)
  2190  		if changedStart || changedEnd {
  2191  			res := *n
  2192  			res.Start, _ = _Start.(*FramePoint)
  2193  			res.End, _ = _End.(*FramePoint)
  2194  			out = &res
  2195  			if c.cloned != nil {
  2196  				c.cloned(n, out)
  2197  			}
  2198  			changed = true
  2199  		}
  2200  	}
  2201  	if c.post != nil {
  2202  		out, changed = c.postVisit(out, parent, changed)
  2203  	}
  2204  	return
  2205  }
  2206  func (c *cow) copyOnRewriteRefOfFramePoint(n *FramePoint, parent SQLNode) (out SQLNode, changed bool) {
  2207  	if n == nil || c.cursor.stop {
  2208  		return n, false
  2209  	}
  2210  	out = n
  2211  	if c.pre == nil || c.pre(n, parent) {
  2212  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  2213  		if changedExpr {
  2214  			res := *n
  2215  			res.Expr, _ = _Expr.(Expr)
  2216  			out = &res
  2217  			if c.cloned != nil {
  2218  				c.cloned(n, out)
  2219  			}
  2220  			changed = true
  2221  		}
  2222  	}
  2223  	if c.post != nil {
  2224  		out, changed = c.postVisit(out, parent, changed)
  2225  	}
  2226  	return
  2227  }
  2228  func (c *cow) copyOnRewriteRefOfFromFirstLastClause(n *FromFirstLastClause, parent SQLNode) (out SQLNode, changed bool) {
  2229  	if n == nil || c.cursor.stop {
  2230  		return n, false
  2231  	}
  2232  	out = n
  2233  	if c.pre == nil || c.pre(n, parent) {
  2234  	}
  2235  	if c.post != nil {
  2236  		out, changed = c.postVisit(out, parent, changed)
  2237  	}
  2238  	return
  2239  }
  2240  func (c *cow) copyOnRewriteRefOfFuncExpr(n *FuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  2241  	if n == nil || c.cursor.stop {
  2242  		return n, false
  2243  	}
  2244  	out = n
  2245  	if c.pre == nil || c.pre(n, parent) {
  2246  		_Qualifier, changedQualifier := c.copyOnRewriteIdentifierCS(n.Qualifier, n)
  2247  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  2248  		_Exprs, changedExprs := c.copyOnRewriteSelectExprs(n.Exprs, n)
  2249  		if changedQualifier || changedName || changedExprs {
  2250  			res := *n
  2251  			res.Qualifier, _ = _Qualifier.(IdentifierCS)
  2252  			res.Name, _ = _Name.(IdentifierCI)
  2253  			res.Exprs, _ = _Exprs.(SelectExprs)
  2254  			out = &res
  2255  			if c.cloned != nil {
  2256  				c.cloned(n, out)
  2257  			}
  2258  			changed = true
  2259  		}
  2260  	}
  2261  	if c.post != nil {
  2262  		out, changed = c.postVisit(out, parent, changed)
  2263  	}
  2264  	return
  2265  }
  2266  func (c *cow) copyOnRewriteRefOfGTIDFuncExpr(n *GTIDFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  2267  	if n == nil || c.cursor.stop {
  2268  		return n, false
  2269  	}
  2270  	out = n
  2271  	if c.pre == nil || c.pre(n, parent) {
  2272  		_Set1, changedSet1 := c.copyOnRewriteExpr(n.Set1, n)
  2273  		_Set2, changedSet2 := c.copyOnRewriteExpr(n.Set2, n)
  2274  		_Timeout, changedTimeout := c.copyOnRewriteExpr(n.Timeout, n)
  2275  		_Channel, changedChannel := c.copyOnRewriteExpr(n.Channel, n)
  2276  		if changedSet1 || changedSet2 || changedTimeout || changedChannel {
  2277  			res := *n
  2278  			res.Set1, _ = _Set1.(Expr)
  2279  			res.Set2, _ = _Set2.(Expr)
  2280  			res.Timeout, _ = _Timeout.(Expr)
  2281  			res.Channel, _ = _Channel.(Expr)
  2282  			out = &res
  2283  			if c.cloned != nil {
  2284  				c.cloned(n, out)
  2285  			}
  2286  			changed = true
  2287  		}
  2288  	}
  2289  	if c.post != nil {
  2290  		out, changed = c.postVisit(out, parent, changed)
  2291  	}
  2292  	return
  2293  }
  2294  func (c *cow) copyOnRewriteGroupBy(n GroupBy, parent SQLNode) (out SQLNode, changed bool) {
  2295  	if n == nil || c.cursor.stop {
  2296  		return n, false
  2297  	}
  2298  	out = n
  2299  	if c.pre == nil || c.pre(n, parent) {
  2300  		res := make(GroupBy, len(n))
  2301  		for x, el := range n {
  2302  			this, change := c.copyOnRewriteExpr(el, n)
  2303  			res[x] = this.(Expr)
  2304  			if change {
  2305  				changed = true
  2306  			}
  2307  		}
  2308  		if changed {
  2309  			out = res
  2310  		}
  2311  	}
  2312  	if c.post != nil {
  2313  		out, changed = c.postVisit(out, parent, changed)
  2314  	}
  2315  	return
  2316  }
  2317  func (c *cow) copyOnRewriteRefOfGroupConcatExpr(n *GroupConcatExpr, parent SQLNode) (out SQLNode, changed bool) {
  2318  	if n == nil || c.cursor.stop {
  2319  		return n, false
  2320  	}
  2321  	out = n
  2322  	if c.pre == nil || c.pre(n, parent) {
  2323  		_Exprs, changedExprs := c.copyOnRewriteExprs(n.Exprs, n)
  2324  		_OrderBy, changedOrderBy := c.copyOnRewriteOrderBy(n.OrderBy, n)
  2325  		_Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n)
  2326  		if changedExprs || changedOrderBy || changedLimit {
  2327  			res := *n
  2328  			res.Exprs, _ = _Exprs.(Exprs)
  2329  			res.OrderBy, _ = _OrderBy.(OrderBy)
  2330  			res.Limit, _ = _Limit.(*Limit)
  2331  			out = &res
  2332  			if c.cloned != nil {
  2333  				c.cloned(n, out)
  2334  			}
  2335  			changed = true
  2336  		}
  2337  	}
  2338  	if c.post != nil {
  2339  		out, changed = c.postVisit(out, parent, changed)
  2340  	}
  2341  	return
  2342  }
  2343  func (c *cow) copyOnRewriteIdentifierCI(n IdentifierCI, parent SQLNode) (out SQLNode, changed bool) {
  2344  	out = n
  2345  	if c.pre == nil || c.pre(n, parent) {
  2346  	}
  2347  	if c.post != nil {
  2348  		out, changed = c.postVisit(out, parent, changed)
  2349  	}
  2350  	return
  2351  }
  2352  func (c *cow) copyOnRewriteIdentifierCS(n IdentifierCS, parent SQLNode) (out SQLNode, changed bool) {
  2353  	out = n
  2354  	if c.pre == nil || c.pre(n, parent) {
  2355  	}
  2356  	if c.post != nil {
  2357  		out, changed = c.postVisit(out, parent, changed)
  2358  	}
  2359  	return
  2360  }
  2361  func (c *cow) copyOnRewriteRefOfIndexDefinition(n *IndexDefinition, parent SQLNode) (out SQLNode, changed bool) {
  2362  	if n == nil || c.cursor.stop {
  2363  		return n, false
  2364  	}
  2365  	out = n
  2366  	if c.pre == nil || c.pre(n, parent) {
  2367  		_Info, changedInfo := c.copyOnRewriteRefOfIndexInfo(n.Info, n)
  2368  		if changedInfo {
  2369  			res := *n
  2370  			res.Info, _ = _Info.(*IndexInfo)
  2371  			out = &res
  2372  			if c.cloned != nil {
  2373  				c.cloned(n, out)
  2374  			}
  2375  			changed = true
  2376  		}
  2377  	}
  2378  	if c.post != nil {
  2379  		out, changed = c.postVisit(out, parent, changed)
  2380  	}
  2381  	return
  2382  }
  2383  func (c *cow) copyOnRewriteRefOfIndexHint(n *IndexHint, parent SQLNode) (out SQLNode, changed bool) {
  2384  	if n == nil || c.cursor.stop {
  2385  		return n, false
  2386  	}
  2387  	out = n
  2388  	if c.pre == nil || c.pre(n, parent) {
  2389  		var changedIndexes bool
  2390  		_Indexes := make([]IdentifierCI, len(n.Indexes))
  2391  		for x, el := range n.Indexes {
  2392  			this, changed := c.copyOnRewriteIdentifierCI(el, n)
  2393  			_Indexes[x] = this.(IdentifierCI)
  2394  			if changed {
  2395  				changedIndexes = true
  2396  			}
  2397  		}
  2398  		if changedIndexes {
  2399  			res := *n
  2400  			res.Indexes = _Indexes
  2401  			out = &res
  2402  			if c.cloned != nil {
  2403  				c.cloned(n, out)
  2404  			}
  2405  			changed = true
  2406  		}
  2407  	}
  2408  	if c.post != nil {
  2409  		out, changed = c.postVisit(out, parent, changed)
  2410  	}
  2411  	return
  2412  }
  2413  func (c *cow) copyOnRewriteIndexHints(n IndexHints, parent SQLNode) (out SQLNode, changed bool) {
  2414  	if n == nil || c.cursor.stop {
  2415  		return n, false
  2416  	}
  2417  	out = n
  2418  	if c.pre == nil || c.pre(n, parent) {
  2419  		res := make(IndexHints, len(n))
  2420  		for x, el := range n {
  2421  			this, change := c.copyOnRewriteRefOfIndexHint(el, n)
  2422  			res[x] = this.(*IndexHint)
  2423  			if change {
  2424  				changed = true
  2425  			}
  2426  		}
  2427  		if changed {
  2428  			out = res
  2429  		}
  2430  	}
  2431  	if c.post != nil {
  2432  		out, changed = c.postVisit(out, parent, changed)
  2433  	}
  2434  	return
  2435  }
  2436  func (c *cow) copyOnRewriteRefOfIndexInfo(n *IndexInfo, parent SQLNode) (out SQLNode, changed bool) {
  2437  	if n == nil || c.cursor.stop {
  2438  		return n, false
  2439  	}
  2440  	out = n
  2441  	if c.pre == nil || c.pre(n, parent) {
  2442  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  2443  		_ConstraintName, changedConstraintName := c.copyOnRewriteIdentifierCI(n.ConstraintName, n)
  2444  		if changedName || changedConstraintName {
  2445  			res := *n
  2446  			res.Name, _ = _Name.(IdentifierCI)
  2447  			res.ConstraintName, _ = _ConstraintName.(IdentifierCI)
  2448  			out = &res
  2449  			if c.cloned != nil {
  2450  				c.cloned(n, out)
  2451  			}
  2452  			changed = true
  2453  		}
  2454  	}
  2455  	if c.post != nil {
  2456  		out, changed = c.postVisit(out, parent, changed)
  2457  	}
  2458  	return
  2459  }
  2460  func (c *cow) copyOnRewriteRefOfInsert(n *Insert, parent SQLNode) (out SQLNode, changed bool) {
  2461  	if n == nil || c.cursor.stop {
  2462  		return n, false
  2463  	}
  2464  	out = n
  2465  	if c.pre == nil || c.pre(n, parent) {
  2466  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  2467  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  2468  		_Partitions, changedPartitions := c.copyOnRewritePartitions(n.Partitions, n)
  2469  		_Columns, changedColumns := c.copyOnRewriteColumns(n.Columns, n)
  2470  		_Rows, changedRows := c.copyOnRewriteInsertRows(n.Rows, n)
  2471  		_OnDup, changedOnDup := c.copyOnRewriteOnDup(n.OnDup, n)
  2472  		if changedComments || changedTable || changedPartitions || changedColumns || changedRows || changedOnDup {
  2473  			res := *n
  2474  			res.Comments, _ = _Comments.(*ParsedComments)
  2475  			res.Table, _ = _Table.(TableName)
  2476  			res.Partitions, _ = _Partitions.(Partitions)
  2477  			res.Columns, _ = _Columns.(Columns)
  2478  			res.Rows, _ = _Rows.(InsertRows)
  2479  			res.OnDup, _ = _OnDup.(OnDup)
  2480  			out = &res
  2481  			if c.cloned != nil {
  2482  				c.cloned(n, out)
  2483  			}
  2484  			changed = true
  2485  		}
  2486  	}
  2487  	if c.post != nil {
  2488  		out, changed = c.postVisit(out, parent, changed)
  2489  	}
  2490  	return
  2491  }
  2492  func (c *cow) copyOnRewriteRefOfInsertExpr(n *InsertExpr, parent SQLNode) (out SQLNode, changed bool) {
  2493  	if n == nil || c.cursor.stop {
  2494  		return n, false
  2495  	}
  2496  	out = n
  2497  	if c.pre == nil || c.pre(n, parent) {
  2498  		_Str, changedStr := c.copyOnRewriteExpr(n.Str, n)
  2499  		_Pos, changedPos := c.copyOnRewriteExpr(n.Pos, n)
  2500  		_Len, changedLen := c.copyOnRewriteExpr(n.Len, n)
  2501  		_NewStr, changedNewStr := c.copyOnRewriteExpr(n.NewStr, n)
  2502  		if changedStr || changedPos || changedLen || changedNewStr {
  2503  			res := *n
  2504  			res.Str, _ = _Str.(Expr)
  2505  			res.Pos, _ = _Pos.(Expr)
  2506  			res.Len, _ = _Len.(Expr)
  2507  			res.NewStr, _ = _NewStr.(Expr)
  2508  			out = &res
  2509  			if c.cloned != nil {
  2510  				c.cloned(n, out)
  2511  			}
  2512  			changed = true
  2513  		}
  2514  	}
  2515  	if c.post != nil {
  2516  		out, changed = c.postVisit(out, parent, changed)
  2517  	}
  2518  	return
  2519  }
  2520  func (c *cow) copyOnRewriteRefOfIntervalExpr(n *IntervalExpr, parent SQLNode) (out SQLNode, changed bool) {
  2521  	if n == nil || c.cursor.stop {
  2522  		return n, false
  2523  	}
  2524  	out = n
  2525  	if c.pre == nil || c.pre(n, parent) {
  2526  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  2527  		if changedExpr {
  2528  			res := *n
  2529  			res.Expr, _ = _Expr.(Expr)
  2530  			out = &res
  2531  			if c.cloned != nil {
  2532  				c.cloned(n, out)
  2533  			}
  2534  			changed = true
  2535  		}
  2536  	}
  2537  	if c.post != nil {
  2538  		out, changed = c.postVisit(out, parent, changed)
  2539  	}
  2540  	return
  2541  }
  2542  func (c *cow) copyOnRewriteRefOfIntervalFuncExpr(n *IntervalFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  2543  	if n == nil || c.cursor.stop {
  2544  		return n, false
  2545  	}
  2546  	out = n
  2547  	if c.pre == nil || c.pre(n, parent) {
  2548  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  2549  		_Exprs, changedExprs := c.copyOnRewriteExprs(n.Exprs, n)
  2550  		if changedExpr || changedExprs {
  2551  			res := *n
  2552  			res.Expr, _ = _Expr.(Expr)
  2553  			res.Exprs, _ = _Exprs.(Exprs)
  2554  			out = &res
  2555  			if c.cloned != nil {
  2556  				c.cloned(n, out)
  2557  			}
  2558  			changed = true
  2559  		}
  2560  	}
  2561  	if c.post != nil {
  2562  		out, changed = c.postVisit(out, parent, changed)
  2563  	}
  2564  	return
  2565  }
  2566  func (c *cow) copyOnRewriteRefOfIntroducerExpr(n *IntroducerExpr, parent SQLNode) (out SQLNode, changed bool) {
  2567  	if n == nil || c.cursor.stop {
  2568  		return n, false
  2569  	}
  2570  	out = n
  2571  	if c.pre == nil || c.pre(n, parent) {
  2572  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  2573  		if changedExpr {
  2574  			res := *n
  2575  			res.Expr, _ = _Expr.(Expr)
  2576  			out = &res
  2577  			if c.cloned != nil {
  2578  				c.cloned(n, out)
  2579  			}
  2580  			changed = true
  2581  		}
  2582  	}
  2583  	if c.post != nil {
  2584  		out, changed = c.postVisit(out, parent, changed)
  2585  	}
  2586  	return
  2587  }
  2588  func (c *cow) copyOnRewriteRefOfIsExpr(n *IsExpr, parent SQLNode) (out SQLNode, changed bool) {
  2589  	if n == nil || c.cursor.stop {
  2590  		return n, false
  2591  	}
  2592  	out = n
  2593  	if c.pre == nil || c.pre(n, parent) {
  2594  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
  2595  		if changedLeft {
  2596  			res := *n
  2597  			res.Left, _ = _Left.(Expr)
  2598  			out = &res
  2599  			if c.cloned != nil {
  2600  				c.cloned(n, out)
  2601  			}
  2602  			changed = true
  2603  		}
  2604  	}
  2605  	if c.post != nil {
  2606  		out, changed = c.postVisit(out, parent, changed)
  2607  	}
  2608  	return
  2609  }
  2610  func (c *cow) copyOnRewriteRefOfJSONArrayExpr(n *JSONArrayExpr, parent SQLNode) (out SQLNode, changed bool) {
  2611  	if n == nil || c.cursor.stop {
  2612  		return n, false
  2613  	}
  2614  	out = n
  2615  	if c.pre == nil || c.pre(n, parent) {
  2616  		_Params, changedParams := c.copyOnRewriteExprs(n.Params, n)
  2617  		if changedParams {
  2618  			res := *n
  2619  			res.Params, _ = _Params.(Exprs)
  2620  			out = &res
  2621  			if c.cloned != nil {
  2622  				c.cloned(n, out)
  2623  			}
  2624  			changed = true
  2625  		}
  2626  	}
  2627  	if c.post != nil {
  2628  		out, changed = c.postVisit(out, parent, changed)
  2629  	}
  2630  	return
  2631  }
  2632  func (c *cow) copyOnRewriteRefOfJSONAttributesExpr(n *JSONAttributesExpr, parent SQLNode) (out SQLNode, changed bool) {
  2633  	if n == nil || c.cursor.stop {
  2634  		return n, false
  2635  	}
  2636  	out = n
  2637  	if c.pre == nil || c.pre(n, parent) {
  2638  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  2639  		_Path, changedPath := c.copyOnRewriteExpr(n.Path, n)
  2640  		if changedJSONDoc || changedPath {
  2641  			res := *n
  2642  			res.JSONDoc, _ = _JSONDoc.(Expr)
  2643  			res.Path, _ = _Path.(Expr)
  2644  			out = &res
  2645  			if c.cloned != nil {
  2646  				c.cloned(n, out)
  2647  			}
  2648  			changed = true
  2649  		}
  2650  	}
  2651  	if c.post != nil {
  2652  		out, changed = c.postVisit(out, parent, changed)
  2653  	}
  2654  	return
  2655  }
  2656  func (c *cow) copyOnRewriteRefOfJSONContainsExpr(n *JSONContainsExpr, parent SQLNode) (out SQLNode, changed bool) {
  2657  	if n == nil || c.cursor.stop {
  2658  		return n, false
  2659  	}
  2660  	out = n
  2661  	if c.pre == nil || c.pre(n, parent) {
  2662  		_Target, changedTarget := c.copyOnRewriteExpr(n.Target, n)
  2663  		_Candidate, changedCandidate := c.copyOnRewriteExpr(n.Candidate, n)
  2664  		var changedPathList bool
  2665  		_PathList := make([]Expr, len(n.PathList))
  2666  		for x, el := range n.PathList {
  2667  			this, changed := c.copyOnRewriteExpr(el, n)
  2668  			_PathList[x] = this.(Expr)
  2669  			if changed {
  2670  				changedPathList = true
  2671  			}
  2672  		}
  2673  		if changedTarget || changedCandidate || changedPathList {
  2674  			res := *n
  2675  			res.Target, _ = _Target.(Expr)
  2676  			res.Candidate, _ = _Candidate.(Expr)
  2677  			res.PathList = _PathList
  2678  			out = &res
  2679  			if c.cloned != nil {
  2680  				c.cloned(n, out)
  2681  			}
  2682  			changed = true
  2683  		}
  2684  	}
  2685  	if c.post != nil {
  2686  		out, changed = c.postVisit(out, parent, changed)
  2687  	}
  2688  	return
  2689  }
  2690  func (c *cow) copyOnRewriteRefOfJSONContainsPathExpr(n *JSONContainsPathExpr, parent SQLNode) (out SQLNode, changed bool) {
  2691  	if n == nil || c.cursor.stop {
  2692  		return n, false
  2693  	}
  2694  	out = n
  2695  	if c.pre == nil || c.pre(n, parent) {
  2696  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  2697  		_OneOrAll, changedOneOrAll := c.copyOnRewriteExpr(n.OneOrAll, n)
  2698  		var changedPathList bool
  2699  		_PathList := make([]Expr, len(n.PathList))
  2700  		for x, el := range n.PathList {
  2701  			this, changed := c.copyOnRewriteExpr(el, n)
  2702  			_PathList[x] = this.(Expr)
  2703  			if changed {
  2704  				changedPathList = true
  2705  			}
  2706  		}
  2707  		if changedJSONDoc || changedOneOrAll || changedPathList {
  2708  			res := *n
  2709  			res.JSONDoc, _ = _JSONDoc.(Expr)
  2710  			res.OneOrAll, _ = _OneOrAll.(Expr)
  2711  			res.PathList = _PathList
  2712  			out = &res
  2713  			if c.cloned != nil {
  2714  				c.cloned(n, out)
  2715  			}
  2716  			changed = true
  2717  		}
  2718  	}
  2719  	if c.post != nil {
  2720  		out, changed = c.postVisit(out, parent, changed)
  2721  	}
  2722  	return
  2723  }
  2724  func (c *cow) copyOnRewriteRefOfJSONExtractExpr(n *JSONExtractExpr, parent SQLNode) (out SQLNode, changed bool) {
  2725  	if n == nil || c.cursor.stop {
  2726  		return n, false
  2727  	}
  2728  	out = n
  2729  	if c.pre == nil || c.pre(n, parent) {
  2730  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  2731  		var changedPathList bool
  2732  		_PathList := make([]Expr, len(n.PathList))
  2733  		for x, el := range n.PathList {
  2734  			this, changed := c.copyOnRewriteExpr(el, n)
  2735  			_PathList[x] = this.(Expr)
  2736  			if changed {
  2737  				changedPathList = true
  2738  			}
  2739  		}
  2740  		if changedJSONDoc || changedPathList {
  2741  			res := *n
  2742  			res.JSONDoc, _ = _JSONDoc.(Expr)
  2743  			res.PathList = _PathList
  2744  			out = &res
  2745  			if c.cloned != nil {
  2746  				c.cloned(n, out)
  2747  			}
  2748  			changed = true
  2749  		}
  2750  	}
  2751  	if c.post != nil {
  2752  		out, changed = c.postVisit(out, parent, changed)
  2753  	}
  2754  	return
  2755  }
  2756  func (c *cow) copyOnRewriteRefOfJSONKeysExpr(n *JSONKeysExpr, parent SQLNode) (out SQLNode, changed bool) {
  2757  	if n == nil || c.cursor.stop {
  2758  		return n, false
  2759  	}
  2760  	out = n
  2761  	if c.pre == nil || c.pre(n, parent) {
  2762  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  2763  		_Path, changedPath := c.copyOnRewriteExpr(n.Path, n)
  2764  		if changedJSONDoc || changedPath {
  2765  			res := *n
  2766  			res.JSONDoc, _ = _JSONDoc.(Expr)
  2767  			res.Path, _ = _Path.(Expr)
  2768  			out = &res
  2769  			if c.cloned != nil {
  2770  				c.cloned(n, out)
  2771  			}
  2772  			changed = true
  2773  		}
  2774  	}
  2775  	if c.post != nil {
  2776  		out, changed = c.postVisit(out, parent, changed)
  2777  	}
  2778  	return
  2779  }
  2780  func (c *cow) copyOnRewriteRefOfJSONObjectExpr(n *JSONObjectExpr, parent SQLNode) (out SQLNode, changed bool) {
  2781  	if n == nil || c.cursor.stop {
  2782  		return n, false
  2783  	}
  2784  	out = n
  2785  	if c.pre == nil || c.pre(n, parent) {
  2786  		var changedParams bool
  2787  		_Params := make([]*JSONObjectParam, len(n.Params))
  2788  		for x, el := range n.Params {
  2789  			this, changed := c.copyOnRewriteRefOfJSONObjectParam(el, n)
  2790  			_Params[x] = this.(*JSONObjectParam)
  2791  			if changed {
  2792  				changedParams = true
  2793  			}
  2794  		}
  2795  		if changedParams {
  2796  			res := *n
  2797  			res.Params = _Params
  2798  			out = &res
  2799  			if c.cloned != nil {
  2800  				c.cloned(n, out)
  2801  			}
  2802  			changed = true
  2803  		}
  2804  	}
  2805  	if c.post != nil {
  2806  		out, changed = c.postVisit(out, parent, changed)
  2807  	}
  2808  	return
  2809  }
  2810  func (c *cow) copyOnRewriteRefOfJSONObjectParam(n *JSONObjectParam, parent SQLNode) (out SQLNode, changed bool) {
  2811  	if n == nil || c.cursor.stop {
  2812  		return n, false
  2813  	}
  2814  	out = n
  2815  	if c.pre == nil || c.pre(n, parent) {
  2816  		_Key, changedKey := c.copyOnRewriteExpr(n.Key, n)
  2817  		_Value, changedValue := c.copyOnRewriteExpr(n.Value, n)
  2818  		if changedKey || changedValue {
  2819  			res := *n
  2820  			res.Key, _ = _Key.(Expr)
  2821  			res.Value, _ = _Value.(Expr)
  2822  			out = &res
  2823  			if c.cloned != nil {
  2824  				c.cloned(n, out)
  2825  			}
  2826  			changed = true
  2827  		}
  2828  	}
  2829  	if c.post != nil {
  2830  		out, changed = c.postVisit(out, parent, changed)
  2831  	}
  2832  	return
  2833  }
  2834  func (c *cow) copyOnRewriteRefOfJSONOverlapsExpr(n *JSONOverlapsExpr, parent SQLNode) (out SQLNode, changed bool) {
  2835  	if n == nil || c.cursor.stop {
  2836  		return n, false
  2837  	}
  2838  	out = n
  2839  	if c.pre == nil || c.pre(n, parent) {
  2840  		_JSONDoc1, changedJSONDoc1 := c.copyOnRewriteExpr(n.JSONDoc1, n)
  2841  		_JSONDoc2, changedJSONDoc2 := c.copyOnRewriteExpr(n.JSONDoc2, n)
  2842  		if changedJSONDoc1 || changedJSONDoc2 {
  2843  			res := *n
  2844  			res.JSONDoc1, _ = _JSONDoc1.(Expr)
  2845  			res.JSONDoc2, _ = _JSONDoc2.(Expr)
  2846  			out = &res
  2847  			if c.cloned != nil {
  2848  				c.cloned(n, out)
  2849  			}
  2850  			changed = true
  2851  		}
  2852  	}
  2853  	if c.post != nil {
  2854  		out, changed = c.postVisit(out, parent, changed)
  2855  	}
  2856  	return
  2857  }
  2858  func (c *cow) copyOnRewriteRefOfJSONPrettyExpr(n *JSONPrettyExpr, parent SQLNode) (out SQLNode, changed bool) {
  2859  	if n == nil || c.cursor.stop {
  2860  		return n, false
  2861  	}
  2862  	out = n
  2863  	if c.pre == nil || c.pre(n, parent) {
  2864  		_JSONVal, changedJSONVal := c.copyOnRewriteExpr(n.JSONVal, n)
  2865  		if changedJSONVal {
  2866  			res := *n
  2867  			res.JSONVal, _ = _JSONVal.(Expr)
  2868  			out = &res
  2869  			if c.cloned != nil {
  2870  				c.cloned(n, out)
  2871  			}
  2872  			changed = true
  2873  		}
  2874  	}
  2875  	if c.post != nil {
  2876  		out, changed = c.postVisit(out, parent, changed)
  2877  	}
  2878  	return
  2879  }
  2880  func (c *cow) copyOnRewriteRefOfJSONQuoteExpr(n *JSONQuoteExpr, parent SQLNode) (out SQLNode, changed bool) {
  2881  	if n == nil || c.cursor.stop {
  2882  		return n, false
  2883  	}
  2884  	out = n
  2885  	if c.pre == nil || c.pre(n, parent) {
  2886  		_StringArg, changedStringArg := c.copyOnRewriteExpr(n.StringArg, n)
  2887  		if changedStringArg {
  2888  			res := *n
  2889  			res.StringArg, _ = _StringArg.(Expr)
  2890  			out = &res
  2891  			if c.cloned != nil {
  2892  				c.cloned(n, out)
  2893  			}
  2894  			changed = true
  2895  		}
  2896  	}
  2897  	if c.post != nil {
  2898  		out, changed = c.postVisit(out, parent, changed)
  2899  	}
  2900  	return
  2901  }
  2902  func (c *cow) copyOnRewriteRefOfJSONRemoveExpr(n *JSONRemoveExpr, parent SQLNode) (out SQLNode, changed bool) {
  2903  	if n == nil || c.cursor.stop {
  2904  		return n, false
  2905  	}
  2906  	out = n
  2907  	if c.pre == nil || c.pre(n, parent) {
  2908  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  2909  		_PathList, changedPathList := c.copyOnRewriteExprs(n.PathList, n)
  2910  		if changedJSONDoc || changedPathList {
  2911  			res := *n
  2912  			res.JSONDoc, _ = _JSONDoc.(Expr)
  2913  			res.PathList, _ = _PathList.(Exprs)
  2914  			out = &res
  2915  			if c.cloned != nil {
  2916  				c.cloned(n, out)
  2917  			}
  2918  			changed = true
  2919  		}
  2920  	}
  2921  	if c.post != nil {
  2922  		out, changed = c.postVisit(out, parent, changed)
  2923  	}
  2924  	return
  2925  }
  2926  func (c *cow) copyOnRewriteRefOfJSONSchemaValidFuncExpr(n *JSONSchemaValidFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  2927  	if n == nil || c.cursor.stop {
  2928  		return n, false
  2929  	}
  2930  	out = n
  2931  	if c.pre == nil || c.pre(n, parent) {
  2932  		_Schema, changedSchema := c.copyOnRewriteExpr(n.Schema, n)
  2933  		_Document, changedDocument := c.copyOnRewriteExpr(n.Document, n)
  2934  		if changedSchema || changedDocument {
  2935  			res := *n
  2936  			res.Schema, _ = _Schema.(Expr)
  2937  			res.Document, _ = _Document.(Expr)
  2938  			out = &res
  2939  			if c.cloned != nil {
  2940  				c.cloned(n, out)
  2941  			}
  2942  			changed = true
  2943  		}
  2944  	}
  2945  	if c.post != nil {
  2946  		out, changed = c.postVisit(out, parent, changed)
  2947  	}
  2948  	return
  2949  }
  2950  func (c *cow) copyOnRewriteRefOfJSONSchemaValidationReportFuncExpr(n *JSONSchemaValidationReportFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  2951  	if n == nil || c.cursor.stop {
  2952  		return n, false
  2953  	}
  2954  	out = n
  2955  	if c.pre == nil || c.pre(n, parent) {
  2956  		_Schema, changedSchema := c.copyOnRewriteExpr(n.Schema, n)
  2957  		_Document, changedDocument := c.copyOnRewriteExpr(n.Document, n)
  2958  		if changedSchema || changedDocument {
  2959  			res := *n
  2960  			res.Schema, _ = _Schema.(Expr)
  2961  			res.Document, _ = _Document.(Expr)
  2962  			out = &res
  2963  			if c.cloned != nil {
  2964  				c.cloned(n, out)
  2965  			}
  2966  			changed = true
  2967  		}
  2968  	}
  2969  	if c.post != nil {
  2970  		out, changed = c.postVisit(out, parent, changed)
  2971  	}
  2972  	return
  2973  }
  2974  func (c *cow) copyOnRewriteRefOfJSONSearchExpr(n *JSONSearchExpr, parent SQLNode) (out SQLNode, changed bool) {
  2975  	if n == nil || c.cursor.stop {
  2976  		return n, false
  2977  	}
  2978  	out = n
  2979  	if c.pre == nil || c.pre(n, parent) {
  2980  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  2981  		_OneOrAll, changedOneOrAll := c.copyOnRewriteExpr(n.OneOrAll, n)
  2982  		_SearchStr, changedSearchStr := c.copyOnRewriteExpr(n.SearchStr, n)
  2983  		_EscapeChar, changedEscapeChar := c.copyOnRewriteExpr(n.EscapeChar, n)
  2984  		var changedPathList bool
  2985  		_PathList := make([]Expr, len(n.PathList))
  2986  		for x, el := range n.PathList {
  2987  			this, changed := c.copyOnRewriteExpr(el, n)
  2988  			_PathList[x] = this.(Expr)
  2989  			if changed {
  2990  				changedPathList = true
  2991  			}
  2992  		}
  2993  		if changedJSONDoc || changedOneOrAll || changedSearchStr || changedEscapeChar || changedPathList {
  2994  			res := *n
  2995  			res.JSONDoc, _ = _JSONDoc.(Expr)
  2996  			res.OneOrAll, _ = _OneOrAll.(Expr)
  2997  			res.SearchStr, _ = _SearchStr.(Expr)
  2998  			res.EscapeChar, _ = _EscapeChar.(Expr)
  2999  			res.PathList = _PathList
  3000  			out = &res
  3001  			if c.cloned != nil {
  3002  				c.cloned(n, out)
  3003  			}
  3004  			changed = true
  3005  		}
  3006  	}
  3007  	if c.post != nil {
  3008  		out, changed = c.postVisit(out, parent, changed)
  3009  	}
  3010  	return
  3011  }
  3012  func (c *cow) copyOnRewriteRefOfJSONStorageFreeExpr(n *JSONStorageFreeExpr, parent SQLNode) (out SQLNode, changed bool) {
  3013  	if n == nil || c.cursor.stop {
  3014  		return n, false
  3015  	}
  3016  	out = n
  3017  	if c.pre == nil || c.pre(n, parent) {
  3018  		_JSONVal, changedJSONVal := c.copyOnRewriteExpr(n.JSONVal, n)
  3019  		if changedJSONVal {
  3020  			res := *n
  3021  			res.JSONVal, _ = _JSONVal.(Expr)
  3022  			out = &res
  3023  			if c.cloned != nil {
  3024  				c.cloned(n, out)
  3025  			}
  3026  			changed = true
  3027  		}
  3028  	}
  3029  	if c.post != nil {
  3030  		out, changed = c.postVisit(out, parent, changed)
  3031  	}
  3032  	return
  3033  }
  3034  func (c *cow) copyOnRewriteRefOfJSONStorageSizeExpr(n *JSONStorageSizeExpr, parent SQLNode) (out SQLNode, changed bool) {
  3035  	if n == nil || c.cursor.stop {
  3036  		return n, false
  3037  	}
  3038  	out = n
  3039  	if c.pre == nil || c.pre(n, parent) {
  3040  		_JSONVal, changedJSONVal := c.copyOnRewriteExpr(n.JSONVal, n)
  3041  		if changedJSONVal {
  3042  			res := *n
  3043  			res.JSONVal, _ = _JSONVal.(Expr)
  3044  			out = &res
  3045  			if c.cloned != nil {
  3046  				c.cloned(n, out)
  3047  			}
  3048  			changed = true
  3049  		}
  3050  	}
  3051  	if c.post != nil {
  3052  		out, changed = c.postVisit(out, parent, changed)
  3053  	}
  3054  	return
  3055  }
  3056  func (c *cow) copyOnRewriteRefOfJSONTableExpr(n *JSONTableExpr, parent SQLNode) (out SQLNode, changed bool) {
  3057  	if n == nil || c.cursor.stop {
  3058  		return n, false
  3059  	}
  3060  	out = n
  3061  	if c.pre == nil || c.pre(n, parent) {
  3062  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3063  		_Alias, changedAlias := c.copyOnRewriteIdentifierCS(n.Alias, n)
  3064  		_Filter, changedFilter := c.copyOnRewriteExpr(n.Filter, n)
  3065  		var changedColumns bool
  3066  		_Columns := make([]*JtColumnDefinition, len(n.Columns))
  3067  		for x, el := range n.Columns {
  3068  			this, changed := c.copyOnRewriteRefOfJtColumnDefinition(el, n)
  3069  			_Columns[x] = this.(*JtColumnDefinition)
  3070  			if changed {
  3071  				changedColumns = true
  3072  			}
  3073  		}
  3074  		if changedExpr || changedAlias || changedFilter || changedColumns {
  3075  			res := *n
  3076  			res.Expr, _ = _Expr.(Expr)
  3077  			res.Alias, _ = _Alias.(IdentifierCS)
  3078  			res.Filter, _ = _Filter.(Expr)
  3079  			res.Columns = _Columns
  3080  			out = &res
  3081  			if c.cloned != nil {
  3082  				c.cloned(n, out)
  3083  			}
  3084  			changed = true
  3085  		}
  3086  	}
  3087  	if c.post != nil {
  3088  		out, changed = c.postVisit(out, parent, changed)
  3089  	}
  3090  	return
  3091  }
  3092  func (c *cow) copyOnRewriteRefOfJSONUnquoteExpr(n *JSONUnquoteExpr, parent SQLNode) (out SQLNode, changed bool) {
  3093  	if n == nil || c.cursor.stop {
  3094  		return n, false
  3095  	}
  3096  	out = n
  3097  	if c.pre == nil || c.pre(n, parent) {
  3098  		_JSONValue, changedJSONValue := c.copyOnRewriteExpr(n.JSONValue, n)
  3099  		if changedJSONValue {
  3100  			res := *n
  3101  			res.JSONValue, _ = _JSONValue.(Expr)
  3102  			out = &res
  3103  			if c.cloned != nil {
  3104  				c.cloned(n, out)
  3105  			}
  3106  			changed = true
  3107  		}
  3108  	}
  3109  	if c.post != nil {
  3110  		out, changed = c.postVisit(out, parent, changed)
  3111  	}
  3112  	return
  3113  }
  3114  func (c *cow) copyOnRewriteRefOfJSONValueExpr(n *JSONValueExpr, parent SQLNode) (out SQLNode, changed bool) {
  3115  	if n == nil || c.cursor.stop {
  3116  		return n, false
  3117  	}
  3118  	out = n
  3119  	if c.pre == nil || c.pre(n, parent) {
  3120  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  3121  		_Path, changedPath := c.copyOnRewriteExpr(n.Path, n)
  3122  		_ReturningType, changedReturningType := c.copyOnRewriteRefOfConvertType(n.ReturningType, n)
  3123  		_EmptyOnResponse, changedEmptyOnResponse := c.copyOnRewriteRefOfJtOnResponse(n.EmptyOnResponse, n)
  3124  		_ErrorOnResponse, changedErrorOnResponse := c.copyOnRewriteRefOfJtOnResponse(n.ErrorOnResponse, n)
  3125  		if changedJSONDoc || changedPath || changedReturningType || changedEmptyOnResponse || changedErrorOnResponse {
  3126  			res := *n
  3127  			res.JSONDoc, _ = _JSONDoc.(Expr)
  3128  			res.Path, _ = _Path.(Expr)
  3129  			res.ReturningType, _ = _ReturningType.(*ConvertType)
  3130  			res.EmptyOnResponse, _ = _EmptyOnResponse.(*JtOnResponse)
  3131  			res.ErrorOnResponse, _ = _ErrorOnResponse.(*JtOnResponse)
  3132  			out = &res
  3133  			if c.cloned != nil {
  3134  				c.cloned(n, out)
  3135  			}
  3136  			changed = true
  3137  		}
  3138  	}
  3139  	if c.post != nil {
  3140  		out, changed = c.postVisit(out, parent, changed)
  3141  	}
  3142  	return
  3143  }
  3144  func (c *cow) copyOnRewriteRefOfJSONValueMergeExpr(n *JSONValueMergeExpr, parent SQLNode) (out SQLNode, changed bool) {
  3145  	if n == nil || c.cursor.stop {
  3146  		return n, false
  3147  	}
  3148  	out = n
  3149  	if c.pre == nil || c.pre(n, parent) {
  3150  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  3151  		_JSONDocList, changedJSONDocList := c.copyOnRewriteExprs(n.JSONDocList, n)
  3152  		if changedJSONDoc || changedJSONDocList {
  3153  			res := *n
  3154  			res.JSONDoc, _ = _JSONDoc.(Expr)
  3155  			res.JSONDocList, _ = _JSONDocList.(Exprs)
  3156  			out = &res
  3157  			if c.cloned != nil {
  3158  				c.cloned(n, out)
  3159  			}
  3160  			changed = true
  3161  		}
  3162  	}
  3163  	if c.post != nil {
  3164  		out, changed = c.postVisit(out, parent, changed)
  3165  	}
  3166  	return
  3167  }
  3168  func (c *cow) copyOnRewriteRefOfJSONValueModifierExpr(n *JSONValueModifierExpr, parent SQLNode) (out SQLNode, changed bool) {
  3169  	if n == nil || c.cursor.stop {
  3170  		return n, false
  3171  	}
  3172  	out = n
  3173  	if c.pre == nil || c.pre(n, parent) {
  3174  		_JSONDoc, changedJSONDoc := c.copyOnRewriteExpr(n.JSONDoc, n)
  3175  		var changedParams bool
  3176  		_Params := make([]*JSONObjectParam, len(n.Params))
  3177  		for x, el := range n.Params {
  3178  			this, changed := c.copyOnRewriteRefOfJSONObjectParam(el, n)
  3179  			_Params[x] = this.(*JSONObjectParam)
  3180  			if changed {
  3181  				changedParams = true
  3182  			}
  3183  		}
  3184  		if changedJSONDoc || changedParams {
  3185  			res := *n
  3186  			res.JSONDoc, _ = _JSONDoc.(Expr)
  3187  			res.Params = _Params
  3188  			out = &res
  3189  			if c.cloned != nil {
  3190  				c.cloned(n, out)
  3191  			}
  3192  			changed = true
  3193  		}
  3194  	}
  3195  	if c.post != nil {
  3196  		out, changed = c.postVisit(out, parent, changed)
  3197  	}
  3198  	return
  3199  }
  3200  func (c *cow) copyOnRewriteRefOfJoinCondition(n *JoinCondition, parent SQLNode) (out SQLNode, changed bool) {
  3201  	if n == nil || c.cursor.stop {
  3202  		return n, false
  3203  	}
  3204  	out = n
  3205  	if c.pre == nil || c.pre(n, parent) {
  3206  		_On, changedOn := c.copyOnRewriteExpr(n.On, n)
  3207  		_Using, changedUsing := c.copyOnRewriteColumns(n.Using, n)
  3208  		if changedOn || changedUsing {
  3209  			res := *n
  3210  			res.On, _ = _On.(Expr)
  3211  			res.Using, _ = _Using.(Columns)
  3212  			out = &res
  3213  			if c.cloned != nil {
  3214  				c.cloned(n, out)
  3215  			}
  3216  			changed = true
  3217  		}
  3218  	}
  3219  	if c.post != nil {
  3220  		out, changed = c.postVisit(out, parent, changed)
  3221  	}
  3222  	return
  3223  }
  3224  func (c *cow) copyOnRewriteRefOfJoinTableExpr(n *JoinTableExpr, parent SQLNode) (out SQLNode, changed bool) {
  3225  	if n == nil || c.cursor.stop {
  3226  		return n, false
  3227  	}
  3228  	out = n
  3229  	if c.pre == nil || c.pre(n, parent) {
  3230  		_LeftExpr, changedLeftExpr := c.copyOnRewriteTableExpr(n.LeftExpr, n)
  3231  		_RightExpr, changedRightExpr := c.copyOnRewriteTableExpr(n.RightExpr, n)
  3232  		_Condition, changedCondition := c.copyOnRewriteRefOfJoinCondition(n.Condition, n)
  3233  		if changedLeftExpr || changedRightExpr || changedCondition {
  3234  			res := *n
  3235  			res.LeftExpr, _ = _LeftExpr.(TableExpr)
  3236  			res.RightExpr, _ = _RightExpr.(TableExpr)
  3237  			res.Condition, _ = _Condition.(*JoinCondition)
  3238  			out = &res
  3239  			if c.cloned != nil {
  3240  				c.cloned(n, out)
  3241  			}
  3242  			changed = true
  3243  		}
  3244  	}
  3245  	if c.post != nil {
  3246  		out, changed = c.postVisit(out, parent, changed)
  3247  	}
  3248  	return
  3249  }
  3250  func (c *cow) copyOnRewriteRefOfJtColumnDefinition(n *JtColumnDefinition, parent SQLNode) (out SQLNode, changed bool) {
  3251  	if n == nil || c.cursor.stop {
  3252  		return n, false
  3253  	}
  3254  	out = n
  3255  	if c.pre == nil || c.pre(n, parent) {
  3256  	}
  3257  	if c.post != nil {
  3258  		out, changed = c.postVisit(out, parent, changed)
  3259  	}
  3260  	return
  3261  }
  3262  func (c *cow) copyOnRewriteRefOfJtOnResponse(n *JtOnResponse, parent SQLNode) (out SQLNode, changed bool) {
  3263  	if n == nil || c.cursor.stop {
  3264  		return n, false
  3265  	}
  3266  	out = n
  3267  	if c.pre == nil || c.pre(n, parent) {
  3268  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3269  		if changedExpr {
  3270  			res := *n
  3271  			res.Expr, _ = _Expr.(Expr)
  3272  			out = &res
  3273  			if c.cloned != nil {
  3274  				c.cloned(n, out)
  3275  			}
  3276  			changed = true
  3277  		}
  3278  	}
  3279  	if c.post != nil {
  3280  		out, changed = c.postVisit(out, parent, changed)
  3281  	}
  3282  	return
  3283  }
  3284  func (c *cow) copyOnRewriteRefOfKeyState(n *KeyState, parent SQLNode) (out SQLNode, changed bool) {
  3285  	if n == nil || c.cursor.stop {
  3286  		return n, false
  3287  	}
  3288  	out = n
  3289  	if c.pre == nil || c.pre(n, parent) {
  3290  	}
  3291  	if c.post != nil {
  3292  		out, changed = c.postVisit(out, parent, changed)
  3293  	}
  3294  	return
  3295  }
  3296  func (c *cow) copyOnRewriteRefOfLagLeadExpr(n *LagLeadExpr, parent SQLNode) (out SQLNode, changed bool) {
  3297  	if n == nil || c.cursor.stop {
  3298  		return n, false
  3299  	}
  3300  	out = n
  3301  	if c.pre == nil || c.pre(n, parent) {
  3302  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3303  		_N, changedN := c.copyOnRewriteExpr(n.N, n)
  3304  		_Default, changedDefault := c.copyOnRewriteExpr(n.Default, n)
  3305  		_OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
  3306  		_NullTreatmentClause, changedNullTreatmentClause := c.copyOnRewriteRefOfNullTreatmentClause(n.NullTreatmentClause, n)
  3307  		if changedExpr || changedN || changedDefault || changedOverClause || changedNullTreatmentClause {
  3308  			res := *n
  3309  			res.Expr, _ = _Expr.(Expr)
  3310  			res.N, _ = _N.(Expr)
  3311  			res.Default, _ = _Default.(Expr)
  3312  			res.OverClause, _ = _OverClause.(*OverClause)
  3313  			res.NullTreatmentClause, _ = _NullTreatmentClause.(*NullTreatmentClause)
  3314  			out = &res
  3315  			if c.cloned != nil {
  3316  				c.cloned(n, out)
  3317  			}
  3318  			changed = true
  3319  		}
  3320  	}
  3321  	if c.post != nil {
  3322  		out, changed = c.postVisit(out, parent, changed)
  3323  	}
  3324  	return
  3325  }
  3326  func (c *cow) copyOnRewriteRefOfLimit(n *Limit, parent SQLNode) (out SQLNode, changed bool) {
  3327  	if n == nil || c.cursor.stop {
  3328  		return n, false
  3329  	}
  3330  	out = n
  3331  	if c.pre == nil || c.pre(n, parent) {
  3332  		_Offset, changedOffset := c.copyOnRewriteExpr(n.Offset, n)
  3333  		_Rowcount, changedRowcount := c.copyOnRewriteExpr(n.Rowcount, n)
  3334  		if changedOffset || changedRowcount {
  3335  			res := *n
  3336  			res.Offset, _ = _Offset.(Expr)
  3337  			res.Rowcount, _ = _Rowcount.(Expr)
  3338  			out = &res
  3339  			if c.cloned != nil {
  3340  				c.cloned(n, out)
  3341  			}
  3342  			changed = true
  3343  		}
  3344  	}
  3345  	if c.post != nil {
  3346  		out, changed = c.postVisit(out, parent, changed)
  3347  	}
  3348  	return
  3349  }
  3350  func (c *cow) copyOnRewriteRefOfLiteral(n *Literal, parent SQLNode) (out SQLNode, changed bool) {
  3351  	if n == nil || c.cursor.stop {
  3352  		return n, false
  3353  	}
  3354  	out = n
  3355  	if c.pre == nil || c.pre(n, parent) {
  3356  	}
  3357  	if c.post != nil {
  3358  		out, changed = c.postVisit(out, parent, changed)
  3359  	}
  3360  	return
  3361  }
  3362  func (c *cow) copyOnRewriteRefOfLoad(n *Load, parent SQLNode) (out SQLNode, changed bool) {
  3363  	if n == nil || c.cursor.stop {
  3364  		return n, false
  3365  	}
  3366  	out = n
  3367  	if c.pre == nil || c.pre(n, parent) {
  3368  	}
  3369  	if c.post != nil {
  3370  		out, changed = c.postVisit(out, parent, changed)
  3371  	}
  3372  	return
  3373  }
  3374  func (c *cow) copyOnRewriteRefOfLocateExpr(n *LocateExpr, parent SQLNode) (out SQLNode, changed bool) {
  3375  	if n == nil || c.cursor.stop {
  3376  		return n, false
  3377  	}
  3378  	out = n
  3379  	if c.pre == nil || c.pre(n, parent) {
  3380  		_SubStr, changedSubStr := c.copyOnRewriteExpr(n.SubStr, n)
  3381  		_Str, changedStr := c.copyOnRewriteExpr(n.Str, n)
  3382  		_Pos, changedPos := c.copyOnRewriteExpr(n.Pos, n)
  3383  		if changedSubStr || changedStr || changedPos {
  3384  			res := *n
  3385  			res.SubStr, _ = _SubStr.(Expr)
  3386  			res.Str, _ = _Str.(Expr)
  3387  			res.Pos, _ = _Pos.(Expr)
  3388  			out = &res
  3389  			if c.cloned != nil {
  3390  				c.cloned(n, out)
  3391  			}
  3392  			changed = true
  3393  		}
  3394  	}
  3395  	if c.post != nil {
  3396  		out, changed = c.postVisit(out, parent, changed)
  3397  	}
  3398  	return
  3399  }
  3400  func (c *cow) copyOnRewriteRefOfLockOption(n *LockOption, parent SQLNode) (out SQLNode, changed bool) {
  3401  	if n == nil || c.cursor.stop {
  3402  		return n, false
  3403  	}
  3404  	out = n
  3405  	if c.pre == nil || c.pre(n, parent) {
  3406  	}
  3407  	if c.post != nil {
  3408  		out, changed = c.postVisit(out, parent, changed)
  3409  	}
  3410  	return
  3411  }
  3412  func (c *cow) copyOnRewriteRefOfLockTables(n *LockTables, parent SQLNode) (out SQLNode, changed bool) {
  3413  	if n == nil || c.cursor.stop {
  3414  		return n, false
  3415  	}
  3416  	out = n
  3417  	if c.pre == nil || c.pre(n, parent) {
  3418  	}
  3419  	if c.post != nil {
  3420  		out, changed = c.postVisit(out, parent, changed)
  3421  	}
  3422  	return
  3423  }
  3424  func (c *cow) copyOnRewriteRefOfLockingFunc(n *LockingFunc, parent SQLNode) (out SQLNode, changed bool) {
  3425  	if n == nil || c.cursor.stop {
  3426  		return n, false
  3427  	}
  3428  	out = n
  3429  	if c.pre == nil || c.pre(n, parent) {
  3430  		_Name, changedName := c.copyOnRewriteExpr(n.Name, n)
  3431  		_Timeout, changedTimeout := c.copyOnRewriteExpr(n.Timeout, n)
  3432  		if changedName || changedTimeout {
  3433  			res := *n
  3434  			res.Name, _ = _Name.(Expr)
  3435  			res.Timeout, _ = _Timeout.(Expr)
  3436  			out = &res
  3437  			if c.cloned != nil {
  3438  				c.cloned(n, out)
  3439  			}
  3440  			changed = true
  3441  		}
  3442  	}
  3443  	if c.post != nil {
  3444  		out, changed = c.postVisit(out, parent, changed)
  3445  	}
  3446  	return
  3447  }
  3448  func (c *cow) copyOnRewriteRefOfMatchExpr(n *MatchExpr, parent SQLNode) (out SQLNode, changed bool) {
  3449  	if n == nil || c.cursor.stop {
  3450  		return n, false
  3451  	}
  3452  	out = n
  3453  	if c.pre == nil || c.pre(n, parent) {
  3454  		var changedColumns bool
  3455  		_Columns := make([]*ColName, len(n.Columns))
  3456  		for x, el := range n.Columns {
  3457  			this, changed := c.copyOnRewriteRefOfColName(el, n)
  3458  			_Columns[x] = this.(*ColName)
  3459  			if changed {
  3460  				changedColumns = true
  3461  			}
  3462  		}
  3463  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3464  		if changedColumns || changedExpr {
  3465  			res := *n
  3466  			res.Columns = _Columns
  3467  			res.Expr, _ = _Expr.(Expr)
  3468  			out = &res
  3469  			if c.cloned != nil {
  3470  				c.cloned(n, out)
  3471  			}
  3472  			changed = true
  3473  		}
  3474  	}
  3475  	if c.post != nil {
  3476  		out, changed = c.postVisit(out, parent, changed)
  3477  	}
  3478  	return
  3479  }
  3480  func (c *cow) copyOnRewriteRefOfMax(n *Max, parent SQLNode) (out SQLNode, changed bool) {
  3481  	if n == nil || c.cursor.stop {
  3482  		return n, false
  3483  	}
  3484  	out = n
  3485  	if c.pre == nil || c.pre(n, parent) {
  3486  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  3487  		if changedArg {
  3488  			res := *n
  3489  			res.Arg, _ = _Arg.(Expr)
  3490  			out = &res
  3491  			if c.cloned != nil {
  3492  				c.cloned(n, out)
  3493  			}
  3494  			changed = true
  3495  		}
  3496  	}
  3497  	if c.post != nil {
  3498  		out, changed = c.postVisit(out, parent, changed)
  3499  	}
  3500  	return
  3501  }
  3502  func (c *cow) copyOnRewriteRefOfMemberOfExpr(n *MemberOfExpr, parent SQLNode) (out SQLNode, changed bool) {
  3503  	if n == nil || c.cursor.stop {
  3504  		return n, false
  3505  	}
  3506  	out = n
  3507  	if c.pre == nil || c.pre(n, parent) {
  3508  		_Value, changedValue := c.copyOnRewriteExpr(n.Value, n)
  3509  		_JSONArr, changedJSONArr := c.copyOnRewriteExpr(n.JSONArr, n)
  3510  		if changedValue || changedJSONArr {
  3511  			res := *n
  3512  			res.Value, _ = _Value.(Expr)
  3513  			res.JSONArr, _ = _JSONArr.(Expr)
  3514  			out = &res
  3515  			if c.cloned != nil {
  3516  				c.cloned(n, out)
  3517  			}
  3518  			changed = true
  3519  		}
  3520  	}
  3521  	if c.post != nil {
  3522  		out, changed = c.postVisit(out, parent, changed)
  3523  	}
  3524  	return
  3525  }
  3526  func (c *cow) copyOnRewriteRefOfMin(n *Min, parent SQLNode) (out SQLNode, changed bool) {
  3527  	if n == nil || c.cursor.stop {
  3528  		return n, false
  3529  	}
  3530  	out = n
  3531  	if c.pre == nil || c.pre(n, parent) {
  3532  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  3533  		if changedArg {
  3534  			res := *n
  3535  			res.Arg, _ = _Arg.(Expr)
  3536  			out = &res
  3537  			if c.cloned != nil {
  3538  				c.cloned(n, out)
  3539  			}
  3540  			changed = true
  3541  		}
  3542  	}
  3543  	if c.post != nil {
  3544  		out, changed = c.postVisit(out, parent, changed)
  3545  	}
  3546  	return
  3547  }
  3548  func (c *cow) copyOnRewriteRefOfModifyColumn(n *ModifyColumn, parent SQLNode) (out SQLNode, changed bool) {
  3549  	if n == nil || c.cursor.stop {
  3550  		return n, false
  3551  	}
  3552  	out = n
  3553  	if c.pre == nil || c.pre(n, parent) {
  3554  		_NewColDefinition, changedNewColDefinition := c.copyOnRewriteRefOfColumnDefinition(n.NewColDefinition, n)
  3555  		_After, changedAfter := c.copyOnRewriteRefOfColName(n.After, n)
  3556  		if changedNewColDefinition || changedAfter {
  3557  			res := *n
  3558  			res.NewColDefinition, _ = _NewColDefinition.(*ColumnDefinition)
  3559  			res.After, _ = _After.(*ColName)
  3560  			out = &res
  3561  			if c.cloned != nil {
  3562  				c.cloned(n, out)
  3563  			}
  3564  			changed = true
  3565  		}
  3566  	}
  3567  	if c.post != nil {
  3568  		out, changed = c.postVisit(out, parent, changed)
  3569  	}
  3570  	return
  3571  }
  3572  func (c *cow) copyOnRewriteRefOfNTHValueExpr(n *NTHValueExpr, parent SQLNode) (out SQLNode, changed bool) {
  3573  	if n == nil || c.cursor.stop {
  3574  		return n, false
  3575  	}
  3576  	out = n
  3577  	if c.pre == nil || c.pre(n, parent) {
  3578  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3579  		_N, changedN := c.copyOnRewriteExpr(n.N, n)
  3580  		_OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
  3581  		_FromFirstLastClause, changedFromFirstLastClause := c.copyOnRewriteRefOfFromFirstLastClause(n.FromFirstLastClause, n)
  3582  		_NullTreatmentClause, changedNullTreatmentClause := c.copyOnRewriteRefOfNullTreatmentClause(n.NullTreatmentClause, n)
  3583  		if changedExpr || changedN || changedOverClause || changedFromFirstLastClause || changedNullTreatmentClause {
  3584  			res := *n
  3585  			res.Expr, _ = _Expr.(Expr)
  3586  			res.N, _ = _N.(Expr)
  3587  			res.OverClause, _ = _OverClause.(*OverClause)
  3588  			res.FromFirstLastClause, _ = _FromFirstLastClause.(*FromFirstLastClause)
  3589  			res.NullTreatmentClause, _ = _NullTreatmentClause.(*NullTreatmentClause)
  3590  			out = &res
  3591  			if c.cloned != nil {
  3592  				c.cloned(n, out)
  3593  			}
  3594  			changed = true
  3595  		}
  3596  	}
  3597  	if c.post != nil {
  3598  		out, changed = c.postVisit(out, parent, changed)
  3599  	}
  3600  	return
  3601  }
  3602  func (c *cow) copyOnRewriteRefOfNamedWindow(n *NamedWindow, parent SQLNode) (out SQLNode, changed bool) {
  3603  	if n == nil || c.cursor.stop {
  3604  		return n, false
  3605  	}
  3606  	out = n
  3607  	if c.pre == nil || c.pre(n, parent) {
  3608  		_Windows, changedWindows := c.copyOnRewriteWindowDefinitions(n.Windows, n)
  3609  		if changedWindows {
  3610  			res := *n
  3611  			res.Windows, _ = _Windows.(WindowDefinitions)
  3612  			out = &res
  3613  			if c.cloned != nil {
  3614  				c.cloned(n, out)
  3615  			}
  3616  			changed = true
  3617  		}
  3618  	}
  3619  	if c.post != nil {
  3620  		out, changed = c.postVisit(out, parent, changed)
  3621  	}
  3622  	return
  3623  }
  3624  func (c *cow) copyOnRewriteNamedWindows(n NamedWindows, parent SQLNode) (out SQLNode, changed bool) {
  3625  	if n == nil || c.cursor.stop {
  3626  		return n, false
  3627  	}
  3628  	out = n
  3629  	if c.pre == nil || c.pre(n, parent) {
  3630  		res := make(NamedWindows, len(n))
  3631  		for x, el := range n {
  3632  			this, change := c.copyOnRewriteRefOfNamedWindow(el, n)
  3633  			res[x] = this.(*NamedWindow)
  3634  			if change {
  3635  				changed = true
  3636  			}
  3637  		}
  3638  		if changed {
  3639  			out = res
  3640  		}
  3641  	}
  3642  	if c.post != nil {
  3643  		out, changed = c.postVisit(out, parent, changed)
  3644  	}
  3645  	return
  3646  }
  3647  func (c *cow) copyOnRewriteRefOfNextval(n *Nextval, parent SQLNode) (out SQLNode, changed bool) {
  3648  	if n == nil || c.cursor.stop {
  3649  		return n, false
  3650  	}
  3651  	out = n
  3652  	if c.pre == nil || c.pre(n, parent) {
  3653  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3654  		if changedExpr {
  3655  			res := *n
  3656  			res.Expr, _ = _Expr.(Expr)
  3657  			out = &res
  3658  			if c.cloned != nil {
  3659  				c.cloned(n, out)
  3660  			}
  3661  			changed = true
  3662  		}
  3663  	}
  3664  	if c.post != nil {
  3665  		out, changed = c.postVisit(out, parent, changed)
  3666  	}
  3667  	return
  3668  }
  3669  func (c *cow) copyOnRewriteRefOfNotExpr(n *NotExpr, parent SQLNode) (out SQLNode, changed bool) {
  3670  	if n == nil || c.cursor.stop {
  3671  		return n, false
  3672  	}
  3673  	out = n
  3674  	if c.pre == nil || c.pre(n, parent) {
  3675  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3676  		if changedExpr {
  3677  			res := *n
  3678  			res.Expr, _ = _Expr.(Expr)
  3679  			out = &res
  3680  			if c.cloned != nil {
  3681  				c.cloned(n, out)
  3682  			}
  3683  			changed = true
  3684  		}
  3685  	}
  3686  	if c.post != nil {
  3687  		out, changed = c.postVisit(out, parent, changed)
  3688  	}
  3689  	return
  3690  }
  3691  func (c *cow) copyOnRewriteRefOfNtileExpr(n *NtileExpr, parent SQLNode) (out SQLNode, changed bool) {
  3692  	if n == nil || c.cursor.stop {
  3693  		return n, false
  3694  	}
  3695  	out = n
  3696  	if c.pre == nil || c.pre(n, parent) {
  3697  		_N, changedN := c.copyOnRewriteExpr(n.N, n)
  3698  		_OverClause, changedOverClause := c.copyOnRewriteRefOfOverClause(n.OverClause, n)
  3699  		if changedN || changedOverClause {
  3700  			res := *n
  3701  			res.N, _ = _N.(Expr)
  3702  			res.OverClause, _ = _OverClause.(*OverClause)
  3703  			out = &res
  3704  			if c.cloned != nil {
  3705  				c.cloned(n, out)
  3706  			}
  3707  			changed = true
  3708  		}
  3709  	}
  3710  	if c.post != nil {
  3711  		out, changed = c.postVisit(out, parent, changed)
  3712  	}
  3713  	return
  3714  }
  3715  func (c *cow) copyOnRewriteRefOfNullTreatmentClause(n *NullTreatmentClause, parent SQLNode) (out SQLNode, changed bool) {
  3716  	if n == nil || c.cursor.stop {
  3717  		return n, false
  3718  	}
  3719  	out = n
  3720  	if c.pre == nil || c.pre(n, parent) {
  3721  	}
  3722  	if c.post != nil {
  3723  		out, changed = c.postVisit(out, parent, changed)
  3724  	}
  3725  	return
  3726  }
  3727  func (c *cow) copyOnRewriteRefOfNullVal(n *NullVal, parent SQLNode) (out SQLNode, changed bool) {
  3728  	if n == nil || c.cursor.stop {
  3729  		return n, false
  3730  	}
  3731  	out = n
  3732  	if c.pre == nil || c.pre(n, parent) {
  3733  	}
  3734  	if c.post != nil {
  3735  		out, changed = c.postVisit(out, parent, changed)
  3736  	}
  3737  	return
  3738  }
  3739  func (c *cow) copyOnRewriteRefOfOffset(n *Offset, parent SQLNode) (out SQLNode, changed bool) {
  3740  	if n == nil || c.cursor.stop {
  3741  		return n, false
  3742  	}
  3743  	out = n
  3744  	if c.pre == nil || c.pre(n, parent) {
  3745  	}
  3746  	if c.post != nil {
  3747  		out, changed = c.postVisit(out, parent, changed)
  3748  	}
  3749  	return
  3750  }
  3751  func (c *cow) copyOnRewriteOnDup(n OnDup, parent SQLNode) (out SQLNode, changed bool) {
  3752  	if n == nil || c.cursor.stop {
  3753  		return n, false
  3754  	}
  3755  	out = n
  3756  	if c.pre == nil || c.pre(n, parent) {
  3757  		res := make(OnDup, len(n))
  3758  		for x, el := range n {
  3759  			this, change := c.copyOnRewriteRefOfUpdateExpr(el, n)
  3760  			res[x] = this.(*UpdateExpr)
  3761  			if change {
  3762  				changed = true
  3763  			}
  3764  		}
  3765  		if changed {
  3766  			out = res
  3767  		}
  3768  	}
  3769  	if c.post != nil {
  3770  		out, changed = c.postVisit(out, parent, changed)
  3771  	}
  3772  	return
  3773  }
  3774  func (c *cow) copyOnRewriteRefOfOptLike(n *OptLike, parent SQLNode) (out SQLNode, changed bool) {
  3775  	if n == nil || c.cursor.stop {
  3776  		return n, false
  3777  	}
  3778  	out = n
  3779  	if c.pre == nil || c.pre(n, parent) {
  3780  		_LikeTable, changedLikeTable := c.copyOnRewriteTableName(n.LikeTable, n)
  3781  		if changedLikeTable {
  3782  			res := *n
  3783  			res.LikeTable, _ = _LikeTable.(TableName)
  3784  			out = &res
  3785  			if c.cloned != nil {
  3786  				c.cloned(n, out)
  3787  			}
  3788  			changed = true
  3789  		}
  3790  	}
  3791  	if c.post != nil {
  3792  		out, changed = c.postVisit(out, parent, changed)
  3793  	}
  3794  	return
  3795  }
  3796  func (c *cow) copyOnRewriteRefOfOrExpr(n *OrExpr, parent SQLNode) (out SQLNode, changed bool) {
  3797  	if n == nil || c.cursor.stop {
  3798  		return n, false
  3799  	}
  3800  	out = n
  3801  	if c.pre == nil || c.pre(n, parent) {
  3802  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
  3803  		_Right, changedRight := c.copyOnRewriteExpr(n.Right, n)
  3804  		if changedLeft || changedRight {
  3805  			res := *n
  3806  			res.Left, _ = _Left.(Expr)
  3807  			res.Right, _ = _Right.(Expr)
  3808  			out = &res
  3809  			if c.cloned != nil {
  3810  				c.cloned(n, out)
  3811  			}
  3812  			changed = true
  3813  		}
  3814  	}
  3815  	if c.post != nil {
  3816  		out, changed = c.postVisit(out, parent, changed)
  3817  	}
  3818  	return
  3819  }
  3820  func (c *cow) copyOnRewriteRefOfOrder(n *Order, parent SQLNode) (out SQLNode, changed bool) {
  3821  	if n == nil || c.cursor.stop {
  3822  		return n, false
  3823  	}
  3824  	out = n
  3825  	if c.pre == nil || c.pre(n, parent) {
  3826  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  3827  		if changedExpr {
  3828  			res := *n
  3829  			res.Expr, _ = _Expr.(Expr)
  3830  			out = &res
  3831  			if c.cloned != nil {
  3832  				c.cloned(n, out)
  3833  			}
  3834  			changed = true
  3835  		}
  3836  	}
  3837  	if c.post != nil {
  3838  		out, changed = c.postVisit(out, parent, changed)
  3839  	}
  3840  	return
  3841  }
  3842  func (c *cow) copyOnRewriteOrderBy(n OrderBy, parent SQLNode) (out SQLNode, changed bool) {
  3843  	if n == nil || c.cursor.stop {
  3844  		return n, false
  3845  	}
  3846  	out = n
  3847  	if c.pre == nil || c.pre(n, parent) {
  3848  		res := make(OrderBy, len(n))
  3849  		for x, el := range n {
  3850  			this, change := c.copyOnRewriteRefOfOrder(el, n)
  3851  			res[x] = this.(*Order)
  3852  			if change {
  3853  				changed = true
  3854  			}
  3855  		}
  3856  		if changed {
  3857  			out = res
  3858  		}
  3859  	}
  3860  	if c.post != nil {
  3861  		out, changed = c.postVisit(out, parent, changed)
  3862  	}
  3863  	return
  3864  }
  3865  func (c *cow) copyOnRewriteRefOfOrderByOption(n *OrderByOption, parent SQLNode) (out SQLNode, changed bool) {
  3866  	if n == nil || c.cursor.stop {
  3867  		return n, false
  3868  	}
  3869  	out = n
  3870  	if c.pre == nil || c.pre(n, parent) {
  3871  		_Cols, changedCols := c.copyOnRewriteColumns(n.Cols, n)
  3872  		if changedCols {
  3873  			res := *n
  3874  			res.Cols, _ = _Cols.(Columns)
  3875  			out = &res
  3876  			if c.cloned != nil {
  3877  				c.cloned(n, out)
  3878  			}
  3879  			changed = true
  3880  		}
  3881  	}
  3882  	if c.post != nil {
  3883  		out, changed = c.postVisit(out, parent, changed)
  3884  	}
  3885  	return
  3886  }
  3887  func (c *cow) copyOnRewriteRefOfOtherAdmin(n *OtherAdmin, parent SQLNode) (out SQLNode, changed bool) {
  3888  	if n == nil || c.cursor.stop {
  3889  		return n, false
  3890  	}
  3891  	out = n
  3892  	if c.pre == nil || c.pre(n, parent) {
  3893  	}
  3894  	if c.post != nil {
  3895  		out, changed = c.postVisit(out, parent, changed)
  3896  	}
  3897  	return
  3898  }
  3899  func (c *cow) copyOnRewriteRefOfOtherRead(n *OtherRead, parent SQLNode) (out SQLNode, changed bool) {
  3900  	if n == nil || c.cursor.stop {
  3901  		return n, false
  3902  	}
  3903  	out = n
  3904  	if c.pre == nil || c.pre(n, parent) {
  3905  	}
  3906  	if c.post != nil {
  3907  		out, changed = c.postVisit(out, parent, changed)
  3908  	}
  3909  	return
  3910  }
  3911  func (c *cow) copyOnRewriteRefOfOverClause(n *OverClause, parent SQLNode) (out SQLNode, changed bool) {
  3912  	if n == nil || c.cursor.stop {
  3913  		return n, false
  3914  	}
  3915  	out = n
  3916  	if c.pre == nil || c.pre(n, parent) {
  3917  		_WindowName, changedWindowName := c.copyOnRewriteIdentifierCI(n.WindowName, n)
  3918  		_WindowSpec, changedWindowSpec := c.copyOnRewriteRefOfWindowSpecification(n.WindowSpec, n)
  3919  		if changedWindowName || changedWindowSpec {
  3920  			res := *n
  3921  			res.WindowName, _ = _WindowName.(IdentifierCI)
  3922  			res.WindowSpec, _ = _WindowSpec.(*WindowSpecification)
  3923  			out = &res
  3924  			if c.cloned != nil {
  3925  				c.cloned(n, out)
  3926  			}
  3927  			changed = true
  3928  		}
  3929  	}
  3930  	if c.post != nil {
  3931  		out, changed = c.postVisit(out, parent, changed)
  3932  	}
  3933  	return
  3934  }
  3935  func (c *cow) copyOnRewriteRefOfParenTableExpr(n *ParenTableExpr, parent SQLNode) (out SQLNode, changed bool) {
  3936  	if n == nil || c.cursor.stop {
  3937  		return n, false
  3938  	}
  3939  	out = n
  3940  	if c.pre == nil || c.pre(n, parent) {
  3941  		_Exprs, changedExprs := c.copyOnRewriteTableExprs(n.Exprs, n)
  3942  		if changedExprs {
  3943  			res := *n
  3944  			res.Exprs, _ = _Exprs.(TableExprs)
  3945  			out = &res
  3946  			if c.cloned != nil {
  3947  				c.cloned(n, out)
  3948  			}
  3949  			changed = true
  3950  		}
  3951  	}
  3952  	if c.post != nil {
  3953  		out, changed = c.postVisit(out, parent, changed)
  3954  	}
  3955  	return
  3956  }
  3957  func (c *cow) copyOnRewriteRefOfParsedComments(n *ParsedComments, parent SQLNode) (out SQLNode, changed bool) {
  3958  	if n == nil || c.cursor.stop {
  3959  		return n, false
  3960  	}
  3961  	out = n
  3962  	if c.pre == nil || c.pre(n, parent) {
  3963  	}
  3964  	if c.post != nil {
  3965  		out, changed = c.postVisit(out, parent, changed)
  3966  	}
  3967  	return
  3968  }
  3969  func (c *cow) copyOnRewriteRefOfPartitionDefinition(n *PartitionDefinition, parent SQLNode) (out SQLNode, changed bool) {
  3970  	if n == nil || c.cursor.stop {
  3971  		return n, false
  3972  	}
  3973  	out = n
  3974  	if c.pre == nil || c.pre(n, parent) {
  3975  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  3976  		_Options, changedOptions := c.copyOnRewriteRefOfPartitionDefinitionOptions(n.Options, n)
  3977  		if changedName || changedOptions {
  3978  			res := *n
  3979  			res.Name, _ = _Name.(IdentifierCI)
  3980  			res.Options, _ = _Options.(*PartitionDefinitionOptions)
  3981  			out = &res
  3982  			if c.cloned != nil {
  3983  				c.cloned(n, out)
  3984  			}
  3985  			changed = true
  3986  		}
  3987  	}
  3988  	if c.post != nil {
  3989  		out, changed = c.postVisit(out, parent, changed)
  3990  	}
  3991  	return
  3992  }
  3993  func (c *cow) copyOnRewriteRefOfPartitionDefinitionOptions(n *PartitionDefinitionOptions, parent SQLNode) (out SQLNode, changed bool) {
  3994  	if n == nil || c.cursor.stop {
  3995  		return n, false
  3996  	}
  3997  	out = n
  3998  	if c.pre == nil || c.pre(n, parent) {
  3999  		_ValueRange, changedValueRange := c.copyOnRewriteRefOfPartitionValueRange(n.ValueRange, n)
  4000  		_Comment, changedComment := c.copyOnRewriteRefOfLiteral(n.Comment, n)
  4001  		_Engine, changedEngine := c.copyOnRewriteRefOfPartitionEngine(n.Engine, n)
  4002  		_DataDirectory, changedDataDirectory := c.copyOnRewriteRefOfLiteral(n.DataDirectory, n)
  4003  		_IndexDirectory, changedIndexDirectory := c.copyOnRewriteRefOfLiteral(n.IndexDirectory, n)
  4004  		_SubPartitionDefinitions, changedSubPartitionDefinitions := c.copyOnRewriteSubPartitionDefinitions(n.SubPartitionDefinitions, n)
  4005  		if changedValueRange || changedComment || changedEngine || changedDataDirectory || changedIndexDirectory || changedSubPartitionDefinitions {
  4006  			res := *n
  4007  			res.ValueRange, _ = _ValueRange.(*PartitionValueRange)
  4008  			res.Comment, _ = _Comment.(*Literal)
  4009  			res.Engine, _ = _Engine.(*PartitionEngine)
  4010  			res.DataDirectory, _ = _DataDirectory.(*Literal)
  4011  			res.IndexDirectory, _ = _IndexDirectory.(*Literal)
  4012  			res.SubPartitionDefinitions, _ = _SubPartitionDefinitions.(SubPartitionDefinitions)
  4013  			out = &res
  4014  			if c.cloned != nil {
  4015  				c.cloned(n, out)
  4016  			}
  4017  			changed = true
  4018  		}
  4019  	}
  4020  	if c.post != nil {
  4021  		out, changed = c.postVisit(out, parent, changed)
  4022  	}
  4023  	return
  4024  }
  4025  func (c *cow) copyOnRewriteRefOfPartitionEngine(n *PartitionEngine, parent SQLNode) (out SQLNode, changed bool) {
  4026  	if n == nil || c.cursor.stop {
  4027  		return n, false
  4028  	}
  4029  	out = n
  4030  	if c.pre == nil || c.pre(n, parent) {
  4031  	}
  4032  	if c.post != nil {
  4033  		out, changed = c.postVisit(out, parent, changed)
  4034  	}
  4035  	return
  4036  }
  4037  func (c *cow) copyOnRewriteRefOfPartitionOption(n *PartitionOption, parent SQLNode) (out SQLNode, changed bool) {
  4038  	if n == nil || c.cursor.stop {
  4039  		return n, false
  4040  	}
  4041  	out = n
  4042  	if c.pre == nil || c.pre(n, parent) {
  4043  		_ColList, changedColList := c.copyOnRewriteColumns(n.ColList, n)
  4044  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  4045  		_SubPartition, changedSubPartition := c.copyOnRewriteRefOfSubPartition(n.SubPartition, n)
  4046  		var changedDefinitions bool
  4047  		_Definitions := make([]*PartitionDefinition, len(n.Definitions))
  4048  		for x, el := range n.Definitions {
  4049  			this, changed := c.copyOnRewriteRefOfPartitionDefinition(el, n)
  4050  			_Definitions[x] = this.(*PartitionDefinition)
  4051  			if changed {
  4052  				changedDefinitions = true
  4053  			}
  4054  		}
  4055  		if changedColList || changedExpr || changedSubPartition || changedDefinitions {
  4056  			res := *n
  4057  			res.ColList, _ = _ColList.(Columns)
  4058  			res.Expr, _ = _Expr.(Expr)
  4059  			res.SubPartition, _ = _SubPartition.(*SubPartition)
  4060  			res.Definitions = _Definitions
  4061  			out = &res
  4062  			if c.cloned != nil {
  4063  				c.cloned(n, out)
  4064  			}
  4065  			changed = true
  4066  		}
  4067  	}
  4068  	if c.post != nil {
  4069  		out, changed = c.postVisit(out, parent, changed)
  4070  	}
  4071  	return
  4072  }
  4073  func (c *cow) copyOnRewriteRefOfPartitionSpec(n *PartitionSpec, parent SQLNode) (out SQLNode, changed bool) {
  4074  	if n == nil || c.cursor.stop {
  4075  		return n, false
  4076  	}
  4077  	out = n
  4078  	if c.pre == nil || c.pre(n, parent) {
  4079  		_Names, changedNames := c.copyOnRewritePartitions(n.Names, n)
  4080  		_Number, changedNumber := c.copyOnRewriteRefOfLiteral(n.Number, n)
  4081  		_TableName, changedTableName := c.copyOnRewriteTableName(n.TableName, n)
  4082  		var changedDefinitions bool
  4083  		_Definitions := make([]*PartitionDefinition, len(n.Definitions))
  4084  		for x, el := range n.Definitions {
  4085  			this, changed := c.copyOnRewriteRefOfPartitionDefinition(el, n)
  4086  			_Definitions[x] = this.(*PartitionDefinition)
  4087  			if changed {
  4088  				changedDefinitions = true
  4089  			}
  4090  		}
  4091  		if changedNames || changedNumber || changedTableName || changedDefinitions {
  4092  			res := *n
  4093  			res.Names, _ = _Names.(Partitions)
  4094  			res.Number, _ = _Number.(*Literal)
  4095  			res.TableName, _ = _TableName.(TableName)
  4096  			res.Definitions = _Definitions
  4097  			out = &res
  4098  			if c.cloned != nil {
  4099  				c.cloned(n, out)
  4100  			}
  4101  			changed = true
  4102  		}
  4103  	}
  4104  	if c.post != nil {
  4105  		out, changed = c.postVisit(out, parent, changed)
  4106  	}
  4107  	return
  4108  }
  4109  func (c *cow) copyOnRewriteRefOfPartitionValueRange(n *PartitionValueRange, parent SQLNode) (out SQLNode, changed bool) {
  4110  	if n == nil || c.cursor.stop {
  4111  		return n, false
  4112  	}
  4113  	out = n
  4114  	if c.pre == nil || c.pre(n, parent) {
  4115  		_Range, changedRange := c.copyOnRewriteValTuple(n.Range, n)
  4116  		if changedRange {
  4117  			res := *n
  4118  			res.Range, _ = _Range.(ValTuple)
  4119  			out = &res
  4120  			if c.cloned != nil {
  4121  				c.cloned(n, out)
  4122  			}
  4123  			changed = true
  4124  		}
  4125  	}
  4126  	if c.post != nil {
  4127  		out, changed = c.postVisit(out, parent, changed)
  4128  	}
  4129  	return
  4130  }
  4131  func (c *cow) copyOnRewritePartitions(n Partitions, parent SQLNode) (out SQLNode, changed bool) {
  4132  	if n == nil || c.cursor.stop {
  4133  		return n, false
  4134  	}
  4135  	out = n
  4136  	if c.pre == nil || c.pre(n, parent) {
  4137  		res := make(Partitions, len(n))
  4138  		for x, el := range n {
  4139  			this, change := c.copyOnRewriteIdentifierCI(el, n)
  4140  			res[x] = this.(IdentifierCI)
  4141  			if change {
  4142  				changed = true
  4143  			}
  4144  		}
  4145  		if changed {
  4146  			out = res
  4147  		}
  4148  	}
  4149  	if c.post != nil {
  4150  		out, changed = c.postVisit(out, parent, changed)
  4151  	}
  4152  	return
  4153  }
  4154  func (c *cow) copyOnRewriteRefOfPerformanceSchemaFuncExpr(n *PerformanceSchemaFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  4155  	if n == nil || c.cursor.stop {
  4156  		return n, false
  4157  	}
  4158  	out = n
  4159  	if c.pre == nil || c.pre(n, parent) {
  4160  		_Argument, changedArgument := c.copyOnRewriteExpr(n.Argument, n)
  4161  		if changedArgument {
  4162  			res := *n
  4163  			res.Argument, _ = _Argument.(Expr)
  4164  			out = &res
  4165  			if c.cloned != nil {
  4166  				c.cloned(n, out)
  4167  			}
  4168  			changed = true
  4169  		}
  4170  	}
  4171  	if c.post != nil {
  4172  		out, changed = c.postVisit(out, parent, changed)
  4173  	}
  4174  	return
  4175  }
  4176  func (c *cow) copyOnRewriteRefOfPrepareStmt(n *PrepareStmt, parent SQLNode) (out SQLNode, changed bool) {
  4177  	if n == nil || c.cursor.stop {
  4178  		return n, false
  4179  	}
  4180  	out = n
  4181  	if c.pre == nil || c.pre(n, parent) {
  4182  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  4183  		_Statement, changedStatement := c.copyOnRewriteExpr(n.Statement, n)
  4184  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  4185  		if changedName || changedStatement || changedComments {
  4186  			res := *n
  4187  			res.Name, _ = _Name.(IdentifierCI)
  4188  			res.Statement, _ = _Statement.(Expr)
  4189  			res.Comments, _ = _Comments.(*ParsedComments)
  4190  			out = &res
  4191  			if c.cloned != nil {
  4192  				c.cloned(n, out)
  4193  			}
  4194  			changed = true
  4195  		}
  4196  	}
  4197  	if c.post != nil {
  4198  		out, changed = c.postVisit(out, parent, changed)
  4199  	}
  4200  	return
  4201  }
  4202  func (c *cow) copyOnRewriteRefOfReferenceDefinition(n *ReferenceDefinition, parent SQLNode) (out SQLNode, changed bool) {
  4203  	if n == nil || c.cursor.stop {
  4204  		return n, false
  4205  	}
  4206  	out = n
  4207  	if c.pre == nil || c.pre(n, parent) {
  4208  		_ReferencedTable, changedReferencedTable := c.copyOnRewriteTableName(n.ReferencedTable, n)
  4209  		_ReferencedColumns, changedReferencedColumns := c.copyOnRewriteColumns(n.ReferencedColumns, n)
  4210  		_Match, changedMatch := c.copyOnRewriteMatchAction(n.Match, n)
  4211  		_OnDelete, changedOnDelete := c.copyOnRewriteReferenceAction(n.OnDelete, n)
  4212  		_OnUpdate, changedOnUpdate := c.copyOnRewriteReferenceAction(n.OnUpdate, n)
  4213  		if changedReferencedTable || changedReferencedColumns || changedMatch || changedOnDelete || changedOnUpdate {
  4214  			res := *n
  4215  			res.ReferencedTable, _ = _ReferencedTable.(TableName)
  4216  			res.ReferencedColumns, _ = _ReferencedColumns.(Columns)
  4217  			res.Match, _ = _Match.(MatchAction)
  4218  			res.OnDelete, _ = _OnDelete.(ReferenceAction)
  4219  			res.OnUpdate, _ = _OnUpdate.(ReferenceAction)
  4220  			out = &res
  4221  			if c.cloned != nil {
  4222  				c.cloned(n, out)
  4223  			}
  4224  			changed = true
  4225  		}
  4226  	}
  4227  	if c.post != nil {
  4228  		out, changed = c.postVisit(out, parent, changed)
  4229  	}
  4230  	return
  4231  }
  4232  func (c *cow) copyOnRewriteRefOfRegexpInstrExpr(n *RegexpInstrExpr, parent SQLNode) (out SQLNode, changed bool) {
  4233  	if n == nil || c.cursor.stop {
  4234  		return n, false
  4235  	}
  4236  	out = n
  4237  	if c.pre == nil || c.pre(n, parent) {
  4238  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  4239  		_Pattern, changedPattern := c.copyOnRewriteExpr(n.Pattern, n)
  4240  		_Position, changedPosition := c.copyOnRewriteExpr(n.Position, n)
  4241  		_Occurrence, changedOccurrence := c.copyOnRewriteExpr(n.Occurrence, n)
  4242  		_ReturnOption, changedReturnOption := c.copyOnRewriteExpr(n.ReturnOption, n)
  4243  		_MatchType, changedMatchType := c.copyOnRewriteExpr(n.MatchType, n)
  4244  		if changedExpr || changedPattern || changedPosition || changedOccurrence || changedReturnOption || changedMatchType {
  4245  			res := *n
  4246  			res.Expr, _ = _Expr.(Expr)
  4247  			res.Pattern, _ = _Pattern.(Expr)
  4248  			res.Position, _ = _Position.(Expr)
  4249  			res.Occurrence, _ = _Occurrence.(Expr)
  4250  			res.ReturnOption, _ = _ReturnOption.(Expr)
  4251  			res.MatchType, _ = _MatchType.(Expr)
  4252  			out = &res
  4253  			if c.cloned != nil {
  4254  				c.cloned(n, out)
  4255  			}
  4256  			changed = true
  4257  		}
  4258  	}
  4259  	if c.post != nil {
  4260  		out, changed = c.postVisit(out, parent, changed)
  4261  	}
  4262  	return
  4263  }
  4264  func (c *cow) copyOnRewriteRefOfRegexpLikeExpr(n *RegexpLikeExpr, parent SQLNode) (out SQLNode, changed bool) {
  4265  	if n == nil || c.cursor.stop {
  4266  		return n, false
  4267  	}
  4268  	out = n
  4269  	if c.pre == nil || c.pre(n, parent) {
  4270  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  4271  		_Pattern, changedPattern := c.copyOnRewriteExpr(n.Pattern, n)
  4272  		_MatchType, changedMatchType := c.copyOnRewriteExpr(n.MatchType, n)
  4273  		if changedExpr || changedPattern || changedMatchType {
  4274  			res := *n
  4275  			res.Expr, _ = _Expr.(Expr)
  4276  			res.Pattern, _ = _Pattern.(Expr)
  4277  			res.MatchType, _ = _MatchType.(Expr)
  4278  			out = &res
  4279  			if c.cloned != nil {
  4280  				c.cloned(n, out)
  4281  			}
  4282  			changed = true
  4283  		}
  4284  	}
  4285  	if c.post != nil {
  4286  		out, changed = c.postVisit(out, parent, changed)
  4287  	}
  4288  	return
  4289  }
  4290  func (c *cow) copyOnRewriteRefOfRegexpReplaceExpr(n *RegexpReplaceExpr, parent SQLNode) (out SQLNode, changed bool) {
  4291  	if n == nil || c.cursor.stop {
  4292  		return n, false
  4293  	}
  4294  	out = n
  4295  	if c.pre == nil || c.pre(n, parent) {
  4296  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  4297  		_Pattern, changedPattern := c.copyOnRewriteExpr(n.Pattern, n)
  4298  		_Repl, changedRepl := c.copyOnRewriteExpr(n.Repl, n)
  4299  		_Occurrence, changedOccurrence := c.copyOnRewriteExpr(n.Occurrence, n)
  4300  		_Position, changedPosition := c.copyOnRewriteExpr(n.Position, n)
  4301  		_MatchType, changedMatchType := c.copyOnRewriteExpr(n.MatchType, n)
  4302  		if changedExpr || changedPattern || changedRepl || changedOccurrence || changedPosition || changedMatchType {
  4303  			res := *n
  4304  			res.Expr, _ = _Expr.(Expr)
  4305  			res.Pattern, _ = _Pattern.(Expr)
  4306  			res.Repl, _ = _Repl.(Expr)
  4307  			res.Occurrence, _ = _Occurrence.(Expr)
  4308  			res.Position, _ = _Position.(Expr)
  4309  			res.MatchType, _ = _MatchType.(Expr)
  4310  			out = &res
  4311  			if c.cloned != nil {
  4312  				c.cloned(n, out)
  4313  			}
  4314  			changed = true
  4315  		}
  4316  	}
  4317  	if c.post != nil {
  4318  		out, changed = c.postVisit(out, parent, changed)
  4319  	}
  4320  	return
  4321  }
  4322  func (c *cow) copyOnRewriteRefOfRegexpSubstrExpr(n *RegexpSubstrExpr, parent SQLNode) (out SQLNode, changed bool) {
  4323  	if n == nil || c.cursor.stop {
  4324  		return n, false
  4325  	}
  4326  	out = n
  4327  	if c.pre == nil || c.pre(n, parent) {
  4328  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  4329  		_Pattern, changedPattern := c.copyOnRewriteExpr(n.Pattern, n)
  4330  		_Occurrence, changedOccurrence := c.copyOnRewriteExpr(n.Occurrence, n)
  4331  		_Position, changedPosition := c.copyOnRewriteExpr(n.Position, n)
  4332  		_MatchType, changedMatchType := c.copyOnRewriteExpr(n.MatchType, n)
  4333  		if changedExpr || changedPattern || changedOccurrence || changedPosition || changedMatchType {
  4334  			res := *n
  4335  			res.Expr, _ = _Expr.(Expr)
  4336  			res.Pattern, _ = _Pattern.(Expr)
  4337  			res.Occurrence, _ = _Occurrence.(Expr)
  4338  			res.Position, _ = _Position.(Expr)
  4339  			res.MatchType, _ = _MatchType.(Expr)
  4340  			out = &res
  4341  			if c.cloned != nil {
  4342  				c.cloned(n, out)
  4343  			}
  4344  			changed = true
  4345  		}
  4346  	}
  4347  	if c.post != nil {
  4348  		out, changed = c.postVisit(out, parent, changed)
  4349  	}
  4350  	return
  4351  }
  4352  func (c *cow) copyOnRewriteRefOfRelease(n *Release, parent SQLNode) (out SQLNode, changed bool) {
  4353  	if n == nil || c.cursor.stop {
  4354  		return n, false
  4355  	}
  4356  	out = n
  4357  	if c.pre == nil || c.pre(n, parent) {
  4358  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  4359  		if changedName {
  4360  			res := *n
  4361  			res.Name, _ = _Name.(IdentifierCI)
  4362  			out = &res
  4363  			if c.cloned != nil {
  4364  				c.cloned(n, out)
  4365  			}
  4366  			changed = true
  4367  		}
  4368  	}
  4369  	if c.post != nil {
  4370  		out, changed = c.postVisit(out, parent, changed)
  4371  	}
  4372  	return
  4373  }
  4374  func (c *cow) copyOnRewriteRefOfRenameColumn(n *RenameColumn, parent SQLNode) (out SQLNode, changed bool) {
  4375  	if n == nil || c.cursor.stop {
  4376  		return n, false
  4377  	}
  4378  	out = n
  4379  	if c.pre == nil || c.pre(n, parent) {
  4380  		_OldName, changedOldName := c.copyOnRewriteRefOfColName(n.OldName, n)
  4381  		_NewName, changedNewName := c.copyOnRewriteRefOfColName(n.NewName, n)
  4382  		if changedOldName || changedNewName {
  4383  			res := *n
  4384  			res.OldName, _ = _OldName.(*ColName)
  4385  			res.NewName, _ = _NewName.(*ColName)
  4386  			out = &res
  4387  			if c.cloned != nil {
  4388  				c.cloned(n, out)
  4389  			}
  4390  			changed = true
  4391  		}
  4392  	}
  4393  	if c.post != nil {
  4394  		out, changed = c.postVisit(out, parent, changed)
  4395  	}
  4396  	return
  4397  }
  4398  func (c *cow) copyOnRewriteRefOfRenameIndex(n *RenameIndex, parent SQLNode) (out SQLNode, changed bool) {
  4399  	if n == nil || c.cursor.stop {
  4400  		return n, false
  4401  	}
  4402  	out = n
  4403  	if c.pre == nil || c.pre(n, parent) {
  4404  		_OldName, changedOldName := c.copyOnRewriteIdentifierCI(n.OldName, n)
  4405  		_NewName, changedNewName := c.copyOnRewriteIdentifierCI(n.NewName, n)
  4406  		if changedOldName || changedNewName {
  4407  			res := *n
  4408  			res.OldName, _ = _OldName.(IdentifierCI)
  4409  			res.NewName, _ = _NewName.(IdentifierCI)
  4410  			out = &res
  4411  			if c.cloned != nil {
  4412  				c.cloned(n, out)
  4413  			}
  4414  			changed = true
  4415  		}
  4416  	}
  4417  	if c.post != nil {
  4418  		out, changed = c.postVisit(out, parent, changed)
  4419  	}
  4420  	return
  4421  }
  4422  func (c *cow) copyOnRewriteRefOfRenameTable(n *RenameTable, parent SQLNode) (out SQLNode, changed bool) {
  4423  	if n == nil || c.cursor.stop {
  4424  		return n, false
  4425  	}
  4426  	out = n
  4427  	if c.pre == nil || c.pre(n, parent) {
  4428  	}
  4429  	if c.post != nil {
  4430  		out, changed = c.postVisit(out, parent, changed)
  4431  	}
  4432  	return
  4433  }
  4434  func (c *cow) copyOnRewriteRefOfRenameTableName(n *RenameTableName, parent SQLNode) (out SQLNode, changed bool) {
  4435  	if n == nil || c.cursor.stop {
  4436  		return n, false
  4437  	}
  4438  	out = n
  4439  	if c.pre == nil || c.pre(n, parent) {
  4440  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  4441  		if changedTable {
  4442  			res := *n
  4443  			res.Table, _ = _Table.(TableName)
  4444  			out = &res
  4445  			if c.cloned != nil {
  4446  				c.cloned(n, out)
  4447  			}
  4448  			changed = true
  4449  		}
  4450  	}
  4451  	if c.post != nil {
  4452  		out, changed = c.postVisit(out, parent, changed)
  4453  	}
  4454  	return
  4455  }
  4456  func (c *cow) copyOnRewriteRefOfRevertMigration(n *RevertMigration, parent SQLNode) (out SQLNode, changed bool) {
  4457  	if n == nil || c.cursor.stop {
  4458  		return n, false
  4459  	}
  4460  	out = n
  4461  	if c.pre == nil || c.pre(n, parent) {
  4462  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  4463  		if changedComments {
  4464  			res := *n
  4465  			res.Comments, _ = _Comments.(*ParsedComments)
  4466  			out = &res
  4467  			if c.cloned != nil {
  4468  				c.cloned(n, out)
  4469  			}
  4470  			changed = true
  4471  		}
  4472  	}
  4473  	if c.post != nil {
  4474  		out, changed = c.postVisit(out, parent, changed)
  4475  	}
  4476  	return
  4477  }
  4478  func (c *cow) copyOnRewriteRefOfRollback(n *Rollback, parent SQLNode) (out SQLNode, changed bool) {
  4479  	if n == nil || c.cursor.stop {
  4480  		return n, false
  4481  	}
  4482  	out = n
  4483  	if c.pre == nil || c.pre(n, parent) {
  4484  	}
  4485  	if c.post != nil {
  4486  		out, changed = c.postVisit(out, parent, changed)
  4487  	}
  4488  	return
  4489  }
  4490  func (c *cow) copyOnRewriteRootNode(n RootNode, parent SQLNode) (out SQLNode, changed bool) {
  4491  	out = n
  4492  	if c.pre == nil || c.pre(n, parent) {
  4493  		_SQLNode, changedSQLNode := c.copyOnRewriteSQLNode(n.SQLNode, n)
  4494  		if changedSQLNode {
  4495  			res := n
  4496  			res.SQLNode, _ = _SQLNode.(SQLNode)
  4497  			out = &res
  4498  			if c.cloned != nil {
  4499  				c.cloned(n, out)
  4500  			}
  4501  			changed = true
  4502  		}
  4503  	}
  4504  	if c.post != nil {
  4505  		out, changed = c.postVisit(out, parent, changed)
  4506  	}
  4507  	return
  4508  }
  4509  func (c *cow) copyOnRewriteRefOfSRollback(n *SRollback, parent SQLNode) (out SQLNode, changed bool) {
  4510  	if n == nil || c.cursor.stop {
  4511  		return n, false
  4512  	}
  4513  	out = n
  4514  	if c.pre == nil || c.pre(n, parent) {
  4515  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  4516  		if changedName {
  4517  			res := *n
  4518  			res.Name, _ = _Name.(IdentifierCI)
  4519  			out = &res
  4520  			if c.cloned != nil {
  4521  				c.cloned(n, out)
  4522  			}
  4523  			changed = true
  4524  		}
  4525  	}
  4526  	if c.post != nil {
  4527  		out, changed = c.postVisit(out, parent, changed)
  4528  	}
  4529  	return
  4530  }
  4531  func (c *cow) copyOnRewriteRefOfSavepoint(n *Savepoint, parent SQLNode) (out SQLNode, changed bool) {
  4532  	if n == nil || c.cursor.stop {
  4533  		return n, false
  4534  	}
  4535  	out = n
  4536  	if c.pre == nil || c.pre(n, parent) {
  4537  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  4538  		if changedName {
  4539  			res := *n
  4540  			res.Name, _ = _Name.(IdentifierCI)
  4541  			out = &res
  4542  			if c.cloned != nil {
  4543  				c.cloned(n, out)
  4544  			}
  4545  			changed = true
  4546  		}
  4547  	}
  4548  	if c.post != nil {
  4549  		out, changed = c.postVisit(out, parent, changed)
  4550  	}
  4551  	return
  4552  }
  4553  func (c *cow) copyOnRewriteRefOfSelect(n *Select, parent SQLNode) (out SQLNode, changed bool) {
  4554  	if n == nil || c.cursor.stop {
  4555  		return n, false
  4556  	}
  4557  	out = n
  4558  	if c.pre == nil || c.pre(n, parent) {
  4559  		var changedFrom bool
  4560  		_From := make([]TableExpr, len(n.From))
  4561  		for x, el := range n.From {
  4562  			this, changed := c.copyOnRewriteTableExpr(el, n)
  4563  			_From[x] = this.(TableExpr)
  4564  			if changed {
  4565  				changedFrom = true
  4566  			}
  4567  		}
  4568  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  4569  		_SelectExprs, changedSelectExprs := c.copyOnRewriteSelectExprs(n.SelectExprs, n)
  4570  		_Where, changedWhere := c.copyOnRewriteRefOfWhere(n.Where, n)
  4571  		_With, changedWith := c.copyOnRewriteRefOfWith(n.With, n)
  4572  		_GroupBy, changedGroupBy := c.copyOnRewriteGroupBy(n.GroupBy, n)
  4573  		_Having, changedHaving := c.copyOnRewriteRefOfWhere(n.Having, n)
  4574  		_Windows, changedWindows := c.copyOnRewriteNamedWindows(n.Windows, n)
  4575  		_OrderBy, changedOrderBy := c.copyOnRewriteOrderBy(n.OrderBy, n)
  4576  		_Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n)
  4577  		_Into, changedInto := c.copyOnRewriteRefOfSelectInto(n.Into, n)
  4578  		if changedFrom || changedComments || changedSelectExprs || changedWhere || changedWith || changedGroupBy || changedHaving || changedWindows || changedOrderBy || changedLimit || changedInto {
  4579  			res := *n
  4580  			res.From = _From
  4581  			res.Comments, _ = _Comments.(*ParsedComments)
  4582  			res.SelectExprs, _ = _SelectExprs.(SelectExprs)
  4583  			res.Where, _ = _Where.(*Where)
  4584  			res.With, _ = _With.(*With)
  4585  			res.GroupBy, _ = _GroupBy.(GroupBy)
  4586  			res.Having, _ = _Having.(*Where)
  4587  			res.Windows, _ = _Windows.(NamedWindows)
  4588  			res.OrderBy, _ = _OrderBy.(OrderBy)
  4589  			res.Limit, _ = _Limit.(*Limit)
  4590  			res.Into, _ = _Into.(*SelectInto)
  4591  			out = &res
  4592  			if c.cloned != nil {
  4593  				c.cloned(n, out)
  4594  			}
  4595  			changed = true
  4596  		}
  4597  	}
  4598  	if c.post != nil {
  4599  		out, changed = c.postVisit(out, parent, changed)
  4600  	}
  4601  	return
  4602  }
  4603  func (c *cow) copyOnRewriteSelectExprs(n SelectExprs, parent SQLNode) (out SQLNode, changed bool) {
  4604  	if n == nil || c.cursor.stop {
  4605  		return n, false
  4606  	}
  4607  	out = n
  4608  	if c.pre == nil || c.pre(n, parent) {
  4609  		res := make(SelectExprs, len(n))
  4610  		for x, el := range n {
  4611  			this, change := c.copyOnRewriteSelectExpr(el, n)
  4612  			res[x] = this.(SelectExpr)
  4613  			if change {
  4614  				changed = true
  4615  			}
  4616  		}
  4617  		if changed {
  4618  			out = res
  4619  		}
  4620  	}
  4621  	if c.post != nil {
  4622  		out, changed = c.postVisit(out, parent, changed)
  4623  	}
  4624  	return
  4625  }
  4626  func (c *cow) copyOnRewriteRefOfSelectInto(n *SelectInto, parent SQLNode) (out SQLNode, changed bool) {
  4627  	if n == nil || c.cursor.stop {
  4628  		return n, false
  4629  	}
  4630  	out = n
  4631  	if c.pre == nil || c.pre(n, parent) {
  4632  	}
  4633  	if c.post != nil {
  4634  		out, changed = c.postVisit(out, parent, changed)
  4635  	}
  4636  	return
  4637  }
  4638  func (c *cow) copyOnRewriteRefOfSet(n *Set, parent SQLNode) (out SQLNode, changed bool) {
  4639  	if n == nil || c.cursor.stop {
  4640  		return n, false
  4641  	}
  4642  	out = n
  4643  	if c.pre == nil || c.pre(n, parent) {
  4644  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  4645  		_Exprs, changedExprs := c.copyOnRewriteSetExprs(n.Exprs, n)
  4646  		if changedComments || changedExprs {
  4647  			res := *n
  4648  			res.Comments, _ = _Comments.(*ParsedComments)
  4649  			res.Exprs, _ = _Exprs.(SetExprs)
  4650  			out = &res
  4651  			if c.cloned != nil {
  4652  				c.cloned(n, out)
  4653  			}
  4654  			changed = true
  4655  		}
  4656  	}
  4657  	if c.post != nil {
  4658  		out, changed = c.postVisit(out, parent, changed)
  4659  	}
  4660  	return
  4661  }
  4662  func (c *cow) copyOnRewriteRefOfSetExpr(n *SetExpr, parent SQLNode) (out SQLNode, changed bool) {
  4663  	if n == nil || c.cursor.stop {
  4664  		return n, false
  4665  	}
  4666  	out = n
  4667  	if c.pre == nil || c.pre(n, parent) {
  4668  		_Var, changedVar := c.copyOnRewriteRefOfVariable(n.Var, n)
  4669  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  4670  		if changedVar || changedExpr {
  4671  			res := *n
  4672  			res.Var, _ = _Var.(*Variable)
  4673  			res.Expr, _ = _Expr.(Expr)
  4674  			out = &res
  4675  			if c.cloned != nil {
  4676  				c.cloned(n, out)
  4677  			}
  4678  			changed = true
  4679  		}
  4680  	}
  4681  	if c.post != nil {
  4682  		out, changed = c.postVisit(out, parent, changed)
  4683  	}
  4684  	return
  4685  }
  4686  func (c *cow) copyOnRewriteSetExprs(n SetExprs, parent SQLNode) (out SQLNode, changed bool) {
  4687  	if n == nil || c.cursor.stop {
  4688  		return n, false
  4689  	}
  4690  	out = n
  4691  	if c.pre == nil || c.pre(n, parent) {
  4692  		res := make(SetExprs, len(n))
  4693  		for x, el := range n {
  4694  			this, change := c.copyOnRewriteRefOfSetExpr(el, n)
  4695  			res[x] = this.(*SetExpr)
  4696  			if change {
  4697  				changed = true
  4698  			}
  4699  		}
  4700  		if changed {
  4701  			out = res
  4702  		}
  4703  	}
  4704  	if c.post != nil {
  4705  		out, changed = c.postVisit(out, parent, changed)
  4706  	}
  4707  	return
  4708  }
  4709  func (c *cow) copyOnRewriteRefOfShow(n *Show, parent SQLNode) (out SQLNode, changed bool) {
  4710  	if n == nil || c.cursor.stop {
  4711  		return n, false
  4712  	}
  4713  	out = n
  4714  	if c.pre == nil || c.pre(n, parent) {
  4715  		_Internal, changedInternal := c.copyOnRewriteShowInternal(n.Internal, n)
  4716  		if changedInternal {
  4717  			res := *n
  4718  			res.Internal, _ = _Internal.(ShowInternal)
  4719  			out = &res
  4720  			if c.cloned != nil {
  4721  				c.cloned(n, out)
  4722  			}
  4723  			changed = true
  4724  		}
  4725  	}
  4726  	if c.post != nil {
  4727  		out, changed = c.postVisit(out, parent, changed)
  4728  	}
  4729  	return
  4730  }
  4731  func (c *cow) copyOnRewriteRefOfShowBasic(n *ShowBasic, parent SQLNode) (out SQLNode, changed bool) {
  4732  	if n == nil || c.cursor.stop {
  4733  		return n, false
  4734  	}
  4735  	out = n
  4736  	if c.pre == nil || c.pre(n, parent) {
  4737  		_Tbl, changedTbl := c.copyOnRewriteTableName(n.Tbl, n)
  4738  		_DbName, changedDbName := c.copyOnRewriteIdentifierCS(n.DbName, n)
  4739  		_Filter, changedFilter := c.copyOnRewriteRefOfShowFilter(n.Filter, n)
  4740  		if changedTbl || changedDbName || changedFilter {
  4741  			res := *n
  4742  			res.Tbl, _ = _Tbl.(TableName)
  4743  			res.DbName, _ = _DbName.(IdentifierCS)
  4744  			res.Filter, _ = _Filter.(*ShowFilter)
  4745  			out = &res
  4746  			if c.cloned != nil {
  4747  				c.cloned(n, out)
  4748  			}
  4749  			changed = true
  4750  		}
  4751  	}
  4752  	if c.post != nil {
  4753  		out, changed = c.postVisit(out, parent, changed)
  4754  	}
  4755  	return
  4756  }
  4757  func (c *cow) copyOnRewriteRefOfShowCreate(n *ShowCreate, parent SQLNode) (out SQLNode, changed bool) {
  4758  	if n == nil || c.cursor.stop {
  4759  		return n, false
  4760  	}
  4761  	out = n
  4762  	if c.pre == nil || c.pre(n, parent) {
  4763  		_Op, changedOp := c.copyOnRewriteTableName(n.Op, n)
  4764  		if changedOp {
  4765  			res := *n
  4766  			res.Op, _ = _Op.(TableName)
  4767  			out = &res
  4768  			if c.cloned != nil {
  4769  				c.cloned(n, out)
  4770  			}
  4771  			changed = true
  4772  		}
  4773  	}
  4774  	if c.post != nil {
  4775  		out, changed = c.postVisit(out, parent, changed)
  4776  	}
  4777  	return
  4778  }
  4779  func (c *cow) copyOnRewriteRefOfShowFilter(n *ShowFilter, parent SQLNode) (out SQLNode, changed bool) {
  4780  	if n == nil || c.cursor.stop {
  4781  		return n, false
  4782  	}
  4783  	out = n
  4784  	if c.pre == nil || c.pre(n, parent) {
  4785  		_Filter, changedFilter := c.copyOnRewriteExpr(n.Filter, n)
  4786  		if changedFilter {
  4787  			res := *n
  4788  			res.Filter, _ = _Filter.(Expr)
  4789  			out = &res
  4790  			if c.cloned != nil {
  4791  				c.cloned(n, out)
  4792  			}
  4793  			changed = true
  4794  		}
  4795  	}
  4796  	if c.post != nil {
  4797  		out, changed = c.postVisit(out, parent, changed)
  4798  	}
  4799  	return
  4800  }
  4801  func (c *cow) copyOnRewriteRefOfShowMigrationLogs(n *ShowMigrationLogs, parent SQLNode) (out SQLNode, changed bool) {
  4802  	if n == nil || c.cursor.stop {
  4803  		return n, false
  4804  	}
  4805  	out = n
  4806  	if c.pre == nil || c.pre(n, parent) {
  4807  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  4808  		if changedComments {
  4809  			res := *n
  4810  			res.Comments, _ = _Comments.(*ParsedComments)
  4811  			out = &res
  4812  			if c.cloned != nil {
  4813  				c.cloned(n, out)
  4814  			}
  4815  			changed = true
  4816  		}
  4817  	}
  4818  	if c.post != nil {
  4819  		out, changed = c.postVisit(out, parent, changed)
  4820  	}
  4821  	return
  4822  }
  4823  func (c *cow) copyOnRewriteRefOfShowOther(n *ShowOther, parent SQLNode) (out SQLNode, changed bool) {
  4824  	if n == nil || c.cursor.stop {
  4825  		return n, false
  4826  	}
  4827  	out = n
  4828  	if c.pre == nil || c.pre(n, parent) {
  4829  	}
  4830  	if c.post != nil {
  4831  		out, changed = c.postVisit(out, parent, changed)
  4832  	}
  4833  	return
  4834  }
  4835  func (c *cow) copyOnRewriteRefOfShowThrottledApps(n *ShowThrottledApps, parent SQLNode) (out SQLNode, changed bool) {
  4836  	if n == nil || c.cursor.stop {
  4837  		return n, false
  4838  	}
  4839  	out = n
  4840  	if c.pre == nil || c.pre(n, parent) {
  4841  	}
  4842  	if c.post != nil {
  4843  		out, changed = c.postVisit(out, parent, changed)
  4844  	}
  4845  	return
  4846  }
  4847  func (c *cow) copyOnRewriteRefOfShowThrottlerStatus(n *ShowThrottlerStatus, parent SQLNode) (out SQLNode, changed bool) {
  4848  	if n == nil || c.cursor.stop {
  4849  		return n, false
  4850  	}
  4851  	out = n
  4852  	if c.pre == nil || c.pre(n, parent) {
  4853  	}
  4854  	if c.post != nil {
  4855  		out, changed = c.postVisit(out, parent, changed)
  4856  	}
  4857  	return
  4858  }
  4859  func (c *cow) copyOnRewriteRefOfStarExpr(n *StarExpr, parent SQLNode) (out SQLNode, changed bool) {
  4860  	if n == nil || c.cursor.stop {
  4861  		return n, false
  4862  	}
  4863  	out = n
  4864  	if c.pre == nil || c.pre(n, parent) {
  4865  		_TableName, changedTableName := c.copyOnRewriteTableName(n.TableName, n)
  4866  		if changedTableName {
  4867  			res := *n
  4868  			res.TableName, _ = _TableName.(TableName)
  4869  			out = &res
  4870  			if c.cloned != nil {
  4871  				c.cloned(n, out)
  4872  			}
  4873  			changed = true
  4874  		}
  4875  	}
  4876  	if c.post != nil {
  4877  		out, changed = c.postVisit(out, parent, changed)
  4878  	}
  4879  	return
  4880  }
  4881  func (c *cow) copyOnRewriteRefOfStd(n *Std, parent SQLNode) (out SQLNode, changed bool) {
  4882  	if n == nil || c.cursor.stop {
  4883  		return n, false
  4884  	}
  4885  	out = n
  4886  	if c.pre == nil || c.pre(n, parent) {
  4887  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  4888  		if changedArg {
  4889  			res := *n
  4890  			res.Arg, _ = _Arg.(Expr)
  4891  			out = &res
  4892  			if c.cloned != nil {
  4893  				c.cloned(n, out)
  4894  			}
  4895  			changed = true
  4896  		}
  4897  	}
  4898  	if c.post != nil {
  4899  		out, changed = c.postVisit(out, parent, changed)
  4900  	}
  4901  	return
  4902  }
  4903  func (c *cow) copyOnRewriteRefOfStdDev(n *StdDev, parent SQLNode) (out SQLNode, changed bool) {
  4904  	if n == nil || c.cursor.stop {
  4905  		return n, false
  4906  	}
  4907  	out = n
  4908  	if c.pre == nil || c.pre(n, parent) {
  4909  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  4910  		if changedArg {
  4911  			res := *n
  4912  			res.Arg, _ = _Arg.(Expr)
  4913  			out = &res
  4914  			if c.cloned != nil {
  4915  				c.cloned(n, out)
  4916  			}
  4917  			changed = true
  4918  		}
  4919  	}
  4920  	if c.post != nil {
  4921  		out, changed = c.postVisit(out, parent, changed)
  4922  	}
  4923  	return
  4924  }
  4925  func (c *cow) copyOnRewriteRefOfStdPop(n *StdPop, parent SQLNode) (out SQLNode, changed bool) {
  4926  	if n == nil || c.cursor.stop {
  4927  		return n, false
  4928  	}
  4929  	out = n
  4930  	if c.pre == nil || c.pre(n, parent) {
  4931  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  4932  		if changedArg {
  4933  			res := *n
  4934  			res.Arg, _ = _Arg.(Expr)
  4935  			out = &res
  4936  			if c.cloned != nil {
  4937  				c.cloned(n, out)
  4938  			}
  4939  			changed = true
  4940  		}
  4941  	}
  4942  	if c.post != nil {
  4943  		out, changed = c.postVisit(out, parent, changed)
  4944  	}
  4945  	return
  4946  }
  4947  func (c *cow) copyOnRewriteRefOfStdSamp(n *StdSamp, parent SQLNode) (out SQLNode, changed bool) {
  4948  	if n == nil || c.cursor.stop {
  4949  		return n, false
  4950  	}
  4951  	out = n
  4952  	if c.pre == nil || c.pre(n, parent) {
  4953  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  4954  		if changedArg {
  4955  			res := *n
  4956  			res.Arg, _ = _Arg.(Expr)
  4957  			out = &res
  4958  			if c.cloned != nil {
  4959  				c.cloned(n, out)
  4960  			}
  4961  			changed = true
  4962  		}
  4963  	}
  4964  	if c.post != nil {
  4965  		out, changed = c.postVisit(out, parent, changed)
  4966  	}
  4967  	return
  4968  }
  4969  func (c *cow) copyOnRewriteRefOfStream(n *Stream, parent SQLNode) (out SQLNode, changed bool) {
  4970  	if n == nil || c.cursor.stop {
  4971  		return n, false
  4972  	}
  4973  	out = n
  4974  	if c.pre == nil || c.pre(n, parent) {
  4975  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  4976  		_SelectExpr, changedSelectExpr := c.copyOnRewriteSelectExpr(n.SelectExpr, n)
  4977  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  4978  		if changedComments || changedSelectExpr || changedTable {
  4979  			res := *n
  4980  			res.Comments, _ = _Comments.(*ParsedComments)
  4981  			res.SelectExpr, _ = _SelectExpr.(SelectExpr)
  4982  			res.Table, _ = _Table.(TableName)
  4983  			out = &res
  4984  			if c.cloned != nil {
  4985  				c.cloned(n, out)
  4986  			}
  4987  			changed = true
  4988  		}
  4989  	}
  4990  	if c.post != nil {
  4991  		out, changed = c.postVisit(out, parent, changed)
  4992  	}
  4993  	return
  4994  }
  4995  func (c *cow) copyOnRewriteRefOfSubPartition(n *SubPartition, parent SQLNode) (out SQLNode, changed bool) {
  4996  	if n == nil || c.cursor.stop {
  4997  		return n, false
  4998  	}
  4999  	out = n
  5000  	if c.pre == nil || c.pre(n, parent) {
  5001  		_ColList, changedColList := c.copyOnRewriteColumns(n.ColList, n)
  5002  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  5003  		if changedColList || changedExpr {
  5004  			res := *n
  5005  			res.ColList, _ = _ColList.(Columns)
  5006  			res.Expr, _ = _Expr.(Expr)
  5007  			out = &res
  5008  			if c.cloned != nil {
  5009  				c.cloned(n, out)
  5010  			}
  5011  			changed = true
  5012  		}
  5013  	}
  5014  	if c.post != nil {
  5015  		out, changed = c.postVisit(out, parent, changed)
  5016  	}
  5017  	return
  5018  }
  5019  func (c *cow) copyOnRewriteRefOfSubPartitionDefinition(n *SubPartitionDefinition, parent SQLNode) (out SQLNode, changed bool) {
  5020  	if n == nil || c.cursor.stop {
  5021  		return n, false
  5022  	}
  5023  	out = n
  5024  	if c.pre == nil || c.pre(n, parent) {
  5025  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  5026  		_Options, changedOptions := c.copyOnRewriteRefOfSubPartitionDefinitionOptions(n.Options, n)
  5027  		if changedName || changedOptions {
  5028  			res := *n
  5029  			res.Name, _ = _Name.(IdentifierCI)
  5030  			res.Options, _ = _Options.(*SubPartitionDefinitionOptions)
  5031  			out = &res
  5032  			if c.cloned != nil {
  5033  				c.cloned(n, out)
  5034  			}
  5035  			changed = true
  5036  		}
  5037  	}
  5038  	if c.post != nil {
  5039  		out, changed = c.postVisit(out, parent, changed)
  5040  	}
  5041  	return
  5042  }
  5043  func (c *cow) copyOnRewriteRefOfSubPartitionDefinitionOptions(n *SubPartitionDefinitionOptions, parent SQLNode) (out SQLNode, changed bool) {
  5044  	if n == nil || c.cursor.stop {
  5045  		return n, false
  5046  	}
  5047  	out = n
  5048  	if c.pre == nil || c.pre(n, parent) {
  5049  		_Comment, changedComment := c.copyOnRewriteRefOfLiteral(n.Comment, n)
  5050  		_Engine, changedEngine := c.copyOnRewriteRefOfPartitionEngine(n.Engine, n)
  5051  		_DataDirectory, changedDataDirectory := c.copyOnRewriteRefOfLiteral(n.DataDirectory, n)
  5052  		_IndexDirectory, changedIndexDirectory := c.copyOnRewriteRefOfLiteral(n.IndexDirectory, n)
  5053  		if changedComment || changedEngine || changedDataDirectory || changedIndexDirectory {
  5054  			res := *n
  5055  			res.Comment, _ = _Comment.(*Literal)
  5056  			res.Engine, _ = _Engine.(*PartitionEngine)
  5057  			res.DataDirectory, _ = _DataDirectory.(*Literal)
  5058  			res.IndexDirectory, _ = _IndexDirectory.(*Literal)
  5059  			out = &res
  5060  			if c.cloned != nil {
  5061  				c.cloned(n, out)
  5062  			}
  5063  			changed = true
  5064  		}
  5065  	}
  5066  	if c.post != nil {
  5067  		out, changed = c.postVisit(out, parent, changed)
  5068  	}
  5069  	return
  5070  }
  5071  func (c *cow) copyOnRewriteSubPartitionDefinitions(n SubPartitionDefinitions, parent SQLNode) (out SQLNode, changed bool) {
  5072  	if n == nil || c.cursor.stop {
  5073  		return n, false
  5074  	}
  5075  	out = n
  5076  	if c.pre == nil || c.pre(n, parent) {
  5077  		res := make(SubPartitionDefinitions, len(n))
  5078  		for x, el := range n {
  5079  			this, change := c.copyOnRewriteRefOfSubPartitionDefinition(el, n)
  5080  			res[x] = this.(*SubPartitionDefinition)
  5081  			if change {
  5082  				changed = true
  5083  			}
  5084  		}
  5085  		if changed {
  5086  			out = res
  5087  		}
  5088  	}
  5089  	if c.post != nil {
  5090  		out, changed = c.postVisit(out, parent, changed)
  5091  	}
  5092  	return
  5093  }
  5094  func (c *cow) copyOnRewriteRefOfSubquery(n *Subquery, parent SQLNode) (out SQLNode, changed bool) {
  5095  	if n == nil || c.cursor.stop {
  5096  		return n, false
  5097  	}
  5098  	out = n
  5099  	if c.pre == nil || c.pre(n, parent) {
  5100  		_Select, changedSelect := c.copyOnRewriteSelectStatement(n.Select, n)
  5101  		if changedSelect {
  5102  			res := *n
  5103  			res.Select, _ = _Select.(SelectStatement)
  5104  			out = &res
  5105  			if c.cloned != nil {
  5106  				c.cloned(n, out)
  5107  			}
  5108  			changed = true
  5109  		}
  5110  	}
  5111  	if c.post != nil {
  5112  		out, changed = c.postVisit(out, parent, changed)
  5113  	}
  5114  	return
  5115  }
  5116  func (c *cow) copyOnRewriteRefOfSubstrExpr(n *SubstrExpr, parent SQLNode) (out SQLNode, changed bool) {
  5117  	if n == nil || c.cursor.stop {
  5118  		return n, false
  5119  	}
  5120  	out = n
  5121  	if c.pre == nil || c.pre(n, parent) {
  5122  		_Name, changedName := c.copyOnRewriteExpr(n.Name, n)
  5123  		_From, changedFrom := c.copyOnRewriteExpr(n.From, n)
  5124  		_To, changedTo := c.copyOnRewriteExpr(n.To, n)
  5125  		if changedName || changedFrom || changedTo {
  5126  			res := *n
  5127  			res.Name, _ = _Name.(Expr)
  5128  			res.From, _ = _From.(Expr)
  5129  			res.To, _ = _To.(Expr)
  5130  			out = &res
  5131  			if c.cloned != nil {
  5132  				c.cloned(n, out)
  5133  			}
  5134  			changed = true
  5135  		}
  5136  	}
  5137  	if c.post != nil {
  5138  		out, changed = c.postVisit(out, parent, changed)
  5139  	}
  5140  	return
  5141  }
  5142  func (c *cow) copyOnRewriteRefOfSum(n *Sum, parent SQLNode) (out SQLNode, changed bool) {
  5143  	if n == nil || c.cursor.stop {
  5144  		return n, false
  5145  	}
  5146  	out = n
  5147  	if c.pre == nil || c.pre(n, parent) {
  5148  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  5149  		if changedArg {
  5150  			res := *n
  5151  			res.Arg, _ = _Arg.(Expr)
  5152  			out = &res
  5153  			if c.cloned != nil {
  5154  				c.cloned(n, out)
  5155  			}
  5156  			changed = true
  5157  		}
  5158  	}
  5159  	if c.post != nil {
  5160  		out, changed = c.postVisit(out, parent, changed)
  5161  	}
  5162  	return
  5163  }
  5164  func (c *cow) copyOnRewriteTableExprs(n TableExprs, parent SQLNode) (out SQLNode, changed bool) {
  5165  	if n == nil || c.cursor.stop {
  5166  		return n, false
  5167  	}
  5168  	out = n
  5169  	if c.pre == nil || c.pre(n, parent) {
  5170  		res := make(TableExprs, len(n))
  5171  		for x, el := range n {
  5172  			this, change := c.copyOnRewriteTableExpr(el, n)
  5173  			res[x] = this.(TableExpr)
  5174  			if change {
  5175  				changed = true
  5176  			}
  5177  		}
  5178  		if changed {
  5179  			out = res
  5180  		}
  5181  	}
  5182  	if c.post != nil {
  5183  		out, changed = c.postVisit(out, parent, changed)
  5184  	}
  5185  	return
  5186  }
  5187  func (c *cow) copyOnRewriteTableName(n TableName, parent SQLNode) (out SQLNode, changed bool) {
  5188  	out = n
  5189  	if c.pre == nil || c.pre(n, parent) {
  5190  		_Name, changedName := c.copyOnRewriteIdentifierCS(n.Name, n)
  5191  		_Qualifier, changedQualifier := c.copyOnRewriteIdentifierCS(n.Qualifier, n)
  5192  		if changedName || changedQualifier {
  5193  			res := n
  5194  			res.Name, _ = _Name.(IdentifierCS)
  5195  			res.Qualifier, _ = _Qualifier.(IdentifierCS)
  5196  			out = &res
  5197  			if c.cloned != nil {
  5198  				c.cloned(n, out)
  5199  			}
  5200  			changed = true
  5201  		}
  5202  	}
  5203  	if c.post != nil {
  5204  		out, changed = c.postVisit(out, parent, changed)
  5205  	}
  5206  	return
  5207  }
  5208  func (c *cow) copyOnRewriteTableNames(n TableNames, parent SQLNode) (out SQLNode, changed bool) {
  5209  	if n == nil || c.cursor.stop {
  5210  		return n, false
  5211  	}
  5212  	out = n
  5213  	if c.pre == nil || c.pre(n, parent) {
  5214  		res := make(TableNames, len(n))
  5215  		for x, el := range n {
  5216  			this, change := c.copyOnRewriteTableName(el, n)
  5217  			res[x] = this.(TableName)
  5218  			if change {
  5219  				changed = true
  5220  			}
  5221  		}
  5222  		if changed {
  5223  			out = res
  5224  		}
  5225  	}
  5226  	if c.post != nil {
  5227  		out, changed = c.postVisit(out, parent, changed)
  5228  	}
  5229  	return
  5230  }
  5231  func (c *cow) copyOnRewriteTableOptions(n TableOptions, parent SQLNode) (out SQLNode, changed bool) {
  5232  	if n == nil || c.cursor.stop {
  5233  		return n, false
  5234  	}
  5235  	out = n
  5236  	if c.pre != nil {
  5237  		c.pre(n, parent)
  5238  	}
  5239  	if c.post != nil {
  5240  		out, changed = c.postVisit(out, parent, changed)
  5241  	}
  5242  	return
  5243  }
  5244  func (c *cow) copyOnRewriteRefOfTableSpec(n *TableSpec, parent SQLNode) (out SQLNode, changed bool) {
  5245  	if n == nil || c.cursor.stop {
  5246  		return n, false
  5247  	}
  5248  	out = n
  5249  	if c.pre == nil || c.pre(n, parent) {
  5250  		var changedColumns bool
  5251  		_Columns := make([]*ColumnDefinition, len(n.Columns))
  5252  		for x, el := range n.Columns {
  5253  			this, changed := c.copyOnRewriteRefOfColumnDefinition(el, n)
  5254  			_Columns[x] = this.(*ColumnDefinition)
  5255  			if changed {
  5256  				changedColumns = true
  5257  			}
  5258  		}
  5259  		var changedIndexes bool
  5260  		_Indexes := make([]*IndexDefinition, len(n.Indexes))
  5261  		for x, el := range n.Indexes {
  5262  			this, changed := c.copyOnRewriteRefOfIndexDefinition(el, n)
  5263  			_Indexes[x] = this.(*IndexDefinition)
  5264  			if changed {
  5265  				changedIndexes = true
  5266  			}
  5267  		}
  5268  		var changedConstraints bool
  5269  		_Constraints := make([]*ConstraintDefinition, len(n.Constraints))
  5270  		for x, el := range n.Constraints {
  5271  			this, changed := c.copyOnRewriteRefOfConstraintDefinition(el, n)
  5272  			_Constraints[x] = this.(*ConstraintDefinition)
  5273  			if changed {
  5274  				changedConstraints = true
  5275  			}
  5276  		}
  5277  		_Options, changedOptions := c.copyOnRewriteTableOptions(n.Options, n)
  5278  		_PartitionOption, changedPartitionOption := c.copyOnRewriteRefOfPartitionOption(n.PartitionOption, n)
  5279  		if changedColumns || changedIndexes || changedConstraints || changedOptions || changedPartitionOption {
  5280  			res := *n
  5281  			res.Columns = _Columns
  5282  			res.Indexes = _Indexes
  5283  			res.Constraints = _Constraints
  5284  			res.Options, _ = _Options.(TableOptions)
  5285  			res.PartitionOption, _ = _PartitionOption.(*PartitionOption)
  5286  			out = &res
  5287  			if c.cloned != nil {
  5288  				c.cloned(n, out)
  5289  			}
  5290  			changed = true
  5291  		}
  5292  	}
  5293  	if c.post != nil {
  5294  		out, changed = c.postVisit(out, parent, changed)
  5295  	}
  5296  	return
  5297  }
  5298  func (c *cow) copyOnRewriteRefOfTablespaceOperation(n *TablespaceOperation, parent SQLNode) (out SQLNode, changed bool) {
  5299  	if n == nil || c.cursor.stop {
  5300  		return n, false
  5301  	}
  5302  	out = n
  5303  	if c.pre == nil || c.pre(n, parent) {
  5304  	}
  5305  	if c.post != nil {
  5306  		out, changed = c.postVisit(out, parent, changed)
  5307  	}
  5308  	return
  5309  }
  5310  func (c *cow) copyOnRewriteRefOfTimestampFuncExpr(n *TimestampFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  5311  	if n == nil || c.cursor.stop {
  5312  		return n, false
  5313  	}
  5314  	out = n
  5315  	if c.pre == nil || c.pre(n, parent) {
  5316  		_Expr1, changedExpr1 := c.copyOnRewriteExpr(n.Expr1, n)
  5317  		_Expr2, changedExpr2 := c.copyOnRewriteExpr(n.Expr2, n)
  5318  		if changedExpr1 || changedExpr2 {
  5319  			res := *n
  5320  			res.Expr1, _ = _Expr1.(Expr)
  5321  			res.Expr2, _ = _Expr2.(Expr)
  5322  			out = &res
  5323  			if c.cloned != nil {
  5324  				c.cloned(n, out)
  5325  			}
  5326  			changed = true
  5327  		}
  5328  	}
  5329  	if c.post != nil {
  5330  		out, changed = c.postVisit(out, parent, changed)
  5331  	}
  5332  	return
  5333  }
  5334  func (c *cow) copyOnRewriteRefOfTrimFuncExpr(n *TrimFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  5335  	if n == nil || c.cursor.stop {
  5336  		return n, false
  5337  	}
  5338  	out = n
  5339  	if c.pre == nil || c.pre(n, parent) {
  5340  		_TrimArg, changedTrimArg := c.copyOnRewriteExpr(n.TrimArg, n)
  5341  		_StringArg, changedStringArg := c.copyOnRewriteExpr(n.StringArg, n)
  5342  		if changedTrimArg || changedStringArg {
  5343  			res := *n
  5344  			res.TrimArg, _ = _TrimArg.(Expr)
  5345  			res.StringArg, _ = _StringArg.(Expr)
  5346  			out = &res
  5347  			if c.cloned != nil {
  5348  				c.cloned(n, out)
  5349  			}
  5350  			changed = true
  5351  		}
  5352  	}
  5353  	if c.post != nil {
  5354  		out, changed = c.postVisit(out, parent, changed)
  5355  	}
  5356  	return
  5357  }
  5358  func (c *cow) copyOnRewriteRefOfTruncateTable(n *TruncateTable, parent SQLNode) (out SQLNode, changed bool) {
  5359  	if n == nil || c.cursor.stop {
  5360  		return n, false
  5361  	}
  5362  	out = n
  5363  	if c.pre == nil || c.pre(n, parent) {
  5364  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  5365  		if changedTable {
  5366  			res := *n
  5367  			res.Table, _ = _Table.(TableName)
  5368  			out = &res
  5369  			if c.cloned != nil {
  5370  				c.cloned(n, out)
  5371  			}
  5372  			changed = true
  5373  		}
  5374  	}
  5375  	if c.post != nil {
  5376  		out, changed = c.postVisit(out, parent, changed)
  5377  	}
  5378  	return
  5379  }
  5380  func (c *cow) copyOnRewriteRefOfUnaryExpr(n *UnaryExpr, parent SQLNode) (out SQLNode, changed bool) {
  5381  	if n == nil || c.cursor.stop {
  5382  		return n, false
  5383  	}
  5384  	out = n
  5385  	if c.pre == nil || c.pre(n, parent) {
  5386  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  5387  		if changedExpr {
  5388  			res := *n
  5389  			res.Expr, _ = _Expr.(Expr)
  5390  			out = &res
  5391  			if c.cloned != nil {
  5392  				c.cloned(n, out)
  5393  			}
  5394  			changed = true
  5395  		}
  5396  	}
  5397  	if c.post != nil {
  5398  		out, changed = c.postVisit(out, parent, changed)
  5399  	}
  5400  	return
  5401  }
  5402  func (c *cow) copyOnRewriteRefOfUnion(n *Union, parent SQLNode) (out SQLNode, changed bool) {
  5403  	if n == nil || c.cursor.stop {
  5404  		return n, false
  5405  	}
  5406  	out = n
  5407  	if c.pre == nil || c.pre(n, parent) {
  5408  		_Left, changedLeft := c.copyOnRewriteSelectStatement(n.Left, n)
  5409  		_Right, changedRight := c.copyOnRewriteSelectStatement(n.Right, n)
  5410  		_OrderBy, changedOrderBy := c.copyOnRewriteOrderBy(n.OrderBy, n)
  5411  		_With, changedWith := c.copyOnRewriteRefOfWith(n.With, n)
  5412  		_Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n)
  5413  		_Into, changedInto := c.copyOnRewriteRefOfSelectInto(n.Into, n)
  5414  		if changedLeft || changedRight || changedOrderBy || changedWith || changedLimit || changedInto {
  5415  			res := *n
  5416  			res.Left, _ = _Left.(SelectStatement)
  5417  			res.Right, _ = _Right.(SelectStatement)
  5418  			res.OrderBy, _ = _OrderBy.(OrderBy)
  5419  			res.With, _ = _With.(*With)
  5420  			res.Limit, _ = _Limit.(*Limit)
  5421  			res.Into, _ = _Into.(*SelectInto)
  5422  			out = &res
  5423  			if c.cloned != nil {
  5424  				c.cloned(n, out)
  5425  			}
  5426  			changed = true
  5427  		}
  5428  	}
  5429  	if c.post != nil {
  5430  		out, changed = c.postVisit(out, parent, changed)
  5431  	}
  5432  	return
  5433  }
  5434  func (c *cow) copyOnRewriteRefOfUnlockTables(n *UnlockTables, parent SQLNode) (out SQLNode, changed bool) {
  5435  	if n == nil || c.cursor.stop {
  5436  		return n, false
  5437  	}
  5438  	out = n
  5439  	if c.pre == nil || c.pre(n, parent) {
  5440  	}
  5441  	if c.post != nil {
  5442  		out, changed = c.postVisit(out, parent, changed)
  5443  	}
  5444  	return
  5445  }
  5446  func (c *cow) copyOnRewriteRefOfUpdate(n *Update, parent SQLNode) (out SQLNode, changed bool) {
  5447  	if n == nil || c.cursor.stop {
  5448  		return n, false
  5449  	}
  5450  	out = n
  5451  	if c.pre == nil || c.pre(n, parent) {
  5452  		_With, changedWith := c.copyOnRewriteRefOfWith(n.With, n)
  5453  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  5454  		_TableExprs, changedTableExprs := c.copyOnRewriteTableExprs(n.TableExprs, n)
  5455  		_Exprs, changedExprs := c.copyOnRewriteUpdateExprs(n.Exprs, n)
  5456  		_Where, changedWhere := c.copyOnRewriteRefOfWhere(n.Where, n)
  5457  		_OrderBy, changedOrderBy := c.copyOnRewriteOrderBy(n.OrderBy, n)
  5458  		_Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n)
  5459  		if changedWith || changedComments || changedTableExprs || changedExprs || changedWhere || changedOrderBy || changedLimit {
  5460  			res := *n
  5461  			res.With, _ = _With.(*With)
  5462  			res.Comments, _ = _Comments.(*ParsedComments)
  5463  			res.TableExprs, _ = _TableExprs.(TableExprs)
  5464  			res.Exprs, _ = _Exprs.(UpdateExprs)
  5465  			res.Where, _ = _Where.(*Where)
  5466  			res.OrderBy, _ = _OrderBy.(OrderBy)
  5467  			res.Limit, _ = _Limit.(*Limit)
  5468  			out = &res
  5469  			if c.cloned != nil {
  5470  				c.cloned(n, out)
  5471  			}
  5472  			changed = true
  5473  		}
  5474  	}
  5475  	if c.post != nil {
  5476  		out, changed = c.postVisit(out, parent, changed)
  5477  	}
  5478  	return
  5479  }
  5480  func (c *cow) copyOnRewriteRefOfUpdateExpr(n *UpdateExpr, parent SQLNode) (out SQLNode, changed bool) {
  5481  	if n == nil || c.cursor.stop {
  5482  		return n, false
  5483  	}
  5484  	out = n
  5485  	if c.pre == nil || c.pre(n, parent) {
  5486  		_Name, changedName := c.copyOnRewriteRefOfColName(n.Name, n)
  5487  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  5488  		if changedName || changedExpr {
  5489  			res := *n
  5490  			res.Name, _ = _Name.(*ColName)
  5491  			res.Expr, _ = _Expr.(Expr)
  5492  			out = &res
  5493  			if c.cloned != nil {
  5494  				c.cloned(n, out)
  5495  			}
  5496  			changed = true
  5497  		}
  5498  	}
  5499  	if c.post != nil {
  5500  		out, changed = c.postVisit(out, parent, changed)
  5501  	}
  5502  	return
  5503  }
  5504  func (c *cow) copyOnRewriteUpdateExprs(n UpdateExprs, parent SQLNode) (out SQLNode, changed bool) {
  5505  	if n == nil || c.cursor.stop {
  5506  		return n, false
  5507  	}
  5508  	out = n
  5509  	if c.pre == nil || c.pre(n, parent) {
  5510  		res := make(UpdateExprs, len(n))
  5511  		for x, el := range n {
  5512  			this, change := c.copyOnRewriteRefOfUpdateExpr(el, n)
  5513  			res[x] = this.(*UpdateExpr)
  5514  			if change {
  5515  				changed = true
  5516  			}
  5517  		}
  5518  		if changed {
  5519  			out = res
  5520  		}
  5521  	}
  5522  	if c.post != nil {
  5523  		out, changed = c.postVisit(out, parent, changed)
  5524  	}
  5525  	return
  5526  }
  5527  func (c *cow) copyOnRewriteRefOfUpdateXMLExpr(n *UpdateXMLExpr, parent SQLNode) (out SQLNode, changed bool) {
  5528  	if n == nil || c.cursor.stop {
  5529  		return n, false
  5530  	}
  5531  	out = n
  5532  	if c.pre == nil || c.pre(n, parent) {
  5533  		_Target, changedTarget := c.copyOnRewriteExpr(n.Target, n)
  5534  		_XPathExpr, changedXPathExpr := c.copyOnRewriteExpr(n.XPathExpr, n)
  5535  		_NewXML, changedNewXML := c.copyOnRewriteExpr(n.NewXML, n)
  5536  		if changedTarget || changedXPathExpr || changedNewXML {
  5537  			res := *n
  5538  			res.Target, _ = _Target.(Expr)
  5539  			res.XPathExpr, _ = _XPathExpr.(Expr)
  5540  			res.NewXML, _ = _NewXML.(Expr)
  5541  			out = &res
  5542  			if c.cloned != nil {
  5543  				c.cloned(n, out)
  5544  			}
  5545  			changed = true
  5546  		}
  5547  	}
  5548  	if c.post != nil {
  5549  		out, changed = c.postVisit(out, parent, changed)
  5550  	}
  5551  	return
  5552  }
  5553  func (c *cow) copyOnRewriteRefOfUse(n *Use, parent SQLNode) (out SQLNode, changed bool) {
  5554  	if n == nil || c.cursor.stop {
  5555  		return n, false
  5556  	}
  5557  	out = n
  5558  	if c.pre == nil || c.pre(n, parent) {
  5559  		_DBName, changedDBName := c.copyOnRewriteIdentifierCS(n.DBName, n)
  5560  		if changedDBName {
  5561  			res := *n
  5562  			res.DBName, _ = _DBName.(IdentifierCS)
  5563  			out = &res
  5564  			if c.cloned != nil {
  5565  				c.cloned(n, out)
  5566  			}
  5567  			changed = true
  5568  		}
  5569  	}
  5570  	if c.post != nil {
  5571  		out, changed = c.postVisit(out, parent, changed)
  5572  	}
  5573  	return
  5574  }
  5575  func (c *cow) copyOnRewriteRefOfVExplainStmt(n *VExplainStmt, parent SQLNode) (out SQLNode, changed bool) {
  5576  	if n == nil || c.cursor.stop {
  5577  		return n, false
  5578  	}
  5579  	out = n
  5580  	if c.pre == nil || c.pre(n, parent) {
  5581  		_Statement, changedStatement := c.copyOnRewriteStatement(n.Statement, n)
  5582  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  5583  		if changedStatement || changedComments {
  5584  			res := *n
  5585  			res.Statement, _ = _Statement.(Statement)
  5586  			res.Comments, _ = _Comments.(*ParsedComments)
  5587  			out = &res
  5588  			if c.cloned != nil {
  5589  				c.cloned(n, out)
  5590  			}
  5591  			changed = true
  5592  		}
  5593  	}
  5594  	if c.post != nil {
  5595  		out, changed = c.postVisit(out, parent, changed)
  5596  	}
  5597  	return
  5598  }
  5599  func (c *cow) copyOnRewriteRefOfVStream(n *VStream, parent SQLNode) (out SQLNode, changed bool) {
  5600  	if n == nil || c.cursor.stop {
  5601  		return n, false
  5602  	}
  5603  	out = n
  5604  	if c.pre == nil || c.pre(n, parent) {
  5605  		_Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n)
  5606  		_SelectExpr, changedSelectExpr := c.copyOnRewriteSelectExpr(n.SelectExpr, n)
  5607  		_Table, changedTable := c.copyOnRewriteTableName(n.Table, n)
  5608  		_Where, changedWhere := c.copyOnRewriteRefOfWhere(n.Where, n)
  5609  		_Limit, changedLimit := c.copyOnRewriteRefOfLimit(n.Limit, n)
  5610  		if changedComments || changedSelectExpr || changedTable || changedWhere || changedLimit {
  5611  			res := *n
  5612  			res.Comments, _ = _Comments.(*ParsedComments)
  5613  			res.SelectExpr, _ = _SelectExpr.(SelectExpr)
  5614  			res.Table, _ = _Table.(TableName)
  5615  			res.Where, _ = _Where.(*Where)
  5616  			res.Limit, _ = _Limit.(*Limit)
  5617  			out = &res
  5618  			if c.cloned != nil {
  5619  				c.cloned(n, out)
  5620  			}
  5621  			changed = true
  5622  		}
  5623  	}
  5624  	if c.post != nil {
  5625  		out, changed = c.postVisit(out, parent, changed)
  5626  	}
  5627  	return
  5628  }
  5629  func (c *cow) copyOnRewriteValTuple(n ValTuple, parent SQLNode) (out SQLNode, changed bool) {
  5630  	if n == nil || c.cursor.stop {
  5631  		return n, false
  5632  	}
  5633  	out = n
  5634  	if c.pre == nil || c.pre(n, parent) {
  5635  		res := make(ValTuple, len(n))
  5636  		for x, el := range n {
  5637  			this, change := c.copyOnRewriteExpr(el, n)
  5638  			res[x] = this.(Expr)
  5639  			if change {
  5640  				changed = true
  5641  			}
  5642  		}
  5643  		if changed {
  5644  			out = res
  5645  		}
  5646  	}
  5647  	if c.post != nil {
  5648  		out, changed = c.postVisit(out, parent, changed)
  5649  	}
  5650  	return
  5651  }
  5652  func (c *cow) copyOnRewriteRefOfValidation(n *Validation, parent SQLNode) (out SQLNode, changed bool) {
  5653  	if n == nil || c.cursor.stop {
  5654  		return n, false
  5655  	}
  5656  	out = n
  5657  	if c.pre == nil || c.pre(n, parent) {
  5658  	}
  5659  	if c.post != nil {
  5660  		out, changed = c.postVisit(out, parent, changed)
  5661  	}
  5662  	return
  5663  }
  5664  func (c *cow) copyOnRewriteValues(n Values, parent SQLNode) (out SQLNode, changed bool) {
  5665  	if n == nil || c.cursor.stop {
  5666  		return n, false
  5667  	}
  5668  	out = n
  5669  	if c.pre == nil || c.pre(n, parent) {
  5670  		res := make(Values, len(n))
  5671  		for x, el := range n {
  5672  			this, change := c.copyOnRewriteValTuple(el, n)
  5673  			res[x] = this.(ValTuple)
  5674  			if change {
  5675  				changed = true
  5676  			}
  5677  		}
  5678  		if changed {
  5679  			out = res
  5680  		}
  5681  	}
  5682  	if c.post != nil {
  5683  		out, changed = c.postVisit(out, parent, changed)
  5684  	}
  5685  	return
  5686  }
  5687  func (c *cow) copyOnRewriteRefOfValuesFuncExpr(n *ValuesFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  5688  	if n == nil || c.cursor.stop {
  5689  		return n, false
  5690  	}
  5691  	out = n
  5692  	if c.pre == nil || c.pre(n, parent) {
  5693  		_Name, changedName := c.copyOnRewriteRefOfColName(n.Name, n)
  5694  		if changedName {
  5695  			res := *n
  5696  			res.Name, _ = _Name.(*ColName)
  5697  			out = &res
  5698  			if c.cloned != nil {
  5699  				c.cloned(n, out)
  5700  			}
  5701  			changed = true
  5702  		}
  5703  	}
  5704  	if c.post != nil {
  5705  		out, changed = c.postVisit(out, parent, changed)
  5706  	}
  5707  	return
  5708  }
  5709  func (c *cow) copyOnRewriteRefOfVarPop(n *VarPop, parent SQLNode) (out SQLNode, changed bool) {
  5710  	if n == nil || c.cursor.stop {
  5711  		return n, false
  5712  	}
  5713  	out = n
  5714  	if c.pre == nil || c.pre(n, parent) {
  5715  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  5716  		if changedArg {
  5717  			res := *n
  5718  			res.Arg, _ = _Arg.(Expr)
  5719  			out = &res
  5720  			if c.cloned != nil {
  5721  				c.cloned(n, out)
  5722  			}
  5723  			changed = true
  5724  		}
  5725  	}
  5726  	if c.post != nil {
  5727  		out, changed = c.postVisit(out, parent, changed)
  5728  	}
  5729  	return
  5730  }
  5731  func (c *cow) copyOnRewriteRefOfVarSamp(n *VarSamp, parent SQLNode) (out SQLNode, changed bool) {
  5732  	if n == nil || c.cursor.stop {
  5733  		return n, false
  5734  	}
  5735  	out = n
  5736  	if c.pre == nil || c.pre(n, parent) {
  5737  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  5738  		if changedArg {
  5739  			res := *n
  5740  			res.Arg, _ = _Arg.(Expr)
  5741  			out = &res
  5742  			if c.cloned != nil {
  5743  				c.cloned(n, out)
  5744  			}
  5745  			changed = true
  5746  		}
  5747  	}
  5748  	if c.post != nil {
  5749  		out, changed = c.postVisit(out, parent, changed)
  5750  	}
  5751  	return
  5752  }
  5753  func (c *cow) copyOnRewriteRefOfVariable(n *Variable, parent SQLNode) (out SQLNode, changed bool) {
  5754  	if n == nil || c.cursor.stop {
  5755  		return n, false
  5756  	}
  5757  	out = n
  5758  	if c.pre == nil || c.pre(n, parent) {
  5759  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  5760  		if changedName {
  5761  			res := *n
  5762  			res.Name, _ = _Name.(IdentifierCI)
  5763  			out = &res
  5764  			if c.cloned != nil {
  5765  				c.cloned(n, out)
  5766  			}
  5767  			changed = true
  5768  		}
  5769  	}
  5770  	if c.post != nil {
  5771  		out, changed = c.postVisit(out, parent, changed)
  5772  	}
  5773  	return
  5774  }
  5775  func (c *cow) copyOnRewriteRefOfVariance(n *Variance, parent SQLNode) (out SQLNode, changed bool) {
  5776  	if n == nil || c.cursor.stop {
  5777  		return n, false
  5778  	}
  5779  	out = n
  5780  	if c.pre == nil || c.pre(n, parent) {
  5781  		_Arg, changedArg := c.copyOnRewriteExpr(n.Arg, n)
  5782  		if changedArg {
  5783  			res := *n
  5784  			res.Arg, _ = _Arg.(Expr)
  5785  			out = &res
  5786  			if c.cloned != nil {
  5787  				c.cloned(n, out)
  5788  			}
  5789  			changed = true
  5790  		}
  5791  	}
  5792  	if c.post != nil {
  5793  		out, changed = c.postVisit(out, parent, changed)
  5794  	}
  5795  	return
  5796  }
  5797  func (c *cow) copyOnRewriteVindexParam(n VindexParam, parent SQLNode) (out SQLNode, changed bool) {
  5798  	out = n
  5799  	if c.pre == nil || c.pre(n, parent) {
  5800  		_Key, changedKey := c.copyOnRewriteIdentifierCI(n.Key, n)
  5801  		if changedKey {
  5802  			res := n
  5803  			res.Key, _ = _Key.(IdentifierCI)
  5804  			out = &res
  5805  			if c.cloned != nil {
  5806  				c.cloned(n, out)
  5807  			}
  5808  			changed = true
  5809  		}
  5810  	}
  5811  	if c.post != nil {
  5812  		out, changed = c.postVisit(out, parent, changed)
  5813  	}
  5814  	return
  5815  }
  5816  func (c *cow) copyOnRewriteRefOfVindexSpec(n *VindexSpec, parent SQLNode) (out SQLNode, changed bool) {
  5817  	if n == nil || c.cursor.stop {
  5818  		return n, false
  5819  	}
  5820  	out = n
  5821  	if c.pre == nil || c.pre(n, parent) {
  5822  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  5823  		_Type, changedType := c.copyOnRewriteIdentifierCI(n.Type, n)
  5824  		var changedParams bool
  5825  		_Params := make([]VindexParam, len(n.Params))
  5826  		for x, el := range n.Params {
  5827  			this, changed := c.copyOnRewriteVindexParam(el, n)
  5828  			_Params[x] = this.(VindexParam)
  5829  			if changed {
  5830  				changedParams = true
  5831  			}
  5832  		}
  5833  		if changedName || changedType || changedParams {
  5834  			res := *n
  5835  			res.Name, _ = _Name.(IdentifierCI)
  5836  			res.Type, _ = _Type.(IdentifierCI)
  5837  			res.Params = _Params
  5838  			out = &res
  5839  			if c.cloned != nil {
  5840  				c.cloned(n, out)
  5841  			}
  5842  			changed = true
  5843  		}
  5844  	}
  5845  	if c.post != nil {
  5846  		out, changed = c.postVisit(out, parent, changed)
  5847  	}
  5848  	return
  5849  }
  5850  func (c *cow) copyOnRewriteRefOfWeightStringFuncExpr(n *WeightStringFuncExpr, parent SQLNode) (out SQLNode, changed bool) {
  5851  	if n == nil || c.cursor.stop {
  5852  		return n, false
  5853  	}
  5854  	out = n
  5855  	if c.pre == nil || c.pre(n, parent) {
  5856  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  5857  		_As, changedAs := c.copyOnRewriteRefOfConvertType(n.As, n)
  5858  		if changedExpr || changedAs {
  5859  			res := *n
  5860  			res.Expr, _ = _Expr.(Expr)
  5861  			res.As, _ = _As.(*ConvertType)
  5862  			out = &res
  5863  			if c.cloned != nil {
  5864  				c.cloned(n, out)
  5865  			}
  5866  			changed = true
  5867  		}
  5868  	}
  5869  	if c.post != nil {
  5870  		out, changed = c.postVisit(out, parent, changed)
  5871  	}
  5872  	return
  5873  }
  5874  func (c *cow) copyOnRewriteRefOfWhen(n *When, parent SQLNode) (out SQLNode, changed bool) {
  5875  	if n == nil || c.cursor.stop {
  5876  		return n, false
  5877  	}
  5878  	out = n
  5879  	if c.pre == nil || c.pre(n, parent) {
  5880  		_Cond, changedCond := c.copyOnRewriteExpr(n.Cond, n)
  5881  		_Val, changedVal := c.copyOnRewriteExpr(n.Val, n)
  5882  		if changedCond || changedVal {
  5883  			res := *n
  5884  			res.Cond, _ = _Cond.(Expr)
  5885  			res.Val, _ = _Val.(Expr)
  5886  			out = &res
  5887  			if c.cloned != nil {
  5888  				c.cloned(n, out)
  5889  			}
  5890  			changed = true
  5891  		}
  5892  	}
  5893  	if c.post != nil {
  5894  		out, changed = c.postVisit(out, parent, changed)
  5895  	}
  5896  	return
  5897  }
  5898  func (c *cow) copyOnRewriteRefOfWhere(n *Where, parent SQLNode) (out SQLNode, changed bool) {
  5899  	if n == nil || c.cursor.stop {
  5900  		return n, false
  5901  	}
  5902  	out = n
  5903  	if c.pre == nil || c.pre(n, parent) {
  5904  		_Expr, changedExpr := c.copyOnRewriteExpr(n.Expr, n)
  5905  		if changedExpr {
  5906  			res := *n
  5907  			res.Expr, _ = _Expr.(Expr)
  5908  			out = &res
  5909  			if c.cloned != nil {
  5910  				c.cloned(n, out)
  5911  			}
  5912  			changed = true
  5913  		}
  5914  	}
  5915  	if c.post != nil {
  5916  		out, changed = c.postVisit(out, parent, changed)
  5917  	}
  5918  	return
  5919  }
  5920  func (c *cow) copyOnRewriteRefOfWindowDefinition(n *WindowDefinition, parent SQLNode) (out SQLNode, changed bool) {
  5921  	if n == nil || c.cursor.stop {
  5922  		return n, false
  5923  	}
  5924  	out = n
  5925  	if c.pre == nil || c.pre(n, parent) {
  5926  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  5927  		_WindowSpec, changedWindowSpec := c.copyOnRewriteRefOfWindowSpecification(n.WindowSpec, n)
  5928  		if changedName || changedWindowSpec {
  5929  			res := *n
  5930  			res.Name, _ = _Name.(IdentifierCI)
  5931  			res.WindowSpec, _ = _WindowSpec.(*WindowSpecification)
  5932  			out = &res
  5933  			if c.cloned != nil {
  5934  				c.cloned(n, out)
  5935  			}
  5936  			changed = true
  5937  		}
  5938  	}
  5939  	if c.post != nil {
  5940  		out, changed = c.postVisit(out, parent, changed)
  5941  	}
  5942  	return
  5943  }
  5944  func (c *cow) copyOnRewriteWindowDefinitions(n WindowDefinitions, parent SQLNode) (out SQLNode, changed bool) {
  5945  	if n == nil || c.cursor.stop {
  5946  		return n, false
  5947  	}
  5948  	out = n
  5949  	if c.pre == nil || c.pre(n, parent) {
  5950  		res := make(WindowDefinitions, len(n))
  5951  		for x, el := range n {
  5952  			this, change := c.copyOnRewriteRefOfWindowDefinition(el, n)
  5953  			res[x] = this.(*WindowDefinition)
  5954  			if change {
  5955  				changed = true
  5956  			}
  5957  		}
  5958  		if changed {
  5959  			out = res
  5960  		}
  5961  	}
  5962  	if c.post != nil {
  5963  		out, changed = c.postVisit(out, parent, changed)
  5964  	}
  5965  	return
  5966  }
  5967  func (c *cow) copyOnRewriteRefOfWindowSpecification(n *WindowSpecification, parent SQLNode) (out SQLNode, changed bool) {
  5968  	if n == nil || c.cursor.stop {
  5969  		return n, false
  5970  	}
  5971  	out = n
  5972  	if c.pre == nil || c.pre(n, parent) {
  5973  		_Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n)
  5974  		_PartitionClause, changedPartitionClause := c.copyOnRewriteExprs(n.PartitionClause, n)
  5975  		_OrderClause, changedOrderClause := c.copyOnRewriteOrderBy(n.OrderClause, n)
  5976  		_FrameClause, changedFrameClause := c.copyOnRewriteRefOfFrameClause(n.FrameClause, n)
  5977  		if changedName || changedPartitionClause || changedOrderClause || changedFrameClause {
  5978  			res := *n
  5979  			res.Name, _ = _Name.(IdentifierCI)
  5980  			res.PartitionClause, _ = _PartitionClause.(Exprs)
  5981  			res.OrderClause, _ = _OrderClause.(OrderBy)
  5982  			res.FrameClause, _ = _FrameClause.(*FrameClause)
  5983  			out = &res
  5984  			if c.cloned != nil {
  5985  				c.cloned(n, out)
  5986  			}
  5987  			changed = true
  5988  		}
  5989  	}
  5990  	if c.post != nil {
  5991  		out, changed = c.postVisit(out, parent, changed)
  5992  	}
  5993  	return
  5994  }
  5995  func (c *cow) copyOnRewriteRefOfWith(n *With, parent SQLNode) (out SQLNode, changed bool) {
  5996  	if n == nil || c.cursor.stop {
  5997  		return n, false
  5998  	}
  5999  	out = n
  6000  	if c.pre == nil || c.pre(n, parent) {
  6001  		var changedctes bool
  6002  		_ctes := make([]*CommonTableExpr, len(n.ctes))
  6003  		for x, el := range n.ctes {
  6004  			this, changed := c.copyOnRewriteRefOfCommonTableExpr(el, n)
  6005  			_ctes[x] = this.(*CommonTableExpr)
  6006  			if changed {
  6007  				changedctes = true
  6008  			}
  6009  		}
  6010  		if changedctes {
  6011  			res := *n
  6012  			res.ctes = _ctes
  6013  			out = &res
  6014  			if c.cloned != nil {
  6015  				c.cloned(n, out)
  6016  			}
  6017  			changed = true
  6018  		}
  6019  	}
  6020  	if c.post != nil {
  6021  		out, changed = c.postVisit(out, parent, changed)
  6022  	}
  6023  	return
  6024  }
  6025  func (c *cow) copyOnRewriteRefOfXorExpr(n *XorExpr, parent SQLNode) (out SQLNode, changed bool) {
  6026  	if n == nil || c.cursor.stop {
  6027  		return n, false
  6028  	}
  6029  	out = n
  6030  	if c.pre == nil || c.pre(n, parent) {
  6031  		_Left, changedLeft := c.copyOnRewriteExpr(n.Left, n)
  6032  		_Right, changedRight := c.copyOnRewriteExpr(n.Right, n)
  6033  		if changedLeft || changedRight {
  6034  			res := *n
  6035  			res.Left, _ = _Left.(Expr)
  6036  			res.Right, _ = _Right.(Expr)
  6037  			out = &res
  6038  			if c.cloned != nil {
  6039  				c.cloned(n, out)
  6040  			}
  6041  			changed = true
  6042  		}
  6043  	}
  6044  	if c.post != nil {
  6045  		out, changed = c.postVisit(out, parent, changed)
  6046  	}
  6047  	return
  6048  }
  6049  func (c *cow) copyOnRewriteAggrFunc(n AggrFunc, parent SQLNode) (out SQLNode, changed bool) {
  6050  	if n == nil || c.cursor.stop {
  6051  		return n, false
  6052  	}
  6053  	switch n := n.(type) {
  6054  	case *Avg:
  6055  		return c.copyOnRewriteRefOfAvg(n, parent)
  6056  	case *BitAnd:
  6057  		return c.copyOnRewriteRefOfBitAnd(n, parent)
  6058  	case *BitOr:
  6059  		return c.copyOnRewriteRefOfBitOr(n, parent)
  6060  	case *BitXor:
  6061  		return c.copyOnRewriteRefOfBitXor(n, parent)
  6062  	case *Count:
  6063  		return c.copyOnRewriteRefOfCount(n, parent)
  6064  	case *CountStar:
  6065  		return c.copyOnRewriteRefOfCountStar(n, parent)
  6066  	case *GroupConcatExpr:
  6067  		return c.copyOnRewriteRefOfGroupConcatExpr(n, parent)
  6068  	case *Max:
  6069  		return c.copyOnRewriteRefOfMax(n, parent)
  6070  	case *Min:
  6071  		return c.copyOnRewriteRefOfMin(n, parent)
  6072  	case *Std:
  6073  		return c.copyOnRewriteRefOfStd(n, parent)
  6074  	case *StdDev:
  6075  		return c.copyOnRewriteRefOfStdDev(n, parent)
  6076  	case *StdPop:
  6077  		return c.copyOnRewriteRefOfStdPop(n, parent)
  6078  	case *StdSamp:
  6079  		return c.copyOnRewriteRefOfStdSamp(n, parent)
  6080  	case *Sum:
  6081  		return c.copyOnRewriteRefOfSum(n, parent)
  6082  	case *VarPop:
  6083  		return c.copyOnRewriteRefOfVarPop(n, parent)
  6084  	case *VarSamp:
  6085  		return c.copyOnRewriteRefOfVarSamp(n, parent)
  6086  	case *Variance:
  6087  		return c.copyOnRewriteRefOfVariance(n, parent)
  6088  	default:
  6089  		// this should never happen
  6090  		return nil, false
  6091  	}
  6092  }
  6093  func (c *cow) copyOnRewriteAlterOption(n AlterOption, parent SQLNode) (out SQLNode, changed bool) {
  6094  	if n == nil || c.cursor.stop {
  6095  		return n, false
  6096  	}
  6097  	switch n := n.(type) {
  6098  	case *AddColumns:
  6099  		return c.copyOnRewriteRefOfAddColumns(n, parent)
  6100  	case *AddConstraintDefinition:
  6101  		return c.copyOnRewriteRefOfAddConstraintDefinition(n, parent)
  6102  	case *AddIndexDefinition:
  6103  		return c.copyOnRewriteRefOfAddIndexDefinition(n, parent)
  6104  	case AlgorithmValue:
  6105  		return c.copyOnRewriteAlgorithmValue(n, parent)
  6106  	case *AlterCharset:
  6107  		return c.copyOnRewriteRefOfAlterCharset(n, parent)
  6108  	case *AlterCheck:
  6109  		return c.copyOnRewriteRefOfAlterCheck(n, parent)
  6110  	case *AlterColumn:
  6111  		return c.copyOnRewriteRefOfAlterColumn(n, parent)
  6112  	case *AlterIndex:
  6113  		return c.copyOnRewriteRefOfAlterIndex(n, parent)
  6114  	case *ChangeColumn:
  6115  		return c.copyOnRewriteRefOfChangeColumn(n, parent)
  6116  	case *DropColumn:
  6117  		return c.copyOnRewriteRefOfDropColumn(n, parent)
  6118  	case *DropKey:
  6119  		return c.copyOnRewriteRefOfDropKey(n, parent)
  6120  	case *Force:
  6121  		return c.copyOnRewriteRefOfForce(n, parent)
  6122  	case *KeyState:
  6123  		return c.copyOnRewriteRefOfKeyState(n, parent)
  6124  	case *LockOption:
  6125  		return c.copyOnRewriteRefOfLockOption(n, parent)
  6126  	case *ModifyColumn:
  6127  		return c.copyOnRewriteRefOfModifyColumn(n, parent)
  6128  	case *OrderByOption:
  6129  		return c.copyOnRewriteRefOfOrderByOption(n, parent)
  6130  	case *RenameColumn:
  6131  		return c.copyOnRewriteRefOfRenameColumn(n, parent)
  6132  	case *RenameIndex:
  6133  		return c.copyOnRewriteRefOfRenameIndex(n, parent)
  6134  	case *RenameTableName:
  6135  		return c.copyOnRewriteRefOfRenameTableName(n, parent)
  6136  	case TableOptions:
  6137  		return c.copyOnRewriteTableOptions(n, parent)
  6138  	case *TablespaceOperation:
  6139  		return c.copyOnRewriteRefOfTablespaceOperation(n, parent)
  6140  	case *Validation:
  6141  		return c.copyOnRewriteRefOfValidation(n, parent)
  6142  	default:
  6143  		// this should never happen
  6144  		return nil, false
  6145  	}
  6146  }
  6147  func (c *cow) copyOnRewriteCallable(n Callable, parent SQLNode) (out SQLNode, changed bool) {
  6148  	if n == nil || c.cursor.stop {
  6149  		return n, false
  6150  	}
  6151  	switch n := n.(type) {
  6152  	case *ArgumentLessWindowExpr:
  6153  		return c.copyOnRewriteRefOfArgumentLessWindowExpr(n, parent)
  6154  	case *Avg:
  6155  		return c.copyOnRewriteRefOfAvg(n, parent)
  6156  	case *CharExpr:
  6157  		return c.copyOnRewriteRefOfCharExpr(n, parent)
  6158  	case *ConvertExpr:
  6159  		return c.copyOnRewriteRefOfConvertExpr(n, parent)
  6160  	case *ConvertUsingExpr:
  6161  		return c.copyOnRewriteRefOfConvertUsingExpr(n, parent)
  6162  	case *Count:
  6163  		return c.copyOnRewriteRefOfCount(n, parent)
  6164  	case *CountStar:
  6165  		return c.copyOnRewriteRefOfCountStar(n, parent)
  6166  	case *CurTimeFuncExpr:
  6167  		return c.copyOnRewriteRefOfCurTimeFuncExpr(n, parent)
  6168  	case *ExtractFuncExpr:
  6169  		return c.copyOnRewriteRefOfExtractFuncExpr(n, parent)
  6170  	case *ExtractValueExpr:
  6171  		return c.copyOnRewriteRefOfExtractValueExpr(n, parent)
  6172  	case *FirstOrLastValueExpr:
  6173  		return c.copyOnRewriteRefOfFirstOrLastValueExpr(n, parent)
  6174  	case *FuncExpr:
  6175  		return c.copyOnRewriteRefOfFuncExpr(n, parent)
  6176  	case *GTIDFuncExpr:
  6177  		return c.copyOnRewriteRefOfGTIDFuncExpr(n, parent)
  6178  	case *GroupConcatExpr:
  6179  		return c.copyOnRewriteRefOfGroupConcatExpr(n, parent)
  6180  	case *InsertExpr:
  6181  		return c.copyOnRewriteRefOfInsertExpr(n, parent)
  6182  	case *IntervalFuncExpr:
  6183  		return c.copyOnRewriteRefOfIntervalFuncExpr(n, parent)
  6184  	case *JSONArrayExpr:
  6185  		return c.copyOnRewriteRefOfJSONArrayExpr(n, parent)
  6186  	case *JSONAttributesExpr:
  6187  		return c.copyOnRewriteRefOfJSONAttributesExpr(n, parent)
  6188  	case *JSONContainsExpr:
  6189  		return c.copyOnRewriteRefOfJSONContainsExpr(n, parent)
  6190  	case *JSONContainsPathExpr:
  6191  		return c.copyOnRewriteRefOfJSONContainsPathExpr(n, parent)
  6192  	case *JSONExtractExpr:
  6193  		return c.copyOnRewriteRefOfJSONExtractExpr(n, parent)
  6194  	case *JSONKeysExpr:
  6195  		return c.copyOnRewriteRefOfJSONKeysExpr(n, parent)
  6196  	case *JSONObjectExpr:
  6197  		return c.copyOnRewriteRefOfJSONObjectExpr(n, parent)
  6198  	case *JSONOverlapsExpr:
  6199  		return c.copyOnRewriteRefOfJSONOverlapsExpr(n, parent)
  6200  	case *JSONPrettyExpr:
  6201  		return c.copyOnRewriteRefOfJSONPrettyExpr(n, parent)
  6202  	case *JSONQuoteExpr:
  6203  		return c.copyOnRewriteRefOfJSONQuoteExpr(n, parent)
  6204  	case *JSONRemoveExpr:
  6205  		return c.copyOnRewriteRefOfJSONRemoveExpr(n, parent)
  6206  	case *JSONSchemaValidFuncExpr:
  6207  		return c.copyOnRewriteRefOfJSONSchemaValidFuncExpr(n, parent)
  6208  	case *JSONSchemaValidationReportFuncExpr:
  6209  		return c.copyOnRewriteRefOfJSONSchemaValidationReportFuncExpr(n, parent)
  6210  	case *JSONSearchExpr:
  6211  		return c.copyOnRewriteRefOfJSONSearchExpr(n, parent)
  6212  	case *JSONStorageFreeExpr:
  6213  		return c.copyOnRewriteRefOfJSONStorageFreeExpr(n, parent)
  6214  	case *JSONStorageSizeExpr:
  6215  		return c.copyOnRewriteRefOfJSONStorageSizeExpr(n, parent)
  6216  	case *JSONUnquoteExpr:
  6217  		return c.copyOnRewriteRefOfJSONUnquoteExpr(n, parent)
  6218  	case *JSONValueExpr:
  6219  		return c.copyOnRewriteRefOfJSONValueExpr(n, parent)
  6220  	case *JSONValueMergeExpr:
  6221  		return c.copyOnRewriteRefOfJSONValueMergeExpr(n, parent)
  6222  	case *JSONValueModifierExpr:
  6223  		return c.copyOnRewriteRefOfJSONValueModifierExpr(n, parent)
  6224  	case *LagLeadExpr:
  6225  		return c.copyOnRewriteRefOfLagLeadExpr(n, parent)
  6226  	case *LocateExpr:
  6227  		return c.copyOnRewriteRefOfLocateExpr(n, parent)
  6228  	case *MatchExpr:
  6229  		return c.copyOnRewriteRefOfMatchExpr(n, parent)
  6230  	case *Max:
  6231  		return c.copyOnRewriteRefOfMax(n, parent)
  6232  	case *MemberOfExpr:
  6233  		return c.copyOnRewriteRefOfMemberOfExpr(n, parent)
  6234  	case *Min:
  6235  		return c.copyOnRewriteRefOfMin(n, parent)
  6236  	case *NTHValueExpr:
  6237  		return c.copyOnRewriteRefOfNTHValueExpr(n, parent)
  6238  	case *NamedWindow:
  6239  		return c.copyOnRewriteRefOfNamedWindow(n, parent)
  6240  	case *NtileExpr:
  6241  		return c.copyOnRewriteRefOfNtileExpr(n, parent)
  6242  	case *PerformanceSchemaFuncExpr:
  6243  		return c.copyOnRewriteRefOfPerformanceSchemaFuncExpr(n, parent)
  6244  	case *RegexpInstrExpr:
  6245  		return c.copyOnRewriteRefOfRegexpInstrExpr(n, parent)
  6246  	case *RegexpLikeExpr:
  6247  		return c.copyOnRewriteRefOfRegexpLikeExpr(n, parent)
  6248  	case *RegexpReplaceExpr:
  6249  		return c.copyOnRewriteRefOfRegexpReplaceExpr(n, parent)
  6250  	case *RegexpSubstrExpr:
  6251  		return c.copyOnRewriteRefOfRegexpSubstrExpr(n, parent)
  6252  	case *SubstrExpr:
  6253  		return c.copyOnRewriteRefOfSubstrExpr(n, parent)
  6254  	case *Sum:
  6255  		return c.copyOnRewriteRefOfSum(n, parent)
  6256  	case *TimestampFuncExpr:
  6257  		return c.copyOnRewriteRefOfTimestampFuncExpr(n, parent)
  6258  	case *TrimFuncExpr:
  6259  		return c.copyOnRewriteRefOfTrimFuncExpr(n, parent)
  6260  	case *UpdateXMLExpr:
  6261  		return c.copyOnRewriteRefOfUpdateXMLExpr(n, parent)
  6262  	case *ValuesFuncExpr:
  6263  		return c.copyOnRewriteRefOfValuesFuncExpr(n, parent)
  6264  	case *WeightStringFuncExpr:
  6265  		return c.copyOnRewriteRefOfWeightStringFuncExpr(n, parent)
  6266  	default:
  6267  		// this should never happen
  6268  		return nil, false
  6269  	}
  6270  }
  6271  func (c *cow) copyOnRewriteColTuple(n ColTuple, parent SQLNode) (out SQLNode, changed bool) {
  6272  	if n == nil || c.cursor.stop {
  6273  		return n, false
  6274  	}
  6275  	switch n := n.(type) {
  6276  	case ListArg:
  6277  		return c.copyOnRewriteListArg(n, parent)
  6278  	case *Subquery:
  6279  		return c.copyOnRewriteRefOfSubquery(n, parent)
  6280  	case ValTuple:
  6281  		return c.copyOnRewriteValTuple(n, parent)
  6282  	default:
  6283  		// this should never happen
  6284  		return nil, false
  6285  	}
  6286  }
  6287  func (c *cow) copyOnRewriteConstraintInfo(n ConstraintInfo, parent SQLNode) (out SQLNode, changed bool) {
  6288  	if n == nil || c.cursor.stop {
  6289  		return n, false
  6290  	}
  6291  	switch n := n.(type) {
  6292  	case *CheckConstraintDefinition:
  6293  		return c.copyOnRewriteRefOfCheckConstraintDefinition(n, parent)
  6294  	case *ForeignKeyDefinition:
  6295  		return c.copyOnRewriteRefOfForeignKeyDefinition(n, parent)
  6296  	default:
  6297  		// this should never happen
  6298  		return nil, false
  6299  	}
  6300  }
  6301  func (c *cow) copyOnRewriteDBDDLStatement(n DBDDLStatement, parent SQLNode) (out SQLNode, changed bool) {
  6302  	if n == nil || c.cursor.stop {
  6303  		return n, false
  6304  	}
  6305  	switch n := n.(type) {
  6306  	case *AlterDatabase:
  6307  		return c.copyOnRewriteRefOfAlterDatabase(n, parent)
  6308  	case *CreateDatabase:
  6309  		return c.copyOnRewriteRefOfCreateDatabase(n, parent)
  6310  	case *DropDatabase:
  6311  		return c.copyOnRewriteRefOfDropDatabase(n, parent)
  6312  	default:
  6313  		// this should never happen
  6314  		return nil, false
  6315  	}
  6316  }
  6317  func (c *cow) copyOnRewriteDDLStatement(n DDLStatement, parent SQLNode) (out SQLNode, changed bool) {
  6318  	if n == nil || c.cursor.stop {
  6319  		return n, false
  6320  	}
  6321  	switch n := n.(type) {
  6322  	case *AlterTable:
  6323  		return c.copyOnRewriteRefOfAlterTable(n, parent)
  6324  	case *AlterView:
  6325  		return c.copyOnRewriteRefOfAlterView(n, parent)
  6326  	case *CreateTable:
  6327  		return c.copyOnRewriteRefOfCreateTable(n, parent)
  6328  	case *CreateView:
  6329  		return c.copyOnRewriteRefOfCreateView(n, parent)
  6330  	case *DropTable:
  6331  		return c.copyOnRewriteRefOfDropTable(n, parent)
  6332  	case *DropView:
  6333  		return c.copyOnRewriteRefOfDropView(n, parent)
  6334  	case *RenameTable:
  6335  		return c.copyOnRewriteRefOfRenameTable(n, parent)
  6336  	case *TruncateTable:
  6337  		return c.copyOnRewriteRefOfTruncateTable(n, parent)
  6338  	default:
  6339  		// this should never happen
  6340  		return nil, false
  6341  	}
  6342  }
  6343  func (c *cow) copyOnRewriteExplain(n Explain, parent SQLNode) (out SQLNode, changed bool) {
  6344  	if n == nil || c.cursor.stop {
  6345  		return n, false
  6346  	}
  6347  	switch n := n.(type) {
  6348  	case *ExplainStmt:
  6349  		return c.copyOnRewriteRefOfExplainStmt(n, parent)
  6350  	case *ExplainTab:
  6351  		return c.copyOnRewriteRefOfExplainTab(n, parent)
  6352  	default:
  6353  		// this should never happen
  6354  		return nil, false
  6355  	}
  6356  }
  6357  func (c *cow) copyOnRewriteExpr(n Expr, parent SQLNode) (out SQLNode, changed bool) {
  6358  	if n == nil || c.cursor.stop {
  6359  		return n, false
  6360  	}
  6361  	switch n := n.(type) {
  6362  	case *AndExpr:
  6363  		return c.copyOnRewriteRefOfAndExpr(n, parent)
  6364  	case Argument:
  6365  		return c.copyOnRewriteArgument(n, parent)
  6366  	case *ArgumentLessWindowExpr:
  6367  		return c.copyOnRewriteRefOfArgumentLessWindowExpr(n, parent)
  6368  	case *Avg:
  6369  		return c.copyOnRewriteRefOfAvg(n, parent)
  6370  	case *BetweenExpr:
  6371  		return c.copyOnRewriteRefOfBetweenExpr(n, parent)
  6372  	case *BinaryExpr:
  6373  		return c.copyOnRewriteRefOfBinaryExpr(n, parent)
  6374  	case *BitAnd:
  6375  		return c.copyOnRewriteRefOfBitAnd(n, parent)
  6376  	case *BitOr:
  6377  		return c.copyOnRewriteRefOfBitOr(n, parent)
  6378  	case *BitXor:
  6379  		return c.copyOnRewriteRefOfBitXor(n, parent)
  6380  	case BoolVal:
  6381  		return c.copyOnRewriteBoolVal(n, parent)
  6382  	case *CaseExpr:
  6383  		return c.copyOnRewriteRefOfCaseExpr(n, parent)
  6384  	case *CastExpr:
  6385  		return c.copyOnRewriteRefOfCastExpr(n, parent)
  6386  	case *CharExpr:
  6387  		return c.copyOnRewriteRefOfCharExpr(n, parent)
  6388  	case *ColName:
  6389  		return c.copyOnRewriteRefOfColName(n, parent)
  6390  	case *CollateExpr:
  6391  		return c.copyOnRewriteRefOfCollateExpr(n, parent)
  6392  	case *ComparisonExpr:
  6393  		return c.copyOnRewriteRefOfComparisonExpr(n, parent)
  6394  	case *ConvertExpr:
  6395  		return c.copyOnRewriteRefOfConvertExpr(n, parent)
  6396  	case *ConvertUsingExpr:
  6397  		return c.copyOnRewriteRefOfConvertUsingExpr(n, parent)
  6398  	case *Count:
  6399  		return c.copyOnRewriteRefOfCount(n, parent)
  6400  	case *CountStar:
  6401  		return c.copyOnRewriteRefOfCountStar(n, parent)
  6402  	case *CurTimeFuncExpr:
  6403  		return c.copyOnRewriteRefOfCurTimeFuncExpr(n, parent)
  6404  	case *Default:
  6405  		return c.copyOnRewriteRefOfDefault(n, parent)
  6406  	case *ExistsExpr:
  6407  		return c.copyOnRewriteRefOfExistsExpr(n, parent)
  6408  	case *ExtractFuncExpr:
  6409  		return c.copyOnRewriteRefOfExtractFuncExpr(n, parent)
  6410  	case *ExtractValueExpr:
  6411  		return c.copyOnRewriteRefOfExtractValueExpr(n, parent)
  6412  	case *ExtractedSubquery:
  6413  		return c.copyOnRewriteRefOfExtractedSubquery(n, parent)
  6414  	case *FirstOrLastValueExpr:
  6415  		return c.copyOnRewriteRefOfFirstOrLastValueExpr(n, parent)
  6416  	case *FuncExpr:
  6417  		return c.copyOnRewriteRefOfFuncExpr(n, parent)
  6418  	case *GTIDFuncExpr:
  6419  		return c.copyOnRewriteRefOfGTIDFuncExpr(n, parent)
  6420  	case *GroupConcatExpr:
  6421  		return c.copyOnRewriteRefOfGroupConcatExpr(n, parent)
  6422  	case *InsertExpr:
  6423  		return c.copyOnRewriteRefOfInsertExpr(n, parent)
  6424  	case *IntervalExpr:
  6425  		return c.copyOnRewriteRefOfIntervalExpr(n, parent)
  6426  	case *IntervalFuncExpr:
  6427  		return c.copyOnRewriteRefOfIntervalFuncExpr(n, parent)
  6428  	case *IntroducerExpr:
  6429  		return c.copyOnRewriteRefOfIntroducerExpr(n, parent)
  6430  	case *IsExpr:
  6431  		return c.copyOnRewriteRefOfIsExpr(n, parent)
  6432  	case *JSONArrayExpr:
  6433  		return c.copyOnRewriteRefOfJSONArrayExpr(n, parent)
  6434  	case *JSONAttributesExpr:
  6435  		return c.copyOnRewriteRefOfJSONAttributesExpr(n, parent)
  6436  	case *JSONContainsExpr:
  6437  		return c.copyOnRewriteRefOfJSONContainsExpr(n, parent)
  6438  	case *JSONContainsPathExpr:
  6439  		return c.copyOnRewriteRefOfJSONContainsPathExpr(n, parent)
  6440  	case *JSONExtractExpr:
  6441  		return c.copyOnRewriteRefOfJSONExtractExpr(n, parent)
  6442  	case *JSONKeysExpr:
  6443  		return c.copyOnRewriteRefOfJSONKeysExpr(n, parent)
  6444  	case *JSONObjectExpr:
  6445  		return c.copyOnRewriteRefOfJSONObjectExpr(n, parent)
  6446  	case *JSONOverlapsExpr:
  6447  		return c.copyOnRewriteRefOfJSONOverlapsExpr(n, parent)
  6448  	case *JSONPrettyExpr:
  6449  		return c.copyOnRewriteRefOfJSONPrettyExpr(n, parent)
  6450  	case *JSONQuoteExpr:
  6451  		return c.copyOnRewriteRefOfJSONQuoteExpr(n, parent)
  6452  	case *JSONRemoveExpr:
  6453  		return c.copyOnRewriteRefOfJSONRemoveExpr(n, parent)
  6454  	case *JSONSchemaValidFuncExpr:
  6455  		return c.copyOnRewriteRefOfJSONSchemaValidFuncExpr(n, parent)
  6456  	case *JSONSchemaValidationReportFuncExpr:
  6457  		return c.copyOnRewriteRefOfJSONSchemaValidationReportFuncExpr(n, parent)
  6458  	case *JSONSearchExpr:
  6459  		return c.copyOnRewriteRefOfJSONSearchExpr(n, parent)
  6460  	case *JSONStorageFreeExpr:
  6461  		return c.copyOnRewriteRefOfJSONStorageFreeExpr(n, parent)
  6462  	case *JSONStorageSizeExpr:
  6463  		return c.copyOnRewriteRefOfJSONStorageSizeExpr(n, parent)
  6464  	case *JSONUnquoteExpr:
  6465  		return c.copyOnRewriteRefOfJSONUnquoteExpr(n, parent)
  6466  	case *JSONValueExpr:
  6467  		return c.copyOnRewriteRefOfJSONValueExpr(n, parent)
  6468  	case *JSONValueMergeExpr:
  6469  		return c.copyOnRewriteRefOfJSONValueMergeExpr(n, parent)
  6470  	case *JSONValueModifierExpr:
  6471  		return c.copyOnRewriteRefOfJSONValueModifierExpr(n, parent)
  6472  	case *LagLeadExpr:
  6473  		return c.copyOnRewriteRefOfLagLeadExpr(n, parent)
  6474  	case ListArg:
  6475  		return c.copyOnRewriteListArg(n, parent)
  6476  	case *Literal:
  6477  		return c.copyOnRewriteRefOfLiteral(n, parent)
  6478  	case *LocateExpr:
  6479  		return c.copyOnRewriteRefOfLocateExpr(n, parent)
  6480  	case *LockingFunc:
  6481  		return c.copyOnRewriteRefOfLockingFunc(n, parent)
  6482  	case *MatchExpr:
  6483  		return c.copyOnRewriteRefOfMatchExpr(n, parent)
  6484  	case *Max:
  6485  		return c.copyOnRewriteRefOfMax(n, parent)
  6486  	case *MemberOfExpr:
  6487  		return c.copyOnRewriteRefOfMemberOfExpr(n, parent)
  6488  	case *Min:
  6489  		return c.copyOnRewriteRefOfMin(n, parent)
  6490  	case *NTHValueExpr:
  6491  		return c.copyOnRewriteRefOfNTHValueExpr(n, parent)
  6492  	case *NamedWindow:
  6493  		return c.copyOnRewriteRefOfNamedWindow(n, parent)
  6494  	case *NotExpr:
  6495  		return c.copyOnRewriteRefOfNotExpr(n, parent)
  6496  	case *NtileExpr:
  6497  		return c.copyOnRewriteRefOfNtileExpr(n, parent)
  6498  	case *NullVal:
  6499  		return c.copyOnRewriteRefOfNullVal(n, parent)
  6500  	case *Offset:
  6501  		return c.copyOnRewriteRefOfOffset(n, parent)
  6502  	case *OrExpr:
  6503  		return c.copyOnRewriteRefOfOrExpr(n, parent)
  6504  	case *PerformanceSchemaFuncExpr:
  6505  		return c.copyOnRewriteRefOfPerformanceSchemaFuncExpr(n, parent)
  6506  	case *RegexpInstrExpr:
  6507  		return c.copyOnRewriteRefOfRegexpInstrExpr(n, parent)
  6508  	case *RegexpLikeExpr:
  6509  		return c.copyOnRewriteRefOfRegexpLikeExpr(n, parent)
  6510  	case *RegexpReplaceExpr:
  6511  		return c.copyOnRewriteRefOfRegexpReplaceExpr(n, parent)
  6512  	case *RegexpSubstrExpr:
  6513  		return c.copyOnRewriteRefOfRegexpSubstrExpr(n, parent)
  6514  	case *Std:
  6515  		return c.copyOnRewriteRefOfStd(n, parent)
  6516  	case *StdDev:
  6517  		return c.copyOnRewriteRefOfStdDev(n, parent)
  6518  	case *StdPop:
  6519  		return c.copyOnRewriteRefOfStdPop(n, parent)
  6520  	case *StdSamp:
  6521  		return c.copyOnRewriteRefOfStdSamp(n, parent)
  6522  	case *Subquery:
  6523  		return c.copyOnRewriteRefOfSubquery(n, parent)
  6524  	case *SubstrExpr:
  6525  		return c.copyOnRewriteRefOfSubstrExpr(n, parent)
  6526  	case *Sum:
  6527  		return c.copyOnRewriteRefOfSum(n, parent)
  6528  	case *TimestampFuncExpr:
  6529  		return c.copyOnRewriteRefOfTimestampFuncExpr(n, parent)
  6530  	case *TrimFuncExpr:
  6531  		return c.copyOnRewriteRefOfTrimFuncExpr(n, parent)
  6532  	case *UnaryExpr:
  6533  		return c.copyOnRewriteRefOfUnaryExpr(n, parent)
  6534  	case *UpdateXMLExpr:
  6535  		return c.copyOnRewriteRefOfUpdateXMLExpr(n, parent)
  6536  	case ValTuple:
  6537  		return c.copyOnRewriteValTuple(n, parent)
  6538  	case *ValuesFuncExpr:
  6539  		return c.copyOnRewriteRefOfValuesFuncExpr(n, parent)
  6540  	case *VarPop:
  6541  		return c.copyOnRewriteRefOfVarPop(n, parent)
  6542  	case *VarSamp:
  6543  		return c.copyOnRewriteRefOfVarSamp(n, parent)
  6544  	case *Variable:
  6545  		return c.copyOnRewriteRefOfVariable(n, parent)
  6546  	case *Variance:
  6547  		return c.copyOnRewriteRefOfVariance(n, parent)
  6548  	case *WeightStringFuncExpr:
  6549  		return c.copyOnRewriteRefOfWeightStringFuncExpr(n, parent)
  6550  	case *XorExpr:
  6551  		return c.copyOnRewriteRefOfXorExpr(n, parent)
  6552  	default:
  6553  		// this should never happen
  6554  		return nil, false
  6555  	}
  6556  }
  6557  func (c *cow) copyOnRewriteInsertRows(n InsertRows, parent SQLNode) (out SQLNode, changed bool) {
  6558  	if n == nil || c.cursor.stop {
  6559  		return n, false
  6560  	}
  6561  	switch n := n.(type) {
  6562  	case *Select:
  6563  		return c.copyOnRewriteRefOfSelect(n, parent)
  6564  	case *Union:
  6565  		return c.copyOnRewriteRefOfUnion(n, parent)
  6566  	case Values:
  6567  		return c.copyOnRewriteValues(n, parent)
  6568  	default:
  6569  		// this should never happen
  6570  		return nil, false
  6571  	}
  6572  }
  6573  func (c *cow) copyOnRewriteSelectExpr(n SelectExpr, parent SQLNode) (out SQLNode, changed bool) {
  6574  	if n == nil || c.cursor.stop {
  6575  		return n, false
  6576  	}
  6577  	switch n := n.(type) {
  6578  	case *AliasedExpr:
  6579  		return c.copyOnRewriteRefOfAliasedExpr(n, parent)
  6580  	case *Nextval:
  6581  		return c.copyOnRewriteRefOfNextval(n, parent)
  6582  	case *StarExpr:
  6583  		return c.copyOnRewriteRefOfStarExpr(n, parent)
  6584  	default:
  6585  		// this should never happen
  6586  		return nil, false
  6587  	}
  6588  }
  6589  func (c *cow) copyOnRewriteSelectStatement(n SelectStatement, parent SQLNode) (out SQLNode, changed bool) {
  6590  	if n == nil || c.cursor.stop {
  6591  		return n, false
  6592  	}
  6593  	switch n := n.(type) {
  6594  	case *Select:
  6595  		return c.copyOnRewriteRefOfSelect(n, parent)
  6596  	case *Union:
  6597  		return c.copyOnRewriteRefOfUnion(n, parent)
  6598  	default:
  6599  		// this should never happen
  6600  		return nil, false
  6601  	}
  6602  }
  6603  func (c *cow) copyOnRewriteShowInternal(n ShowInternal, parent SQLNode) (out SQLNode, changed bool) {
  6604  	if n == nil || c.cursor.stop {
  6605  		return n, false
  6606  	}
  6607  	switch n := n.(type) {
  6608  	case *ShowBasic:
  6609  		return c.copyOnRewriteRefOfShowBasic(n, parent)
  6610  	case *ShowCreate:
  6611  		return c.copyOnRewriteRefOfShowCreate(n, parent)
  6612  	case *ShowOther:
  6613  		return c.copyOnRewriteRefOfShowOther(n, parent)
  6614  	default:
  6615  		// this should never happen
  6616  		return nil, false
  6617  	}
  6618  }
  6619  func (c *cow) copyOnRewriteSimpleTableExpr(n SimpleTableExpr, parent SQLNode) (out SQLNode, changed bool) {
  6620  	if n == nil || c.cursor.stop {
  6621  		return n, false
  6622  	}
  6623  	switch n := n.(type) {
  6624  	case *DerivedTable:
  6625  		return c.copyOnRewriteRefOfDerivedTable(n, parent)
  6626  	case TableName:
  6627  		return c.copyOnRewriteTableName(n, parent)
  6628  	default:
  6629  		// this should never happen
  6630  		return nil, false
  6631  	}
  6632  }
  6633  func (c *cow) copyOnRewriteStatement(n Statement, parent SQLNode) (out SQLNode, changed bool) {
  6634  	if n == nil || c.cursor.stop {
  6635  		return n, false
  6636  	}
  6637  	switch n := n.(type) {
  6638  	case *AlterDatabase:
  6639  		return c.copyOnRewriteRefOfAlterDatabase(n, parent)
  6640  	case *AlterMigration:
  6641  		return c.copyOnRewriteRefOfAlterMigration(n, parent)
  6642  	case *AlterTable:
  6643  		return c.copyOnRewriteRefOfAlterTable(n, parent)
  6644  	case *AlterView:
  6645  		return c.copyOnRewriteRefOfAlterView(n, parent)
  6646  	case *AlterVschema:
  6647  		return c.copyOnRewriteRefOfAlterVschema(n, parent)
  6648  	case *Begin:
  6649  		return c.copyOnRewriteRefOfBegin(n, parent)
  6650  	case *CallProc:
  6651  		return c.copyOnRewriteRefOfCallProc(n, parent)
  6652  	case *CommentOnly:
  6653  		return c.copyOnRewriteRefOfCommentOnly(n, parent)
  6654  	case *Commit:
  6655  		return c.copyOnRewriteRefOfCommit(n, parent)
  6656  	case *CreateDatabase:
  6657  		return c.copyOnRewriteRefOfCreateDatabase(n, parent)
  6658  	case *CreateTable:
  6659  		return c.copyOnRewriteRefOfCreateTable(n, parent)
  6660  	case *CreateView:
  6661  		return c.copyOnRewriteRefOfCreateView(n, parent)
  6662  	case *DeallocateStmt:
  6663  		return c.copyOnRewriteRefOfDeallocateStmt(n, parent)
  6664  	case *Delete:
  6665  		return c.copyOnRewriteRefOfDelete(n, parent)
  6666  	case *DropDatabase:
  6667  		return c.copyOnRewriteRefOfDropDatabase(n, parent)
  6668  	case *DropTable:
  6669  		return c.copyOnRewriteRefOfDropTable(n, parent)
  6670  	case *DropView:
  6671  		return c.copyOnRewriteRefOfDropView(n, parent)
  6672  	case *ExecuteStmt:
  6673  		return c.copyOnRewriteRefOfExecuteStmt(n, parent)
  6674  	case *ExplainStmt:
  6675  		return c.copyOnRewriteRefOfExplainStmt(n, parent)
  6676  	case *ExplainTab:
  6677  		return c.copyOnRewriteRefOfExplainTab(n, parent)
  6678  	case *Flush:
  6679  		return c.copyOnRewriteRefOfFlush(n, parent)
  6680  	case *Insert:
  6681  		return c.copyOnRewriteRefOfInsert(n, parent)
  6682  	case *Load:
  6683  		return c.copyOnRewriteRefOfLoad(n, parent)
  6684  	case *LockTables:
  6685  		return c.copyOnRewriteRefOfLockTables(n, parent)
  6686  	case *OtherAdmin:
  6687  		return c.copyOnRewriteRefOfOtherAdmin(n, parent)
  6688  	case *OtherRead:
  6689  		return c.copyOnRewriteRefOfOtherRead(n, parent)
  6690  	case *PrepareStmt:
  6691  		return c.copyOnRewriteRefOfPrepareStmt(n, parent)
  6692  	case *Release:
  6693  		return c.copyOnRewriteRefOfRelease(n, parent)
  6694  	case *RenameTable:
  6695  		return c.copyOnRewriteRefOfRenameTable(n, parent)
  6696  	case *RevertMigration:
  6697  		return c.copyOnRewriteRefOfRevertMigration(n, parent)
  6698  	case *Rollback:
  6699  		return c.copyOnRewriteRefOfRollback(n, parent)
  6700  	case *SRollback:
  6701  		return c.copyOnRewriteRefOfSRollback(n, parent)
  6702  	case *Savepoint:
  6703  		return c.copyOnRewriteRefOfSavepoint(n, parent)
  6704  	case *Select:
  6705  		return c.copyOnRewriteRefOfSelect(n, parent)
  6706  	case *Set:
  6707  		return c.copyOnRewriteRefOfSet(n, parent)
  6708  	case *Show:
  6709  		return c.copyOnRewriteRefOfShow(n, parent)
  6710  	case *ShowMigrationLogs:
  6711  		return c.copyOnRewriteRefOfShowMigrationLogs(n, parent)
  6712  	case *ShowThrottledApps:
  6713  		return c.copyOnRewriteRefOfShowThrottledApps(n, parent)
  6714  	case *ShowThrottlerStatus:
  6715  		return c.copyOnRewriteRefOfShowThrottlerStatus(n, parent)
  6716  	case *Stream:
  6717  		return c.copyOnRewriteRefOfStream(n, parent)
  6718  	case *TruncateTable:
  6719  		return c.copyOnRewriteRefOfTruncateTable(n, parent)
  6720  	case *Union:
  6721  		return c.copyOnRewriteRefOfUnion(n, parent)
  6722  	case *UnlockTables:
  6723  		return c.copyOnRewriteRefOfUnlockTables(n, parent)
  6724  	case *Update:
  6725  		return c.copyOnRewriteRefOfUpdate(n, parent)
  6726  	case *Use:
  6727  		return c.copyOnRewriteRefOfUse(n, parent)
  6728  	case *VExplainStmt:
  6729  		return c.copyOnRewriteRefOfVExplainStmt(n, parent)
  6730  	case *VStream:
  6731  		return c.copyOnRewriteRefOfVStream(n, parent)
  6732  	default:
  6733  		// this should never happen
  6734  		return nil, false
  6735  	}
  6736  }
  6737  func (c *cow) copyOnRewriteTableExpr(n TableExpr, parent SQLNode) (out SQLNode, changed bool) {
  6738  	if n == nil || c.cursor.stop {
  6739  		return n, false
  6740  	}
  6741  	switch n := n.(type) {
  6742  	case *AliasedTableExpr:
  6743  		return c.copyOnRewriteRefOfAliasedTableExpr(n, parent)
  6744  	case *JSONTableExpr:
  6745  		return c.copyOnRewriteRefOfJSONTableExpr(n, parent)
  6746  	case *JoinTableExpr:
  6747  		return c.copyOnRewriteRefOfJoinTableExpr(n, parent)
  6748  	case *ParenTableExpr:
  6749  		return c.copyOnRewriteRefOfParenTableExpr(n, parent)
  6750  	default:
  6751  		// this should never happen
  6752  		return nil, false
  6753  	}
  6754  }
  6755  func (c *cow) copyOnRewriteAlgorithmValue(n AlgorithmValue, parent SQLNode) (out SQLNode, changed bool) {
  6756  	if c.cursor.stop {
  6757  		return n, false
  6758  	}
  6759  	if c.pre != nil {
  6760  		c.pre(n, parent)
  6761  	}
  6762  	if c.post != nil {
  6763  		out, changed = c.postVisit(n, parent, changed)
  6764  	} else {
  6765  		out = n
  6766  	}
  6767  	return
  6768  }
  6769  func (c *cow) copyOnRewriteArgument(n Argument, parent SQLNode) (out SQLNode, changed bool) {
  6770  	if c.cursor.stop {
  6771  		return n, false
  6772  	}
  6773  	if c.pre != nil {
  6774  		c.pre(n, parent)
  6775  	}
  6776  	if c.post != nil {
  6777  		out, changed = c.postVisit(n, parent, changed)
  6778  	} else {
  6779  		out = n
  6780  	}
  6781  	return
  6782  }
  6783  func (c *cow) copyOnRewriteBoolVal(n BoolVal, parent SQLNode) (out SQLNode, changed bool) {
  6784  	if c.cursor.stop {
  6785  		return n, false
  6786  	}
  6787  	if c.pre != nil {
  6788  		c.pre(n, parent)
  6789  	}
  6790  	if c.post != nil {
  6791  		out, changed = c.postVisit(n, parent, changed)
  6792  	} else {
  6793  		out = n
  6794  	}
  6795  	return
  6796  }
  6797  func (c *cow) copyOnRewriteListArg(n ListArg, parent SQLNode) (out SQLNode, changed bool) {
  6798  	if c.cursor.stop {
  6799  		return n, false
  6800  	}
  6801  	if c.pre != nil {
  6802  		c.pre(n, parent)
  6803  	}
  6804  	if c.post != nil {
  6805  		out, changed = c.postVisit(n, parent, changed)
  6806  	} else {
  6807  		out = n
  6808  	}
  6809  	return
  6810  }
  6811  func (c *cow) copyOnRewriteMatchAction(n MatchAction, parent SQLNode) (out SQLNode, changed bool) {
  6812  	if c.cursor.stop {
  6813  		return n, false
  6814  	}
  6815  	if c.pre != nil {
  6816  		c.pre(n, parent)
  6817  	}
  6818  	if c.post != nil {
  6819  		out, changed = c.postVisit(n, parent, changed)
  6820  	} else {
  6821  		out = n
  6822  	}
  6823  	return
  6824  }
  6825  func (c *cow) copyOnRewriteReferenceAction(n ReferenceAction, parent SQLNode) (out SQLNode, changed bool) {
  6826  	if c.cursor.stop {
  6827  		return n, false
  6828  	}
  6829  	if c.pre != nil {
  6830  		c.pre(n, parent)
  6831  	}
  6832  	if c.post != nil {
  6833  		out, changed = c.postVisit(n, parent, changed)
  6834  	} else {
  6835  		out = n
  6836  	}
  6837  	return
  6838  }
  6839  func (c *cow) copyOnRewriteRefOfIdentifierCI(n *IdentifierCI, parent SQLNode) (out SQLNode, changed bool) {
  6840  	if n == nil || c.cursor.stop {
  6841  		return n, false
  6842  	}
  6843  	out = n
  6844  	if c.pre == nil || c.pre(n, parent) {
  6845  	}
  6846  	if c.post != nil {
  6847  		out, changed = c.postVisit(out, parent, changed)
  6848  	}
  6849  	return
  6850  }
  6851  func (c *cow) copyOnRewriteRefOfIdentifierCS(n *IdentifierCS, parent SQLNode) (out SQLNode, changed bool) {
  6852  	if n == nil || c.cursor.stop {
  6853  		return n, false
  6854  	}
  6855  	out = n
  6856  	if c.pre == nil || c.pre(n, parent) {
  6857  	}
  6858  	if c.post != nil {
  6859  		out, changed = c.postVisit(out, parent, changed)
  6860  	}
  6861  	return
  6862  }
  6863  func (c *cow) copyOnRewriteRefOfRootNode(n *RootNode, parent SQLNode) (out SQLNode, changed bool) {
  6864  	if n == nil || c.cursor.stop {
  6865  		return n, false
  6866  	}
  6867  	out = n
  6868  	if c.pre == nil || c.pre(n, parent) {
  6869  		_SQLNode, changedSQLNode := c.copyOnRewriteSQLNode(n.SQLNode, n)
  6870  		if changedSQLNode {
  6871  			res := *n
  6872  			res.SQLNode, _ = _SQLNode.(SQLNode)
  6873  			out = &res
  6874  			if c.cloned != nil {
  6875  				c.cloned(n, out)
  6876  			}
  6877  			changed = true
  6878  		}
  6879  	}
  6880  	if c.post != nil {
  6881  		out, changed = c.postVisit(out, parent, changed)
  6882  	}
  6883  	return
  6884  }
  6885  func (c *cow) copyOnRewriteRefOfTableName(n *TableName, parent SQLNode) (out SQLNode, changed bool) {
  6886  	if n == nil || c.cursor.stop {
  6887  		return n, false
  6888  	}
  6889  	out = n
  6890  	if c.pre == nil || c.pre(n, parent) {
  6891  		_Name, changedName := c.copyOnRewriteIdentifierCS(n.Name, n)
  6892  		_Qualifier, changedQualifier := c.copyOnRewriteIdentifierCS(n.Qualifier, n)
  6893  		if changedName || changedQualifier {
  6894  			res := *n
  6895  			res.Name, _ = _Name.(IdentifierCS)
  6896  			res.Qualifier, _ = _Qualifier.(IdentifierCS)
  6897  			out = &res
  6898  			if c.cloned != nil {
  6899  				c.cloned(n, out)
  6900  			}
  6901  			changed = true
  6902  		}
  6903  	}
  6904  	if c.post != nil {
  6905  		out, changed = c.postVisit(out, parent, changed)
  6906  	}
  6907  	return
  6908  }
  6909  func (c *cow) copyOnRewriteRefOfVindexParam(n *VindexParam, parent SQLNode) (out SQLNode, changed bool) {
  6910  	if n == nil || c.cursor.stop {
  6911  		return n, false
  6912  	}
  6913  	out = n
  6914  	if c.pre == nil || c.pre(n, parent) {
  6915  		_Key, changedKey := c.copyOnRewriteIdentifierCI(n.Key, n)
  6916  		if changedKey {
  6917  			res := *n
  6918  			res.Key, _ = _Key.(IdentifierCI)
  6919  			out = &res
  6920  			if c.cloned != nil {
  6921  				c.cloned(n, out)
  6922  			}
  6923  			changed = true
  6924  		}
  6925  	}
  6926  	if c.post != nil {
  6927  		out, changed = c.postVisit(out, parent, changed)
  6928  	}
  6929  	return
  6930  }