protected override async ValueTask <IQsiAnalysisResult> ExecuteDataDeleteAction(IAnalyzerContext context, IQsiDataDeleteActionNode action) { var tableAnalyzer = context.Engine.GetAnalyzer <QsiTableAnalyzer>(); using var tableContext = new TableCompileContext(context); var table = (await tableAnalyzer.BuildTableStructure(tableContext, action.Target)).References[0]; var tempTable = CreateTemporaryTable(table.Identifier); var commonTableNode = ReassembleCommonTableNode(action.Target); var dataTable = await GetDataTableByCommonTableNode(context, commonTableNode); var deleteRows = new QsiDataRowCollection(1); foreach (var row in dataTable.Rows) { var targetRow = deleteRows.NewRow(); targetRow.Items[0] = row.Items[0]; } var dataAction = new QsiDataAction { Table = tempTable, DeleteRows = deleteRows.ToNullIfEmpty() }; return((new[] { dataAction }).ToResult()); }
public static QsiDataRowCollection ToNullIfEmpty(this QsiDataRowCollection collection) { if (collection is null || collection.Count == 0) { return(null); } return(collection); }
protected override async ValueTask <IQsiAnalysisResult> ExecuteDataUpdateAction(IAnalyzerContext context, IQsiDataUpdateActionNode action) { var tableAnalyzer = context.Engine.GetAnalyzer <QsiTableAnalyzer>(); using var tableContext = new TableCompileContext(context); var table = (await tableAnalyzer.BuildTableStructure(tableContext, action.Target)).References[0]; var tempTable = CreateTemporaryTable(table.Identifier); var commonTableNode = ReassembleCommonTableNode(action.Target); var dataTable = await GetDataTableByCommonTableNode(context, commonTableNode); var updateBeforeRows = new QsiDataRowCollection(1); var updateAfterRows = new QsiDataRowCollection(1); (object[], QsiExpressionNode, bool)[] setValues = action.SetValues