hierarchyid CLR 是开源的吗?

Tar*_*mán 9 sql-server hierarchy sql-clr

内置的hierarchyid是一个CLR,它以高效的二进制形式存储路径,并提供其他有用的功能。

不幸的是,所表示的路径的深度是有限的,对于二叉树来说大约是 1427。对于必然会达到此限制的复杂现有应用程序,我想增加该限制。我不想改变类型的界面。我不相信我可以改变类型的接口而不将细微的错误引入所有必须更改的代码中。

我可以(理论上)创建一个“binhierarchyid”CLR UDT,它实现与hierarchyid 相同的接口,但只支持二叉树。这应该让我获得 ~7000 的深度,同时仍然保持在 900 字节的限制内。不知道这将是一项多大的事业。

这个hierarchyid CLR的来源是否在某处可用,以便我可以基于它创建自己的支持更深层次的结构?

Sol*_*zky 6

许多 .NET 源代码是可用的,其中大部分是开源的,尽管有各种许可。还有其他代码可用,但仅供参考,不能在您的代码中使用。

鉴于既定目标是:

对于必然会达到此限制的复杂现有应用程序,我想增加该限制。我不想改变类型的界面。我不相信我可以改变类型的接口而不将细微的错误引入所有必须更改的代码中。

如果目的是更新当前的 Hierarchy 类型,那么代码是否开源是无关紧要的,因为即使是,您也永远无法对整个系统进行任何更改:即使您可以在SQL Server,您将无法使用相同的证书/私钥对其进行签名,因此系统不会使用它。

但是,您可以构建自己的 SQLCLR 用户定义类型 (UDT) 来提供所需的功能。

尽管如此,因为它与更好地理解 .NET Framework 相关:

你可以在这里查看大多数东西的源代码:https : //github.com/Microsoft/referencesource

甚至更多的东西在这里:https : //github.com/dotnet/corefx

上面提到的两个存储库都是开源的,并且主要在 MIT 许可下进行管理,尽管您需要查看每个位置中的许可信息,有时还需要查看各个文件夹中的信息,以确定。

很多剩余的代码可以在这里找到:http : //referencesource.microsoft.com/

在 ReferenceSource.Microsoft.com 上找到的代码(直接在上面的链接)上也没有在前两个链接(开源)中找到的代码不是开源的,而是由MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL) 管理,相关部分是(稍微编辑以将“参考使用”的定义放在该短语的用法之后):

许可方授予您不可转让的、非排他性的、全球性的、免版税的版权许可,以复制该软件以供参考使用:在贵公司内以只读形式将该软件用作参考,仅用于调试目的您的产品、维护您的产品或增强您的产品与该软件的互操作性,并明确排除在您公司之外分发该软件的权利。

但是,Microsoft.SqlServer.*名称空间似乎在任何这些位置都不可用。这意味着对以下问题的简单回答:“HierarchyID 是否开源?” 是:没有

如果希望查看源代码,则需要使用反编译器打开 DLL -- Microsoft.SqlServer.Types.dll。但是,有潜在的法律和/或道德问题需要处理。这专有代码,因此需要考虑两个要点:

  • 如 SQL Server 最终用户许可协议 (EULA) 中所述(以及@TomV 的回答中引用的内容),您只能在适用法律明确允许的范围内反向工程、反编译或反汇编”非提供的代码“ . 这意味着对于某些人来说,这样做是完全合法的,但对于其他人来说,则不然。因此,您可能需要咨询当地的知识产权律师。

  • 如果您反编译是合法的,那么法律语言的意图,加上提供了一些源代码(如顶部链接)但这个特定代码不是的事实,当然意味着希望公众没有看到或有此代码。因此,反编译合法不应被视为复制也是合法的,而更多的是它可以用作参考(即用于调试等)。

  • 在写这个问题的时候,我没有考虑过法律方面的问题。我想,唯一真正合法的方法是无尘室实施。 (4认同)
  • 嗨,所罗门,我只是想知道如果我们建议反编译 [您的(优秀)库](http://www.sqlsharp.com/) 以查看它们的工作方式或复制他们 :) (3认同)

Tom*_*m V 6

由于 srutzky 在他的回答中向您指出了一些可用的 Microsoft 源代码并且您请求的功能未列出的位置,我想我们可以得出结论,源代码在任何开源许可证下都不可用,它看起来像你的问题是关于它是开源的,而不是关于能够看到源代码

鉴于EULA规定如下:

这样做时,您必须遵守软件中的任何技术限制,这些限制仅允许您以特定方式使用它。您不得:
...
对软件进行逆向工程、反编译或反汇编,除非且仅在适用法律明确允许的范围内,尽管有此限制;

所以恐怕你只能自己实现逻辑了。