internal override string BuildSql(AllorsExtentStatementSql statement) { if (this.role != null || this.association != null) { // We're being used in another Extent so we need to // migrate from role/associatin to filter this.LazyLoadFilter(); } if (this.filter != null) { this.filter.Setup(this, statement); } string alias = statement.CreateAlias(); if (statement.IsRoot) { //TODO: DISTINCT isn't always necessary statement.Append("SELECT DISTINCT " + alias + "." + Mapping.ColumnNameForObject); if (statement.Sorter != null) { statement.Sorter.Setup(this, statement); statement.Sorter.BuildSelect(this, this.Mapping, statement); } statement.Append(" FROM " + Mapping.TableNameForObjects + " " + alias); statement.AddJoins(alias); statement.AddWhere(alias); if (this.filter != null) { this.filter.BuildWhere(this, this.Mapping, statement, this.type, alias); } } else { var inStatement = (AllorsExtentStatementChildSql)statement; if (inStatement.Role != null) { var inRole = inStatement.Role; var inAssociation = inRole.AssociationType; statement.Append("SELECT " + inAssociation.SingularFullName + "_A." + Mapping.ColumnNameForAssociation); } else { var inAssociation = inStatement.Association; var inRole = inAssociation.RoleType; statement.Append("SELECT " + inRole.SingularFullName + "_R." + Mapping.ColumnNameForRole); } statement.Append(" FROM " + Mapping.TableNameForObjects + " " + alias); statement.AddJoins(alias); statement.AddWhere(alias); if (this.filter != null) { this.filter.BuildWhere(this, this.Mapping, statement, this.type, alias); } statement.Append(" AND "); if (inStatement.Role != null) { var inRole = inStatement.Role; var inAssociation = inRole.AssociationType; statement.Append(inAssociation.SingularFullName + "_A." + Mapping.ColumnNameForAssociation + " IS NOT NULL "); } else { var inAssociation = inStatement.Association; var inRole = inAssociation.RoleType; statement.Append(inRole.SingularFullName + "_R." + Mapping.ColumnNameForRole + " IS NOT NULL "); } } return(alias); }
internal override string BuildSql(AllorsExtentStatementSql statement) { if (this.role != null || this.association != null) { // We're being used in another Extent so we need to // migrate from role/associatin to filter this.LazyLoadFilter(); } if (this.filter != null) { this.filter.Setup(this, statement); } string alias = statement.CreateAlias(); if (statement.IsRoot) { //TODO: DISTINCT isn't always necessary statement.Append("SELECT DISTINCT " + alias + "." + Mapping.ColumnNameForObject); if (statement.Sorter != null) { statement.Sorter.Setup(this, statement); statement.Sorter.BuildSelect(this, this.Mapping, statement); } statement.Append(" FROM " + Mapping.TableNameForObjects + " " + alias); statement.AddJoins(alias); statement.AddWhere(alias); if (this.filter != null) { this.filter.BuildWhere(this, this.Mapping, statement, this.type, alias); } } else { var inStatement = (AllorsExtentStatementChildSql)statement; if (inStatement.Role != null) { var inRole = inStatement.Role; var inAssociation = inRole.AssociationType; statement.Append("SELECT " + inAssociation.SingularFullName + "_A." + Mapping.ColumnNameForAssociation); } else { var inAssociation = inStatement.Association; var inRole = inAssociation.RoleType; statement.Append("SELECT " + inRole.SingularFullName + "_R." + Mapping.ColumnNameForRole); } statement.Append(" FROM " + Mapping.TableNameForObjects + " " + alias); statement.AddJoins(alias); statement.AddWhere(alias); if (this.filter != null) { this.filter.BuildWhere(this, this.Mapping, statement, this.type, alias); } statement.Append(" AND "); if (inStatement.Role != null) { var inRole = inStatement.Role; var inAssociation = inRole.AssociationType; statement.Append(inAssociation.SingularFullName + "_A." + Mapping.ColumnNameForAssociation + " IS NOT NULL "); } else { var inAssociation = inStatement.Association; var inRole = inAssociation.RoleType; statement.Append(inRole.SingularFullName + "_R." + Mapping.ColumnNameForRole + " IS NOT NULL "); } } return alias; }