コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }