Hiyerarşiid CLR açık kaynak mı?


9

Dahili hierarchyid depolar etkili bir ikili biçimde yolları ve diğer yararlı işlevler sağlayan bir CLR olup.

Ne yazık ki, temsil edilen yolların ne kadar derin olabileceğine dair bir sınır vardır ve ikili bir ağaç için ~ 1427'dir. Bu sınıra ulaşmak zorunda karmaşık bir uygulama için bu sınırı artırmak istiyorum. Yazının arayüzünü değiştirmek istemiyorum. Sonuç olarak değiştirilmesi gereken tüm kod içine ince hatalar girmeden türü arabirimi değiştirerek çekebilir emin değilim.

(Teoride) hiyerarşi ile aynı arayüzü uygulayan ancak sadece ikili ağaçları destekleyen bir "binhierarchyid" CLR UDT oluşturabilirim. Bu hala 900 bayt sınırının içinde kalırken bana ~ 7000 derinliğe sahip olmalı. Ne kadar büyük bir girişim olacağından emin değilim.

Bu hiyerarşi CLR'nin kaynağı bir yerde mevcut mu, böylece daha derin yapıları destekleyen bir temel oluşturabilir miyim?


Neyi modelleyeceğinizi bilmek istedim. Anlatabilir misin?
wBob

Yanıtlar:


6

Çok sayıda .NET kaynak kodu mevcuttur ve çeşitli lisanslar altında olsa da, çoğu Açık Kaynak'tır. Yine de başka kodlar mevcuttur, ancak yalnızca referans amaçlıdır ve kodunuzda kullanılamaz.

Belirtilen hedefin:

Bu sınıra ulaşmak zorunda karmaşık bir uygulama için bu sınırı artırmak istiyorum. Yazının arayüzünü değiştirmek istemiyorum. Sonuç olarak değiştirilmesi gereken tüm kod içine ince hatalar girmeden türü arabirimi değiştirerek çekebilir emin değilim.

niyet, mevcut Hiyerarşi türünü güncellemekse, kodun Açık Kaynak olup olmadığı önemsizdir, çünkü öyle olsa bile, genel sistemde hiçbir zaman değişiklik yapamazsınız: SQL Server, aynı Sertifika / Özel Anahtar ile imzalayamazsınız ve bu nedenle sistem tarafından kullanılmaz.

Ancak, istediğiniz işlevselliği sağlamak için kendi SQLCLR Kullanıcı Tanımlı Tipinizi (UDT) oluşturabilirsiniz.

Yine de , .NET Framework'ü daha iyi anlamakla ilgili:

Çoğu öğenin kaynak kodunu burada görüntüleyebilirsiniz: https://github.com/Microsoft/referencesource

ve daha fazlası burada: https://github.com/dotnet/corefx

Yukarıda belirtilen depoların her ikisi de Açık Kaynak'tır ve emin olmak için her bir konumdaki ve bazen çeşitli klasörlerde bulunan lisans bilgilerini gözden geçirmeniz gerekir.

Kalan kodun birçoğunu burada bulabilirsiniz: http://referencesource.microsoft.com/

ReferenceSource.Microsoft.com adresinde (doğrudan yukarıdaki bağlantı) bulunan ve ilk iki bağlantıda (Açık Kaynak olan) bulunmayan kod Açık Kaynak değildir ve bunun yerine MICROSOFT REFERANS KAYNAK LİSANSI (MS-RSL) tarafından yönetilir. , ilgili bölüm (bu ifadenin kullanımından hemen sonra "referans kullanım" tanımını koymak için hafifçe düzenlenmiştir):

Lisans Veren, referans kullanım amacıyla yazılımı çoğaltmak için devredilemez, münhasır olmayan, dünya çapında, telifsiz bir telif hakkı lisansı verir: yalnızca hata ayıklama amacıyla şirketinizdeki yazılımın referans olarak salt okunur biçimde kullanılması ürünlerinizi, ürünlerinizi korumak veya ürünlerinizin yazılımla birlikte çalışabilirliğini artırmak ve özellikle yazılımı şirketinizin dışına dağıtma hakkını hariç tutar.

Ancak, Microsoft.SqlServer.*ad alanının bu konumların hiçbirinde kullanılamadığı anlaşılmaktadır . Hangi şu soruya basit bir cevap anlamına gelir: "HierarchyID Açık Kaynak mı?" : Hayır .

