internal override bool BuildWhere(ExtentStatement statement, string alias) { var schema = statement.Mapping; var inStatement = statement.CreateChild(this.inExtent, this.association); inStatement.UseRole(this.association.RoleType); if ((this.association.IsMany && this.association.RelationType.RoleType.IsMany) || !this.association.RelationType.ExistExclusiveClasses) { statement.Append(" (" + this.association.SingularFullName + "_A." + Mapping.ColumnNameForRole + " IS NOT NULL AND "); statement.Append(" " + this.association.SingularFullName + "_A." + Mapping.ColumnNameForRole + " IN (\n"); this.inExtent.BuildSql(inStatement); statement.Append(" ))\n"); } else { if (this.association.RelationType.RoleType.IsMany) { statement.Append(" (" + alias + "." + schema.ColumnNameByRelationType[this.association.RelationType] + " IS NOT NULL AND "); statement.Append(" " + alias + "." + schema.ColumnNameByRelationType[this.association.RelationType] + " IN (\n"); this.inExtent.BuildSql(inStatement); statement.Append(" ))\n"); } else { statement.Append(" (" + this.association.SingularFullName + "_A." + Mapping.ColumnNameForObject + " IS NOT NULL AND "); statement.Append(" " + this.association.SingularFullName + "_A." + Mapping.ColumnNameForObject + " IN (\n"); this.inExtent.BuildSql(inStatement); statement.Append(" ))\n"); } } return this.Include; }
internal override bool BuildWhere(ExtentStatement statement, string alias) { var schema = statement.Mapping; var inStatement = statement.CreateChild(this.inExtent, this.role); inStatement.UseAssociation(this.role.AssociationType); if ((this.role.IsMany && this.role.RelationType.AssociationType.IsMany) || !this.role.RelationType.ExistExclusiveClasses) { statement.Append(" (" + this.role.SingularFullName + "_R." + Mapping.ColumnNameForRole + " IS NOT NULL AND "); statement.Append(" " + this.role.SingularFullName + "_R." + Mapping.ColumnNameForAssociation + " IN ("); this.inExtent.BuildSql(inStatement); statement.Append(" ))"); } else { if (this.role.IsMany) { statement.Append(" (" + this.role.SingularFullName + "_R." + Mapping.ColumnNameForObject + " IS NOT NULL AND "); statement.Append(" " + this.role.SingularFullName + "_R." + Mapping.ColumnNameForObject + " IN ("); this.inExtent.BuildSql(inStatement); statement.Append(" ))"); } else { statement.Append(" (" + schema.ColumnNameByRelationType[this.role.RelationType] + " IS NOT NULL AND "); statement.Append(" " + schema.ColumnNameByRelationType[this.role.RelationType] + " IN ("); this.inExtent.BuildSql(inStatement); statement.Append(" ))"); } } return(this.Include); }
internal override bool BuildWhere(ExtentStatement statement, string alias) { var schema = statement.Mapping; var inStatement = statement.CreateChild(this.inExtent, this.association); inStatement.UseRole(this.association.RoleType); if ((this.association.IsMany && this.association.RoleType.IsMany) || !this.association.RelationType.ExistExclusiveClasses) { statement.Append(" (" + this.association.SingularFullName + "_A." + Mapping.ColumnNameForRole + " IS NULL OR"); statement.Append(" NOT " + this.association.SingularFullName + "_A." + Mapping.ColumnNameForRole + " IN (\n"); statement.Append(" SELECT " + Mapping.ColumnNameForRole + " FROM " + schema.TableNameForRelationByRelationType[this.association.RelationType] + " WHERE " + Mapping.ColumnNameForAssociation + " IN ("); this.inExtent.BuildSql(inStatement); statement.Append(" )))\n"); } else { if (this.association.RoleType.IsMany) { statement.Append(" (" + alias + "." + schema.ColumnNameByRelationType[this.association.RelationType] + " IS NULL OR "); statement.Append(" NOT " + alias + "." + schema.ColumnNameByRelationType[this.association.RelationType] + " IN (\n"); this.inExtent.BuildSql(inStatement); statement.Append(" ))\n"); } else { statement.Append(" (" + this.association.SingularFullName + "_A." + Mapping.ColumnNameForObject + " IS NULL OR "); statement.Append(" NOT " + this.association.SingularFullName + "_A." + Mapping.ColumnNameForObject + " IN (\n"); this.inExtent.BuildSql(inStatement); statement.Append(" ))\n"); } } return(this.Include); }