(txn *sql.Tx, outerRTableMap map[db.ConstraintKey]string, outerRColumnMap map[db.ConstraintKey][]string, schemaName, constraintName string)
| 578 | } |
| 579 | |
| 580 | func getOuterSchemaRColumns(txn *sql.Tx, outerRTableMap map[db.ConstraintKey]string, outerRColumnMap map[db.ConstraintKey][]string, schemaName, constraintName string) (string, []string, error) { |
| 581 | queryColumns := fmt.Sprintf(` |
| 582 | SELECT |
| 583 | TABLE_NAME, |
| 584 | CONSTRAINT_NAME, |
| 585 | COLUMN_NAME |
| 586 | FROM |
| 587 | SYS.ALL_CONS_COLUMNS |
| 588 | WHERE |
| 589 | OWNER = '%s' |
| 590 | ORDER BY TABLE_NAME, CONSTRAINT_NAME, POSITION`, schemaName) |
| 591 | |
| 592 | slog.Debug("running get outer schema reference columns query") |
| 593 | rows, err := txn.Query(queryColumns) |
| 594 | if err != nil { |
| 595 | return "", nil, util.FormatErrorWithQuery(err, queryColumns) |
| 596 | } |
| 597 | defer rows.Close() |
| 598 | |
| 599 | for rows.Next() { |
| 600 | var tableName, constraintName string |
| 601 | var columnName sql.NullString |
| 602 | if err := rows.Scan(&tableName, &constraintName, &columnName); err != nil { |
| 603 | return "", nil, err |
| 604 | } |
| 605 | if !columnName.Valid { |
| 606 | continue |
| 607 | } |
| 608 | key := db.ConstraintKey{Schema: schemaName, Constraint: constraintName} |
| 609 | outerRTableMap[key] = tableName |
| 610 | outerRColumnMap[key] = append(outerRColumnMap[key], columnName.String) |
| 611 | } |
| 612 | if err := rows.Err(); err != nil { |
| 613 | return "", nil, util.FormatErrorWithQuery(err, queryColumns) |
| 614 | } |
| 615 | |
| 616 | constraintKey := db.ConstraintKey{Schema: schemaName, Constraint: constraintName} |
| 617 | return outerRTableMap[constraintKey], outerRColumnMap[constraintKey], nil |
| 618 | } |
| 619 | |
| 620 | func getConstraints(txn *sql.Tx, schemaName string) ( |
| 621 | map[db.TableKey][]*storepb.IndexMetadata, |
no test coverage detected