func()

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)
}