O CLR hierárquico é de código aberto?

9

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?

Tarnay Kálmán
fonte
Eu estava interessado em saber o que você está modelando. Você pode descrever?
WBob 29/04

Respostas:

6

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

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.

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

o Licenciante concede a você uma licença de direitos autorais intransferível, não exclusiva, mundial e sem royalties para reproduzir o software para uso em referência: uso do software em sua empresa como referência, em forma de somente leitura, com o único objetivo de depuração seus produtos, mantendo seus produtos ou melhorando a interoperabilidade de seus produtos com o software e exclui especificamente o direito de distribuir o software fora da sua empresa.

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

Solomon Rutzky
fonte
4
Eu não tinha pensado no aspecto jurídico ao escrever a pergunta. Eu acho que o único caminho realmente legal a seguir é uma implementação de sala limpa.
Tarnay Kálmán
3
Oi Salomão, eu só estou imaginando como você se sentiria se sugeríssemos descompilar suas (excelentes) bibliotecas para ver como elas funcionam ou copiar o código-fonte delas :)
Tom V - tente topanswers.xyz
11
Respondendo à sua edição sobre a impossibilidade de substituir a montagem: não desejo substituir a montagem. Eu estou bem com o meu tipo tendo um nome diferente. Ainda não vejo a dificuldade de migrar para um tipo de nome diferente que (para meu caso de uso de árvore binária limitada) tem o mesmo comportamento. Eu precisaria alterar todas as referências ao tipo nos procedimentos armazenados (mas isso é gerenciável) e ALTER (talvez CREATE // UPDATE / DROP) algumas colunas, mas é isso.
Tarnay Kálmán
11
@ TomV Esse é um bom ponto para levantar, obrigado por fazer isso. Eu vou e volto sobre esse assunto, estando nos dois lados e sendo uma pessoa naturalmente curiosa. Existem diferentes razões para querer o código (depuração, aprender uma técnica, copiar / roubar, etc.), sendo que algumas estão ok. As pessoas perguntaram como descompilar o SQL # e, mesmo sabendo que isso pode ser legal, e confiando na inovação mais do que sigilo, lembro-me de não apreciá-la. Acho que estava respondendo às pressas, concentrando-me no aspecto "como fazer", mas atualizei minha resposta substituindo as instruções pelos vários aspectos da situação.
Solomon Rutzky
6

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:

Ao fazer isso, você deve cumprir quaisquer limitações técnicas no software que permitam usá-lo apenas de determinadas maneiras. Você não pode:
...
fazer engenharia reversa, descompilar ou desmontar o software, exceto e somente na medida em que a lei aplicável o permitir expressamente, apesar desta limitação;

Então, receio que você tenha que implementar a lógica por conta própria.

Tom V - tente topanswers.xyz
fonte