Die integrierte Hierarchie - ID ist eine CLR, die Pfade in einer effizienten binären Form speichert und andere nützliche Funktionen bereitstellt.
Leider ist die Tiefe der dargestellten Pfade begrenzt, und für einen Binärbaum sind es ~ 1427. Ich möchte dieses Limit für eine komplexe vorhandene Anwendung erhöhen, die dieses Limit erreichen muss. Ich möchte die Schnittstelle des Typs nicht ändern. Ich bin nicht sicher, ob ich es schaffen könnte, die Benutzeroberfläche des Typs zu ändern, ohne subtile Fehler in den gesamten Code einzufügen, der als Ergebnis geändert werden müsste.
Ich könnte (theoretisch) eine "binhierarchyid" CLR UDT erstellen, die dieselbe Schnittstelle wie hierarchyid implementiert, aber nur binäre Bäume unterstützt. Das sollte mir eine Tiefe von ~ 7000 bringen, während ich immer noch innerhalb der 900-Byte-Grenze bleibe. Ich bin mir nicht sicher, wie groß das Unternehmen sein würde.
Ist die Quelle dieser hierarchischen ID-CLR irgendwo verfügbar, sodass ich darauf basierend eine eigene erstellen kann, die tiefere Strukturen unterstützt?
quelle
Antworten:
Ein Großteil des .NET-Quellcodes ist verfügbar, und ein Großteil davon ist Open Source, allerdings unter verschiedenen Lizenzen. Noch anderer Code ist verfügbar, jedoch nur zu Referenzzwecken und kann nicht in Ihrem Code verwendet werden.
Vorausgesetzt, das erklärte Ziel ist:
Wenn der aktuelle Hierarchietyp aktualisiert werden soll, spielt es keine Rolle, ob der Code Open Source ist oder nicht, denn selbst wenn dies der Fall ist, könnten Sie niemals Änderungen im Gesamtsystem vornehmen: Selbst wenn Sie die Assembly in ersetzen könnten SQL Server, Sie könnten es nicht mit demselben Zertifikat / privaten Schlüssel signieren und daher würde es vom System nicht verwendet.
Sie können jedoch Ihren eigenen benutzerdefinierten SQLCLR-Typ (UDT) erstellen, um die gewünschte Funktionalität bereitzustellen.
In Bezug auf ein besseres Verständnis von .NET Framework:
Sie können den Quellcode der meisten Inhalte hier anzeigen: https://github.com/Microsoft/referencesource
und noch mehr hier: https://github.com/dotnet/corefx
Beide oben genannten Repositorys sind Open Source und unterliegen größtenteils der MIT-Lizenz. Sie müssen jedoch die Lizenzinformationen an jedem Speicherort und manchmal in verschiedenen Ordnern überprüfen, um sicherzugehen.
Ein Großteil des verbleibenden Codes finden Sie hier: http://referencesource.microsoft.com/
Der unter ReferenceSource.Microsoft.com gefundene Code (der Link direkt oben), der nicht auch unter den ersten beiden Links (Open Source) zu finden ist, ist nicht Open Source und unterliegt stattdessen der MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL). , wobei der relevante Teil (leicht bearbeitet, um die Definition von "Referenzgebrauch" unmittelbar nach der Verwendung dieses Ausdrucks zu setzen):
Es scheint jedoch, dass der
Microsoft.SqlServer.*
Namespace an keinem dieser Speicherorte verfügbar ist. Was bedeutet, dass die einfache Antwort auf die Frage: "Ist HierarchyID Open Source?" ist: Nein .Wenn Sie den Quellcode sehen möchten, müssen Sie die DLL - Microsoft.SqlServer.Types.dll - mit einem Dekompiler öffnen . ABER es gibt potenzielle rechtliche und / oder ethische Probleme, mit denen man sich befassen muss. Dies ist proprietärer Code, daher sind zwei Hauptpunkte zu beachten:
wie in dem SQL Server - Endbenutzer-Lizenzvertrag (EULA) (und wie zitiert in @ ToMV erklärte Antwort ), können Sie nur „ zu dekompilieren oder auseinander zu nehmen “ nicht vorgesehen Code „ nur insoweit ausdrücklich , dass geltendes Recht erlaubt “ . Das bedeutet, dass es für einige Leute völlig legal ist, dies zu tun, für andere jedoch nicht so sehr. Wenden Sie sich daher an einen Anwalt für geistiges Eigentum vor Ort.
Wenn es für Sie legal ist, zu dekompilieren, impliziert die Absicht der Rechtssprache sowie die Tatsache, dass ein Teil des Quellcodes bereitgestellt wird (wie oben verlinkt), dieser bestimmte Code jedoch nicht, sicherlich, dass der Wunsch der Öffentlichkeit besteht diesen Code nicht sehen oder haben. Das legale Dekompilieren sollte also nicht als legales Duplizieren angesehen werden, sondern eher als Referenz (dh zum Debuggen usw.).
quelle
Da srutzky Sie in seiner Antwort auf einige Stellen hingewiesen hat, an denen ein Teil des Quellcodes von Microsoft verfügbar ist und die von Ihnen angeforderte Funktion nicht aufgeführt ist, können wir den Schluss ziehen, dass der Quellcode unter keiner Open-Source-Lizenz verfügbar ist, und es sieht so aus Ihre Frage war, ob es sich um Open Source handelt und nicht darum, den Quellcode sehen zu können .
Angesichts der Tatsache, dass die EULA Folgendes festlegt :
Ich fürchte, Sie müssen die Logik selbst implementieren.
quelle