PutMergeStatement returns a MergeStatement to the pool. It recursively releases nested expressions in WHEN clauses and OUTPUT.
(stmt *MergeStatement)
| 1554 | // PutMergeStatement returns a MergeStatement to the pool. |
| 1555 | // It recursively releases nested expressions in WHEN clauses and OUTPUT. |
| 1556 | func PutMergeStatement(stmt *MergeStatement) { |
| 1557 | if stmt == nil { |
| 1558 | return |
| 1559 | } |
| 1560 | |
| 1561 | // Release OnCondition |
| 1562 | PutExpression(stmt.OnCondition) |
| 1563 | stmt.OnCondition = nil |
| 1564 | |
| 1565 | // Release WHEN clause expressions |
| 1566 | for i := range stmt.WhenClauses { |
| 1567 | if stmt.WhenClauses[i] == nil { |
| 1568 | continue |
| 1569 | } |
| 1570 | PutExpression(stmt.WhenClauses[i].Condition) |
| 1571 | stmt.WhenClauses[i].Condition = nil |
| 1572 | if stmt.WhenClauses[i].Action != nil { |
| 1573 | for j := range stmt.WhenClauses[i].Action.SetClauses { |
| 1574 | PutExpression(stmt.WhenClauses[i].Action.SetClauses[j].Value) |
| 1575 | stmt.WhenClauses[i].Action.SetClauses[j].Value = nil |
| 1576 | stmt.WhenClauses[i].Action.SetClauses[j].Column = "" |
| 1577 | } |
| 1578 | stmt.WhenClauses[i].Action.SetClauses = stmt.WhenClauses[i].Action.SetClauses[:0] |
| 1579 | for j, expr := range stmt.WhenClauses[i].Action.Values { |
| 1580 | PutExpression(expr) |
| 1581 | stmt.WhenClauses[i].Action.Values[j] = nil |
| 1582 | } |
| 1583 | stmt.WhenClauses[i].Action.Values = stmt.WhenClauses[i].Action.Values[:0] |
| 1584 | stmt.WhenClauses[i].Action.Columns = stmt.WhenClauses[i].Action.Columns[:0] |
| 1585 | stmt.WhenClauses[i].Action.ActionType = "" |
| 1586 | stmt.WhenClauses[i].Action.DefaultValues = false |
| 1587 | stmt.WhenClauses[i].Action = nil |
| 1588 | } |
| 1589 | stmt.WhenClauses[i].Type = "" |
| 1590 | stmt.WhenClauses[i] = nil |
| 1591 | } |
| 1592 | stmt.WhenClauses = stmt.WhenClauses[:0] |
| 1593 | |
| 1594 | // Release OUTPUT expressions |
| 1595 | for i, expr := range stmt.Output { |
| 1596 | PutExpression(expr) |
| 1597 | stmt.Output[i] = nil |
| 1598 | } |
| 1599 | stmt.Output = stmt.Output[:0] |
| 1600 | |
| 1601 | // Reset TargetTable / SourceTable (value types - zero them out) |
| 1602 | stmt.TargetTable = TableReference{} |
| 1603 | stmt.SourceTable = TableReference{} |
| 1604 | stmt.TargetAlias = "" |
| 1605 | stmt.SourceAlias = "" |
| 1606 | |
| 1607 | mergeStmtPool.Put(stmt) |
| 1608 | } |
| 1609 | |
| 1610 | // GetCreateViewStatement gets a CreateViewStatement from the pool. |
| 1611 | func GetCreateViewStatement() *CreateViewStatement { |