(m *ast.MergeStatement, opts ast.FormatOptions)
| 946 | } |
| 947 | |
| 948 | func renderMerge(m *ast.MergeStatement, opts ast.FormatOptions) string { |
| 949 | if m == nil { |
| 950 | return "" |
| 951 | } |
| 952 | f := newNodeFormatter(opts) |
| 953 | sb := f.sb |
| 954 | |
| 955 | sb.WriteString(f.kw("MERGE INTO")) |
| 956 | sb.WriteString(" ") |
| 957 | sb.WriteString(tableRefSQL(&m.TargetTable, f)) |
| 958 | if m.TargetAlias != "" { |
| 959 | sb.WriteString(" ") |
| 960 | sb.WriteString(m.TargetAlias) |
| 961 | } |
| 962 | |
| 963 | sb.WriteString(f.clauseSep()) |
| 964 | sb.WriteString(f.kw("USING")) |
| 965 | sb.WriteString(" ") |
| 966 | sb.WriteString(tableRefSQL(&m.SourceTable, f)) |
| 967 | if m.SourceAlias != "" { |
| 968 | sb.WriteString(" ") |
| 969 | sb.WriteString(m.SourceAlias) |
| 970 | } |
| 971 | |
| 972 | sb.WriteString(f.clauseSep()) |
| 973 | sb.WriteString(f.kw("ON")) |
| 974 | sb.WriteString(" ") |
| 975 | sb.WriteString(exprSQL(m.OnCondition)) |
| 976 | |
| 977 | for _, when := range m.WhenClauses { |
| 978 | sb.WriteString(f.clauseSep()) |
| 979 | sb.WriteString(f.kw("WHEN")) |
| 980 | sb.WriteString(" ") |
| 981 | switch when.Type { |
| 982 | case "MATCHED": |
| 983 | sb.WriteString(f.kw("MATCHED")) |
| 984 | case "NOT_MATCHED": |
| 985 | sb.WriteString(f.kw("NOT MATCHED")) |
| 986 | case "NOT_MATCHED_BY_SOURCE": |
| 987 | sb.WriteString(f.kw("NOT MATCHED BY SOURCE")) |
| 988 | default: |
| 989 | sb.WriteString(f.kw(when.Type)) |
| 990 | } |
| 991 | if when.Condition != nil { |
| 992 | sb.WriteString(" ") |
| 993 | sb.WriteString(f.kw("AND")) |
| 994 | sb.WriteString(" ") |
| 995 | sb.WriteString(exprSQL(when.Condition)) |
| 996 | } |
| 997 | sb.WriteString(" ") |
| 998 | sb.WriteString(f.kw("THEN")) |
| 999 | |
| 1000 | if when.Action != nil { |
| 1001 | sb.WriteString(" ") |
| 1002 | switch when.Action.ActionType { |
| 1003 | case "UPDATE": |
| 1004 | sb.WriteString(f.kw("UPDATE")) |
| 1005 | sb.WriteString(" ") |
no test coverage detected