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