<!--
 -  
 -  This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
 -  project.
 -  
 -  Copyright (C) 1998-2018 OpenLink Software
 -  
 -  This project is free software; you can redistribute it and/or modify it
 -  under the terms of the GNU General Public License as published by the
 -  Free Software Foundation; only version 2 of the License, dated June 1991.
 -  
 -  This program is distributed in the hope that it will be useful, but
 -  WITHOUT ANY WARRANTY; without even the implied warranty of
 -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 -  General Public License for more details.
 -  
 -  You should have received a copy of the GNU General Public License along
 -  with this program; if not, write to the Free Software Foundation, Inc.,
 -  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 -  
 -  
-->
<?xml version="1.0" encoding="ISO-8859-1"?>
<refentry id="HO-S-10">
  <refmeta>
    <refentrytitle>ECMA-CLI(Mono)/.Net CLR Runtime Hosting</refentrytitle>
    <refmiscinfo>tutorial</refmiscinfo>
  </refmeta>
  <refnamediv>
    <refname>Integrating Common Language Runtime Objects with Virtuoso</refname>
    <refpurpose>Using C# Objects to extend Virtuoso via User Defined Types using CREATE LIBRARY/ASSEMBLY syntax.</refpurpose>
  </refnamediv>

    <refsect1 id="HO-S-10a_overview">
    <title>Overview</title>
    <para>The HO-S-10 sample is very similar to HO-S-2. The difference is using syntax CREATE LIBRARY. The statement imports assembly to internal Virtuoso table and imports types from it. After this the assembly can be removed from physical path and next time will be read from the table. The "DROP LIBRARY" removes assembly from table and drops imported types. </para>
    </refsect1>
 
    <refsect1 id="HO-S-10a_prerequisites">
    <title>Prerequisites</title>
    <para>The following prerequisites ensure the usability of these tutorial demos on Windows</para>
<itemizedlist>
<listitem>Windows
   <itemizedlist>
     <listitem>.NET Runtime and Frameworks</listitem>
     <listitem>.Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)</listitem>
     <listitem>Virtuoso Universal Server for Windows with .NET CLR Hosting</listitem>
     </itemizedlist></listitem>
</itemizedlist>
    </refsect1>

    <refsect1 id="HO-S-10a">
    <title>Tutorial Example</title>

  <para>The following tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. </para>
  <para>Please follow the steps below to maximize the value of this tutorial:</para>

<orderedlist>
 <listitem>Click on the "Set Initial State" link which registers the two C# classes with Virtuoso.
 It also copies the Point_ho_s_10.dll file to "tmp" directory in the server root. 
 Note that the directory must exists, must be writeable for the user running virtuoso and must be in the DirsAllowed parameter in Virtuoso ini file.
  Click on the "ho_s_10.sql" link to see the code behind this step </listitem>
 <listitem>Click on the "Run" links to actually experience the demo</listitem>
</orderedlist>

<para>Demo Breakdown</para>

<orderedlist>
 <listitem>"ho_s_10.sql" performs the following steps
  <orderedlist>
   <listitem>Registers the "Point" classes with Virtuoso. Click 
   on the "Point_ho_s_10.cs" links to see the C# source code of these 
   classes</listitem>
   <listitem>Creates the Object-Relational table "Supplier_ho_s_10" that includes a column 
   named "Location" that is of Type "Point" (a UDT)</listitem>
   <listitem>Populates table with data</listitem>
   <listitem>Using syntax: CREATE LIBRARY/ASSEMBLY "myPoint" as "assembly" WITH PERMISSION_SET = SAFE WITH AUTOREGISTER
   is simular to:
   CREATE LIBRARY/ASSEMBLY "myPoint" as "assembly"; and 
   import_clr ('myPoint', NULL);</listitem>
  </orderedlist></listitem>

 <listitem>"vsp1.vsp" is a variation of HO-S-2 (vsp3.vsp), with the column 
 "location" being used to access and conditionally test the values of data 
 member "x" (shown in "Point.cs" as 0).</listitem>
</orderedlist>
    </refsect1>
</refentry>
