Exemple #1
0
        private static void BuildRefrenceCode(SelectBuilder select, FapColumn column, AliasedSource table, string refAlias)
        {
            string colName = column.RefCode;

            if (colName.IsPresent())
            {
                colName = "Id";
            }
            SelectBuilder inner      = new SelectBuilder();
            AliasedSource innerTable = inner.AddTable(new Table($"{column.RefTable}"), refAlias);

            inner.AddProjection(innerTable.Column($"{colName}"));
            if (column.MultiAble == 1) //是否多选
            {
            }
            FilterGroup joinFilter = new FilterGroup(Conjunction.And,
                                                     new EqualToFilter(innerTable.Column($"{column.RefID}"), table.Column(column.ColName)),
                                                     new LessThanEqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_EnableDate), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_CurrentDate)),
                                                     new GreaterThanEqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_DisableDate), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_CurrentDate)),
                                                     new EqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_Dr), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_Dr)));

            if (column.RefTable.EqualsWithIgnoreCase(nameof(FapColumn)))
            {
                IFilter filter = new EqualToFilter(innerTable.Column("TableName"), table.Column("TableName"));
                joinFilter.AddFilter(filter);
            }
            inner.AddWhere(joinFilter);
            select.AddProjection(inner, $"{column.ColName}MCID");
        }
 protected override void VisitAliasedSource(AliasedSource aliasedSource)
 {
     if (_DetectingMetadataQuery)
     {
         aliasedSource.Source.Accept(this);
     }
     // base.VisitAliasedSource(aliasedSource);
 }
Exemple #3
0
        /// <summary>
        /// 处理SELECT部分
        /// </summary>
        /// <param name="columnList"></param>
        /// <param name="table"></param>
        /// <param name="selectBuilder"></param>
        private void MakeSelectStarPartition(IEnumerable <FapColumn> columnList, AliasedSource aliaseSource, SelectBuilder select)
        {
            string tableAlias = aliaseSource.Alias;
            int    mcIndex    = 0;

            foreach (var column in columnList)
            {
                //AliasedSource table = select.AddTable(new Table($"{column.TableName}"), tableAlias);
                if (column.IsMultiLang == 1)
                {
                    if (IsGridQuery)
                    {
                        select.AddProjection(aliaseSource.Column($"{column.ColName}{CurrentLang}"), column.ColName);
                    }
                    else
                    {
                        select.AddProjection(aliaseSource.Column(column.ColName));
                    }
                    var langs = typeof(MultiLanguageEnum).EnumItems();
                    foreach (var lang in langs)
                    {
                        select.AddProjection(aliaseSource.Column($"{column.ColName}{lang.Value}"), $"{column.ColName}{lang.Value}");
                    }
                }
                else
                {
                    select.AddProjection(aliaseSource.Column(column.ColName));
                }
                if (this._withMC)
                {
                    //处理MC字段
                    if (FapColumn.CTRL_TYPE_COMBOBOX == column.CtrlType && !IsGridQuery)
                    {
                        string refAlias = "b" + (mcIndex++);
                        BuildFapDict(select, column, aliaseSource, refAlias);
                    }
                    else if (FapColumn.CTRL_TYPE_REFERENCE == column.CtrlType)
                    {
                        string refAlias = "b" + (mcIndex++);
                        BuildRefrenceName(select, column, aliaseSource, refAlias);
                    }
                }

                //处理MC字段的ID字段
                if (this._withId)
                {
                    if (FapColumn.CTRL_TYPE_REFERENCE == column.CtrlType)
                    {
                        string refAlias = "b" + (mcIndex++);
                        BuildRefrenceCode(select, column, aliaseSource, refAlias);
                    }
                }
            }
        }
Exemple #4
0
 private void visitAliasedSource(AliasedSource source)
 {
     if (sourceReferenceType == SourceReferenceType.Declaration)
     {
         visitAliasedSourceDeclaration(source);
     }
     else if (sourceReferenceType == SourceReferenceType.Reference)
     {
         visitAliasedSourceReference(source);
     }
 }
Exemple #5
0
 private void visitAliasedSourceDeclaration(AliasedSource source)
 {
     source.Source.Accept(forSubCommand());
     if (!String.IsNullOrWhiteSpace(source.Alias))
     {
         if (options.AliasColumnSourcesUsingAs)
         {
             writer.Write(" AS");
         }
         writer.Write(" ");
         writer.Write(source.Alias);
     }
 }
        private LinkEntity CreateLinkEntity(BinaryJoin item, JoinOperator jointype)
        {
            var linkEntity = new LinkEntity();

            linkEntity.JoinOperator = jointype;
            // This is what we are joining on to..
            AliasedSource asource = item.RightHand;

            if (!string.IsNullOrEmpty(asource.Alias))
            {
                linkEntity.EntityAlias = asource.Alias;
            }
            return(linkEntity);
        }
