Skip to content

Commit

Permalink
Fix the not null violation error message in detail
Browse files Browse the repository at this point in the history
  • Loading branch information
irwin-chequer committed Apr 12, 2024
1 parent cb19116 commit 6da3d5b
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ from information_schema.COLUMNS
var column = table.NewColumn();
column.Name = new QsiIdentifier(reader.GetString(0), false);
column.IsNullable = reader.GetString(1) == "YES";
column.Default = reader.GetString(2);
column.Default = reader.IsDBNull(2) ? null : reader.GetString(2);
}
}

Expand Down
16 changes: 8 additions & 8 deletions Qsi/Analyzers/Action/QsiActionAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -466,9 +466,10 @@ protected virtual async ValueTask<IQsiAnalysisResult[]> ExecuteDataInsertAction(
}

ColumnTarget[] columnTargets = ResolveColumnTargetsFromDataInsertAction(context, table, action);
var columnWithInvalidDefault = ResolveNotNullableColumnWithInvalidDefault(table.Columns, columnTargets);

if (CheckNotNullConstraintsExceptTarget(table.Columns, columnTargets))
throw new QsiException(QsiError.NotNullConstraints);
if (columnWithInvalidDefault is not null)
throw new QsiException(QsiError.NotNullConstraints, columnWithInvalidDefault.Name.Value);

var dataContext = new TableDataInsertContext(context, table)
{
Expand Down Expand Up @@ -609,13 +610,12 @@ protected virtual SetColumnTarget ResolveSetColumnTarget(
);
}

protected virtual bool CheckNotNullConstraintsExceptTarget(IEnumerable<QsiTableColumn> columns, IEnumerable<ColumnTarget> columnTargets)
protected virtual QsiTableColumn ResolveNotNullableColumnWithInvalidDefault(IEnumerable<QsiTableColumn> columns, IEnumerable<ColumnTarget> columnTargets)
{
HashSet<int> targetIndices = columnTargets.Select(ct => ct.DeclaredOrder).ToHashSet();
HashSet<string> targetNames = columnTargets.Select(ct => ct.DeclaredName.SubIdentifier(0).ToString()).ToHashSet();

return columns
.Where((x, i) => !targetIndices.Contains(i) && !x.IsNullable && x.Default == null)
.Any();
.FirstOrDefault(x => !targetNames.Contains(x.Name.Value) && !x.IsNullable && x.Default is null);
}

private async ValueTask ProcessQueryValues(TableDataInsertContext context, IQsiTableDirectivesNode directives, IQsiTableNode valueTable)
Expand Down Expand Up @@ -747,8 +747,8 @@ private void PopulateInsertRow(TableDataInsertContext context, DataValueSelector
? valueSelector(pivot)
: ResolveDefaultColumnValue(pivot);

if (item is null && target.Table.Columns[pivot.DestinationOrder].IsNullable == false)
throw new QsiException(QsiError.NotNullConstraints);
if (item.Value is null && target.Table.Columns[pivot.DestinationOrder].IsNullable == false)
throw new QsiException(QsiError.NotNullConstraints, pivot.DestinationColumn.Name.Value);
}

target.InsertRows.Add(targetRow);
Expand Down
2 changes: 1 addition & 1 deletion Qsi/QsiError.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ internal static class SR
public const string InvalidNestedExplain = "Invalid nested explain for '{0}'";
public const string SubqueryReturnsMoreThanRow = "Subquery returns more than {0} row";
public const string UnableResolveFunction = "Unable to resolve function '{0}'";
public const string NotNullConstraints = "Not Null constraints violation.";
public const string NotNullConstraints = "The column '{0}' has a Not Null constraint.";

public static string GetResource(QsiError error)
{
Expand Down

0 comments on commit 6da3d5b

Please sign in to comment.