Встроенная иерархия представляет собой CLR, который хранит пути в эффективной двоичной форме и предоставляет другие полезные функции.
К сожалению, есть предел того, насколько глубоко могут быть представленные пути, и это ~ 1427 для двоичного дерева. Я хотел бы увеличить этот лимит для сложного существующего приложения, которое обязательно достигнет этого предела. Я не хочу менять интерфейс типа. Я не уверен, что смог бы изменить интерфейс типа, не внося тонких ошибок во весь код, который должен был быть изменен в результате.
Я мог (теоретически) создать UDT CLR «binhierarchyid», который реализует тот же интерфейс, что иierarchyid, но поддерживает только двоичные деревья. Это должно дать мне глубину ~ 7000, оставаясь при этом в пределах 900 байт. Не уверен, насколько масштабным будет это начинание.
Доступен ли источник этой CLR-иерархии где-нибудь, чтобы я мог создать свой собственный на его основе, который поддерживает более глубокие структуры?
источник
Ответы:
Большая часть исходного кода .NET доступна, и большая часть его является открытым исходным кодом, хотя и под различными лицензиями. Тем не менее, другой код доступен, но только для справочных целей и не может быть использован в вашем коде.
Учитывая, что заявленной целью является:
если намерение состоит в том, чтобы обновить текущий тип иерархии, то не имеет значения, является ли код открытым исходным кодом, потому что, даже если это так, вы никогда не сможете внести какие-либо изменения в общую систему: даже если вы сможете заменить сборку в SQL Server, вы не сможете подписать его тем же сертификатом / закрытым ключом и, следовательно, он не будет использоваться системой.
Однако вы можете создать свой собственный пользовательский тип SQLCLR (UDT) для обеспечения желаемой функциональности.
Тем не менее , поскольку это связано с получением лучшего понимания .NET Framework:
Вы можете просмотреть исходный код большинства материалов здесь: https://github.com/Microsoft/referencesource
и еще больше вещей здесь: https://github.com/dotnet/corefx
Оба вышеупомянутых репозитория имеют открытый исходный код и управляются в основном по лицензии MIT, хотя вам необходимо проверить информацию о лицензировании в каждом месте, а иногда и в разных папках, чтобы быть уверенным.
Многое из оставшегося кода можно найти здесь: http://referencesource.microsoft.com/
Код, найденный на ReferenceSource.Microsoft.com (ссылка выше), который также не найден в первых двух ссылках (которые являются открытым исходным кодом), не является открытым исходным кодом и вместо этого регулируется лицензией MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL) соответствующая часть (слегка отредактированная, чтобы дать определение «ссылочного использования» сразу после использования этой фразы):
Однако, похоже, что
Microsoft.SqlServer.*
пространство имен недоступно ни в одном из этих мест. Что означает, что простой ответ на вопрос: «Является ли HierarchyID открытым исходным кодом?» это: нет .Если вы хотите увидеть исходный код, вам нужно открыть DLL - Microsoft.SqlServer.Types.dll - с помощью декомпилятора. НО, есть потенциальные юридические и / или этические проблемы, которые нужно решить. Это является собственный код таким образом , есть два основных момента , которые следует учитывать:
как указано в лицензионном соглашении с конечным пользователем SQL Server (EULA) (и как указано в @ ВТоМ в ответ ), вы можете только « перепроектировать, декомпилировать или демонтирует » не предоставляется код « только в той степени , в которой применяется закон прямо разрешает » , Это означает, что для некоторых людей это совершенно законно, но для других не так уж и много. Так что вы можете обратиться к местному юристу по интеллектуальной собственности.
если для вас законно декомпилировать намерение юридического языка, а также тот факт, что предоставляется некоторый исходный код (как указано в верхней части), но этот конкретный код не является, безусловно, подразумевает, что желание для широкой публики не вижу или не имею этот код. Таким образом, законность декомпиляции не должна восприниматься как дублирование, а также законность ее использования в качестве ссылки (например, для отладки и т. Д.).
источник
Поскольку srutzky указал вам на некоторые места в своем ответе, где часть исходного кода Microsoft доступна, а запрошенная вами функция отсутствует в списке, я думаю, мы можем заключить, что исходный код не доступен ни по какой лицензии с открытым исходным кодом, и выглядит так Ваш вопрос был о том, что он с открытым исходным кодом, а не о том, чтобы увидеть исходный код .
Учитывая, что EULA заявляет следующее:
Поэтому я боюсь, что вам осталось реализовать логику самостоятельно.
источник