Wbudowany hierarchyid to CLR, który przechowuje ścieżki w efektywnej formie binarnej i zapewnia inne przydatne funkcje.
Niestety, głębokość reprezentowanych ścieżek może być ograniczona i wynosi ~ 1427 dla drzewa binarnego. Chciałbym zwiększyć ten limit dla złożonej istniejącej aplikacji, która musi przekroczyć ten limit. Nie chcę zmieniać interfejsu tego typu. Nie jestem pewien, czy mógłbym zmienić interfejs tego typu bez wprowadzania subtelnych błędów w całym kodzie, który musiałby zostać zmieniony.
Mógłbym (teoretycznie) stworzyć „binhierarchyid” CLR UDT, który implementuje ten sam interfejs co hierarchyid, ale obsługuje tylko drzewa binarne. To powinno dać mi głębokość ~ 7000, pozostając nadal w granicach 900 bajtów. Nie jestem pewien, jak duże byłoby to przedsięwzięcie.
Czy gdzieś jest dostępne źródło tego hierarchicznego identyfikatora CLR, abym mógł stworzyć swój własny, oparty na nim, który obsługuje głębsze struktury?
źródło
Odpowiedzi:
Dostępnych jest wiele kodów źródłowych .NET, a większość z nich to Open Source, choć na różnych licencjach. Jeszcze inny kod jest dostępny, ale tylko w celach informacyjnych i nie można go użyć w kodzie.
Biorąc pod uwagę, że podanym celem jest:
jeśli intencją jest aktualizacja bieżącego typu Hierarchia, to czy kod jest typu Open Source, nie ma znaczenia, ponieważ nawet jeśli tak jest, nigdy nie będziesz w stanie wprowadzić żadnych zmian w całym systemie: nawet gdybyś mógł wymienić Zespół w SQL Server, nie będziesz mógł podpisać go tym samym certyfikatem / kluczem prywatnym, a zatem nie będzie używany przez system.
Można jednak zbudować własny typ zdefiniowany przez użytkownika SQLCLR (UDT), aby zapewnić pożądaną funkcjonalność.
Mimo to , ponieważ odnosi się to do lepszego zrozumienia .NET Framework:
Możesz zobaczyć kod źródłowy większości rzeczy tutaj: https://github.com/Microsoft/referencesource
i jeszcze więcej rzeczy tutaj: https://github.com/dotnet/corefx
Oba wyżej wymienione repozytoria są typu Open Source i podlegają głównie licencji MIT, choć dla pewności należy przejrzeć informacje o licencji w każdej lokalizacji, a czasem w różnych folderach.
Wiele pozostałego kodu można znaleźć tutaj: http://referencesource.microsoft.com/
Kod znaleziony w ReferenceSource.Microsoft.com (link bezpośrednio powyżej), który nie znajduje się również w pierwszych dwóch linkach (które są Open Source), nie jest Open Source i jest zamiast tego zarządzany przez LICENCJĘ ŹRÓDŁA ODNIESIENIA MICROSOFT (MS-RSL) , odpowiednia część jest (lekko zredagowana, aby umieścić definicję „użycia referencyjnego” tuż po użyciu tego wyrażenia):
Wygląda jednak na to, że
Microsoft.SqlServer.*
przestrzeń nazw nie jest dostępna w żadnej z tych lokalizacji. Co oznacza, że prosta odpowiedź na pytanie: „czy HierarchyID Open Source?” jest: Nie .Jeśli chcesz zobaczyć kod źródłowy, musisz otworzyć bibliotekę DLL - Microsoft.SqlServer.Types.dll - z dekompilatorem. ALE istnieją potencjalne problemy prawne i / lub etyczne. Jest to zastrzeżony kod, więc należy wziąć pod uwagę dwa główne punkty:
jak stwierdzono w EULA SQL Server (EULA) (i cytowany w @ TomV za odpowiedź ), można tylko „ inżynierii wstecznej, dekompilacji lub demontażu ” non-warunkiem oznaczeniem „ tylko do tego stopnia, że obowiązujące prawo wyraźnie zezwala ” . Oznacza to, że dla niektórych ludzi jest to całkowicie legalne, ale dla innych nie tyle. Możesz więc skonsultować się z lokalnym prawnikiem ds. Własności intelektualnej.
jeśli dekompilacja jest zgodna z prawem, intencja języka prawnego oraz fakt, że dostarczono jakiś kod źródłowy (jak podano na górze), ale ten konkretny kod nie jest, z pewnością oznacza, że ogół społeczeństwa chce nie widzę ani nie mam tego kodu. Tak więc legalność przy dekompilacji nie powinna być brana pod uwagę, ponieważ kopiowanie jest również legalne, ale przede wszystkim dlatego, że można ją wykorzystać jako odniesienie (np. Do debugowania itp.).
źródło
Ponieważ srutzky wskazał w niektórych miejscach w swojej odpowiedzi, w których część kodu źródłowego Microsoftu jest dostępna, a żądanej funkcji nie ma na liście, myślę, że możemy stwierdzić, że kod źródłowy nie jest dostępny na żadnej licencji open source i wygląda na to, że twoje pytanie dotyczyło otwartego źródła, a nie możliwości zobaczenia kodu źródłowego .
Biorąc pod uwagę, że umowa EULA stanowi, co następuje:
Obawiam się, że sam musisz wdrożyć logikę.
źródło