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 void AddAggregatorTokens_Optionals() { AggregatorSqlBuilderSettings settings = new AggregatorSqlBuilderSettings { TableName = "TableName", FieldNames = new[] { "field1", "field2", "field3" }, StoreTableName = "OtherStoreTable", UpdateStatements = "field1 = field1 + values(field1), field2 = field2 - values(field2)" }; int recordCount = 2; var builder = new SqlBuilder() .AddAggregatorTokens(settings, recordCount); Assert.That(builder.Build("{TableName}"), Is.EqualTo("TableName")); Assert.That(builder.Build("{StoreTableName}"), Is.EqualTo("OtherStoreTable")); Assert.That(builder.Build("{UpdateClause}"), Is.EqualTo("ON DUPLICATE KEY UPDATE field1 = field1 + values(field1), field2 = field2 - values(field2)")); }
public void AddAggregatorTokens_Requireds() { AggregatorSqlBuilderSettings settings = new AggregatorSqlBuilderSettings { TableName = "TableName", FieldNames = new[] { "field1", "field2", "field3" }, }; int recordCount = 2; var builder = new SqlBuilder() .AddAggregatorTokens(settings, recordCount); Assert.That(builder.Build("{TableName}"), Is.EqualTo("TableName")); Assert.That(builder.Build("{StoreTableName}"), Is.EqualTo("TableName_store")); Assert.That(builder.Build("{ColumnList}"), Is.EqualTo("field1, field2, field3")); Assert.That(builder.Build("{AliasedColumnList}"), Is.EqualTo("field1 as col0, field2 as col1, field3 as col2")); Assert.That(builder.Build("{UpdateClause}"), Is.EqualTo("")); Assert.That(builder.Build("{ValuesList}"), Is.EqualTo("( @field1_0, @field2_0, @field3_0 ), ( @field1_1, @field2_1, @field3_1 )")); }