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); }
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(); } }
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]); } }
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); }
public static TypedExpression GetVariableText(string name) { return(ExpressionBuilders.GetConfigText(name)); }
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); }