Arzu kaynak kodunu görmek için, o zaman DLL - Microsoft.SqlServer.Types.dll - bir decompiler ile açmanız gerekir . AMA, ele alınması gereken yasal ve / veya etik konular vardır. Bu ise dikkate alınması gereken iki ana nokta vardır bu yüzden özel kod:

  • SQL Server Son Kullanıcı Lisans Sözleşmesi'nde (EULA) belirtildiği gibi (ve @ TomV'nin cevabında belirtildiği gibi ), yalnızca " sağlanan kanunun açıkça izin verdiği ölçüde " sağlanmamış kodu " tersine çevirebilir, kaynak koda dönüştürebilir veya parçalarına ayırabilirsiniz " . Yani bazı insanlar için bunu yapmak tamamen yasaldır, ancak diğer insanlar için çok fazla değil. Yani yerel bir fikri mülkiyet avukatına danışmak isteyebilirsiniz.

  • eğer yasal dilin amacını, yasal olarak amacını ve yasal olarak bazı kaynak kodlarının sağlanmış olması (üstte bağlantılı olarak), ancak bu özel kod değil, kesinlikle arzunun genel halkın bu kodu görmez veya almazsınız. Dolayısıyla, koda dönüştürmek için yasal olmak, çoğaltmak için yasal olduğu için değil, daha çok referans olarak kullanılabilmesi için (yani hata ayıklama, vb.) Alınmalıdır.


4
Soruyu yazarken hukuki yönü düşünmemiştim. Sanırım, gitmenin tek yasal yolu temiz bir oda uygulaması.
Tarnay Kálmán

3
Merhaba Solomon, sadece (mükemmel) kütüphanelerinizi nasıl çalıştıklarına veya kaynak kodlarını nasıl kopyaladıklarına
bakacak şekilde derlememizi

1
Montajı değiştirmenin imkansızlığı hakkındaki düzenlemenize yanıt olarak: Montajı değiştirmek istemiyorum. Tipimin farklı bir isme sahip olması sorun değil. (Sınırlı ikili ağaç kullanım durumum için) aynı davranışa sahip farklı adlandırılmış bir türe geçişte zorluk görmüyorum (henüz?). Saklı yordamlar (ancak bu yönetilebilir) ve ALTER (belki CREATE // UPDATE / DROP) bazı sütunlar türüne tüm başvuruları değiştirmek zorunda kalacak, ama bu konuda.
Tarnay Kálmán

1
@TomV Bu yükseltmek için iyi bir nokta, bunu yaptığınız için teşekkür ederim. Bu konuda ileri geri gidiyorum, her iki tarafında da ve doğal olarak meraklı bir insanım. Kod istemek için farklı nedenler vardır (hata ayıklama, bir teknik öğrenmek, kopyalamak / çalmak, vb), bazıları iyi. İnsanlar nasıl SQL # koda nasıl sordum ve hatta yasal olduğunu bilmek ve gizlilik daha yenilik yerine güvenerek, ben takdir değil hatırlıyorum. Sanırım aceleyle cevap veriyordum, "nasıl" yönüne odaklanıyordum, ancak cevabımı talimatları çeşitli durumlarla değiştirerek güncelledim.
Solomon Rutzky

6

Srutzky , yanıtında Microsoft'un kaynak kodlarından bazılarının bulunduğu ve istediğiniz işlevin listelenmediği bazı yerlere işaret ettiğinden , kaynak kodun herhangi bir açık kaynak lisansı altında bulunmadığı sonucuna varabiliriz ve benziyor sorunuz kaynak kodunu görmek değil, açık kaynak olmasıydı .

EULA'nın şunları ifade ettiği göz önüne alındığında :

Bunu yaparken, yazılımda yalnızca belirli şekillerde kullanmanıza izin veren tüm teknik sınırlamalara uymanız gerekir. Şunları yapamazsınız:
...
bu sınırlamaya rağmen, yalnızca geçerli yasanın açıkça izin verdiği durumlar dışında yazılımı tersine çeviremez, kaynak koda dönüştüremez veya parçalarına ayıramazsınız;

Korkarım, mantığı kendiniz uygulamak için ayrıldınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.