in webv2/api/schema.go [387:455]
func (tableHandler *TableAPIHandler) GetTableWithErrors(w http.ResponseWriter, r *http.Request) {
sessionState := session.GetSessionState()
sessionState.Conv.ConvLock.RLock()
tableIds := common.GetSortedTableIdsBySpName(sessionState.Conv.SpSchema)
tableHandler.DDLVerifier.RefreshSpannerClient(context.Background(), sessionState.Conv.SpProjectId, sessionState.Conv.SpInstanceId)
expressionDetails := tableHandler.DDLVerifier.GetSpannerExpressionDetails(sessionState.Conv, tableIds)
expressions, err := tableHandler.DDLVerifier.VerifySpannerDDL(sessionState.Conv, expressionDetails)
if err != nil && strings.Contains(err.Error(), "expressions either failed verification") {
for _, exp := range expressions.ExpressionVerificationOutputList {
switch exp.ExpressionDetail.Type {
case "DEFAULT":
{
if !exp.Result {
tableId := exp.ExpressionDetail.Metadata["TableId"]
columnId := exp.ExpressionDetail.Metadata["ColId"]
issues := sessionState.Conv.SchemaIssues[tableId].ColumnLevelIssues[columnId]
issues = append(issues, internal.DefaultValueError)
sessionState.Conv.SchemaIssues[tableId].ColumnLevelIssues[columnId] = issues
}
}
}
}
} else if err != nil {
for _, tableId := range tableIds {
srcTable := sessionState.Conv.SrcSchema[tableId]
for _, srcColId := range srcTable.ColIds {
srcCol := srcTable.ColDefs[srcColId]
if srcCol.DefaultValue.IsPresent {
issues := sessionState.Conv.SchemaIssues[tableId]
sessionState.Conv.SchemaIssues[tableId] = issues
}
}
}
}
if sessionState.Conv.SpProjectId != "" {
session.UpdateSessionFile()
}
defer sessionState.Conv.ConvLock.RUnlock()
sessionState.Conv.SchemaIssues = common.RemoveError(sessionState.Conv.SchemaIssues)
var tableIdName []types.TableIdAndName
for id, issues := range sessionState.Conv.SchemaIssues {
for _, issue := range issues.TableLevelIssues {
if reports.IssueDB[issue].Severity == reports.Errors {
t := types.TableIdAndName{
Id: id,
Name: sessionState.Conv.SpSchema[id].Name,
}
tableIdName = append(tableIdName, t)
}
}
for _, columnIssues := range issues.ColumnLevelIssues {
for _, issue := range columnIssues {
if reports.IssueDB[issue].Severity == reports.Errors {
t := types.TableIdAndName{
Id: id,
Name: sessionState.Conv.SpSchema[id].Name,
}
tableIdName = append(tableIdName, t)
}
}
}
}
tableIdName = uniqueAndSortTableIdName(tableIdName)
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(tableIdName)
}