public List <StoreQueryParameter> ReadParameters(StoreQueryDefinition query) { if (query.Parameters == null) { return(new List <StoreQueryParameter>()); } var result = query.Parameters.Values.Select(p => new StoreQueryParameter { Name = p.Name.Replace("@", ""), Type = p.Type }).ToList(); return(result); }
public List <TemplateJoin> ReadJoins(StoreQueryDefinition query, StoreSchema schema) { var result = new List <TemplateJoin>(); var rightTables = new HashSet <string>(); foreach (var join in query.Joins) { var leftTable = query.Tables[join.LeftObjectAlias].TableName; var rightTable = query.Tables[join.RightObjectAlias].TableName; TemplateJoin tj; if (rightTables.Contains(join.RightObjectAlias)) { // flip tj = new TemplateJoin { LeftField = join.RightField, LeftObjectAlias = join.RightObjectAlias, LeftObject = rightTable, RightField = join.LeftField, RightObjectAlias = join.LeftObjectAlias, RightObject = leftTable }; } else { tj = new TemplateJoin { LeftField = join.LeftField, LeftObjectAlias = join.LeftObjectAlias, LeftObject = leftTable, RightField = join.RightField, RightObjectAlias = join.RightObjectAlias, RightObject = rightTable }; rightTables.Add(join.RightObjectAlias); } result.Add(tj); } return(result); }
public TemplateJoin ReadFrom(StoreQueryDefinition query, StoreSchema schema) { TemplateJoin result; var join = query.Joins.FirstOrDefault(); if (join != null) { var table = query.Tables[join.LeftObjectAlias].TableName; result = new TemplateJoin { LeftField = join.LeftField, LeftObjectAlias = join.LeftObjectAlias, LeftObject = table }; } else { var table = query.Tables.Values.First(); result = new TemplateJoin { LeftObjectAlias = table.ObjectAlias, LeftObject = table.TableName }; } return(result); }
private static IQueryModel ReadQueryTables(List <IQueryModel> loadedSubQueryList, string name, StoreSchema schema, StoreQueryDefinition queryDef, Dictionary <string, StoreQueryDefinition> subQueries) { var result = loadedSubQueryList.FirstOrDefault(l => l.Name == name); if (result != null) { return(result); } queryDef = queryDef ?? subQueries[name]; result = new QueryModel() { Name = name }; foreach (var t in queryDef.Tables) { if (schema.Definitions.ContainsKey(t.Value.TableName)) { // not subquery table var schemaTable = schema.Definitions[t.Value.TableName]; var ft = new QueryFromTable(schemaTable); ft.Alias = t.Value.ObjectAlias; result.FromTables.Add(ft); } else { if (!subQueries.ContainsKey(t.Value.TableName)) { throw new Exception($"Table or SubQuery with name '{t.Value.TableName}' not found"); } var subQuery = ReadQueryTables(loadedSubQueryList, t.Value.TableName, schema, null, subQueries); var ft = new QueryFromTable(subQuery); ft.Alias = t.Value.ObjectAlias; result.FromTables.Add(ft); } } loadedSubQueryList.Add(result); // fields foreach (var f in queryDef.Fields.Values) { var table = result.FromTables.FirstOrDefault(t => t.Alias == f.Field.ObjectAlias); if (table == null) { throw new Exception($"Table with alias '{f.Field.ObjectAlias}' not found"); } var storeProperty = table.Properties.FirstOrDefault(p => p.Name == f.Field.FieldName); if (storeProperty == null) { throw new Exception($"Field '{f.Field.FieldName}' not found in table with alias '{f.Field.ObjectAlias}'"); } var newSelectionProperty = new QuerySelectProperty(table, storeProperty.OriginalStoreProperty) { IsOutput = f.IsOutput, GroupByFunction = f.GroupByFunction, Having = f.GroupByFilter, Alias = f.FieldAlias != f.Field.FieldName ? f.FieldAlias : "" // ToDo: Filter is not stored and cannot be loaded }; result.SelectionProperties.Add(newSelectionProperty); } // Joins foreach (var j in queryDef.Joins) { } result.FromTableJoins = queryDef.Joins.Select(j => new TableJoinModel() { IsDeleted = false, JoinType = j.JoinType, Source = j }).ToList(); // Where result.WhereClause = QueryExpressionHelper.QueryExprToString(queryDef.Where.Expression); return(result); }