public override void AppendJoinsToSelectStatement(SqlStatement statement, System.Text.StringBuilder builder) { if (statement == null) { throw new ArgumentNullException("statement"); } if (builder == null) { throw new ArgumentNullException("builder"); } // et... EntityType et = statement.EntityType; if (et == null) { throw new InvalidOperationException("et is null."); } // dialect... SqlDialect dialect = statement.Dialect; if (dialect == null) { throw new InvalidOperationException("dialect is null."); } // names... string masterName = dialect.FormatTableName(et.NativeName); if (masterName == null) { throw new InvalidOperationException("'masterName' is null."); } if (masterName.Length == 0) { throw new InvalidOperationException("'masterName' is zero-length."); } string extensionName = dialect.FormatTableName(et.NativeNameExtended); if (extensionName == null) { throw new InvalidOperationException("'extensionName' is null."); } if (extensionName.Length == 0) { throw new InvalidOperationException("'extensionName' is zero-length."); } // dialect... builder.Append(" LEFT OUTER JOIN "); builder.Append(extensionName); builder.Append(" ON "); // keys... EntityField[] keyFields = et.GetKeyFields(); if (keyFields == null) { throw new InvalidOperationException("'keyFields' is null."); } if (keyFields.Length == 0) { throw new InvalidOperationException("'keyFields' is zero-length."); } for (int index = 0; index < keyFields.Length; index++) { if (index > 0) { builder.Append(", "); } // add... builder.Append(dialect.FormatColumnName(keyFields[index].Name)); builder.Append("="); builder.Append(dialect.FormatColumnName(MangleIdColumnName(keyFields[index].NativeName))); } }