Exemple #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);
        }
Exemple #2
0
        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)"));
        }
Exemple #3
0
        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 )"));
        }