public static SqlBuilder AddAggregatorTokens(this SqlBuilder builder, AggregatorSqlBuilderSettings settings, int recordCount) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } if (settings is null) { throw new ArgumentNullException(nameof(settings)); } if (settings.TableName is null) { throw new ArgumentException("TableName property required", nameof(settings)); } if (settings.FieldNames is null) { throw new ArgumentException("FieldNames property required", nameof(settings)); } var fields = new Fieldset(settings.FieldNames); builder.SetToken("TableName", settings.TableName); builder.SetToken("StoreTableName", settings.StoreTableName ?? $"{settings.TableName}_store"); builder.SetToken("ColumnList", fields.ToFieldListSql()); builder.SetToken("AliasedColumnList", fields.ToAliasedFieldListSql()); builder.SetToken("UpdateClause", settings.UpdateStatements == null ? "" : $"ON DUPLICATE KEY UPDATE {settings.UpdateStatements}"); builder.SetToken("ValuesList", fields.ToValuesParameterListSql(recordCount)); return(builder); }
public async Task Save(MxEntityState mxEntityState) { string domain = ReverseUrl(mxEntityState.Id); var parameters = new Dictionary <string, object>(); parameters.Add("domain", domain); parameters.Add("mxState", mxEntityState.MxState); parameters.Add("error", JsonConvert.SerializeObject(mxEntityState.Error)); parameters.Add("lastUpdated", mxEntityState.LastUpdated); var builder = new SqlBuilder(); string updateMxTables = String.Empty; if (mxEntityState.HostMxRecords != null) { updateMxTables = MxStateDaoResources.DeleteMxRecord; if (mxEntityState.HostMxRecords.Count > 0) { updateMxTables += MxStateDaoResources.UpsertMxHost + MxStateDaoResources.UpsertMxRecord; builder.SetToken("MxHostValues", MxHostFields.ToValuesParameterListSql(mxEntityState.HostMxRecords.Count)); builder.SetToken("MxRecordValues", MxRecordFields.ToValuesParameterListSql(mxEntityState.HostMxRecords.Count)); mxEntityState.HostMxRecords.Select((hostMxRecord, index) => { string host = ReverseUrl(hostMxRecord.Id); parameters.Add($"domain_{index}", domain); parameters.Add($"hostname_{index}", host); parameters.Add($"hostMxRecord_{index}", JsonConvert.SerializeObject(hostMxRecord)); parameters.Add($"lastUpdated_{index}", mxEntityState.LastUpdated); parameters.Add($"preference_{index}", hostMxRecord.Preference); return(index); }).ToArray(); } } var commandText = builder.Build($"{MxStateDaoResources.UpsertDomain}{updateMxTables}"); await _saveOperation(commandText, parameters); }