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)));
            }
        }