Built-in hierarchyid adalah CLR yang menyimpan jalan dalam bentuk biner yang efisien, dan menyediakan fungsionalitas berguna lainnya.
Sayangnya, ada batas seberapa dalam jalur yang diwakili dapat, dan itu ~ 1427 untuk pohon biner. Saya ingin menambah batas itu untuk aplikasi kompleks yang ada yang terikat untuk mencapai batas ini. Saya tidak ingin mengubah antarmuka jenis ini. Saya tidak yakin bahwa saya bisa melakukan perubahan antarmuka tipe tanpa memperkenalkan bug halus ke semua kode yang harus diubah sebagai hasilnya.
Saya bisa (secara teori) membuat "binhierarchyid" CLR UDT yang mengimplementasikan antarmuka yang sama dengan hierarki, tetapi hanya mendukung pohon biner. Itu seharusnya membuat saya kedalaman ~ 7000 sementara masih tersisa di dalam batas 900 byte. Tidak yakin seberapa besar usaha yang akan dilakukan.
Apakah sumber hierarki CLR ini tersedia di suatu tempat, sehingga saya bisa membuat sendiri berdasarkan itu yang mendukung struktur yang lebih dalam?
sumber
Jawaban:
Banyak kode sumber .NET tersedia, dan sebagian besar adalah Open Source, meskipun di bawah berbagai lisensi. Masih ada kode lain, tetapi hanya untuk tujuan referensi dan tidak dapat digunakan dalam kode Anda.
Mengingat bahwa tujuan yang dinyatakan adalah:
jika maksudnya adalah untuk memperbarui jenis Hierarki saat ini, maka apakah kode itu Open Source atau tidak tidak relevan karena bahkan jika itu, Anda tidak akan pernah dapat memperkenalkan perubahan apa pun ke dalam sistem keseluruhan: bahkan jika Anda dapat mengganti Majelis di SQL Server, Anda tidak akan dapat menandatanganinya dengan Sertifikat / Kunci Pribadi yang sama dan karenanya tidak akan digunakan oleh sistem.
Namun, Anda bisa membuat SQLCLR Type-Defined Type (UDT) Anda sendiri untuk memberikan fungsionalitas yang diinginkan.
Namun , karena berkaitan dengan mendapatkan pemahaman yang lebih baik tentang .NET Framework:
Anda dapat melihat kode sumber dari sebagian besar barang di sini: https://github.com/Microsoft/referencesource
dan bahkan lebih banyak barang di sini: https://github.com/dotnet/corefx
Kedua repositori yang disebutkan di atas adalah Open Source dan sebagian besar diatur di bawah lisensi MIT, meskipun Anda perlu meninjau info lisensi di setiap lokasi, dan kadang-kadang di berbagai folder, untuk memastikan.
Banyak kode yang tersisa dapat ditemukan di sini: http://referencesource.microsoft.com/
Kode yang ditemukan di ReferenceSource.Microsoft.com (tautan langsung di atas) yang tidak juga ditemukan di dua tautan pertama (yang merupakan Sumber Terbuka) bukan Sumber Terbuka dan sebaliknya diatur oleh LISENSI SUMBER REFERENSI SUMBER MICROSOFT (MS-RSL) , bagian yang relevan sedang (diedit untuk menempatkan definisi "penggunaan referensi" hanya setelah penggunaan frasa itu):
Namun, tampaknya
Microsoft.SqlServer.*
namespace tidak tersedia di salah satu lokasi tersebut. Yang berarti bahwa jawaban sederhana untuk pertanyaan: "is HierarchyID Open Source?" adalah: Tidak .Jika keinginannya adalah untuk melihat kode sumber, maka Anda harus membuka DLL - Microsoft.SqlServer.Types.dll - dengan dekompiler. TETAPI, ada potensi masalah hukum dan / atau etika untuk dihadapi. Ini adalah kode hak milik sehingga ada dua hal utama yang perlu dipertimbangkan:
seperti yang dinyatakan dalam Perjanjian Lisensi Pengguna Akhir SQL Server (EULA) (dan seperti dikutip dalam jawaban @ TomV ), Anda hanya dapat " merekayasa balik, mendekompilasi atau membongkar " kode yang tidak disediakan " hanya sejauh hukum yang berlaku mengizinkan secara tegas " . Artinya bagi sebagian orang, adalah sah untuk melakukan ini, tetapi bagi orang lain, tidak terlalu banyak. Jadi, Anda mungkin ingin berkonsultasi dengan pengacara kekayaan intelektual setempat.
jika legal untuk Anda dekompilasi, maksud dari bahasa hukum, ditambah fakta bahwa beberapa kode sumber disediakan (sebagaimana ditautkan di atas) tetapi kode khusus ini tidak, tentu menyiratkan bahwa keinginan tersebut adalah untuk masyarakat umum untuk tidak melihat atau memiliki kode ini. Jadi menjadi legal untuk didekompilasi tidak boleh dianggap sebagai legal untuk digandakan, tetapi lebih dari itu dapat digunakan sebagai referensi (yaitu untuk debugging, dll).
sumber
Ketika srutzky mengarahkan Anda ke beberapa lokasi dalam jawabannya di mana beberapa kode sumber Microsoft tersedia dan fungsi yang Anda minta tidak tercantum, saya pikir kami dapat menyimpulkan bahwa kode sumber tidak tersedia di bawah lisensi sumber terbuka apa pun, dan sepertinya pertanyaan Anda adalah itu open source, bukan tentang bisa melihat kode sumber .
Mengingat bahwa EULA menyatakan sebagai berikut:
Jadi saya khawatir Anda harus menerapkan logika sendiri.
sumber