Exemple #7
0
 private void visitAliasedSourceReference(AliasedSource source)
 {
     if (String.IsNullOrWhiteSpace(source.Alias))
     {
         if (source.Source.IsAliasRequired)
         {
             throw new SQLGenerationException(Resources.AliasRequired);
         }
         source.Source.Accept(forSubCommand());
     }
     else
     {
         writer.Write(source.Alias);
     }
 }
Exemple #8
0
        /// <summary>
        /// 处理Select语句:select *
        /// </summary>
        /// <param name="tables"></param>
        /// <returns></returns>
        private void HandleSelectStarStatement(SelectBuilder select, AllColumns aliSource)
        {
            AliasedSource tableSource = select.Sources.Sources.First();

            if (aliSource.Source != null) //有字段的前缀
            {
                tableSource = select.Sources.Sources.First();
            }
            string tableName = tableSource.Source.GetSourceName();
            IEnumerable <FapColumn> columns = GetColumnsOfTable(tableName);

            if (columns != null)
            {
                this.MakeSelectStarPartition(columns, tableSource, select);
            }
        }
 protected override void VisitAliasedSource(AliasedSource aliasedSource)
 {
     // We want the top aliased source (furthest source to the left) as this is the main entity.
     if (IsSingleSource)
     {
         SingleSource = aliasedSource;
     }
     if (this.Level > SourceTableLevel)
     {
         SourceTableLevel = this.Level;
         MainSource       = aliasedSource;
         MainSourceTable  = aliasedSource.Source as Table;
         // source should be a table.
         QueryExpression.EntityName = GetTableLogicalEntityName(MainSourceTable);
     }
 }
 protected string GetEntityNameOrAliasForSource(AliasedSource source, out bool isAlias, out LinkEntity linkEntity)
 {
     if (source != null)
     {
         isAlias = !string.IsNullOrEmpty(source.Alias);
         var sourceTable = source.Source as Table;
         var sourceName  = string.IsNullOrEmpty(source.Alias) ? GetTableLogicalEntityName(sourceTable) : source.Alias;
         linkEntity = this.QueryExpression.FindLinkEntity(sourceName, isAlias);
         if (linkEntity == null)
         {
             // If this is for the main entity - it doesn;t support alias name..
             isAlias = false;
             return(QueryExpression.EntityName);
         }
         return(sourceName);
     }
     throw new NotSupportedException("A condition in the WHERE clause contains refers to an unknown table / entity.");
 }
        protected override void VisitAliasedSource(AliasedSource aliasedSource)
        {
            if (IsSingleSource)
            {
                SingleSource = aliasedSource;
            }
            aliasedSource.Source.Accept(this);

            //// We want the root aliased source (furthest source to the left) as this is the entity metadata.
            //// from which other things will join.
            //if (this.Level > EntityMetadataTableLevel)
            //{
            //    EntityMetadataTableLevel = this.Level;
            //    EntityMetadataSource = aliasedSource;
            //    EntityMetadataTable = aliasedSource.Source as Table;
            //    // source should be a table.
            //    //  QueryExpression.EntityName = EntityMetadataTable.GetTableLogicalEntityName();
            //}
        }
Exemple #12
0
        public static void LogAliasedSource(AliasedSource source, StringBuilder stringBuilder, int level = 0)
        {
            var indent = GetIndent(level);

            if (source != null)
            {
                stringBuilder.AppendLine(string.Format("{0} {1}", indent, source.GetType().FullName));
                if (!string.IsNullOrEmpty(source.Alias))
                {
                    stringBuilder.AppendLine(string.Format("{0} Alias: {1}", indent, source.Alias));
                }

                if (source.Source != null)
                {
                    IRightJoinItem joinItem   = source.Source;
                    var            sourceName = joinItem.GetSourceName();
                    stringBuilder.AppendLine(string.Format("{0} {1}", indent, joinItem.GetType().FullName));
                    stringBuilder.AppendLine(string.Format("{0} Source Name: {1}", indent, sourceName));

                    //if (joinItem.IsTable)
                    //{
                    var table = joinItem as Table;
                    stringBuilder.AppendLine(string.Format("{0}   Table Name: {1}", indent, table.Name));
                    stringBuilder.AppendLine(string.Format("{0}   Table Qualifier: {1}", indent, table.Qualifier));
                    //  }
                    // else
                    //{
                    //    var join = joinItem as Join;
                    //    if (join != null)
                    //    {
                    //        LogJoin(join, stringBuilder, level + 1);
                    //    }
                    //    else
                    //    {
                    //        throw new NotSupportedException();
                    //    }

                    //}
                }
            }
        }
