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); }
/// <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); } } } }
private void visitAliasedSource(AliasedSource source) { if (sourceReferenceType == SourceReferenceType.Declaration) { visitAliasedSourceDeclaration(source); } else if (sourceReferenceType == SourceReferenceType.Reference) { visitAliasedSourceReference(source); } }
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); }
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); } }
/// <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(); //} }
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(); // } //} } } }
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"); }
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,”显示 } }
/// <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); }
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; } } } } }