Ist die hierarchyid CLR Open Source?


9

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?


Ich war interessiert zu wissen, was Sie modellieren. Kannst du beschreiben?
wBob

Antworten:


6

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:

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.

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):

Der Lizenzgeber gewährt Ihnen eine nicht übertragbare, nicht exklusive, weltweite, lizenzgebührenfreie Copyright-Lizenz zur Reproduktion der Software zur Verwendung als Referenz: Verwendung der Software in Ihrem Unternehmen als Referenz in schreibgeschützter Form zum alleinigen Debuggen Ihre Produkte, die Wartung Ihrer Produkte oder die Verbesserung der Interoperabilität Ihrer Produkte mit der Software und schließt ausdrücklich das Recht aus, die Software außerhalb Ihres Unternehmens zu vertreiben.

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.).


4
Ich hatte beim Schreiben der Frage nicht über den rechtlichen Aspekt nachgedacht. Ich denke, der einzig wirklich legale Weg ist eine Reinraumimplementierung.
Tarnay Kálmán

3
Hallo Solomon, ich frage mich nur, wie Sie sich fühlen würden, wenn wir vorschlagen würden, Ihre (ausgezeichneten) Bibliotheken zu dekompilieren, um entweder einen Blick auf ihre Funktionsweise zu werfen oder den Quellcode von ihnen zu kopieren :)
Tom V - try topanswers.xyz

1
Antwort auf Ihre Bearbeitung über die Unmöglichkeit, die Baugruppe zu ersetzen: Ich möchte die Baugruppe nicht ersetzen. Ich bin damit einverstanden, dass mein Typ einen anderen Namen hat. Ich sehe (noch?) Keine Schwierigkeit bei der Migration zu einem Typ mit einem anderen Namen, der (für meinen eingeschränkten Anwendungsfall für binäre Bäume) dasselbe Verhalten aufweist. Ich müsste alle Verweise auf den Typ in gespeicherten Prozeduren ändern (aber das ist überschaubar) und ALTER (vielleicht CREATE // UPDATE / DROP) einige Spalten, aber das war es auch schon.
Tarnay Kálmán

1
@ TomV Das ist ein guter Punkt, also danke, dass du das getan hast. Ich gehe in dieser Frage hin und her, bin auf beiden Seiten und eine von Natur aus neugierige Person. Es gibt verschiedene Gründe, warum Sie den Code wollen (Debuggen, Erlernen einer Technik, Kopieren / Stehlen usw.), von denen einige in Ordnung sind. Die Leute haben gefragt, wie man SQL # dekompiliert, und obwohl man weiß, dass es legal sein kann, und sich mehr auf Innovation als auf Geheimhaltung verlassen, erinnere ich mich, dass ich es nicht schätze. Ich schätze, ich habe hastig geantwortet und mich auf den Aspekt "How to" konzentriert, aber meine Antwort wurde aktualisiert und die Anweisungen durch die verschiedenen Aspekte der Situation ersetzt.
Solomon Rutzky

6

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 :

Dabei müssen Sie alle technischen Einschränkungen in der Software einhalten, die es Ihnen nur erlauben, sie auf bestimmte Weise zu verwenden. Sie dürfen:
...
die Software nicht zurückentwickeln, dekompilieren oder disassemblieren, außer und nur in dem Umfang, in dem das geltende Recht dies trotz dieser Einschränkung ausdrücklich zulässt;

Ich fürchte, Sie müssen die Logik selbst implementieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.