in assessment/collectors/infoschema_collector.go [310:391]
func (c InfoSchemaCollector) ListColumnDefinitions() (map[string]utils.SrcColumnDetails, map[string]utils.SpColumnDetails) {
srcColumnDetails := make(map[string]utils.SrcColumnDetails)
spColumnDetails := make(map[string]utils.SpColumnDetails)
for _, table := range c.conv.SrcSchema {
for _, column := range table.ColDefs {
pkOrder := -1
for _, pk := range table.PrimaryKeys {
if pk.ColId == column.Id {
pkOrder = pk.Order
break
}
}
var foreignKeys []string
for _, fk := range table.ForeignKeys {
for _, col := range fk.ColIds {
if col == column.Id {
foreignKeys = append(foreignKeys, fk.Name)
break
}
}
}
onInsertTimestampSet := false
if column.DefaultValue.IsPresent && column.DefaultValue.Value.Statement == "CURRENT_TIMESTAMP" {
onInsertTimestampSet = true
}
srcColumnDetails[column.Id] = utils.SrcColumnDetails{
Id: column.Id,
Name: column.Name,
TableId: table.Id,
TableName: table.Name,
Datatype: column.Type.Name,
IsNull: !column.NotNull,
Mods: column.Type.Mods,
ArrayBounds: column.Type.ArrayBounds,
AutoGen: column.AutoGen,
DefaultValue: column.DefaultValue,
PrimaryKeyOrder: pkOrder,
ForeignKey: foreignKeys,
IsUnsigned: c.tables[table.Id].ColumnAssessmentInfos[column.Id].IsUnsigned,
MaxColumnSize: c.tables[table.Id].ColumnAssessmentInfos[column.Id].MaxColumnSize,
GeneratedColumn: c.tables[table.Id].ColumnAssessmentInfos[column.Id].GeneratedColumn,
IsOnUpdateTimestampSet: c.tables[table.Id].ColumnAssessmentInfos[column.Id].IsOnUpdateTimestampSet,
IsOnInsertTimestampSet: onInsertTimestampSet,
}
}
}
for _, table := range c.conv.SpSchema {
for _, column := range table.ColDefs {
pkOrder := -1
for _, pk := range table.PrimaryKeys {
if pk.ColId == column.Id {
pkOrder = pk.Order
break
}
}
var foreignKeys []string
for _, fk := range table.ForeignKeys {
for _, col := range fk.ColIds {
if col == column.Id {
foreignKeys = append(foreignKeys, fk.Name)
break
}
}
}
spColumnDetails[column.Id] = utils.SpColumnDetails{
Id: column.Id,
Name: column.Name,
TableId: table.Id,
TableName: table.Name,
Datatype: column.T.Name,
IsNull: !column.NotNull,
Len: column.T.Len,
IsArray: column.T.IsArray,
AutoGen: column.AutoGen,
DefaultValue: column.DefaultValue,
PrimaryKeyOrder: pkOrder,
ForeignKey: foreignKeys,
}
}
}
return srcColumnDetails, spColumnDetails
}