Esempio n. 1
0
        public void Should_ReturnDataSortedByUserName_When_AllUsersIsReturned()
        {
            // Arrange
            var orderMember = "UserName";

            // Act
            var data = _sut.QueryToTableValuedFunction(DbConfig.DbObjectNames.GetAllUsersFunction)
                       .OrderBy(ExpressionBuilders.MemberAccess(orderMember))
                       .ToArray();

            // Assert
            Assert.AreEqual(data.Count(), 3);
        }
Esempio n. 2
0
        public static void Register <T>(Expression <Func <T, object> > prop, Func <TypedExpression, TypedExpression> processor)
        {
            var memberExpression = ((UnaryExpression)prop.Body).Operand;
            var memberInfo       = ((MemberExpression)memberExpression).Member;

            switch (memberInfo)
            {
            case PropertyInfo propertyInfo:
                _entries.Add(new Entry(typeof(T), propertyInfo.Name, exp => ExpressionBuilders.Cast(processor(exp), propertyInfo.PropertyType)));
                return;

            default:
                throw new Exception();
            }
        }
Esempio n. 3
0
        public void Should_ReturnItemsWithCorrectOrdering_When_CompositeOrderingIsApplied()
        {
            // Arrange
            var expectedUniqIdsOrder = new[] { 40, 10, 30, 20 };

            // Act
            var data = _sut.QueryToTable(DbConfig.DbObjectNames.ReportsTable)
                       .OrderByDescending(ExpressionBuilders.MemberAccess("Id"))
                       .ThenBy(ExpressionBuilders.MemberAccess("FileName"))
                       .ThenByDescending(ExpressionBuilders.MemberAccess("CreatedBy"))
                       .ToArray();

            // Assert
            for (int i = 0; i < expectedUniqIdsOrder.Length; i++)
            {
                Assert.IsTrue((int)data[i]["UniqueId"] == expectedUniqIdsOrder[i]);
            }
        }
Esempio n. 4
0
        private Expression <Func <TEntity, bool> > BuildRequestExpression(GetAllQuery <TEntity, TRequestModel> request)
        {
            var expressionList = new List <Expression <Func <TEntity, bool> > >();

            var queryExpressionBySearchQuery = !string.IsNullOrEmpty(request.SearchQuery) ? ExpressionBuilders.BuildQueryExpressionBySearchQuery <TEntity>(request.SearchQuery) : null;

            if (queryExpressionBySearchQuery != null)
            {
                expressionList.Add(queryExpressionBySearchQuery);
            }

            if (request.ParentExpression != null)
            {
                expressionList.Add(request.ParentExpression);
            }

            Expression <Func <TEntity, bool> > requestExpression = x => true;

            if (expressionList.Count > 0)
            {
                foreach (var expression in expressionList)
                {
                    requestExpression = ExpressionFunctions.AndAlso(requestExpression, expression);
                }
            }

            return(requestExpression);
        }
Esempio n. 5
0
 public static TypedExpression GetVariableText(string name)
 {
     return(ExpressionBuilders.GetConfigText(name));
 }
Esempio n. 6
0
        public RawQuery GetRawQuery()
        {
            if (IsEmpty)
            {
                return(RawQuery.Create("SELECT 0"));
            }

            RawQuery rq = new RawQuery();

            var columns = _columns.Count == 0 ? AllColumnsWithoutAutoIncrement : _columns;

            rq.Append("INSERT INTO ");

            rq.AppendTableName(Table.Name, Table.Schema);

            rq.Append("(");
            rq.AppendColumnNames(columns.Select(x => x.columnDescriptor.Name));
            if (_idColumn != null)
            {
                if (columns.Count > 0)
                {
                    rq.Append(",");
                }
                rq.AppendColumnName(_idColumn.Name);
            }

            rq.Append(")");

            rq.Append(" VALUES ");

            var first = true;

            foreach (var obj in _objects)
            {
                if (!first)
                {
                    rq.Append(",");
                }
                rq.Append("(");

                for (int i = 0; i < columns.Count; i++)
                {
                    var column = columns[i];

                    if (i > 0)
                    {
                        rq.Append(",");
                    }

                    if (column.subquery == null)
                    {
                        object val      = ModelsRegistry.GetModelValueByColumn(obj, column.columnDescriptor);
                        var    npgValue = PgTypesConverter.ConvertToPgValue(column.columnDescriptor.Type, val);
                        rq.Append(npgValue);
                    }
                    else
                    {
                        rq.AppendSurround(column.subquery.GetRawQuery());
                    }
                }

                if (_idColumn != null)
                {
                    if (columns.Count > 0)
                    {
                        rq.Append(",");
                    }

                    rq.Append(ExpressionBuilders.CurrSeqValueOfTable(_idRefColumn).RawQuery);
                }

                rq.Append(")");
                first = false;
            }

            if (_onInsertConflict == OnInsertConflict.DoNothing)
            {
                rq.Append(" ON CONFLICT DO NOTHING ");
            }

            if (_onInsertConflict == OnInsertConflict.DoUpdate)
            {
                rq.Append(" ON CONFLICT (");

                var fields = new FieldListBuilder <TModel>();
                _onInsertConflictUpdateFields(fields);
                first = true;
                foreach (var column in fields.Fields)
                {
                    if (!first)
                    {
                        rq.Append(", ");
                    }

                    rq.AppendColumnName(column.Name);

                    first = false;
                }

                rq.Append(") DO UPDATE SET ");

                var updateStatementsBuilder = new UpdateStatementsBuilder <TModel>();
                _onInsertConflictUpdate(updateStatementsBuilder);

                first = true;
                foreach (var(column, typedExpression) in updateStatementsBuilder.UpdateParts)
                {
                    if (!first)
                    {
                        rq.Append(", ");
                    }

                    rq.AppendColumnName(column.Name)
                    .Append(" = ")
                    .Append(typedExpression.RawQuery);

                    first = false;
                }
            }

            if (TableModel.PrimaryKey != null)
            {
                rq.Append(" RETURNING ");
                rq.AppendColumnName(TableModel.PrimaryKey.Name);
            }

            rq.Append(";");

            if (_outputVariable != null)
            {
                rq.Append(" SELECT ");
                rq.Append(ExpressionBuilders.SetConfigText(_outputVariable, ExpressionBuilders.LastVal(), true).RawQuery);
            }

            rq.SkipExplicitColumnTableNames();
            return(rq);
        }