La jerarquía jerárquica incorporada es un CLR que almacena rutas en una forma binaria eficiente y proporciona otra funcionalidad útil.
Desafortunadamente, hay un límite en la profundidad de las rutas representadas, y es ~ 1427 para un árbol binario. Me gustaría aumentar ese límite para una aplicación existente compleja que seguramente alcanzará este límite. No deseo cambiar la interfaz del tipo. No estoy seguro de poder cambiar la interfaz del tipo sin introducir errores sutiles en todo el código que tendría que ser modificado como resultado.
Podría (en teoría) crear un UDT CLR "binhierarchyid" que implemente la misma interfaz que Jerarchyid, pero solo admite árboles binarios. Eso debería obtener una profundidad de ~ 7000 sin dejar de estar dentro del límite de 900 bytes. No estoy seguro de cuán grande sería una empresa.
¿La fuente de este CLR jerárquico está disponible en alguna parte, para que yo pueda crear el mío basado en él que soporte estructuras más profundas?
fuente
Respuestas:
Gran parte del código fuente .NET está disponible, y gran parte es de código abierto, aunque bajo varias licencias. Todavía hay otro código disponible, pero solo con fines de referencia y no se puede utilizar en su código.
Dado que el objetivo declarado es:
si la intención es actualizar el tipo de Jerarquía actual, entonces si el código es Open Source o no es irrelevante porque, incluso si lo fuera, nunca sería capaz de introducir ningún cambio en el sistema general: incluso si pudiera reemplazar la Asamblea en SQL Server, no podría firmarlo con el mismo Certificado / Clave privada y, por lo tanto, el sistema no lo usaría.
Sin embargo, puede crear su propio tipo SQLCLR definido por el usuario (UDT) para proporcionar la funcionalidad deseada.
Aún así , en lo que se refiere a obtener una mejor comprensión de .NET Framework:
Puede ver el código fuente de la mayoría de las cosas aquí: https://github.com/Microsoft/referencesource
e incluso más cosas aquí: https://github.com/dotnet/corefx
Ambos repositorios mencionados anteriormente son de código abierto y se rigen principalmente bajo la licencia MIT, aunque es necesario revisar la información de la licencia en cada ubicación, y a veces en varias carpetas, para estar seguro.
Gran parte del código restante se puede encontrar aquí: http://referencesource.microsoft.com/
El código que se encuentra en ReferenceSource.Microsoft.com (el enlace directamente arriba) que no se encuentra también en los dos primeros enlaces (que son de código abierto) no es de código abierto y en su lugar se rige por la LICENCIA DE FUENTE DE REFERENCIA DE MICROSOFT (MS-RSL) , siendo la parte relevante (ligeramente editada para poner la definición de "uso de referencia" justo después del uso de esa frase):
Sin embargo, parece que el
Microsoft.SqlServer.*
espacio de nombres no está disponible en ninguna de esas ubicaciones. Lo que significa que la respuesta simple a la pregunta de "¿es HierarchyID Open Source?" es: n .Si desea ver el código fuente, deberá abrir la DLL ( Microsoft.SqlServer.Types.dll ) con un descompilador. PERO, hay posibles problemas legales y / o éticos que tratar. Este es un código propietario, por lo que hay dos puntos principales a considerar:
como se indica en el Acuerdo de licencia de usuario final (CLUF) de SQL Server (y como se cita en la respuesta de @ TomV ), solo puede " aplicar ingeniería inversa, descompilar o desensamblar " código no proporcionado " solo en la medida en que la ley aplicable lo permita expresamente " . Lo que significa que para algunas personas, es perfectamente legal hacer esto, pero para otras personas, no tanto. Por lo tanto, es posible que desee consultar a un abogado local de propiedad intelectual.
si es legal para usted descompilar, la intención del lenguaje legal, más el hecho de que se proporciona algún código fuente (como se vincula en la parte superior) pero este código en particular no lo es, ciertamente implica que el público en general desea No veo ni tengo este código. Por lo tanto, no debe considerarse legal descompilar, ya que también es legal duplicar, sino más bien para que pueda usarse como referencia (es decir, para depuración, etc.).
fuente
Como srutzky le señaló algunas ubicaciones en su respuesta donde parte del código fuente de Microsoft está disponible y la función que solicitó no está en la lista, creo que podemos concluir que el código fuente no está disponible bajo ninguna licencia de código abierto, y parece que su pregunta era sobre ser de código abierto, no sobre poder ver el código fuente .
Dado que el EULA establece lo siguiente:
Así que me temo que te queda implementar la lógica tú mismo.
fuente