Чи є ієрархічний CLR з відкритим кодом?


9

Вбудована ієрархіда - це CLR, який зберігає шляхи в ефективній бінарній формі та забезпечує інші корисні функції.

На жаль, існує обмеження того, наскільки глибокими можуть бути представлені шляхи, і це ~ 1427 для бінарного дерева. Я хотів би збільшити цю межу для складної існуючої програми, яка не може досягти цієї межі. Я не хочу змінювати інтерфейс типу. Я не впевнений, що міг би змінити інтерфейс типу, не вводячи тонких помилок у весь код, який у результаті довелося б змінити.

Я міг (теоретично) створити "binhierarchyid" CLR UDT, який реалізує той самий інтерфейс, що і ієрархії, але підтримує лише бінарні дерева. Це повинно отримати мені глибину ~ 7000, залишаючись всередині межі 900 байт. Не впевнений, наскільки великим буде підприємство.

Чи є джерело цього ієрархічного CLR десь, щоб я міг створити свій власний на його основі, який підтримує більш глибокі структури?


Мені було цікаво знати, що ти моделюєш. Чи можете ви описати?
wBob

Відповіді:


6

Доступно багато вихідного коду .NET, і значна частина є відкритим кодом, хоча і за різними ліцензіями. Ще інший код доступний, але лише для довідкових цілей і не може бути використаний у вашому коді.

Враховуючи, що заявлена ​​мета:

Я хотів би збільшити цю межу для складної існуючої програми, яка не може досягти цієї межі. Я не хочу змінювати інтерфейс типу. Я не впевнений, що міг би змінити інтерфейс цього типу, не вводячи тонких помилок у весь код, який повинен був би бути змінений в результаті.

якщо наміром є оновлення поточного типу Ієрархії, то незалежно від того, чи є код Open Source не має значення, оскільки навіть якщо він є, ви ніколи не зможете внести жодних змін у загальну систему: навіть якби ви могли замінити Асамблею в SQL Server, ви не зможете підписати його тим самим сертифікатом / приватним ключем, а значить, система не буде використовуватись.

Однак ви можете створити свій власний визначений користувачем тип SQLCLR (UDT), щоб забезпечити бажану функціональність.

Однак , як це стосується отримання кращого розуміння .NET Framework:

Ви можете переглянути вихідний код більшості матеріалів тут: https://github.com/Microsoft/referencesource

та ще більше матеріалів тут: https://github.com/dotnet/corefx

Обидва вищезазначені сховища є відкритим кодом та керуються здебільшого ліцензією MIT, хоча вам потрібно переглянути інформацію про ліцензування у кожному місці, а іноді й у різних папках.

Багато решти коду можна знайти тут: http://referencesource.microsoft.com/

Код, знайдений у ReferenceSource.Microsoft.com (посилання безпосередньо вище), який також не зустрічається на перших двох посиланнях (які є відкритим кодом), не є відкритим кодом, а натомість керується ліцензією МІКРОСОФТИЧНОГО РЕФЕРЕНЦІЙНОГО ЛІЦЕНЗІЇ (MS-RSL) , відповідний розділ (злегка відредагований, щоб поставити визначення "довідкове використання" безпосередньо після використання цієї фрази):

ліцензіар надає вам непередавальну, неексклюзивну, всесвітню ліцензійну авторську ліцензію на відтворення програмного забезпечення для довідкового використання: використання програмного забезпечення у вашій компанії в якості посилання, у формі лише для читання, з єдиною метою налагодження ваших продуктів, підтримання вашої продукції або підвищення сумісності ваших продуктів із програмним забезпеченням, а також виключає право на розповсюдження програмного забезпечення за межами вашої компанії.

Однак виявляється, що Microsoft.SqlServer.*простір імен недоступний ні в одному з цих місць. Що означає, що проста відповідь на запитання: "чи є HierarchyID Open Source?" є: Ні .

Якщо бажання бачити вихідний код, тоді вам потрібно буде відкрити DLL - Microsoft.SqlServer.Types.dll - декомпілятором. АЛЕ, є можливі юридичні та / або етичні питання, з якими потрібно вирішити. Це є власний код таким чином , є два основних моменти , які слід враховувати:

  • як зазначено в ліцензійній угоді з кінцевим користувачем SQL Server (EULA) (і як зазначено в @ Втома в відповідь ), ви можете тільки « перепроектувати, декомпілювати або демонтує » не надається код « тільки в тій мірі , в якій застосовується закон прямо дозволяє » . Це означає, що для деяких людей це цілком законно, а для інших - не так вже й багато. Тож ви можете звернутися до місцевого юриста з інтелектуальної власності.

  • якщо вам законно декомпілювати, наміри юридичної мови, плюс той факт, що якийсь вихідний код надається (як пов’язано вгорі), але цей конкретний код не є, безумовно, означає, що бажання широкої громадськості не бачити або мати цей код. Отже, законним для декомпіляції не слід сприймати те, що він також є законним для копіювання, але тим більше, що він може бути використаний як еталон (тобто для налагодження тощо).


4
Я не думав про юридичний аспект, коли писав питання. Я здогадуюсь, єдиний дійсно законний шлях - це реалізація чистої кімнати.
Тарнай Калман

3
Привіт Соломоне, мені просто цікаво, як би ви почувались, якби ми запропонували декомпілювати ваші (чудові) бібліотеки, щоб або подивитися, як вони працюють, або скопіювати вихідний код з них :)
Том V - спробуйте topanswers.xyz

1
Відповідаючи на вашу редакцію про неможливість заміни збірки: я не хочу замінювати збірку. Я добре, коли мій тип має іншу назву. Я не бачу (ще?) Труднощів з переходом на інший тип, який (для мого обмеженого випадку використання бінарного дерева) має таку саму поведінку. Я повинен був би змінити всі посилання на тип у збережених процедурах (але це керовано) та ALTER (можливо, CREATE // UPDATE / DROP) деякі стовпці, але це про це.
Тарнай Калман

1
@TomV Це хороший момент, щоб подякувати, тож дякую вам за це. Я повертаюсь вперед і вперед по цьому питанню, будучи з обох сторін і будучи природно цікавою людиною. Існують різні причини, що хочуть отримати код (налагодження, вивчити техніку, копіювати / красти тощо), деякі з них є нормальними. Люди запитували, як декомпілювати SQL # і навіть знаючи, що це може бути законно, і покладаючись на інновації більше, ніж на секретність, я пам'ятаю, що не оцінював це. Я думаю, що я відповідав поспішно, зосередившись на аспекті "як", але оновив свою відповідь, замінивши інструкції різними аспектами ситуації.
Соломон Руцький

6

Оскільки srutzky вказував на деякі місця у своїй відповіді, де доступний деякий вихідний код Microsoft, а потрібна вам функція не вказана, я думаю, що ми можемо зробити висновок, що вихідний код не доступний під жодною ліцензією на відкритий код, і це виглядає так Ваше запитання стосувалося того, що це відкритий код, а не можливість бачити вихідний код .

З огляду на те, що EULA заявляє наступне:

Роблячи це, ви повинні дотримуватися будь-яких технічних обмежень програмного забезпечення, які дозволяють вам використовувати його лише певними способами. Ви не можете:
...
інженером реверсувати, декомпілювати або розбирати програмне забезпечення, за винятком і лише в тій мірі, в якій це застосовується законодавством прямо, незважаючи на це обмеження;

Тому я боюся, що вам залишається самостійно реалізувати логіку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.