O hierarchyid interno é um CLR que armazena caminhos em um formato binário eficiente e fornece outras funcionalidades úteis.
Infelizmente, há um limite para a profundidade dos caminhos representados, e é ~ 1427 para uma árvore binária. Eu gostaria de aumentar esse limite para um aplicativo existente complexo que provavelmente atingirá esse limite. Não desejo alterar a interface do tipo. Não estou confiante de que poderia alterar a interface do tipo sem introduzir erros sutis em todo o código que teria que ser alterado como resultado.
Eu poderia (em teoria) criar um CLR "binhierarchyid" UDT que implementa a mesma interface que hierarchyid, mas suporta apenas árvores binárias. Isso deve me dar uma profundidade de ~ 7000 enquanto ainda permanece dentro do limite de 900 bytes. Não tenho certeza do tamanho de uma empresa.
A fonte desse CLR hierárquico está disponível em algum lugar, para que eu pudesse criar o meu com base nele que suporta estruturas mais profundas?
fonte
Respostas:
Grande parte do código-fonte .NET está disponível e grande parte é de código aberto, embora sob várias licenças. Ainda outro código está disponível, mas apenas para fins de referência e não pode ser usado em seu código.
Dado que o objetivo declarado é:
se a intenção é atualizar o tipo de Hierarquia atual, se o código é Open Source ou não é irrelevante, porque, mesmo que seja, você nunca poderá introduzir alterações no sistema geral: mesmo se você pudesse substituir o Assembly em SQL Server, você não seria capaz de assiná-lo com o mesmo certificado / chave privada e, portanto, não seria usado pelo sistema.
No entanto, você pode criar seu próprio tipo definido pelo usuário SQLCLR (UDT) para fornecer a funcionalidade desejada.
Ainda assim , no que se refere a obter uma melhor compreensão do .NET Framework:
Você pode ver o código fonte da maioria das coisas aqui: https://github.com/Microsoft/referencesource
e ainda mais coisas aqui: https://github.com/dotnet/corefx
Ambos os repositórios mencionados acima são de código aberto e são administrados principalmente sob a licença MIT, embora você precise revisar as informações de licenciamento em cada local e, às vezes, em várias pastas, para ter certeza.
Muito do código restante pode ser encontrado aqui: http://referencesource.microsoft.com/
O código encontrado no ReferenceSource.Microsoft.com (o link diretamente acima) que também não é encontrado nos dois primeiros links (que são de código aberto) não é de código aberto e, em vez disso, é regido pela LICENÇA DE FONTE DE REFERÊNCIA DA MICROSOFT (MS-RSL) , sendo a parte relevante (levemente editada para colocar a definição de "uso de referência" logo após o uso dessa frase):
No entanto, parece que o
Microsoft.SqlServer.*
espaço para nome não está disponível em nenhum desses locais. O que significa que a resposta simples para a pergunta: "é HierarchyID Open Source?" é: não .Se o desejo for ver o código-fonte, será necessário abrir a DLL - Microsoft.SqlServer.Types.dll - com um descompilador. MAS, existem possíveis questões legais e / ou éticas para lidar. Este é um código proprietário, portanto há dois pontos principais a serem considerados:
conforme declarado no EULA (Contrato de licença de usuário final) do SQL Server (e conforme citado na resposta da @ TomV ), você pode " fazer engenharia reversa, descompilar ou desmontar " código não fornecido " apenas na medida em que a lei aplicável permitir expressamente " . Isso significa que, para algumas pessoas, é perfeitamente legal fazer isso, mas para outras, nem tanto. Portanto, convém consultar um advogado local de propriedade intelectual.
se for legal descompilar, a intenção da linguagem legal, mais o fato de que algum código-fonte seja fornecido (conforme vinculado na parte superior), mas esse código em particular não seja, certamente implica que o desejo é do público em geral. não vê ou tem esse código. Portanto, ser legal descompilar não deve ser considerado como duplicado, mas mais para que possa ser usado como referência (por exemplo, para depuração etc.).
fonte
Como srutzky apontou para alguns locais na resposta dele, em que parte do código-fonte da Microsoft está disponível e a função solicitada não está listada, acho que podemos concluir que o código-fonte não está disponível sob nenhuma licença de código-fonte aberto e parece que sua pergunta era sobre ser de código aberto, não sobre ser capaz de ver o código-fonte .
Dado que o EULA declara o seguinte:
Então, receio que você tenha que implementar a lógica por conta própria.
fonte