MCPcopy Create free account
hub / github.com/bytebase/bytebase / generateUpdate

Method generateUpdate

backend/plugin/parser/plsql/restore.go:238–304  ·  view source on GitHub ↗
(stmt *oracleast.UpdateStmt)

Source from the content-addressed store, hash-verified

236}
237
238func (g *generator) generateUpdate(stmt *oracleast.UpdateStmt) error {
239 updateColumns := extractOmniUpdateColumns(stmt)
240 uk, err := g.findDisjointUniqueKey(updateColumns)
241 if err != nil {
242 return err
243 }
244
245 var buf strings.Builder
246 if _, err := fmt.Fprintf(&buf, "MERGE INTO \"%s\".\"%s\" t\nUSING \"%s\".\"%s\" b\n ON(", g.originalDatabase, g.originalTable, g.backupDatabase, g.backupTable); err != nil {
247 return err
248 }
249 for i, column := range uk {
250 if i > 0 {
251 if _, err := fmt.Fprint(&buf, " AND"); err != nil {
252 return err
253 }
254 }
255 if _, err := fmt.Fprintf(&buf, " t.\"%s\" = b.\"%s\"", column, column); err != nil {
256 return err
257 }
258 }
259 if _, err := fmt.Fprint(&buf, ")\nWHEN MATCHED THEN\n UPDATE SET"); err != nil {
260 return err
261 }
262 for i, field := range updateColumns {
263 if i > 0 {
264 if _, err := fmt.Fprint(&buf, ","); err != nil {
265 return err
266 }
267 }
268 // The field is written by user and no need to escape.
269 if _, err := fmt.Fprintf(&buf, " t.\"%s\" = b.\"%s\"", field, field); err != nil {
270 return err
271 }
272 }
273 if _, err := fmt.Fprint(&buf, "\nWHEN NOT MATCHED THEN\n INSERT ("); err != nil {
274 return err
275 }
276 for i, column := range g.restorableColumns() {
277 if i > 0 {
278 if _, err := fmt.Fprint(&buf, ", "); err != nil {
279 return err
280 }
281 }
282 if _, err := fmt.Fprintf(&buf, "\"%s\"", column); err != nil {
283 return err
284 }
285 }
286 if _, err := fmt.Fprint(&buf, ") VALUES ("); err != nil {
287 return err
288 }
289 for i, column := range g.restorableColumns() {
290 if i > 0 {
291 if _, err := fmt.Fprint(&buf, ", "); err != nil {
292 return err
293 }
294 }
295 if _, err := fmt.Fprintf(&buf, "b.\"%s\"", column); err != nil {

Callers 1

generateMethod · 0.95

Calls 4

findDisjointUniqueKeyMethod · 0.95
restorableColumnsMethod · 0.95
extractOmniUpdateColumnsFunction · 0.85
StringMethod · 0.65

Tested by

no test coverage detected