示例#1
0
        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);
        }
示例#2
0
        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);
        }