Exemple #13
0
        private static void BuildRefrenceName(SelectBuilder select, FapColumn column, AliasedSource table, string refAlias)
        {
            SelectBuilder inner      = new SelectBuilder();
            AliasedSource innerTable = inner.AddTable(new Table($"{column.RefTable}"), refAlias);

            inner.AddProjection(innerTable.Column($"{column.RefName}"));

            FilterGroup joinFilter = new FilterGroup(Conjunction.And,
                                                     new EqualToFilter(innerTable.Column($"{column.RefID}"), table.Column(column.ColName)),
                                                     new LessThanEqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_EnableDate), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_CurrentDate)),
                                                     new GreaterThanEqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_DisableDate), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_CurrentDate)),
                                                     new EqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_Dr), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_Dr)));

            if (column.RefTable.EqualsWithIgnoreCase(nameof(FapColumn)))
            {
                //fapcolumn存在重复colName,加一个去重
                IFilter filter = new EqualToFilter(innerTable.Column("TableName"), table.Column("RefTable"));
                joinFilter.AddFilter(filter);
            }
            inner.AddWhere(joinFilter);
            select.AddProjection(inner, $"{column.ColName}MC");
        }
Exemple #14
0
        private static void BuildFapDict(SelectBuilder select, FapColumn column, AliasedSource table, string refAlias)
        {
            SelectBuilder inner      = new SelectBuilder();
            AliasedSource innerTable = inner.AddTable(new Table("FapDict"), refAlias);

            inner.AddProjection(innerTable.Column("Name"));
            if (column.MultiAble == 1) //是否多选
            {
            }
            FilterGroup joinFilter = new FilterGroup(Conjunction.And,
                                                     new EqualToFilter(innerTable.Column("Code"), table.Column(column.ColName)),
                                                     new EqualToFilter(innerTable.Column("Category"), new StringLiteral(column.ComboxSource)),
                                                     new LessThanEqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_EnableDate), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_CurrentDate)),
                                                     new GreaterThanEqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_DisableDate), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_CurrentDate)),
                                                     new EqualToFilter(innerTable.Column(FapDbConstants.FAPCOLUMN_FIELD_Dr), new ParameterLiteral(FapDbConstants.FAPCOLUMN_PARAM_Dr)));

            inner.AddWhere(joinFilter);
            select.AddProjection(inner, $"{column.ColName}MC");
            if (column.MultiAble == 1) //是否多选
            {
                //selectBuilder.Append(" for xml path('')"); // 逗号分隔的字符串,比如,以“aaa,bbb,ccc,”显示
            }
        }
Exemple #15
0
 /// <summary>
 /// Generates the text for an AliasedSource.
 /// </summary>
 /// <param name="aliasedSource">The AliasedSource to generate the text for.</param>
 protected internal override void VisitAliasedSource(AliasedSource aliasedSource)
 {
     visitAliasedSource(aliasedSource);
 }
Exemple #16
0
        public static void LogJoin(Join join, StringBuilder stringBuilder, int level = 0)
        {
            var indent = GetIndent(level);

            if (join != null)
            {
                stringBuilder.AppendLine(string.Format("{0} {1}", indent, join.GetType().Name));
                var binaryJoin = join as BinaryJoin;
                if (binaryJoin != null)
                {
                    if (binaryJoin.LeftHand != null)
                    {
                        stringBuilder.AppendLine(string.Format("{0} Left:", indent));
                        LogJoin(binaryJoin.LeftHand, stringBuilder, level + 1);
                    }
                    if (binaryJoin.RightHand != null)
                    {
                        stringBuilder.AppendLine(string.Format("{0} Right:", indent));
                        AliasedSource asource = binaryJoin.RightHand;
                        LogAliasedSource(asource, stringBuilder, level + 1);
                    }
                }
                var filteredJoin = join as FilteredJoin;
                if (filteredJoin != null)
                {
                    stringBuilder.AppendLine(string.Format("{0} On filters:", indent));
                    foreach (var on in filteredJoin.OnFilters)
                    {
                        // Support Equals
                        var equalTo = on as EqualToFilter;
                        if (equalTo != null)
                        {
                            var leftColumn  = equalTo.LeftHand as Column;
                            var rightColumn = equalTo.RightHand as Column;
                            if (leftColumn == null || rightColumn == null)
                            {
                                throw new NotSupportedException("The ON operator used in the Join statement must have a column name on it's left and right side.");
                            }

                            stringBuilder.AppendLine(string.Format("{0}  Filter Type: {1}", indent, on.GetType().FullName));
                            stringBuilder.AppendLine(string.Format("{0}    Left Column Name: {1}", indent, leftColumn.Name));
                            if (leftColumn.Source != null)
                            {
                                stringBuilder.AppendLine(string.Format("{0}    Left Column Source", indent));
                                LogAliasedSource(leftColumn.Source, stringBuilder, level + 1);
                                //
                            }

                            stringBuilder.AppendLine(string.Format("{0}    Right Column Name: {1}", indent, rightColumn.Name));
                            if (rightColumn.Source != null)
                            {
                                stringBuilder.AppendLine(string.Format("{0}    Right Column Source", indent));
                                LogAliasedSource(rightColumn.Source, stringBuilder, level + 1);
                                //
                            }

                            return;
                        }
                    }
                }
            }
        }